标签归档:测试

关于覆盖率测试的一点认识

1.常用工具的使用:

  • gcov+lcov是最常用的覆盖率测试工具,使用gcov+lcov最常见的问题发生在后台程序中,由于没有显示调用exit,gcov扑捉不到测试率信息,因此需要扑捉所有信号,在信号中显示调用exit。
  • 重新编译程序,将会对之前的覆盖率造成影响,尽量在重新编译前,先调用lcov统计测试率结果。

2.覆盖率测试方法
设计用各种方式运行程序,或者使用外部数据来覆盖程序的更多分支。

  • server程序运行起来之后的逻辑覆盖主要靠外界的数据交互,通过设计不同的数据包可以覆盖到绝大部分的分支。
  • 最容易遗忘的是程序的运行方式。用不同的命令行参数或者设置不同的配置文件参数将可以影响程序运行的整个状态。

3.覆盖率误区

  • 是否一定要100%
    当然覆盖率越高越好,但即便是100%的覆盖率也绝对不能避免和纠正程序上的逻辑错误,因为覆盖率测试在测试环节中还处于相对较低的层次。它所担保的是,你写的代码就是你要用到的代码,仅此而已。
  • 为了覆盖率而改动代码
    例如,现网环境不会出错的语句,是否不需要进行错误判断或者异常处理。从设计程序的思路来讲,肯定应该有这个判断,但从覆盖率的测试方面来讲,这个分支却永远覆盖不到。首先,需要改动代码的测试都不是一个好的测试。并不能为了追求测试率而轻易变动程序架构。

4.测试率的意义
测试率既然是测试中的一个环节,肯定有其存在的价值。

  • 帮开发者理清逻辑
    哪些分支被覆盖得多,覆盖得少,哪些分支没有覆盖。
  • 用于指导后续测试
    如果覆盖率测试得到位的话,分支覆盖次数多的肯定是关键业务,说明在后续测试中应该重点关注,特别是单元测试的关注点,可以从覆盖率测试中获得参考。
  • 用于指导开发者调整代码
    如果覆盖率测试到位的话,排除上述提到的情况,无法覆盖到的部分很大程度上就意味着,那段代码没啥作用,开发者可以考虑是否去掉。