微软ZUNE死机原因–单元测试百分百语句覆盖率是不够的

发表于:2009-4-20 10:44

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

 作者:进化    来源:进化的测试博客

  下图是具体代码,整个方法体的代码都是浅蓝色,代码都被覆盖到了。

  

  回头看看测试数据,虽然达到了100%语句覆盖,但是依然遗漏了“闰年,366天”这样一条数据,只要我们用这条测试数据来测试,就能发现错误了。

  下面来说说用VSTS做单元测试,通过一些设置来帮助我们发现类似这个死循环的BUG。在VSTS里面,可以设置每个单元测试的超时时间,默认是 30分钟,这样对于发现一些出现死循环的BUG不太有利。很多人都说过,单元测试的一个特点就是–快!因为测试只是检查一小个单元是否能正常工作。如果一个“单元测试”需要几分钟,那么几乎可以很肯定地说,这不是一个单元测试,这个测试肯定跟外界有很多交互,例如读取一个外部文件?读取数据库?请求一个 web service等等。在Test run config里面,把超时时间设置为10秒,如果一个测试会导致死循环,那么10秒后,就会提示我们该单元测试出现超时,如图:

  

  设置好了以后运行一下单元测试:

[TestMethod()]
public void AddDayTest1()
{
    int days = 366;
    int year = 2008;
    Class1.AddDay(days, year);
}

  出现结果:

  

  很好,我们可以在比较短的时间内发现问题,而不是观察CPU占用率长期达到100%。

  总结:现在的代码覆盖率工具,大部分都只有语句覆盖的功能,而语句覆盖又是众多代码覆盖标准里面最弱的一种。有时候做白盒的测试(单元,集成……),会很容易掉进一个陷阱,就是看着代码覆盖率工具给出的结果,来提高自己测试代码覆盖率。这样代码的覆盖率上去了,但是代码的质量却不见的能有提高。以后做测试的时候,也应该把精力放在关键部分的代码逻辑的验证上,不要老盯着覆盖率往上涨。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号