首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >技术债务公式没有考虑复杂性

技术债务公式没有考虑复杂性
EN

Stack Overflow用户
提问于 2017-04-26 17:12:34
回答 2查看 813关注 0票数 1

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

在复杂的代码中,补救的成本比在简单的代码中要难得多。这是一个post,在这里你可以看到和比较两个相似的项目,基于大小具有相似的技术债务,但基于复杂性具有非常不同的技术债务。此外,覆盖率正在影响这一度量;我认为,当您有足够的测试和覆盖率来确保您没有破坏任何东西时,修改代码会更容易。

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

代码语言:javascript
复制
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中看到它,这可能吗?

EN

回答 2

Stack Overflow用户

发布于 2017-04-26 19:38:39

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

在采用这种新的质量模型时,基于复杂性计算技术债务的能力确实已经下降,并且没有计划恢复它。同时,“技术债务”不再包括修复错误和漏洞的时间;它只包括代码嗅觉。

票数 1
EN

Stack Overflow用户

发布于 2017-04-27 15:51:22

由于G.Ann的答案解释了使用SonarQube不再可行,因此在.NET代码上,您仍然可以使用工具NDepend。

integrated in the SonarQube system.

有了NDepend a code rule is a C# LINQ query,它可以嵌入一个公式来估计补救成本,也可以嵌入一个公式来估计年利率(每年不修复问题的成本,换句话说,它的业务影响)。通过阈值从年度利息估计中估计问题的严重性

例如,如果您希望有一个代码规则,该规则警告测试未很好地涵盖的复杂方法,并提供自定义和实际债务和年度利息估计,则该规则可能如下所示:

代码语言:javascript
复制
// <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工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43629818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档