上一章节我们讲解了软件测试的静态测试技术,本章节主要讲解“软件动态测试技术“动态测试是指通过运行代码来观察代码运行状况,利用查看代码和实现方法得到的信息来确定哪些需要测试、哪些不需要测试、如何开展测试,动态测试又称为结构化测试。
常见的动态测试方法有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、路径覆盖和基本路径覆盖。
以如图10-8 所示的程序流程图为例,对动态测试技术进行分析。
图10-8 程序流程图
一、语句覆盖
语句覆盖是指在测试过程中,设计若干个测试用例,然后运行被测试程序,保证程序中每条可执行的语句至少被执行一次。若干个测试用例是指使用最小的测试用例数来覆盖所有的执行语句。
如图10-8 所示的程序流程图,只要设计一个测试用例即可,执行的路径为acdfg。
测试用例:iLoop=9,szT= "/*",bIs=T;
语句覆盖的优点如下:
(1)能够检查所有语句。
(2)结构简单的代码的测试效果较好。
(3)容易实现自动测试。
(4)代码覆盖率比较高。
(5)如果是程序块覆盖,则不涉及程序块中的源代码。
上面的实例中看似每条语句都被执行了一次,但依然存在问题,语句覆盖无法测试到以下几个方面的内容:
(1)条件语句中逻辑运算符的正确性无法测试。
如实例中的第二个判断条件szT== "/*"&&bIs==T,如果将该测试用例更改为szT=="a"&&bIs==F,那么同样会执行路径acde,如果程序中错误地将逻辑条件“与”写成了“或”,是无法测试出错误的。
(2)循环次数错误、跳出循环条件错误。
如实例中的第一个判断条件程序错误地写成了iLoop<=10,那么执行第一个测试用例还是无法测试出错误。
(3)语句覆盖率高并不代表测试很全面。
如下面的代码,执行x=2 的测试用例,测试结果语句的覆盖率达到99%,但是程序中一个重要的分支没有被测试到,存在严重的缺陷。
if(x!=1)
{
statements;
……;
//99 条语句
}
else
{
statement;
//1 条语句
}
二、判定覆盖
判定覆盖是指设计若干测试用例,运行被测程序,使程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均被满足。判定覆盖又称为分支覆盖。
如图10-8 所示的程序流程图,只要设计三个测试用例即可,执行的路径分别为ab、acde 和acdfg。
测试用例1:iLoop=11;
测试用例2:iLoop=9,szT= "/*",bIs=F;
测试用例3:iLoop=9,szT= "/*",bIs=T;
可以看出,这三个测试用例不仅满足判定覆盖还满足语句覆盖,所以其实判定覆盖是语句覆盖的一种增强版形式。因此语句覆盖存在的缺点在判定覆盖中依然存在,具体的缺点如下:
(1)条件语句中逻辑运算符的正确性无法测试。
(2)循环次数错误无法测试。
(3)跳出循环条件错误无法测试。
三、 条件覆盖
条件覆盖是指设计若干测试用例,执行被测程序以后,确保每个判断中每个条件的可能取值至少满足一次。
首先将程序中每个分支中的条件取值情况列出来,如图10-8 所示的程序流程图,各分支条件取值和标记见表10-4。
表10-4 条件取值和标记表
接着对条件进行组合,保证每个条件的取值至少被执行一次,再根据组合条件写出测试用例。
在本例中只要两个测试用例即可覆盖到每个条件的取值情况,测试用例见表8-5。
表10-5 测试用例
那么条件覆盖一定会满足分支覆盖吗?仔细分析表10-5 的测试用例可以发现,有一条分支并没有被执行,即路径acdfg。
所以,条件覆盖的优点是可以检查所有的条件错误;缺点是不能保证每个分支被覆盖,即不能实现对每个分支的检查,同时相对于语句覆盖,测试用例的数量也会增多。所以为了在条件覆盖的基础上达到分支覆盖,必须使用判定/条件覆盖分析法。
四、判定/条件覆盖
判定/条件覆盖是指设计若干个测试用例,然后运行被测程序,使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
首先将程序中每个分支中的条件取值和分支组合的取值情况列出来,如图10-8 所示的程序流程图,各分支条件取值和分支组合取值见表10-6。
表10-6 条件取值和分支组合取值表
接着对条件进行组合,保证每个条件的取值以及每个分支至少被执行一次,再根据组合条件写出测试用例。在本例中只要两个测试用例即可覆盖到每个条件的取值情况,测试用例见表10-7。
表10-7 测试用例
该实例中只要设计三个测试用例即可覆盖所有分支中的条件检查和分支检查,那么判定/条件覆盖分析法能覆盖所有的路径吗?答案是肯定的,判定/条件覆盖分析法并不一定能覆盖所有路径的检查,但该实例中恰好全部覆盖了所有的路径。
所以判定/条件覆盖分析法的优点是既考虑了每个条件的检查,又考虑了每个分支的检查,发现错误的能力强于单独的分支覆盖和条件覆盖;缺点是判定/条件覆盖并不能全面覆盖所有路径,并且相对前面几种分析方法,其测试用例数量也有所增加。
本章节关于“软件动态测试技术”的内容就学习完了,大家觉得文章有用的话记得每天来这里和小编一起学习涨薪技能哦。