测量代码可重用性

时间:2010-07-06 07:53:14

标签: methodology metrics code-reuse

我正在尝试衡量我们组织中生成的代码实际上可以重复使用的数量,并且我想设置一些指导方针。 我想谈谈外部世界:

通常在单个应用程序中重用多少代码? 更具体地说 - 如果我们考虑完整的最终用户产品的所有代码(并最终排除第三方库),那么从多个地方调用了多少函数和方法?

使用哪些指标来衡量代码的可重用性? 开源和/或闭源软件是否有可用的数字或研究?

3 个答案:

答案 0 :(得分:2)

  

通常在单个应用程序中重用多少代码?

IMO没有“典型”应用,特别是在这方面没有。应用程序具有截然不同的体系结构和执行流程,从而导致不同的“重用”模式。

考虑一个批量数据处理应用程序,它以特定格式从文件中读取数据,将其转换为另一种格式,然后保存。它实际上只有一个执行路径,因此从多个地方调用的方法不多。

OTOH考虑一个带有几个独立插件的插件框架,这些插件都使用相同的基础架构层,因此该层中的函数可以从许多不同的地方调用。

你不能说第一个应用程序的设计比第二个应用程序的设计更糟糕(没有真正涉及特定于案例的细节)。

另请注意,第二种情况下的度量标准很棘手:如果仅在没有插件的情况下测量核心框架本身,则会获得较低的重用次数,但对于实际插件,重用次数会更高。由于插件可能是外部开发的,您甚至可能无法访问这些插件,因此您的指标会有偏差。

这导致另一点:重用可以在许多层面上发生。您可以在应用内或应用之间重复使用代码。后者只能通过考虑所有相关应用来衡量。

我认为更好的方法可能是从另一端开始,并搜索重复的代码(例如使用PMD for Java代码等工具)。如果你在很多地方都有大量的重复代码,你需要重构。

答案 1 :(得分:2)

如果您定义的问题是“从多个地方调用多少函数”,您可以在技术上构建一个静态分析器来回答该问题;它只需要构建调用图并进行一些计数(有关从C,Java和COBOL中提取调用图的工具,请参阅this)。实际上,你可能会发现你愿意做更多的工作来直接回答这个问题。

您可以考虑在代码库中运行clone detector。这将显示实际被重复使用的代码(并且应该以某种方式抽象出来)由执行复制和粘贴的人员提供精确的指标。像这样复制代码是最直接和最常见的重用形式。

我一直在构建克隆探测器大约十年。几乎我遇到的每个系统,无论语言是什么,都有20%的代码涉及克隆( - >大约10%被重用)。我见过高达55%的例子。

答案 2 :(得分:0)

如果您正在使用.NET平台,请考虑使用NDepend为您提供有关您的软件的many metrics。 “代码重用”不能直接作为度量标准(可能出于其他海报已经提到的原因),但耦合和内聚等内容也可能对您感兴趣。

即使您不在.net上,也许metrics definitions会有所帮助。

相关问题