目录
⑤ 组合覆盖(条件组合覆盖):将每个判定中的各个条件的各种可能的组合至少一次
软件测试是为了发现程序中的错误而执行程序的过程。软件测试不等于程序测试,它贯穿于软件定义和开发的整个期间软件测试的对象。针对的对象有:需求分析,概要设计,详细设计以及程序编码等各个阶段得到的文档。
注:
①只能尽可能地差错,不能证明程序没错
②测试员与程序员不应该是同一个人
测试用例:为了进行测试而输入地和获得的输出数据。
软件测试的方法包括黑盒测试和白盒测试。
把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。又叫做功能测试或数据驱动测试
是在程序接口上进行测试
注:使用黑盒穷举测试对所有输入数据的各种可能值的排列组合都进行测试,来检查程序是否都能产生正确的输出。实际上这是不可能的。
黑盒测试要达到的目的:用尽可能少的测试用例去发现尽可能多的软件缺陷。
方法:
1.找出限制条件
2.划分有效等价类和无效等价类
3.输入测试数据覆盖等价类
变量的命名规则一般规定如下:变量名的长度不多于 10 个字符,第一个字符必须为英文字母,其他字符可以英文字母、数字以及下划线的任意组合。请用等价分类法设计测试用例。
输入等价类? ? | 有效等价类? | 无效等价类 |
长度 | 1.不多于10个字符 | 2.大于10个字符 |
第一个字符 | 3.英文字符 | 4.非英文字符 |
其他字符 | 5.英文,数字,下划线 | 6.非英文,数字,下划线 |
输入测试数据覆盖等价类:每一个测试用例只覆盖一类无效等价类,而有效等价类可通过一条全部覆盖
测试数据 | 结果 | 覆盖 |
abc123_ | 有效 | 条件 1,2,3 |
abcdefghijk | 无效 | 条件2 |
2abc | 无效 | 条件4 |
a>b | 无效 | 条件6 |
输入域边界或边界附近,常常能发现大量缺陷,所以可以选择系统边界或边界附近的数据来设计测试用例。
注:边界值分析法和等价类划分法一般同时使用。
int Add(int x1,int x2)
{
1<=x1<=200
50<=x2<=300
}
针对有效输入,函数返回x1+x2
针对无效输入,函数返回-1
刚开始可能会这样想:
?但是这样设计会引起以下问题
①这样排列组合数据,很容易导致罗列不全,思路混乱
②像0,49,两个都来自于超出范围的左边界,如果发生错误,那么就不能确定是0导致的还是49导致的错误
所以边界值分析法要解决的问题就是
(1)确定边界:
(2)确定边界点:
(3)确定边界的邻域:
人为定义区间,这样就构成了最小值的邻域和最大值的邻域 (1和2一般是一致的,但是也可以不一致),如下图:
若使用穷尽取值法,他的取值范围如下图红色区域所示,测试用例达到2000多个,虽然测试用例的覆盖度达到了100%,但是测试用例太多,冗余度非常高,很难定位哪一个边界值出了问题。
若采用以下方法,一个边界点附近只需9个测试用例,总共36个测试用例,这样覆盖度一般也能达到100%,但是最大的问题就是缺陷定位能力太差,无法通过一个测试用例确定哪一个边界值出现了问题。
正确的取测试用例的方法:
得到如下表格:
?边界值+中间值
?边界附近+中间值
也不一定需要中间值,这里强调的是,取边界的值需要单一化,不能同时取边界值或边界附近的值,这样在出错之后,就可以确定是哪一个边界值出现了问题。
把测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。又称为结构测试或逻辑驱动测试。
eg:
if A and B
? ? ? ? then action 1
if C or D
? ? ? ? then action 2
这里的语句有action1 和 action2,如果两个语句都至少执行一次
A=TRUE B=TRUE(A,B两个都为真) C=TRUE/D=TRUE(C,D其中一个必须为真)
例如:若输入test:A=TRUE,B=TRUE,C=TRUE,就可以完成语句覆盖
判定在这里就是指:if后面的框框
每个判定真假至少一次,即
A and B =T---->A=T,B=T? ? ? ? ①
A and B = F---->A=F/B=F? ? ? ? ②
C or D = T---->C=T/D=T? ? ? ? ③
C or D = F---->C=F,D=F? ? ? ? ④
满足以上四个判定
输入测试:
test1:A=T,B=T,C=T,D=F--->覆盖了①③用例test2:A=T,B=F,C=F,D=F--->覆盖了②④用例
?
条件在这里就是指:
每个判定条件至少真假一次,即
A T F
B T F
C T F?
D T F
? ⑤ ⑥(全T一列为⑤,全F一列为⑥)
那么以下测试用例,就可以覆盖上面的条件
test1:A=T,B=T,C=T,D=T?
test2:A=F,B=F,C=F,D=F?
?
A=T,B=T,C=T,D=T---->满足了⑤+①+③
A=F,B=F,C=F,D=F---->满足了⑥+②+④
组合覆盖利用上面的例子就是:
对于if A and B 以及 if C or D:
? ? ? ? ? ? ? ? ? ?A? ? ? ? B | C? ? ? ? Dtest1:? ? ? ? T? ? ? ? T | T? ? ? ? T
test2:? ? ? ? T? ? ? ? F |T? ? ? ? F
test3:????????F? ? ? ? T |F? ? ? ? T
test4:????????F? ? ? ? F |F? ? ? ? F
我们将他展开,可以很清楚的看到4条路径:
覆盖这4个路径就可以满足路径覆盖:
test1:x=4 z=9 y=6? ----覆盖路径1
test2:? ?x=5?z=9 y=1 ----覆盖路径2
test3:? ?x=2 z=9 y=6?----覆盖路径3? ? ??
test4:? ?x=2 z=9 y=1 ----覆盖路径4
我们也可以发现,覆盖程度由低到高:
语句覆盖--->判定覆盖--->条件覆盖--->判定条件覆盖--->组合覆盖--->路径覆盖
后续深入学习会补充拓展,如有错误,请佬们不吝赐教!!💖💖