博客 阅读时间 2 分钟

用敏捷算法管理技术债务

分享本文
Managing Technical Debt with an Agile Algorithm

维基百科对技术债务给出了简明的解释:

技术债务(也称为设计债务[1]或代码债务)是"编程中的一个概念,反映了当采用短期内容易实现的代码、而不是应用最佳的整体解决方案时,所产生的额外开发工作"。[2]技术债务可以与金钱债务。[3]如果技术债务得不到偿还,它就会累积"利息",使日后的变更更加难以实现。未处理的技术债务会增加软件熵。技术债务不一定是坏事,有时(例如作为概念验证)需要借助技术债务来推动项目前进。另一方面,一些专家认为,"技术债务"这个比喻往往会弱化其影响,导致纠正它所需的必要工作得不到足够的重视。[4][5]

从理论上讲,处理技术债务对提高软件质量非常有前景,但在实践中使用这一度量并不容易。事实上,最大的挑战在于如何评估技术债务。

许多工具提供了自己的算法,基于多个因素来评估技术债务:

  • 静态分析工具检测到的问题。
  • 代码覆盖率。
  • 代码重复。
  • 文档。
  • 缺乏设计。

无论使用什么工具或方法来评估技术债务,计算方式都必须灵活且易于定制。每个组织都应该能够根据自身的情况校准算法。

一种敏捷的算法

有两种方式可以让债务计算保持灵活:

  • 定义一个特定的算法,并允许根据开发团队的情况调整其参数。
  • 不定义固定的算法,而是为用户提供自定义计算公式的方法。

在CppDepend中,我们选择了让算法非常灵活,并且可以根据项目情况为每条规则进行更改。

例如,下面是一个针对过大类型所引入债务的计算公式:

Debt1

下面是另一个针对 Cppcheck 问题的公式:

Debt2

这样,每个团队都可以根据项目情况配置自己的债务计算方式,减少估算误差。

与基线比较

准确评估技术债务是困难的。每种算法都会引入一定的估算误差,而要彻底校准它可能非常耗时,因为计算依赖于许多因素。

不过,比较同一代码库两个版本的技术债务,可以很好地指示其代码质量的演变趋势。

比较两个版本的债务度量有助于将估算误差降到最低,并提供更有意义的变化度量。

Debt3

结论

技术债务是监控代码库质量的有力度量。然而,用户需要一种简便的方式来校准计算并减少估算误差。在实践中,跟踪技术债务随时间的演变,往往比关注其绝对值本身更有用。

分享本文