2

我是使用代码覆盖率的新手,而不是他们的行为方式。我尝试过的所有工具似乎都想运行整套单元测试来进行分析。虽然我认为他们会以某种方式静态分析代码,也就是说,无需运行单元测试。

我的假设不正确吗?

4

2 回答 2

1

通常的开源工具,如 Cobertura、Emma 等,需要运行测试。他们使用诸如字节码操作或 AOP 之类的东西来检测代码并跟踪在测试运行时执行了哪些行,然后生成结果报告。它的简单性使其成为一个非常有吸引力的解决方案。

您可以使用静态分析来近似测试覆盖率真的很有趣,但对于运行测试不切实际的情况,这似乎是最后的选择。引用Ira Baxter 的回答中引用的论文的摘要:

测试覆盖率是单元测试质量的一个重要指标。Clover 等工具通过首先使用日志功能检测代码,然后记录在单元测试运行期间执行了哪些部分来计算覆盖率。由于测试覆盖率的计算是一种动态分析,它以软件的工作安装为前提。在独立第三方进行软件质量评估的情况下,工作安装通常不可用。评估者可能无法访问所需的库或硬件平台。安装过程可能不是自动化的或记录在案的。在本文中,我们提出了一种仅通过静态分析在方法级别估计测试覆盖率的技术。该技术使用静态调用图的切片来估计动态测试覆盖率。我们解释了该技术及其实现。我们通过与使用 Clover 的动态分析获得的值进行统计比较来验证静态估计的结果。我们发现静态覆盖估计与系统级别的实际覆盖率之间存在高度相关性,但对包和类级别的更深入分析揭示了进一步改进的机会。

于 2013-01-29T15:14:41.610 回答
0

在运行时收集信息的标准测试覆盖工具必然需要一些东西来运行代码,而测试套件至少具有覆盖所有功能的目的。如果您没有测试套件,您可以运行临时测试,但您的覆盖率可能不会很好,当然这是一个很难重复的实验。

但是您不一定必须使用动态分析。本文展示如何通过静态分析获得测试覆盖率的非常好的近似值。我个人认识作者,对他们的工作非常尊重。

于 2013-01-29T18:14:13.367 回答