2010-07-06 96 views
3

我想测量我们组织中生成的代码有多少实际上是可重用的,我想设置一些指导原则。 我想有一定的参考外部世界:测量代码的可重用性

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

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

回答

2

多少代码在一个单一的应用程序通常是重复使用?

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

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

OTOH考虑几个独立的插件,它们都使用相同的基础设施层,等等功能,在该层中的插件框架是由许多不同的地方调用。

你真的不能说的第一个应用程序的设计比第二应用程序的更糟糕(没有实际去到具体案件的细节)。

还要注意的是,在第二种情况的指标是棘手:如果你只测量核心框架本身无插件,你会得到一个较低的再利用次数,但与实际的插件的重用计数较高。由于插件可能是由外部开发的,因此您甚至可能无法访问这些插件,因此您的指标会出现偏差。

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

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

+0

我知道所有这些障碍,但我仍然想做点什么,我需要某种参考。 可以分别分析不同的模块。 (还没有尝试过)一个好的方法是调查每个函数的使用次数分布(我已经完成了 - X轴上的使用次数,Y轴上X次使用的函数数量)。我假设的是,这些分布对于不同的大型软件包来说是相似的,所以应该可以与它们进行比较。作为一个简单的开始,我会感兴趣的是,有多少函数不会被多次调用。 – user384278 2010-07-06 09:33:57

2

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

您可能会考虑在您的代码库中运行clone detector。这将显示被拷贝和粘贴的人以及提供精确的度量标准的代码,这些代码实际上已经被重用(并且应该已经以某种方式被抽象出来)。像这样复制代码是最直接和最常用的重用形式。

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

0

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

即使你不在.net上,也许metrics definitions是有帮助的。