4

我不是在询问 StyleCop 或 Fxcop 提供的静态代码分析。两者都有不同的目的,而且效果很好。我在问是否有办法找到您的用户控件或子模块的代码覆盖率?例如,您有一个应用程序在单独的程序集中使用辅助类。为了确保单元测试代码覆盖率,我们需要运行应用程序并确保使用 NCover 或类似工具。

我的要求是,如果不运行它,是否有可能找到帮助程序类或类似程序集的代码覆盖率?

4

6 回答 6

6

有关在不执行源代码的情况下估计覆盖率的技术,请参阅测试覆盖率的静态估计。

基本思想是为每个测试用例计算一个程序切片,然后“计算”切片枚举的内容。(前向)切片实际上是您可以从代码中的特定起点(在本例中为测试代码)到达的程序部分。

如果您不是 ACM 成员 [或者您没有参加展示它的会议:],则很难获得上面的技术论文,这里有一个幻灯片演示

当然,运行这个静态估计器只会(粗略地)告诉您将执行哪些代码。它不能代替实际运行测试并验证它们是否通过!

于 2010-02-26T00:08:53.387 回答
3

一般来说,答案是否定的。这相当于停机问题,这是不可计算的。

于 2010-02-25T19:13:54.973 回答
2

对于语言的子集,有一些基于抽象解释或模型检查的(研究)工具可以在不执行的情况下显示覆盖属性。见,例如

“分析有界模型检查中的功能覆盖”,Grosse, D. Kuhne, U. Drechsler, R. 2008

一般来说,是的,有一些方法,但它们是专门的,可能需要一些正式的方法经验。这种东西仍然是前沿研究。

于 2010-02-25T19:21:00.347 回答
0

Coverity 静态分析是一种可以识别程序中许多安全漏洞的工具。它还可以识别死代码,并可用于帮助满足测试规定,例如要求开发人员证明所有代码都可以执行的 D0178B。

于 2010-02-25T19:18:35.157 回答
0

我会说不;编译器可以确定的“死代码”除外。

我对代码覆盖率的定义是一个结果,它表明每行代码在程序中运行了多少次:当然,这意味着运行程序。这里的决定因素通常是通过程序的数据的值,它决定了条件执行的路径。静态分析,如编译器,可以推断出在任何条件下都无法运行的代码行。

这里的一个例子是,如果你的程序使用了第三方库,但库中存在错误。如果您的程序从不使用库的这些部分,或者您发送到库的数据导致它避免了错误,那么您将不会受到影响。

您可以编写一个程序,通过反射,假设所有条件都将被采用,并通过所有派生类遵循所有函数调用,但我不确定这会告诉你什么。它当然不能告诉您所覆盖的代码行中是否存在任何错误。

于 2010-02-27T17:11:52.263 回答
0

如果您使用的是 Visual Studio,您可以先运行“分析代码覆盖率”,然后您可以在 Visual Studio 中使用下面的按钮(标记为绿色)导出代码覆盖率结果:

来自 Visual Studio 的图像

稍后您可以将 Coverage Result 文件导入回 Visual Studio

于 2021-09-13T11:38:35.477 回答