打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

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

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

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


函数覆盖率

    如果函数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都对判定独立影响的话,则需要如下的测试用例。

 

注意其中有重复的用例。 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
白盒测试方法
测试覆盖(率)到底有什么用?
单元测试实战(一)
C0、C1、C2は何?
都100﹪代码覆盖了,还会有什么问题?
覆盖率测试的几种方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服