Где находится точка расширения / расширяемости для метрик кода vs2010? - PullRequest
1 голос
/ 27 июля 2010

Я бы хотел расширить показатели статического анализа кода 2010 года (в основном это исправить, чтобы сведение было максимальным, а не суммой). Где находится точка растяжимости? Это где-то MEF-компонент?

1 Ответ

0 голосов
/ 04 сентября 2010

Я не уверен, есть ли какая-либо точка расширения для метрик VS 2010.

В качестве альтернативы, вы можете выбрать NDepend, который поставляется с 82 метриками кода , и определение порога так же просто, какнаписание короткого правила для кода через LINQ Query (CQLinq) например:

warnif count > 0 from m in Application.Methods where 
m.NbLinesOfCode > 30 || m.CyclomaticComplexity > 10
select new { m, m.NbLinesOfCode, m.CyclomaticComplexity }

Вы также можете искать тренды, как в стандартном правиле кода CQLinq: Избегайте создания сложных методов дажеболее сложный (Source 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 }
...