是否可以从现有的测试用例中测量有多少不同的输入传递到被测类的方法。
我想测量一些像代码覆盖率这样的东西,但不是针对输入。
发布于 2011-08-21 18:18:48
我不知道有什么COTS工具可以计算输入覆盖率,所以我希望你能构建一个你想要的工具。
我的技术论文Branch Coverage for Arbitrary Languages Made Easy描述了一种使用Program transformation system在源代码中插入任意探针来为任意语言构建测试覆盖工具的方法。
这篇文章自然是专注于构建代码覆盖率,但探针插入技术是通用的,您可以决定在哪里放置探针以及它们做什么。在您的示例中,您希望只在方法入口处放置探测器,并且希望探测器跟踪输入参数实例。本文展示了如何使用源代码模式将探针放在任何位置以指示插入点;方法条目很容易描述为模式。
捕获输入实例更加笨拙,但却是可行的。您必须决定什么是“输入”;它只是参数的值,还是参数的某种深层副本?您可能需要做的是创建(按方法检测的)数据成员对应于参数的对象类型,用参数的副本(到适当的深度)实例化这样的对象,并将该对象存储在按方法的哈希表中。(一旦您知道您想要做什么,transforamtion规则就可以插入所有这些内容作为代码习惯用法)。有了这些,在执行时,您的哈希表构建了参数集,这是您想要的关键。
通过控制在哈希表中插入重复项时发生的事情,您可以(连续)对唯一参数集实例进行计数;该计数(每个方法)可以在程序完成时导出的全局数组中进行管理。本文讨论了这样一个全局数组,以及导出/显示它的各种方法。
我们的test coverage和profilers生产线就是使用本文中的技术构建的。分析器将计数/次数保存在这样的全局数组中(本质上是您需要的),并将它们导出到显示引擎,该引擎绘制热度直方图,显示热点的位置。这些显示引擎是现成的语言和探测数据源不可知的,因为它们可以在我们的任何(profiler)工具中提供,包括Java profiler,所以您可以按下其中的一个来执行显示任务。
https://stackoverflow.com/questions/7125892
复制相似问题