代码覆盖率分析 [中文翻译0.1版]

发表于:2008-5-06 13:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:AlexanderIII    来源:51Testing论坛

        当你使用语句覆盖,判定覆盖,或者条件/判定覆盖时,覆盖率的最小通过值就可以设为80%~90%,甚至更高。也有另外的一些人觉得如果把它设置为低于100%的话,是不能够保证质量的。但问题是,如果你真的设置了100%的目标,那么你将会花费巨多的精力去获取这个100%。

        假若我们可以把这同样的精力放到另外的测试活动中,比如说正式的技术评审,它也许可以找到更多的Bugs。另一个要注意的是,不要把目标设为低于80%。

中间的覆盖率目标

        选择一个中间的覆盖率目标可以很有效的提高测试生产率。你最高的测试生产率发生在当你使用了最少精力找到了最多错误的时候。
        精力是由时间评估的,这时间包括了创建测试用例,把它们加到你的测试套件里,以及运行它们的时间。你应该使用覆盖率分析策略来尽快增加覆盖率。
        这可以让你更早的获得找到失败的最大概率。Figure 1阐明了高低测试生产率与相应覆盖率。Figure 2阐明了相应的失败发现比率。

qqq

        有一种可以较快增加覆盖率的策略,它就是在追求更高的覆盖率之前,先通过对整个测试程序进行一些简单的覆盖。你可以通过在早期的浏览被测程序的各个功能,来找到明显的早期错误。比如,假设你的应用程序需要打印几种类型的文档,有一个bug使得程序的打印功能完全失效。如果一开始就每种类型的文档都试着打印一份,你也许就可以很快的找到这个bug了。这样就比通过针对一种类型的文档而打印出很多同种类型的文档进行彻底的测试要快得多。它的目的就是通过最少的测试,比较容易的找到早期程序的错误。

        下面列出的覆盖率目标顺序就是这种策略的一种可行方案。
 

        源代码或者类的90%都可以调用至少一个函数[***]
        调用至少90%的函数
        每个函数至少获得90%的条件/判定覆盖率
        获得100%的条件/判定覆盖率

        需要注意的是,我们并不需要在初始的目标中就要达到100%覆盖。这样就可以把最难的地方放在后面测试。这样做是对维持高测试生产率,以及用最少精力获得最多结果是很重要的。
        再者,还要注意要避免在定中间覆盖率目标时使用弱度量方法,在定最终的发布目标时使用强度量方法。如果这样做的话,就会由弱度量方法的短处来决定推迟哪些测试用例。实际上应该把强度量方法应用在所有的目标上,以及可以根据每个测试用例的难度来决定哪些会被推迟。

结束语

        覆盖率分析是一种帮助把测试套件中的缝隙消除掉的结构化测试技术。当在没有详尽的需求规格的时候,它更能起到重要作用。对于C,C++,和JAVA来说,条件/判定覆盖是最好的一种通用度量方法。如果把中间的覆盖率目标(不管哪种类型)设置为100%,那么它都将会降低测试的生产率。在发布前,努力争取达到语句,分支,或者条件覆盖方法的80%~90%覆盖吧!

References

Beizer1990 Beizer, Boris, "Software Testing Techniques", 2nd edition, New York: Van Nostrand Reinhold, 1990
Chilenski1994 John Joseph Chilenski and Steven P. Miller, "Applicability of Modified Condition/Decision Coverage to Software Testing", Software Engineering Journal, September 1994, Vol. 9, No. 5, pp.193-200.
RTCA/DO-178B, "Software Considerations in Airborne Systems and Equipment Certification", RCTA, December 1992, pp.31, 74.
Howden1982 "Weak Mutation Testing and Completeness of Test Sets", IEEE Trans. Software Eng., Vol.SE-8, No.4, July 1982, pp.371-379.
McCabe1976 McCabe, Tom, "A Software Complexity Measure", IEEE Trans. Software Eng., Vol.2, No.6, December 1976, pp.308-320.
Morell1990 Morell, Larry, "A Theory of Fault-Based Testing", IEEE Trans. Software Eng., Vol.16, No.8, August 1990, pp.844-857.
Ntafos1988 Ntafos, Simeon,"A Comparison of Some Structural Testing Strategies", IEEE Trans. Software Eng., Vol.14, No.6, June 1988, pp.868-874.
Roper1994 Roper, Marc, "Software Testing", London, McGraw-Hill Book Company, 1994
Woodward1980 Woodward, M.R., Hedley, D. and Hennell, M.A., "Experience with Path Analysis and Testing of Programs", IEEE Transactions on Software Engineering, Vol. SE-6, No. 3, pp. 278-286, May 1980.

55/5<12345
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号