2010の静的コード分析メトリックを拡張したいと思います(ほとんどの場合、ロールアップが合計ではなく最大になるように修正します)。拡張ポイントはどこにありますか?それはどこかのMEFコンポーネントですか?
1 に答える
0
VS2010メトリックの拡張ポイントがあるかどうかはわかりません。
または、 82個のコードメトリックが付属するNDependを選択することもできます。しきい値の定義は、次のようなLINQクエリ(CQLinq)に対する短いコードルールを作成するのと同じくらい簡単です。
warnif count > 0 from m in Application.Methods where
m.NbLinesOfCode > 30 || m.CyclomaticComplexity > 10
select new { m, m.NbLinesOfCode, m.CyclomaticComplexity }
デフォルトのCQLinqコードルールのようにトレンドを探すこともできます。複雑なメソッドをさらに複雑にすることは避けてください(ソースCC)
// <Name>Avoid making complex methods even more complex (Source CC)</Name>
// To visualize changes in code, right-click a matched method and select:
// - Compare older and newer versions of source file
// - Compare older and newer versions disassembled with Reflector
warnif count > 0
from m in JustMyCode.Methods where
!m.IsAbstract &&
m.IsPresentInBothBuilds() &&
m.CodeWasChanged()
let oldCC = m.OlderVersion().CyclomaticComplexity
where oldCC > 6 && m.CyclomaticComplexity > oldCC
select new { m,
oldCC ,
newCC = m.CyclomaticComplexity ,
oldLoc = m.OlderVersion().NbLinesOfCode,
newLoc = m.NbLinesOfCode,
}
提案されたコードメトリックを作成して、 CRAPメソッドのコードメトリックのように独自のコードメトリックを定義することもできます。
// <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-09-04T09:55:42.427 に答える