当前位置: 首页> 技术文章> 软件测试之软件的动态测试技术

软件测试之软件的动态测试技术

  软件测试之软件的动态测试技术

       前一章我们介绍了软件测试中的静态测试技术,这一章主要是讲解“软件动态测试技术”,动态测试是通过运行代码观察代码的运行状态,利用从查看代码和实现方法获得的信息来确定哪些需要测试,哪些不需要测试,以及如何进行测试。

  常用的动态测试方法有:语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、路径覆盖和基本路径覆盖。

  作为一个例子,如图1-1所示,对动态测试技术进行了分析。

软件动态测试技术(图1)

  图1-1程序流程图


  一、语句覆盖

  语句覆盖是在测试过程中,设计出多个测试用例,然后运行测试程序,以确保程序中每条可执行语句至少被执行一次。一些测试用例是指使用最少的测试用例数覆盖所有的执行语句。

  像图1-1所示的程序流程图,只需设计一个测试用例,执行路径就是 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条语句}

  二、判定覆盖

  判定覆盖是指设计多个测试用例,运行被测程序,使每一个判断的取真分支和假分支至少经历一次,即判断真假值都满足。判断覆盖又称为分支覆盖。

  程序流程图1-1所示,只需设计三个测试案例,执行路径分别是 ab、 acde和 acdfg。

  testcase 1: iLoop=11; testcase 2: iLoop=9, szT="/*", bIs= F;测试用例3: iLoop=9, szT="/*", bIs= T;

  可见,这三个测试用例不仅满足判定覆盖,也满足语句覆盖,因此实际上判定覆盖是语句覆盖的一种增强形式。这样,语句覆盖的缺点仍然存在于判决覆盖中,其缺点如下:

  (1)不能检验条件语句中逻辑运算符的正确性。

  (2)不能测试循环次数错误。

  (3)无法测试跳出循环条件错误。

  三、条件覆盖

  条件覆盖是设计几个测试用例,在执行被测程序之后,确保每一个条件的可能取值至少满足一次。

  先列出程序中每一个分支的条件取值情况,如图1-1所示的程序流程图,每一个分支条件的取值和标记见表10-4。

  (1)变量定义但被引用。

软件动态测试技术(图2)

  表1-2条件取值和标记表


  然后将条件组合起来,保证每一个条件的取值至少执行一次,然后写出基于组合条件的测试案例。

  这种情况下,只要两个测试用例就可以覆盖每一个条件的取值,测试用例如表8-5所示。

  (2)根据控制流程图数据流表。

软件动态测试技术(图3)

  表格1-3个测试案例

  所以条件覆盖肯定满足分支覆盖吗?对表1-3中的测试用例进行仔细分析,会发现有一个分支没有被执行,也就是路径 acdfg。

  因此,条件覆盖的优点是能够检查所有条件错误;缺点是不能保证每个分支都被覆盖,即无法实现对每个分支的检查,同时,相对于语句覆盖,测试用例的数量增加。因此要实现分支覆盖,就必须采用判定/条件覆盖分析方法来实现条件覆盖。

  四、判定/涵盖条件

  判定/条件覆盖是设计几个测试用例,然后运行被测程序,使判断中的每一个条件都会出现一次,每一个判断本身的判决结果也至少会出现一次。

  第一,列出程序中每一个分支中的条件和分支组合的取值情况,如图1-1所示的程序流程图,每个分支条件的值和分支组合的取值见表1-4。

软件动态测试技术(图4)

  表1-4条件和分枝组合提取表

  接下来是条件的组合,保证每一个条件和每一个分支至少执行一次,然后写出基于组合条件的测试用例。这种情况下,只要两个测试用例就可以覆盖每一个条件的取值,那么测试用例如表1-5所示。

  (1)语句2中使用的变量M在前的语句中定义。

  (2)语句5中定义的变量N用。

  (3)语句7中定义的变量,在语句8中被重新定义,会出现异常警告。

软件动态测试技术(图5)

  表格1-5的测试案例

  在这个例子中,只要设计三个测试用例就可以覆盖所有分支的条件检查和分支检查,那么判定/条件覆盖分析方法是否可以覆盖所有的路径?回答是肯定的,而且判断/条件覆盖分析方法不一定涵盖所有路径的检查,但是这个实例恰好覆盖了所有路径。

  因此,判断/条件覆盖分析法的优点在于,可以同时检查每一个分支,发现错误的能力强于单独的分支覆盖和条件覆盖;缺点是,判定/条件覆盖不能完全覆盖所有的路径,而且与前面几个分析方法相比,它的测试用例数目也增加了。

如需了解更多测试技术信息请关注:http://www.duoceshi.cn/ 深圳多测师软件与技术服务有限公司

上一篇: 软件测试之软件的静态测试技术

下一篇: 软件测试之手工测试人员如何转测试开发?

QQ技术交流群

多测师官方学习交流
556733550

加入群聊