除了Cyclomatic Complexity,还有其他代码度量系统存在吗?
答案 0 :(得分:2)
Do you find cyclomatic complexity a useful measure?
What code metric(s) convince you that provided code is “crappy”?
答案 1 :(得分:2)
维基百科提供了一个 simple overview of metrics
实际上有许多指标。实际上,将源代码映射到测量比例(整数,实数,分类枚举)的源代码的任何函数都可以被视为度量。
大多数代码指标的问题在于它们往往与SLOC成比例,如果是这种情况,SLOC也同样好。对指标的最佳做法是立即衡量您的代码,并跟踪指标随时间的变化情况;趋势,向上或向下,将告诉你几乎超过指标本身。 Up意味着坏消息;代码变得越来越复杂。
将代码(复杂性)指标与错误率结合使用也很有用。模块中的高复杂性,和以及同一模块中的高错误率表明,重新设计该模块可能是防止该领域进一步麻烦的好主意。高复杂性和低错误率表明代码看起来很可怕但不是。
答案 2 :(得分:1)
Halstead's Software Science是一个出色的指标套件,可以让您有趣地了解程序的实际构造。
还有一个由Card and Glass创建的模型,但我不确定它是否可以在书本之外使用。无论如何,我会寻找它。
答案 3 :(得分:0)
查看Visual Studio 2012,2010和2008中集成的工具NDepend支持的82 code metrics个定义。免责声明:我是该工具的开发人员之一
请注意,这些代码指标可以通过CQLinq queries and rules来组成,以定义您自己的自定义代码指标。
例如, Cyclomatic Complexity 以外的一个流行代码指标是C.R.A.P metric。基本上, C.R.A.P 将糟糕的代码定义为复杂的方法(具有高 Cyclomatic Complexity ),测试覆盖率很低。定义 C.R.A.P 指标的default CQLinq rule是:
// <Name>C.R.A.P method code metric</Name>
// Change Risk Analyzer and Predictor (i.e. CRAP) code metric
// This code metric helps in pinpointing overly complex and untested code.
// Reference: http://www.artima.com/weblogs/viewpost.jsp?thread=215899
// Formula: CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m)
warnif count > 0
from m in JustMyCode.Methods
// Don't match too short methods
where m.NbLinesOfCode > 10
let CC = m.CyclomaticComplexity
let uncov = (100 - m.PercentageCoverage) / 100f
let CRAP = (CC * CC * uncov * uncov * uncov) + CC
where CRAP != null && CRAP > 30
orderby CRAP descending, m.NbLinesOfCode descending
select new { m, CRAP, CC, uncoveredPercentage = uncov*100, m.NbLinesOfCode }