Quality Gates
简介
质量门是对代码质量事实的检查,它 必须是 在发布之前以及最终在提交到源代码管理之前强制执行。质量门禁可以被视为软件质量的通过/失败(PASS/FAIL)衡量标准。
CppDepend 提供十几个默认质量门,涉及技术债务量、代码覆盖率或特定严重程度的问题数量等测量。
请注意特殊的 红/黄/绿菱形图标 显示质量门状态: 失败/警告/通过。

视频导览
质量门和构建失败
创建和自定义质量门
CppDepend 的独特之处在于质量门是一条 C# LINQ 查询,可轻松创建、编辑和自定义。例如,如果您想通过质量门强制达到一定的代码覆盖率,只需编写:
1// <QualityGate Name="Percentage Code Coverage" Unit="%" />23failif value < 70%45warnif value < 80%67codeBase.PercentageCoverage
另请注意特殊子句 failif (强制条款) 和 warnif (可选子句)是 CppDepend CQLinq 特有的。 codebase.PercentageCoverage 实际上是 CppDepend 求值的 C# 语句。
注意定义质量门禁名称和单位的特殊头部注释。这里的单位是字符串“%”。为了可读性,可以选择在阈值后重复它。
质量门禁还可以根据自基线以来的差异确定度量。例如,下面的质量门禁确保自基线以来整体技术债务不会超过某些阈值。
注意:
1// <QualityGate Name="New Debt since Baseline" Unit="man-days" />23failif value > 2 man-days45warnif value > 0 man-days67let debt = Issues.Sum(i => i.Debt)89let debtInBaseline = IssuesInBaseline.Sum(i => i.Debt)1011select (debt - debtInBaseline).ToManDay()1213//<Description>1415// This Quality Gate fails if the estimated effort to fix new or worsened1617// issues (what is called the *New Debt since Baseline*) is higher1819// than 2 man-days.2021//2223// This Quality Gate warns if this estimated effort is positive.2425//2627// Debt documentation: http://www.CppDepend.com/docs/technical-debt#Debt2829//</Description>
最后请注意,在定义质量门阈值时,关键字 值 必须替换为关键字 count LINQ 查询是否返回行而不是标量。
这有助于在有意义时让质量门结果更具信息量。

探索质量门状态
质量门状态集合可通过 C# LINQ 查询获取。
仪表板汇总了质量门禁的状态。单击一次即可生成显示每个质量门禁详细状态的 LINQ 查询。质量门禁状态也在 HTML+js 报告中提供。

问题修复优先级排序与 Breaking-Point 指标
该 断点 某个问题或一组问题的该值,是从现在到修复该问题的估计成本达到不修复该问题的估计成本的时间点。
断点是 债务除以年利息。例如,如果修复债务的估计成本等于 10 人天,估计年利息等于每年 2 人天,那么盈亏平衡点等于从现在起 5 年。
请注意,一个断点如果是 低于 每年意味着在接下来的 12 个月内,预计修复债务比不修复更便宜。
另请注意,盈亏平衡点不像债务或年利息那样以人工时间(人月或人年)来衡量,而是以常规时长(月或年)来衡量。盈亏平衡点值使用 TimeSpan 类型。
当涉及到 优先处理要首先修复的问题,问题的严重程度是一个重要参数。提醒一下:严重程度是年利息的离散度量。因此,年利息越高,修复就越重要。
然而,在给定的严重程度级别下,并非所有问题都是同等的。有些问题需要更多的修复工作量。这通过技术债务度量来估算。因此,为了估算 投资回报率 (ROI) 对于问题修复,估算债务除以年利息是有意义的。这个估算值是盈亏平衡点,值越低,投资回报率(ROI)越高。
让我们明确一点:在默认规则集中,与自基线以来的新问题相关的问题,例如 API破坏性变更, 代码元素质量变得更差, 未测试的新代码元素……是产生更高年度利息、因而比其他问题严重程度更高的问题。这符合 优先修复最近引入问题的最佳实践.


