是否有针对源代码可维护性的评估系统?
我感兴趣的是找到一些可以分析某些Cfile或者整个Cproject /解决方案的软件,并为其打分,以评分其维护的难易程度。有没有可以做到这一点的产品或者方法?
解决方案
我们应该检查一下圈复杂度。我不知道是否有用于.net的工具,但是如果我们对此进行搜索,我敢打赌,我们会找到结果。
圈复杂性是可维护性的良好指示。它衡量源代码中不同路径的数量。
对于C#,请看一下这些示例和工具链接。
循环复杂性,即逻辑分支的数量可以让我们衡量模块的测试和维护难度。
如果使用Visual Studio 2008,则许多指标将直接内置在IDE中。如果我们使用Visual Studio 2005,或者想要一个独立的系统。 devAdvantage / devMetrics是答案。所有这些工具都会产生多种度量,包括@Kevin讨论的环复杂性。
在阅读代码以确定复杂性的同时,我们可以让某人每分钟计算WTF ;-)
没有自动的Bulletproff方法可以做到这一点。我们可以运行许多类似lint的工具,但是它们通常能够指出句法问题,而不是语义问题。无论如何,这都是很有价值的,也就是说,它们可能会告诉我们有关不可读的代码,危险的构造等信息,但不会告诉我们设计不可扩展,代码未经测试等。
我相信我们需要VS 2008开发人员或者团队系统。但是,如果我们确实有它,那么"代码度量"功能将提供许多不同的度量,包括圈复杂度。还将把指标汇总为"可维护性指数"。
有一个名为SourceMonitor的工具。它会扫描并分析源代码并对其进行评分。
我们可以在这里找到它http://www.campwoodsw.com/
实际上,有一个软件度量称为可维护性指数。由SEI-CMU开发。
它基于Halstead指标,圈复杂度,LOC和百分比注释。
简而言之,公式为171 5.2 * ln(aveV)0.23 * aveV(g')16.2 * ln(aveLOC)+ 50 * sin(sqrt(2.4 * perCM))
更多详细信息:http://www.sei.cmu.edu/str/descriptions/mitmpm.html
在团队系统工具中考虑代码复杂性以及其他一些因素(耦合,内聚,继承级别)来制定可维护性得分。如果我们正在运行Visual Studio的Team System SKU,那将是重磅炸弹。
经过很长一段时间的死亡,NDepend可以满足需求以及更多。
Scott Hanselman有很多使用它的信息,并且在他的摘要中很容易理解。