首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >技术债务可以通过代码分析来检测吗?

技术债务可以通过代码分析来检测吗?
EN

Software Engineering用户
提问于 2017-05-22 20:56:41
回答 8查看 1.5K关注 0票数 6

SonarQube是一种软件产品,它运行各种编码风格、规则和其他指标,类似于FxCop或更锐化。它将打破样式规则定义为:

可维护性问题--这通常被称为技术债务。与可维护性相关的问题在我们的产品中被称为“代码气味”。

https://www.sonarsource.com/why-us/code-quality/

然而,我通常会认为技术债务是“一段不符合整体架构模式的代码”。

例如,假设我们有一个业务规则层,但作为快速修复,我们在UI层中放置了一点业务逻辑。

或者,假设我们有一个非常面向对象的项目,但是我们为一个新特性添加了一个过程助手类。

代码很可能符合所有的样式规则,没有复制等,并且自己也很好。它只考虑技术债务,因为它不符合项目中其他代码的模式。为了再次使项目“很好”,我们需要返回并重构它,以便一切都以相同的方式工作。

我认为这种差异在代码分析规则集中是很难理解的,将风格规则违规称为“技术债务”似乎是不诚实的。

我是错还是对?是否有一些客观的规则或某些类别的规则可以很好地定义技术债务,或者至少是一种技术债务?

澄清:

此工具将告诉管理人员,一行代码

代码语言:javascript
复制
this.myvariable

价值2分钟的科技债券。这似乎是错的。

然而,对于圈复杂度或重复代码,它也会做同样的事情。这似乎没那么错。

EN

回答 8

Software Engineering用户

回答已采纳

发布于 2022-02-10 06:22:59

这是个棘手的问题。

一方面,Ward最初使用它来说明理论瀑布模型和基于迭代的增量开发模型之间的区别。如果您只在知道了所有可能的需求之后才开始编写代码,所有的架构决策和计划都已经完成,所有要编码的东西都已经被完美地优化了,等等……您将有更快、最有效的代码编写可能,没有浪费和维护问题(也可能不需要维护,因为所有可能的需求都在开发开始之前就已经知道了)。另一方面,增量开发模型允许您更早地开始编码、更早地交付、更快地适应不断变化的需求和新发现的需求。坎宁安认为,通过在最短的时间内找到最合适的产品,这是一个更好的过程。但是,如果在新信息可用时不维护代码,也会有风险,这可能会导致问题。

因此,他并不是在写糟糕的代码质量,他认为开发人员将尽力在这两个过程中尽力而为。从这个角度来看,如果代码不是在瀑布模型中开发的(在某种程度上是一个预先了解每个需求的非现实生活工具),那么您甚至不需要查看代码,但是在迭代/增量/敏捷/等等中.它很可能有技术上的债务。

另一方面,关于这一主题的研究已经表明,目前可用的工具对代码质量使用不同的定义(因此是技术债务),度量不同的属性,给出可能不相关的结果,发现问题的严重性可能与其实际严重程度无关,估计的固定时间可以减少20倍。

为了让情况更有趣,我们还必须承认,代码分析工具也是正在开发中的软件产品:在使用同一检测工具的不同版本的完全相同的代码上,由于错误被修复或检测算法变得更好,一些版本可能会报告较低的数字,有些版本可能会在添加新问题类型的检测器时报告更多的数字。

我们对这个主题的研究(也包括我上面提到的研究的引文):https://www.researchgate.net/publication/357875475_再现性_在……里面_这个_技术性_欠债_域名

票数 2
EN

Software Engineering用户

发布于 2017-05-23 01:01:16

技术债务可以通过代码分析来检测吗?

这就像问一个速度表是否会使你成为一个更安全的司机。

然而,我通常会认为技术债务是“一段不符合整体架构模式的代码”。

技术债务面临着更多的问题。这个比喻是关于从你未来的自我中借用时间。就像开车一样,有很多方法会让你陷入麻烦,而这个工具根本帮不了你。但这并不意味着这个工具没用。关注它会有帮助的。只是不是所有的事。

技术债务是编程中的一个概念,它反映了在短期内使用易于实现的代码而不是应用最佳的总体解决方案时产生的额外开发工作。技术债务通常与极端编程相关,特别是在重构的情况下。也就是说,它意味着,作为开发过程的一部分,需要重组现有代码(重构)。在这条思路下,重构不仅是写得不好的代码的结果,而且也是基于对问题的不断发展的理解和解决该问题的最佳方法。技术债务也可称为设计债务。techopedia.com

鲍勃叔叔会告诉你,拖延设计所带来的快速收获不是制造混乱的借口。

福勒会争辩说,有些债务是谨慎的,有些是鲁莽的,有些是偶然的。

坎宁安似乎很满意,只要你还了债务,为新特性腾出空间,然后再添加这个特性。

我所关心的是你是否让你的程序员们感到痛苦。我一直在开发环境中快速而容易地进行更改。还有一些是令人痛苦和冰凉的。最大的区别与拥有或不拥有一种工具无关,当你的设计很奇怪时,它就会对你指手画脚。

这个工具所缺少的最大的东西就是能够说出不好的名字。说出不好的名字,你就会陷入一个技术债务的世界。坏名声是高利贷,收取惊人的利息,并希望你支付每次你看他们。一个工具怎么能发现这个?最好的办法就是问一位开发人员,这个名字是否有意义。

我是错还是对?是否有一些客观的规则或某些类别的规则可以很好地定义技术债务,或者至少是一种技术债务?

遵守车速限制会使我成为一个好司机吗?你想让我停止在你的草坪上以每小时25英里的速度做甜甜圈吗?

或者一位5岁的孩子解释道:“这对你有问题吗?我没有碰你。”

这东西也许有用,但如果你认为它能处理好一切的话,那就没有用了。

票数 15
EN

Software Engineering用户

发布于 2017-06-18 01:47:18

您可以使用CppDepend轻松地使用CQLinq创建自己的规则,这些规则可以涉及到体系结构、设计和实现。包括项目、类型和方法之间的耦合。您可以为每条规则指定技术债务,如下所述:http://www.cppdepend.com/technicaldebt

代码语言:javascript
复制
warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 10
select new { 
   m,
   m.CyclomaticComplexity,
   Debt = (3*(m.CyclomaticComplexity -10)).ToMinutes().ToDebt(),
   AnnualInterest = (m.PercentageCoverage == 100 ? 10 : 120).ToMinutes().ToAnnualInterest()
}
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/349427

复制
相关文章

相似问题

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