3

CQL 可以很容易地找到CodeWasChanged的​​方法,但我还需要比较指标——我想找到修改后的代码,看看它是否有所改进。

我正在评估混合代码库的ndependcppdepend。两者都给我留下了深刻的印象,尤其是 cppdepend 似乎可以很好地应对我们的传统和现代 c++。

如果我能弄清楚如何做到这一点,那么我可以在 CQL 中做我需要的一切,但除此之外必须做一些事情,比如在外部合并报告。因此,我很欣赏有关自动化和比较 CQL 报告生成作为后备的提示。显然我会更乐意在 VisualCppDepend 或 VisualNDepend 中使用 CQL,这样我就可以在度量视图中看到查询的结果。与其他工具相比,对结果的实时探索是这些工具的大事。

CodeWasChanged 和IsInOlderBuild等其他子句的评论说强制 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)
4

1 回答 1

3

Andy 使用CQLinq(基于 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,
}

我们建议在默认组中浏览相关的默认代码规则:代码质量回归

于 2010-12-16T10:44:54.300 回答