Ruby是否存在用于C1代码覆盖率分析的工具?

9
我目前正在使用Rcov为我正在开发的Rails项目获取C0代码覆盖率分析。
然而,这些结果几乎毫无意义-根据rcov的说法,我的覆盖率达到了100%(因为它只涵盖了C0分析),但是我仅编写了现有功能不到一半的测试用例。
我习惯于从Visual Studio 2008 Team的代码覆盖率中获得有用的结果,该工具具有C1覆盖率。 是否有任何提供类似Ruby覆盖率的工具?
5个回答

12

目前,Ruby 没有 C1 覆盖率工具。实际上,除了 RCov 以外,没有任何覆盖率工具。

直到最近,编写类似工具的唯一方法是通过在 C 中修补或扩展 MRI 解释器。大约两年前开始,在 Java 中扩展 JRuby 也成为可能,实际上自上个月以来就有了 JRuby 的 RCov 移植版。不过,这需要对 Ruby 和 C 的知识,以及相当深入的知识,因为调整 MRI 内部结构并不适合心脏虚弱的人。

但只有在 Rubinius 上,才能编写动态分析工具,例如代码覆盖工具,并在 Ruby 本身中进行编写,使得工具编写对更多的 Ruby 社区成员来说易于掌握。我希望这将与工具供应商的重要财政支持(许多主要 IDE 供应商正在开发或已经推出 Ruby IDE,包括 CodeGear(前 Borland)、IntelliJ、NetBeans、Eclipse、SapphireSteel(针对 Visual Studio 的 Ruby in Steel)甚至是 Microsoft)相结合,促进 2009 年 Ruby 工具空间的快速创新,并且我们将看到像 C1、C2 覆盖率、NPath 复杂度、更细粒度的分析等等。

在那之前,我唯一想到的办法是使用 Java 工具。JRuby 的开发者尝试生成适当的魔术元数据,使其生成的字节码至少可以被 Java 工具穿透。因此,也许可以用 Java 覆盖率工具来处理 JRuby。不过,我不知道这是否实际可行,也不知道是否被认为是行之有效的方法。


1
在2016年,这仍然是事情的现状吗? - Chad
现在有DeepCover,它是一个C1。我也发表了这方面的答案。 - Marc-André Lafortune

2

DeepCover 是目前唯一完整的C1 Ruby覆盖率工具。

声明:我是 DeepCover 的共同作者。


0

虽然这是一篇旧文章,但我在寻找 Ruby 覆盖工具时遇到了它。FYI,我发现了一个名为 single_cov 的 Ruby C1 覆盖工具。不知道它有多好,但我会在未来的某一天进行测试。


1
single_cov 在内部使用内置的 coverage 库。DeepCover 是唯一的 Ruby C1 覆盖率库。 - Marc-André Lafortune
1
single_cove 在其页面上说:Ruby 2.5+ 上的分支覆盖率。我以为 C1 是分支覆盖率呢? 顺便说一下,谢谢,我不知道 DeepCover,我会研究一下的。 - Axe
2
对,我应该说“完整的C1”。内置库不完整 - Marc-André Lafortune

0

我不知道代码覆盖工具,但是Ruby有一个名为Heckle的变异测试器。

变异测试涉及更改正在测试的代码,并查看这些变异是否导致单元测试失败。

不幸的是,最新的官方gem(版本1.4.1)存在一些错误,因此您可能希望使用开发分支中的代码构建gem。它只能突变实例方法。我也不确定开发分支版本的可靠性。

如果正在测试的代码可能会破坏系统(例如删除文件),则应避免进行变异测试。您可能想阅读关于Heckle的常见问题提到rcov与Heckle的常见问题


它内置于RSPec中。从spec --help中,有一个-H(或--heckle)选项:“如果所有示例都通过,则会逐渐改变由CODE标识的类和方法,并为每个突变再次运行所有示例。意图是对于每个突变,至少应该有一个示例应该失败,并且RSpec将告诉您是否不是这种情况。CODE应该是Some :: Module,Some :: Class或Some :: Fabulous#method之一”。 - hgmnz

0
值得一提的是,NetBeans 7.0 内置了 Ruby 的代码覆盖率分析功能。我找不到任何文档说明它是 C0 还是 C1,但这是值得关注的事情。

1
E.S.: Netbeans在幕后只是使用RCov。 - srboisvert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接