|
6.测试的不可穷尽性
6.1 什么样的测试才是穷尽的测试
对于穷尽的测试,有一些理解是这样的:
a) 穷尽“覆盖率”:测试每一行代码/每一个分支/每一个路径?
b) 测试员不在发现新的bug?
c) 测试计划完整地执行了?
穷尽的测试,真正的意思是,在测试完毕之后,测试员知道在系统里没有残留着任何未知的bug。因为如果有未知的bug,那么你可以通过做更多的测试来找到他们,你的测试也就还没有穷尽。
接下来针对上面的三种理解,做一个解释,
a) 穷尽“覆盖率”:测试每一行代码/每一个分支/每一个路径?
有人认为软件测试的完整程度可以简单地看做是代码的覆盖率。
那么,什么是覆盖率?
----对某一段代码或者代码的某一种属性做测试,其测试达到的程度被称为是覆盖率,比如对语句的覆盖,对分支或者条件的覆盖,等等
----把现有的测试与可能的执行的测试做比较,现有测试能够占总的可能执行的测试的多少比例作为计算覆盖率的方法
但是这种覆盖率的经典定义,对软件测试的穷尽性来说,还太简单了。他没有考虑到一些情况,比如
-----输入特定的某个值或者某组值
-----在编码中遗漏的代码
-----中断,以及其他并行操作的情况
Cem Kaner在他的著作“Software Negligence & Testing Coverage”里列举了101种这样的例子
举一个很简单的例子,有代码如下:
Input A //The program accept any integer into A and B
Input B
Print A/B
在这个例子中,我们可以轻易地让覆盖率达到100%。
我们令A=2 B=1,则覆盖了此程序所有语句,也覆盖了所有分支。
但是这样的测试并不完整,或者说并没有穷尽,那么我们遗漏了什么,程序中还存在什么bug呢?
很显然这里令B=0的时候,程序不可避免地会出错。也就是说这段程序里,遗漏了当B=0时需要如何处理的代码。前面提到过的,代码的遗漏,这种问题通过覆盖率根本无法发现。
计算并且追求实现高的覆盖率,是一种很好的方法来展示你距离穷尽的测试还有很大的距离。但是,如果你想她来确定你离穷尽的测试的距离究竟有多大,那么她并不是一种很好的工具。假如管理者一味地要求测试必须实现多少多少的覆盖率,反而会产生反效果,造就一大堆低效的测试用例。当测试员受到必须达到百分之多少的覆盖率的压力的时候,自然而然就会去选择编写那些容易提高覆盖率的测试用例,而不是去实现那些更能发现bug的测试用例。并且一旦你规定了百分之几,几乎没有人会在达到你的标准之后,再去做更多的测试。
浅谈黑盒测试——1.测试的基本问题http://bbs.51testing.com/thread-203447-1-1.html
浅谈黑盒测试——2.测试的目标http://bbs.51testing.com/thread-203453-1-1.html
浅谈黑盒测试——3.测试的策略http://bbs.51testing.com/thread-204300-1-1.html
浅谈黑盒测试——4.测试的依据http://bbs.51testing.com/thread-206539-1-1.html
浅谈黑盒测试——5.启发式方法http://bbs.51testing.com/thread-209119-1-1.html
浅谈黑盒测试——6.代码覆盖率的局限性http://bbs.51testing.com/thread-211605-1-1.html
本文内容翻译自Florida Institute of Technology的Cem Kaner和Satisfice Inc的James Bach组织的Black Box Software Testing课程
[ 本帖最后由 zhangting85 于 2010-6-9 08:22 编辑 ] |
|