打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
软工第八次实验——测试
其实是没有前七次实验的
因为第八次实验是考试,复习了前七次实验的内容。
所以这个第八次实验是个伪命题hiahiahia
文章目录
一、软件测试
1.1 概述
1.2 软件生命周期
1.2 软件测试原则
1.3 测试分类
二、黑盒测试
2.1 概述
2.2 等价类划分法
2.2.1 概述
2.2.2 等价类
2.2.3 划分原则
2.2.5 划分步骤
2.3 示例
2.3.1 题目要求
2.3.2 等价类划分表
2.3.3 测试用例
2.3.3.1 有效等价类
2.3.3.2 无效等价类
三、白盒测试
3.1 概述
3.2 逻辑覆盖法
3.3 分支覆盖
3.4 示例
3.4.1 题目要求
3.4.2 流程图及分支标注
3.4.3 分支覆盖及用例列表
四、实验1:三角形类型判断
4.1 问题描述
4.2 参考等价类划分
五、往届试题
5.1 11年试题:标识符判断
5.1.1 题目描述
5.1.2 参考等价类划分
5.1.3 参考测试用例
5.2 15年试题:标识符判断加工
5.3 12年试题:用户名正确性测试
5.3.1 题目描述
5.3.2 参考等价类划分
5.3.3 参考测试用例
5.4 14年试题(一):测试抄错的代码
5.4.1 题目描述
5.4.2 参考流程图
5.4.3 参考测试用例
5.5 14年试题(二):电话号码
5.5.1 题目描述
5.5.2 参考等价类划分
5.5.3 参考测试用例
六、参考资料
一、软件测试
1.1 概述
软件测试是为了发现程序中的错误而执行程序的过程,贯穿于软件生命周期,其目的是尽早发现软件缺陷,并确保其得以修复。再全面的测试也不能完全消除软件缺陷,希望完全依托测试确保软件质量是不现实的。
1.2 软件生命周期
从软件工程的角度来看,软件的生命周期一般分为4部分:
软件分析时期
软件设计时期
编码和测试时期
软件运行与维护时期
在编码的同时,也进行着单元测试。
1.2 软件测试原则
完全测试是不可能的。测试并不能找出所有错误。
测试中存在风险。
软件测试只能表示缺陷的存在,而不能证明软件产品已经没有缺陷。
软件产品中潜在的错误数与已发现的错误数成正比。
让不同的测试人员参与到测试工作中。
让开发小组和测试小组分立。
尽早并不断进行测试。
在设计测试用例时,应该包括输入数据和预期的输出结果两部分。
集中测试容易出错或错误较多的模块。
长期保留所有的测试用例。
1.3 测试分类
二、黑盒测试
2.1 概述
将被测试的软件系统看成一个黑盒子,不关心盒子的内部结构和内部特性,只关心软件产品的输入数据和输出结果。
黑盒测试的测试方法有等价类划分法、边界值分析法、错误推测法和因果图法。
2.2 等价类划分法
2.2.1 概述
将程序的输入域划分为若干子集,然后从每个子集中选取少数具有代表性的数据用作测试用例。所选取的输入数据对于揭露程序中的错误都是等效的。
2.2.2 等价类
等价类分为有效等价类和无效等价类:
有效等价类:对程序的规格说明是有意义的、合理的输入数据所构成的集合。
无效等价类:对程序的规格说明是无意义的、不合理的输入数据所构成的集合
2.2.3 划分原则
划分等价类时遵循的原则:
如果输入条件规定了取值范围或个数,则可确定一个有效等价类和两个无效等价类。例如,如果输入值x在0到100之间,那么有效等价类是0<=x<=100,无效等价类是x<0和x>100。
如果输入条件规定了输入值的集合或是规定了“必须如何”的条件,则可以确定一个有效等价类和一个无效等价类。例如,如果输入值是日期类型,那么有效等价类是日期类型的数据,无效等价类是非日期类型的数据。
如果输入条件是布尔表达式,则可以分为一个有效等价类和一个无效等价类。例如,如果要求密码非空,则有效等价类为非空密码,无效等价类为空密码。
如果输入条件是一组值,且程序对不同的值有不同的处理方式,则每个允许的输入值对应一个有效等价类,所有不允许的输入值的集合为一个无效等价类。例如,如果级别的值是初级、中级、高级,则有效等价类应该有三个,分别为初级、中级、高级,无效等价类有一个,为其他任何级别。
如果规定了输入数据必须遵循的规则,则可划分出一个有效等价类(符合规则)和若干个无效等价类(从不同的角度违反规则)
2.2.5 划分步骤
对每个输入和外部条件进行等价划分,画出等价类表,并为每个等价类进行编号。
设计一个测试用例,使其尽可能多地覆盖有效等价类,重复这一步直到其有效等价类被覆盖。
为每一个无效等价类设计一个测试用例。
2.3 示例
2.3.1 题目要求
测试一个函数dateValidation(int year, int month, int day),功能是验证输入日期是否合法。
输入三个变量(年、月、日),函数返回布尔值,判断该日期是否合法:1≤月份≤12,1≤日期≤31,2000≤年份≤2019。
2.3.2 等价类划分表
输入及外部条件有效等价类等价类编号无效等价类等价类编号
日期的类型数字字符1非数字字符8
year2000<=year<=20192year<2000 year>20199 10
month1<=month<=123month<1 month>1211 12
非闰年的2月1<=day<=284day<1 day>2813 14
闰年的2月1<=day<=295day<1 day>2915 16
month ϵ {1,3,5,7,8,10,12}1<=day<=316day<1 day>3117 18
month ϵ {4,6,9,11}1<=day<=307day<1 day>3019 20
2.3.3 测试用例
2.3.3.1 有效等价类
序号输入数据预期输出覆盖范围(等价类编号)
yearmonthday
1200819TRUE1,2,3,6
22008229TRUE1,2,3,5
32008430TRUE1,2,3,7
42018228TRUE1,2,3,4
2.3.3.2 无效等价类
序号输入数据预期输出覆盖范围(等价类编号)
yearmonthday
1x229FALSE8
2123432FALSE9
3222232FALSE10
4201803FALSE11
52018131FALSE12
6201820FALSE13
72018229FALSE14
8200420FALSE15
92004230FALSE16
10201830FALSE17
112018332FALSE18
12201840FALSE19
132018431FALSE20
三、白盒测试
3.1 概述
白盒测试关注软件产品的内部细节和逻辑结构。
方法:
逻辑覆盖测试方法
基本路径测试方法
3.2 逻辑覆盖法
根据覆盖的目标不同,可分为语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、条件组合覆盖、路径覆盖。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
3.3 分支覆盖
基本思想:设计若干个测试用例,运行被测程序,使程序中的每个分支至少被执行一次。
以考察程序if-else结构为基础。
对循环结构,考察循环条件能够满足和不可能满足两种情况。
3.4 示例
3.4.1 题目要求
判断是否为闰年的函数isLeapYear(int year)。
闰年的条件是:
能被4整除,但不能被100整除;
能被100整除,又能被400整除。
3.4.2 流程图及分支标注
3.4.3 分支覆盖及用例列表
输入执行路径
20001,2,4,5,8,10
20041,2,4,7,10
20061,2,3,9
19001,2,4,5,6,9,10
四、实验1:三角形类型判断
4.1 问题描述
三角形的判断:(题目链接)
定义一个函数,用于判断三角形的三条边能否构成三角形,如果能,则判断是普通三角形,等腰三角形,还是等边三角形。(三角形的边长为整数)
输入:三角形的三条边a,b,c(1≤a,b,c≤104)
输出:如果是普通三角形,输出:regular triangle!
如果是等腰三角形,输出:isosceles triangle!
如果是等边三角形,输出:equilateral triangle!
如果不能构成三角形,输出:not a triangle!
实现代码:
//Trangle.javapackage testProject;import java.util.Scanner;public class Trangle { public static boolean isTrangle (int x, int y, int z) { if (x <= 0 || y <= 0 || z <= 0 ||x + y <= z || x + z <= y || y + z <= x) { return false; } return true; } public static boolean isIsosceles (int x, int y, int z) { if(x == y || y == z || z == x) { return true; } return false; } public static boolean isEquilateral (int x, int y, int z) { if(x == y && y == z && z == x) { return true; } return false; } public static void main (String[] args) { Scanner sca=new Scanner(System.in); int a = 0, b = 0, c = 0; try { a = sca.nextInt(); c = sca.nextInt(); b = sca.nextInt(); } catch (Exception e) { System.out.println(e); } if (isTrangle(a, b, c)) { if (isEquilateral(a, b, c)) { System.out.println("equilateral triangle!"); } else if (isIsosceles(a, b, c)) { System.out.println("isosceles triangle!"); } else { System.out.println("regular triangle!"); } } else { System.out.println("not a triangle!"); } } public String type (int a, int b, int c) { if (isTrangle(a, b, c)) { if (isEquilateral(a, b, c)) { return "equilateral triangle!"; } else if (isIsosceles(a, b, c)) { return "isosceles triangle!"; } else { return "regular triangle!"; } } else { return "not a triangle!"; } }}
编写实现并做黑盒(等价类划分)与白盒测试(分支覆盖)
注意事项:
黑盒测试:
无效等价类三条边的划分范围:
[1, 10^4],并且是正整数
黑盒测试的每一个无效等价类只包含一个无效条件
容易出现过于笼统的问题
4.2 参考等价类划分
有效等价类等价类编号无效等价类等价类编号
输入值输入3个整数a,b,c(1<=a,b,c<=10000)数字字符1非数字字符15
整数2一边为非整数a为非整数16
b为非整数17
c为非整数18
两边为非整数a,b为非整数19
a,c为非整数20
b,c为非整数21
三边为非整数22
3个数3只输入1个数只输入a23
只输入b24
只输入c25
只输入2个数只输入a,b26
只输入a,c27
只输入b,c28
输入3个以上数29
1<=a,b,c<=100004一边小于1或大于10000a<1||a>1000030
b<1||b>1000031
c<1||c>1000032
两边小于1或大于10000(a<1||a>10000)&&(b<1||b>10000)33
(a<1||a>10000)&&(c<1||c>10000)34
(b<1||b>10000)&&(c<1||c>10000)35
三边小于1或大于10000(a<1||a>10000)&&(b<1||b>10000)&&(c<1||c>10000)36
输出值“not a triangle”a+b<=c5
a+c<=b6
b+c<=a7
"regular triangle"a+b>c8
a+c>b9
b+c>a10
"isosceles triangle"a=b&&b!=c11
a=c&&c!=b12
b=c&&c!=a13
"equilateral triangle"a=b&&b=c14
五、往届试题
5.1 11年试题:标识符判断
5.1.1 题目描述
在某一个PASCAL语言版本中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”请用等价类划分方法设计测试用例。
分析:有效字符数为8个,最大字符数为80个的意思是八个以内是有效的,可以大于80个,但那些都是无效的,就跟百度搜索前三十个字是有效的,你可以输进去很多,但是无效。
5.1.2 参考等价类划分
输入条件有效等价类等价类编号无效等价类等价类编号
标识符首字符字母1非字母6
标识符组成字母或数字组合2非字母和数字组合7
保留字8
标识符字符数1~8个30个9
>8个10
>80个11
标识符个数(同一语句中)至少一个40个12
标识符使用先说明后使用5未说明就使用13
5.1.3 参考测试用例
测试用例序号输入预期结果覆盖范围
1VAR x,y; REAL;BEGIN x:=3.14;通过1,2,3,4,5
2VAR 2x; REAL;不通过6
3VAR x$; REAL;不通过7
4VAR GOTO; REAL;不通过8
5VAR x,y,; REAL;不通过9
6VAR x123456789; REAL;不通过10
7VAR x123…; REAL;(多余80个字符)不通过11
8VAR ; REAL;不通过12
9VAR x,y; REAL;BEGIN z:=5.20;不通过13
5.2 15年试题:标识符判断加工
在某程序设计语言的语法中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”
根据上述的描述,利用等价类划分法,得到下表(表中括号中的数字为等价类编号)。
输入数据有效等价列无效等价类
标识符个数1个(1),多个(2)0个(3)
标识符字符数1-80个(4)0个(5),大于80个(6)
标识符组成字母(7),数字(8)非字母数字字符(9),保留字(10)
第一个字符字母(11)非字母(12)
标识符使用先说明后使用(13)未说明已使用(14)
下面选取了八个测试用例,它们覆盖了所有的等价类,请在下划线中标出相应的等价类编号。
VAR x, S7654321;
BEGIN x:=6.313;S7654321:=8.953;
(1)(2)(4)(7)(8)(11)(13)
VAR:REAL;
(3)
VAR x,:REAL;
(5)
VAR S7654321…:REAL;(注:标识符字符数超过80个)
(6)
VAR S$:CHAR;
(9)
VAR GOTO:INTEGER;
(10)
VAR 5S:REAL;
(12)
VAR TAR:REAL;
BEGIN…
TAP:=SIN(3.14*0.8)/8
(14)
5.3 12年试题:用户名正确性测试
5.3.1 题目描述
登录用户名由英文字母和数字组成,字符长度8-12位,不能仅有字母,也不能仅有数字,也不能有其他非英文字母。用等价类划分法设计测试用例。
5.3.2 参考等价类划分
输入条件有效等价类编号无效等价类编号
用户名长度8~12位1<8位3
>12位4
用户名组成英文字母和数字组合2只包含字母5
只包含数字6
包含其他非英文字母7
5.3.3 参考测试用例
测试用例序号用户名输入预期结果覆盖类范围
1zhangsan3有效1,2
2lisi4无效3
3wangwudalang12345无效4
4gebilaowang无效5
5233333333无效6
6&&&$$&&&无效7
7zhangsan_3无效7
插播一条特别消息…
不要问我为啥没有13年的
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
测试用例设计方法大全
黑盒测试用例设计方法&理论结合实际 -> 边界值分析法
黑盒测试用例设计方法
测试用例设计之边界值
黑盒测试的测试方法
软件测试方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服