2011-08-19 112 views
1

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

我想测量一些代码覆盖范围,但是用于输入。

+0

当然,它的*可能*。测量代码以收集所有输入并对其进行计数。你在问一个这样的工具吗? –

+0

我不知道Clover是否具有此功能,但它是编写测试代码的好插件http://www.atlassian.com/software/clover/ – WillHaack

+0

@Ira我正在寻找一个工具。但我想这可以做到。我会检查三叶草。我一直在使用EclEmma。 –

回答

0

我不知道任何计算输入范围的COTS工具,所以我希望您必须构建一个能够做到您想要的工具。

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

本文主要关注构建代码覆盖率,但探针插入技术是一般性的,您可以决定探针的位置以及它们的功能。在你的情况下,你只想在方法入口处放置探测器,并且你希望探测器跟踪输入参数实例。本白皮书介绍了如何通过使用源代码模式来指示插入点的位置探测器的位置;方法条目很容易被描述为一种模式。

捕获输入实例比较笨拙但可行。你必须决定什么是“输入”;它只是参数值,还是参数的某种深层副本?可能你需要做的是创建一个对象类型(per-method instrumented),它的数据成员对应于这些参数,用一个副本实例化这个对象(适当的深度),然后将这个对象存储在每个方法中哈希表。 (一旦你知道你想做的代码成语,转化规则就可以插入所有这些)。所有这些,在执行时,你的哈希表建立了参数集,这是你想要的关键。

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

我们的线test coverageprofilers是使用本文中的技术构建的。分析器在这样的全局数组中保持计数/次数(基本上就是你所需要的)并将它们导出到显示引擎,该引擎绘制热直方图,显示热点的位置。这些显示引擎是语言和探测数据源不可知的现成的,因为它们都包含在我们的任何一个(探查器)工具中,包括Java探查器,因此您可以将其中一个工具用于显示任务。