【问题标题】:Technical debt formula doesn't take into account complexity技术债务公式未考虑复杂性
【发布时间】:2017-09-23 14:21:20
【问题描述】:

在 5.5 之前的 Sonarqube 版本中,可能会更改计算技术债务的方式以考虑复杂性,但在 5.5 之后我看不到如何更改它。您是否删除了此配置?

恕我直言,复杂代码的修复成本比简单代码要困难得多。这是post,您可以在其中查看和比较两个相似的项目,它们基于规模具有相似的技术债务,但基于复杂性具有完全不同的技术债务。此外,覆盖率正在影响这项措施;而且我认为,当您有足够的测试和覆盖范围以确保您不会破坏任何东西时,修改代码会更容易。

在 sonarqube 文档中,用于计算技术债务比率的公式是:

Remediation cost / (Cost to develop 1 line of code * Number of lines of code)

但是补救成本是在每条规则上配置的固定时间量,不是吗?因此它与您在代码中可以找到的复杂性无关。

这是一张图片,您可以在其中看到如何在 5.1.2 版中做到这一点: Technical debt with complexity

有没有办法在 LTS 或 6.x 版中配置技术债务,以便像在以前的版本中一样考虑复杂性?

如果没有,那在您的路线图中吗?您是否有任何参考表明复杂性或覆盖范围不会影响补救成本?

提前致谢。

注意:认知复杂性的新概念似乎很有趣,我们再次谈论复杂性,它会是一个很好的候选者。但是我还没有看到Sonarqube 6.3.1怎么看,可以吗?

【问题讨论】:

    标签: sonarqube maintainability technical-debt


    【解决方案1】:

    SonarQube 5.6 引入了 SonarQube 质量模型,该模型由错误、漏洞和代码气味组成。对于 Code Smells,技术债务被认为是重要的衡量标准。对于错误和漏洞,它是最高严重性。

    在采用这种新的质量模型时,基于复杂性计算技术债务的能力确实已被删除,并且没有恢复它的计划。同时,“技术债”不再包括修复Bug和漏洞的时间;这只是代码气味。

    【讨论】:

    • 感谢您的回答,
    • 感谢您的回答,这意味着必须为复杂性创建单独的质量门。您说技术债务/不再包括时间,但它以时间努力出现,并且在“修复成本”和“开发 1 行代码的成本”公式中以时间表示。那我们该如何解释呢?
    • 技术债务仍然是一个时间度量,但它不再反映所有项目中的问题
    【解决方案2】:

    由于 G.Ann 的回答说明使用 SonarQube 不再可行,在 .NET 代码上,您仍然可以使用工具 NDepend。

    使用 NDepend a code rule is a C# LINQ query,它可以嵌入一个公式来估算修复成本,以及一个估算年利息的公式(不解决问题的每年成本,其业务影响 换句话说)。问题严重性是根据通过阈值的年度利息估算来估算的

    例如,如果您希望有一个代码规则警告测试未充分覆盖的复杂方法,并提供自定义和现实的债务和年利率估算,则该规则可能如下所示:

    // <Name>Complex method must be covered by tests</Name>
    warnif count > 0 
    from m in Application.Methods
    where m.PercentageCoverage < 80 &&
          m.CyclomaticComplexity > 10select new { 
       m,
       m.PercentageCoverage,
       m.CyclomaticComplexity,
       m.NbLinesOfCodeNotCovered,
       Debt = (10 + 3*(m.CyclomaticComplexity -10) + 4*m.NbLinesOfCodeNotCovered)
              .ToMinutes().ToDebt(),
       AnnualInterest = (20 + 2*(m.CyclomaticComplexity) + 6*m.NbLinesOfCodeNotCovered)
                        .ToMinutes().ToAnnualInterest()
    }
    

    这里我们选择简单的线性公式,但它实际上可以是任何公式,它只是针对专用于查询代码质量的代码模型运行的 C# 查询。

    在 Visual Studio 中编辑的规则及其结果如下所示,这些问题和估计可以导入到 SonarQube 系统中:

    免责声明:我为 NDepend 工作

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多