【发布时间】:2010-10-04 20:05:57
【问题描述】:
我正在尝试编写一个小型工具来支持我们在我公司运行的一些代码覆盖率测试。
这是我对工具的要求 -
输入 - 已修改的文件列表(.cpp 和 .h)(作为签入更改列表的一部分)
输出 - 在源中添加或修改的所有功能(作为签入更改的结果)。
知道我该怎么做吗?基本上,它归结为更改了哪些行以及与更改的行关联的功能是什么...
更多信息 - 源代码控制:Perforce 平台:Windows
【问题讨论】:
我正在尝试编写一个小型工具来支持我们在我公司运行的一些代码覆盖率测试。
这是我对工具的要求 -
输入 - 已修改的文件列表(.cpp 和 .h)(作为签入更改列表的一部分)
输出 - 在源中添加或修改的所有功能(作为签入更改的结果)。
知道我该怎么做吗?基本上,它归结为更改了哪些行以及与更改的行关联的功能是什么...
更多信息 - 源代码控制:Perforce 平台:Windows
【问题讨论】:
这听起来很棘手。而且我不确定您将如何处理有关源中已更改功能的信息。您不想将代码覆盖范围限制在这些函数中:可能是更改后的函数影响了未更改函数的覆盖率。
也许最好的办法是在每次签到时运行所有测试,或者如果有任何变化,则每小时运行一次。然后你可以跳过复杂的工具创建,无论如何都会有更好的结果。
【讨论】:
由于所有文件都已签入 Perforce,因此您可以对已更改文件与之前的版本进行批量比较 (p4 diff2)。 p4 diff2 还采用分支规范,这可能是一种更方便的方法。
找到差异时,您需要编写脚本来提取更改行的方法名称。该算法可能是“在文件中向后搜索,直到找到语法的方法签名”。
为了聪明一点,根据文件名或由另一个脚本生成的类列表来确定类名。这个类名列表有助于确定方法签名。如您所知,类名后面是 :: 和方法名。
我认为这个算法很容易达到 95% 以上的准确率,而对于任意输入很难达到 100% 的准确率。
此脚本应排除重复项以生成唯一列表。
结果列表是您在问题中请求的列表。
【讨论】: