2

除了圈复杂度之外,还有哪些其他代码度量系统?

4

4 回答 4

2

Wikipedia 提供了 度量的简单概述

实际上有很多,很多指标。事实上,任何将源代码映射到测量尺度(整数、实数、分类枚举)的源代码函数都可以被视为度量。

大多数代码指标的问题在于它们往往与 SLOC 成正比,如果是这种情况,SLOC 也一样好。使用指标最好的方法是现在测量您的代码,并跟踪指标如何随时间变化;上升或下降的趋势会告诉你几乎比指标本身更多的信息。向上意味着坏消息;代码变得越来越复杂。

结合错误率考虑代码(复杂性)指标也很有用。一个模块的高复杂性同一模块的高错误率表明,重新设计该模块可能是防止该领域进一步麻烦的好主意。高复杂性和低错误率表明代码看起来很吓人,但并非如此。

于 2009-08-19T08:18:02.433 回答
1

Halstead 的 Software Science是一个很棒的度量标准套件,它可以让您对程序的实际构造产生有趣的见解。

Card and Glass 也创建了一个模型,但我不确定它是否可以在书籍之外使用。无论如何我都会寻找它。

于 2009-08-13T11:24:42.937 回答
0

查看Visual Studio 2012、2010 和 2008 中集成的工具 NDepend 支持的 82 个代码指标定义。免责声明:我是该工具的开发人员之一

请注意,这些代码指标可以通过CQLinq 查询和规则组成,以定义您自己的自定义代码指标。

例如,除了Cyclomatic Complexity之外,一种流行的代码度量是CRAP度量。基本上,CRAP将糟糕的代码定义为复杂的方法(具有高Cyclomatic Complexity),很少被测试覆盖。定义CRAP指标的默认 CQLinq 规则是:

// <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 }
于 2010-08-30T16:39:13.843 回答