项目源代码的距离度量有意义吗?

时间:2013-06-11 08:40:01

标签: diff distance metrics levenshtein-distance

我想比较两个项目阶段的源代码的变化,例如Web应用程序源代码在可扩展之前,以及可扩展的源代码。

对我来说,有趣的是显示需要更改,删除或添加多少行以从一个到另一个阶段。我正在寻找一个好的距离指标,奖励更少的代码和更少的代码更改 - 我想象的将输出相对值:

0%   = "Both projects are the same"
50%  = "Half of the source code has been changed"
100% = "Both projects have nothing in common"

我故意想出了一些解决方案:

  1. diff:也许将所有文件连接到单个源代码文件并对它们运行差异。这里的问题是代码越少越好,但是这个解决方案被视为一个简单的改变,因此惩罚代码删除。
  2. Levenshtein Distance:计算将源代码a转换为源代码b所需的更改。结果是字符发生了许多变化。问题在于,代码删除不会得到奖励而是会受到惩罚。
  3. Unified Code Count:设置规则如何一致地计算代码行,但项目之间没有描述性距离度量。
  4. 所以我正在搜索一个描述性的指标,奖励代码删除,只计入代码更改或添加。它不必是特定于源代码的,两个项目都使用相同的语言。我的个人感觉是diff方向,但我没有提出令人满意的描述性指标。

    你会建议什么?

1 个答案:

答案 0 :(得分:1)

如果你愿意,你可以把它变成一个非常困难的研究问题:

http://gate.ac.uk/sale/dd/related-work/tao-related/2007+Kagdi+Survey+for+mining+software+repositories.pdf

这种方法:http://www.cs.kent.edu/~jmaletic/papers/icsm04.pdf看起来像是在积极开发中:http://www.srcml.org/

此处列出的其他更通用的代码指标工具http://www.aniche.com.br/wp-content/uploads/2013/04/scam2013.pdf(虽然看起来该论文宣传的工具现在已经关闭)。显然,Sonar能够随着时间的推移查看指标:https://en.wikipedia.org/wiki/SonarQube