译者 | 仇凯
审校 | 孙淑娟 梁策
技术债务就像持续上涨的信用卡账单,非常容易失控。为了避免此类情况出现,你需要对积累的技术债务持续评估。
技术债务指标旨在帮助你了解所有收集到的数据。现在有大量可以记录数据的工具和指标可以供选择。
在本文中,我们将了解它们的工作原理,并帮助你选择合适的指标开展工作。
通过八个指标评估技术债务
技术债务非常普遍,主要原因是许多企业根本没有意识到自己有多少技术债务。只有当企业想要添加新功能时,这些问题才会浮出水面。
为了避免陷入同样的困境,你需要建立一些技术债务指标。
请注意,我们所说的指标是从多个维度建立的。没有任何单一指标可以准确反映技术债务的现状。因此,你需要通过一系列指标为技术债务构建画像。
那么,哪些指标是优先考虑项呢?下面将列举常见的指标。
1. 新增Bug和修复Bug
这是非常简单且友好的开始。
每个已知Bug本质上都是小的技术债务。统计所有开发人员的已知Bug是非常重要的,它可以帮助你了解技术债务的总体状况。
假设开发人员记录了修复Bug的时间,你就可以计算出偿还技术债务的效率。如果新增Bug的速度超过修复Bug的速度,那么你就需要进行调整。
2. 可维护指数
可维护指数是基于已解决问题数量与总问题数量的比率,其中问题的优先级越高权重越大。
如果开发团队定期跟踪代码库问题,并确定其优先级,那么你可以轻松确认有多少已解决和未解决的问题。你可以在问题跟踪器中跟踪问题,不过更好的方法是使用Stepsize VSCode或JetBrains的编辑器扩展工具,它们可以帮助你直接在编辑器中跟踪代码库问题,并确定其优先级。此外,你还能从仪表盘中看到问题的处理进度,这将激励开发团队解决更多的技术债务。
3. 代码度量
复杂代码是技术债务不断增加的明显标志。某种情况下,你将不得不处理这个烂摊子。
代码度量是一些指标的集合,它包含代码质量和复杂度的全局量化:
圈复杂度、类耦合和继承深度。
你需要尽可能的降低每一个独立指标的分数。这同样适用于代码度量的整体指标。
4. 时间周期
另一个与代码质量密切相关的是时间周期。
用技术语言来说,这衡量了从第一次提交代码到上线部署消耗的时间。但是,当你在评估技术债务时,你需要研究现有代码进行修改的时间,以及在不使用快速修复情况下解决问题的时间。
如果开发人员花费数小时修复轻微Bug,那么你就要意识到代码中潜伏着一些技术债务。
5. 代码搅动
代码搅动是衡量特定代码被删除、替换或重写次数的指标。
当你开发新特性或处理产品的特定模块时,代码搅动的发生是不可避免的。但是,在你修复了突出问题并发布新版本之后,代码搅动问题应该会迅速减少。
如果某些区域的代码在很长一段时间内高频率发生代码搅动情况,这通常表明每次迭代都引入新的错误或快速修复情况。
6. 代码覆盖率
某种意义上说,代码覆盖率是从相反方向分析同一个问题。
在这种情况下,当运行代码测试任务时,你需要评估有多少代码被执行了。这可以帮助你了解自己的代码编写效率——未被执行的代码行越多,你编写的代码越差。
80%的代码覆盖率是很好的目标。高于这个值是非常优秀的,而低于这个值则表示代码还有优化空间。
7. 代码所有制
在烹饪界,大家常说:“人多误事”。
这种说法在软件工程领域同样适用。如果许多人完成相同的任务,那么很容易因为产生大量无效代码而告终。
尽管如此,你也不希望只有一个人承担整个项目。如果他生病或离职,项目就完蛋了。
出于以上原因,需要分析哪些人参与了哪些项目。作为流程的一部分,你需要计算每个项目有多少开发人员参与贡献——这就是你的代码覆盖率。
代码覆盖率的平均数据将揭示你是否建立有效的任务分配机制,或者仅仅是随意分配。最理想的状态是建立完整的团队来负责每个项目。
8. 技术负债率(TDR)
顾名思义,这是专门评估未来技术债务总成本的指标。它可以是时间或其他资源。
计算方法很简单:
(修复成本/开发成本)*100=技术负债率
在这个场景下,修复成本可以依据前文提到的代码度量指标计算。
开发成本可以通过简单的公式计算,这个公式是构建产品或功能所需代码行数除以每行代码执行时的计算资源消耗量。
将两者的数据结果代入技术负债率公式中,最终会得到一个简单的比率,这个比率将揭示你需要投入多少时间或资源来解决问题。
在理想情况下,你的技术负债率约为5%。如果你的分数是该数值的很多倍,那么你的技术负债已早该处理了。
额外建议:前端响应时间
严格来说,前端响应能力与技术负债关联性不大。然而,这个指标可以起到警示作用。
如果你的前端页面加载时间过长,这通常代表它使用的技术老旧或代码复杂。这两者都是技术债务典型形式。
评估技术债务的最佳工具
希望到现在为止,关于如何开展技术债务的指标评估,你已经开始有思路了。其余需要了解的就是使用哪些工具来完成任务。
以下是一些适合大多数项目的优秀工具:
1. Stepsize
Stepsize是专门为代码库问题跟踪而设计的,可以在你喜欢的编辑器中识别和高亮代码问题。
Stepsize VSCode或JetBrains编辑器扩展工具是完全免费的,可以帮助你跟踪技术债务并跟进处理进度。
由于Stepsize可以与Jira、Asana、Linear、Azure DevOps以及其他很多工具对接,你无需彻底改变自己的工作流程就可以使用此工具。
- 直接在编辑器中创建和查看代码问题
- 跟踪和改进优先级高的代码问题以偿还技术债务
- 通过问题跟踪器添加短期冲刺的关键问题
2. SonarQube
相较于跟踪技术债务的完整解决方案,SonarQube是一个关注范围狭窄的工具。
该平台的主要目标是评估和提高代码质量。SonarQube通过自动分析高亮Bug和杂乱代码,提供依据时间跟踪的评分和优先级。
3. Teamscale
描述Teamscale的最佳语言是它可以作为产品的系统分析器。该工具评估你的代码质量,并通过可视化方式提供相关信息。
通过配置自定义仪表盘,Teamscale可以处理很多指标。该平台还提供一些质量管理功能,尽管它欠缺注释问题跟踪和详细的技术债务分析(Stepsize提供这些功能),但它依然是优秀的工具。
4. Velocity
Code Climate开发的Velocity被视为“工程智能”平台,主要旨在协助管理人员改进工作流程和分配资源。它并不是专门用来处理技术债务的,但是其中有一些功能覆盖。
Velocity通过从Jira和其他DevOps工具拉取数据来提供建议。你同样可以用它来执行自动代码分析和收集内部问题报告信息。
5. Jira
在你选择的项目管理流程中创建和监控积累的任务,也是评估技术债务的一种方法。
如果你想选择这种方式来处理技术债务,那么Jira是明智的选择。它并不提供任何代码分析功能(前文提到的应用都提供此类功能),但它是管理任务的优秀平台。
结论
正如我们所发现的,有很多不同的方式可以评估和管理技术债务。如果你在寻找一体化的解决方案,Stepsize必然在备选清单中。
我们的平台对开发人员来说是直观的,并且功能强大到足以为管理人员提供有价值的见解——通过仪表盘中展示的技术债务信息可以有效评估其对未来路线的影响。
请记住,所有高速增长的软件公司都需要承担技术债务。但是对技术债务进行评估并清理代码是非常重要的,这也将使你的公司保持高速发展。
译者介绍
仇凯,51CTO社区编辑,目前就职于北京宅急送快运股份有限公司,职位为信息安全工程师。主要负责公司信息安全规划和建设(等保,ISO27001),日常主要工作内容为安全方案制定和落地、内部安全审计和风险评估以及管理。
原文标题:How to Measure Your Technical Debt: 8 Metrics to Consider,作者:Alex Omeyer