CQL в ndepend и cppdepend, чтобы увидеть изменения в метриках между ревизиями - PullRequest
3 голосов
/ 16 декабря 2010

CQL упрощает поиск методов, где CodeWasChanged , но мне также нужно сравнить метрики - я хочу найти модифицированный код и посмотреть, улучшился он или нет.

Я оцениваю ndepend и cppdepend для базы смешанного кода. Я очень впечатлен обоими, особенно тем, насколько хорошо cppdepend справляется с нашим старым и современным c ++.

Если я смогу решить, как это сделать, то я могу сделать все, что мне нужно, в CQL, но в противном случае мне придется делать что-то вроде внешнего объединения отчетов. Поэтому я был бы признателен за советы по автоматизации и сравнению генерации отчетов из CQL в качестве запасного варианта. Очевидно, что было бы лучше использовать CQL внутри VisualCppDepend или VisualNDepend, чтобы я мог видеть результаты запросов в представлении метрики. Живое исследование результатов - большое дело с этими инструментами, по сравнению с другими.

Комментарии к CodeWasChanged и другим предложениям, таким как IsInOlderBuild say , заставляют CQL работать со старой сборкой , что говорит о том, что вы не можете работать с запросами в разных редакциях.

Тип запроса, который мне нужен, похож на синтаксис:

SELECT METHODS WHERE CodeWasChanged and MethodCe > 10

обобщено для работы между версиями

SELECT METHODS WHERE CodeWasChanged and MethodCe > 10 and BaseMethodCe < 10

или, может быть

SELECT METHODS WHERE CodeWasChanged and MethodCe > 10 and Older(MethodCe < 10)

1 Ответ

3 голосов
/ 16 декабря 2010

Энди, с CQLinq (Code Query и Rule over LINQ) увидеть, что тренды в метриках кода возможны и, надеюсь, легко достижимы.См., Например, правило кода по умолчанию Избегайте усложнения сложных методов (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,
}

Мы советуем просмотреть соответствующие правила кода по умолчанию в группе по умолчанию: Код качества регрессии

...