分支覆盖范围和断言覆盖范围?

时间:2014-12-10 10:10:35

标签: unit-testing testing code-coverage

我认为大多数人现在使用分支覆盖作为语句覆盖率的质量指标,但我没有看到的一个指标是:测试本身的质量。

例如,我可以编写在我的代码中运行许多分支的测试,但是没有一个测试执行断言。因此,虽然我执行了很多分支机构,但我没有正确检查返回条件。有没有办法捕获这个“断言”指标?

人们是否在测试中使用任何指标?

2 个答案:

答案 0 :(得分:3)

博文 What does code coverage really mean? 处理此问题。研究结果表明,单元测试的代码覆盖率通常是回归测试可靠性的良好指示。对于系统测试(执行大部分软件系统),代码覆盖率不是可靠性的有用近似值。

变异测试可用于评估测试用例的有效性。 我们的想法是通过引入故障来改变源代码,并检查测试用例是否能够检测到故障。通常的方法是在单个方法上应用变异运算符(例如:删除一行代码,用减法替换加法,反转布尔条件),运行所有测试并检查是否至少有一个测试用例失败。失败的测试用例能够揭示破坏的代码。突变测试的缺点是其计算复杂性和等效突变体扭曲结果的问题(等效突变体是在语法上突变但在语义上保持不变的代码块)。 Pitest是一个用于工业的Java变异测试系统。

关于不包含任何断言的测试用例, Martin Fowler writes

  

尽管无断言测试主要是一个笑话,但它并非完全没用。 [...]某些错误[例如空指针异常]确实通过代码执行显示出来。

答案 1 :(得分:0)

有概念性覆盖度量指标可以检查oracle(断言)的质量,需求覆盖率,甚至用执行的代码交叉检查oracle(检查覆盖范围:http://onlinelibrary.wiley.com/doi/10.1002/stvr.1497/full)。他们都承诺提供更好的故障查找功能,并通过实验结果进行备份,但我怀疑他们是否通过我们最常使用的工具实现了这些功能。