从软件系统的构成看覆盖率分析技术
(本文为原创,转载请说明出处:http://www.cnblogs.com/xiaocheng)
在当今覆盖率分析技术已经成为了一种非常重要的软件质量评估的方法,但它并不是软件质量好的必要充分条件(即覆盖率高,代码的质量不一定好;覆盖率低说明我们的代码存在风险的性就越大)。代码覆盖率是一种用来评估我们测试有效性的一种手段,一般的过程如下图:
如何理解软件当前比较常用的几种覆盖率技术:
软件程序实际上都是由数据+ 算法组成(在面向对象的程序语言中,实际上对象也是由数据成员和成员函数组成)。而覆盖率分析技术主要是对算法的执行的分析。在这里的我们把算法看成一个个的函数,而每个函数又是由条件代码块、循环代码块、没有分支的语句块组成。而选择和循环都是由一个判定表达式来决定执行的分支,所以覆盖率分析技术基本上都是基于这个判定表达式的进行的。
首先为了满足每条语句都被执行到,所以产生了语句覆盖(在这基础上又衍生出段覆盖或者基本语句块覆盖---即不含分支的语句序列覆盖统计)。
由于语句覆盖它对判断条件不敏感,为了解决这个问题所有产生了判断覆盖,即每个判定的true/false至少覆盖一次。
但是判断覆盖出现后,问题又来了,判定覆盖不能解决每个判定中的条件都覆盖到。于是又出现了条件覆盖,即每个条件的可能取值都至少覆盖一次。
由于判定覆盖和条件覆盖没有谁包含谁的关系,所以为了同时解决两者的问题,又出现判定-条件覆盖。
判定-条件覆盖不能满足每个条件的取值都决定它所在的判定表达式的结果一次,所以为了满足这种更加严格的覆盖,又出现了选择判定-条件覆盖。
选择判定-条件覆盖并不是所有的条件的可能组合,所以在此基础上又定义了一种覆盖叫组合条件覆盖(即全组合覆盖)。
上面描述了6中覆盖率分析技术都是基于判定点和语句进行了,实际上整个软件是分层构建的。。
所以在多条相关的语句组成了函数,针对每个函数从入口到出口的所有可能分支覆盖统计叫路径覆盖我们在进一步的构建,有多个函数完成一个需求或者功能,所以又出来的
功能覆盖。
由不同的功能组合形成了客户的某种操作场景,于是又产生了场景覆盖。
当然后面几种覆盖率分析技术不常用,而且可能从不同的维度去思考我们的程序组成会出现不同的覆盖率分析技术。
下面我将常用的几种覆盖率分析技术层次描述描述为下图:
在使用代码覆盖率分析时需要注意的几点 :
1、代码覆盖率分析技术是一种结构化的测试技术(通常说是白盒测试技术,但是如果你把他的功能单元更加抽象一些也是可以用到黑盒测试技术中),与之对应的测试技术是功能测试技术。
2、代码覆盖率分析技术一般不独立使用,它只作为评估你的产品质量的一种辅助手段。覆盖率高不能说明产品的质量一定好。
3、在决定开发代码覆盖率分析前,定一个最低覆盖率基线,用于判定你什么时候停止覆盖率分析。