【问题标题】:Measure input coverage in Java test cases在 Java 测试用例中测量输入覆盖率
【发布时间】:2011-08-19 18:36:18
【问题描述】:

是否可以测量从现有测试用例中将多少不同的输入传递给被测类的方法。

我想测量代码覆盖率之类的东西,但要测量输入。

【问题讨论】:

  • 当然,它可能。检测代码以收集所有输入并计算它们。您是否需要一种工具来执行此操作?
  • 不知道Clover有没有这个功能,但是写测试代码的好插件atlassian.com/software/clover
  • @Ira 我正在寻找一个工具。但我想这是可以做到的。我会检查三叶草。我一直在使用 EclEmma。

标签: java code-coverage


【解决方案1】:

我不知道任何计算输入覆盖率的 COTS 工具,所以我希望您必须构建一个工具来满足您的需求。

我的技术论文Branch Coverage for Arbitrary Languages Made Easy 描述了一种使用Program transformation system 将任意探针插入源代码的方法来构建任意语言的测试覆盖工具。

本文自然侧重于构建代码覆盖率,但探针插入技术是通用的,您可以决定将探针放置在何处以及它们的作用。在您的情况下,您只想将探针放置在方法入口处,并且您希望探针跟踪输入参数实例。本文展示了如何通过使用源代码模式来指示插入点,从而将探针放置在任何地方;方法入口很容易描述为一种模式。

捕获输入实例更麻烦但可行。您必须决定什么是“输入”;它只是参数值,还是参数的某种深层副本?您可能需要做的是创建(按方法检测)其数据成员对应于参数的对象类型,使用参数的副本(到适当的深度)实例化这样的对象,并将该对象存储在按方法中哈希表。 (一旦你知道你想做什么作为代码习语,转换规则就可以插入所有这些)。尽管如此,在执行时,您的哈希表会构建参数集,这是您想要的关键。

您可以(连续地)计数个独特的参数集实例,方法是控制将重复项插入哈希表时发生的情况;该计数(每个方法)可以在程序完成时导出的全局数组中进行管理。本文讨论了这样一个全局数组,以及导出/显示它的各种方法。

我们的test coverageprofilers 系列是使用本文中的技术构建的。分析器在这样的全局数组中保存计数/时间(基本上是您需要的)并将它们导出到绘制热直方图的显示引擎,显示热点在哪里。这些显示引擎是现成的与语言和探测数据源无关的,因为它们包含在我们的任何(分析器)工具中,包括 Java 分析器,因此您可以将其中一个用于显示任务。

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2023-03-27
    • 2023-04-08
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多