测量Java测试用例中的输入覆盖率

时间:2011-08-19 18:36:18

标签: java code-coverage

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

我想测量代码覆盖率之类的东西,而不是输入代码。

1 个答案:

答案 0 :(得分:0)

我不知道任何计算输入覆盖率的COTS工具,所以我希望你必须构建一个能够达到你想要的工具。

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

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

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

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

我们的test coverageprofilers行是使用本文中的技术构建的。分析器在这样的全局数组中保存计数/时间(基本上是您需要的)并将它们导出到绘制热量直方图的显示引擎,显示热点的位置。这些显示引擎是语言和探测数据源不可知的,因为它们来自我们的任何(剖析器)工具,包括Java分析器,因此您可以按其中一个为显示任务服务。 / p>