【发布时间】:2009-08-13 11:15:22
【问题描述】:
除了圈复杂度之外,还有哪些其他代码度量系统?
【问题讨论】:
标签: code-metrics
除了圈复杂度之外,还有哪些其他代码度量系统?
【问题讨论】:
标签: code-metrics
维基百科提供了一个 simple overview of metrics.
实际上有很多很多指标。事实上,任何将源代码映射到测量尺度(整数、实数、分类枚举)的源代码函数都可以被认为是一个度量。
大多数代码指标的问题在于它们往往与 SLOC 成正比,如果是这种情况,SLOC 也一样好。使用指标最好的方法是现在测量您的代码,并跟踪指标如何随时间变化;上升或下降的趋势会告诉你几乎比指标本身更多的信息。向上意味着坏消息;代码越来越复杂了。
结合错误率考虑代码(复杂性)指标也很有用。一个模块中的高复杂性,和以及同一模块中的高错误率表明,重新设计该模块可能是防止该领域进一步麻烦的好主意。高复杂性和低错误率表明代码看起来很吓人,但实际上并非如此。
【讨论】:
Halstead's Software Science 是一个出色的指标套件,可以让您深入了解程序的实际结构。
Card 和 Glass 也创建了一个模型,但我不确定这是否适用于书籍之外。无论如何,我都会寻找它。
【讨论】:
查看集成在 Visual Studio 2012、2010 和 2008 中的工具 NDepend 支持的 82 个code metrics 定义。免责声明:我是该工具的开发人员之一
请注意,这些代码指标可以通过CQLinq queries and rules 组合来定义您自己的自定义代码指标。
例如,循环复杂度以外的一种流行代码度量是C.R.A.P metric。基本上,C.R.A.P 将糟糕的代码定义为复杂的方法(具有很高的循环复杂度),很少被测试覆盖。定义 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 }
【讨论】: