360linker

IT圈信息分享、交流

白盒测试中的代码覆盖率简介

白盒测试(也常称为结构化测试)是指根据源代码的内部结构设计测试用例,对软件进行测试。在白盒测试中,主要依据源代码的内部结构来设计测试用例,测试人员根据内部结构,设计不同的输入,来测试软件的不同部分。

白盒测试可以在测试的多个阶段进行,例如:单元测试,集成测试和系统测试。在单元测试阶段,白盒测试可以对单元内部路径进行覆盖。在集成测试阶段,白盒测试可以对单元之间的路径进行覆盖。在系统测试阶段,白盒测试可以对子系统之间的路径进行覆盖。目前,白盒测试通常在单元测试阶段进行,但有趋势将白盒测试应用到更多的阶段。

在白盒测试中,主要使用代码覆盖率来评判白盒测试完成的程度。代码覆盖率是指:在测试中,所执行的源代码占全部源代码的比例。通常情况下,高的代码覆盖率意味着有可能发现更多的错误,当然,这并不是绝对的(世界上有绝对的东西吗?)。代码覆盖率可以有多种度量方式,例如:语句覆盖率、分支覆盖率、条件覆盖率、子程序(函数)覆盖率等。

以下面的程序为例说明各种覆盖率。


函数覆盖率

    如果函数func被执行了至少一次,那么函数覆盖率就是100%

 

 

语句覆盖率

语句覆盖需要程序中的每条语句都被至少执行一次。

如果每条语句(3,4,5,6,7,8)都被执行至少一次,那么语句覆盖率就是100%这里语句5,7虽然只是括号,但是我们认为他们也是代码不可缺少的部分,因此也是被执行了。

 

 

分支覆盖率(也称为判定覆盖率)

分支覆盖需要每个判定的每个分支都被执行。调用func(-1,1)func(1,1)将令分支覆盖率达到100%。调用func(-1,1)时,语句4判断为True,因此语句5,6,7被执行。调用func(1,1)时,语句4判断为False,因此语句5,6,7不会执行。也就是对语句4这个条件语句的2个分支都执行了。

 

 

条件覆盖率

条件覆盖需要每个判定中的每个条件都至少取TrueFalse各一次。

如果需要条件覆盖率达到100%,则需要执行func(-1,0)func(0,1)。函数func中包含2个条件(x<0)(y>0),测试用例需要覆盖(x<0)TrueFalse2种情况,以及(y>0)TrueFalse2种情况。

 

注意:条件覆盖并不蕴含分支覆盖




MCDC(Modified condition/decision coverage)

  MC/DC(修正条件判定覆盖)要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变.   conditiondecision的概念:  



这是一段Python代码,定义了一个函数test_mcdc,该函数有3个参数x,y,z。函数体对x,y,z进行条件判定,如果满足语句4的条件则执行语句5进行打印。语句4中的( (x or y) and z )称为一个判定(decision),其中x,y,z作为判定的条件。对于判定覆盖来说,让语句4的判定分别取值为TrueFalse各一次就可以满足。但是MC/DC的要求则高很多:在每个判定中,要求每个条件都独立的影响判定结果至少一次(所谓独立影响就是在其他条件不变的情况下,改变该条件可以改变判定结果)。例如,要想x对判定独立影响,则y必须为False,且z必须为True。要想y对判定独立影响,则x必须为False,且z必须为True。要想z对判定独立影响,则x or y必须为True

满足x,y,z都对判定独立影响的话,则需要如下的测试用例。

 

 

注意其中有重复的用例。 


阅读更多
文章标签: 代码覆盖率 测试
个人分类: 软件开发
想对作者说点什么? 我来说一句

白盒测试的方法和步骤

2008年10月08日 118KB 下载

简单的用力

2013年06月10日 878KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭