做开发的同学对以下场景应该不会陌生:
- 为了赶项目进度,单元测试代码就来不及写了,打算以后再补;
- 随着需求的变化,原本的架构设计已经不能很好地满足新的需求,但是又不想对架构做改动,于是就绕开架构设计增加了很多代码;
- 一个旧的系统,没有文档没有注释,技术老旧,难以维护。
这些问题,如果没有及时修正,就会导致代码臃肿、系统效率低下,难以维护,也难以新增功能。
有一个很形象的名词叫“技术债务”,用来形容上面这些架构或代码上的质量问题。
所以今天的课程,我将带你一起来了解一下什么是技术债务,它形成的原因是什么,以及怎么来管理技术债务。
什么是技术债务?
我们在学项目管理金三角时,有一张表示软件质量与时间、成本、范围关系的三角形图,也特别解释了为什么质量要放在三角形中间,因为质量往往是其他三个因素平衡后结果的体现。
范围不减,成本不增加,还想节约时间走捷径,就会影响到质量。这个“质量”,不止是产品质量,还有架构质量和代码质量。这种对质量的透支,就是一种债务。而技术债务,就是软件项目中对架构质量和代码质量的透支。
技术债务确实是个形象生动的比喻,让你意识到它是和成本挂钩的,而且技术债务也有金融债务的一些特点,比如有利息,再比如技术债务也有好的一面。
技术债务是有利息的
债务的“利息”,就是在后面对软件做修改的时候,需要额外的时间成本。
假设我们做一个项目,在刚开始时,架构良好代码整洁,添加一个功能可能需要 4 天时间。随着项目不断维护,因为走捷径积累了一些技术债务,这时候再开发一个同样复杂度的功能就需要 5 天时间了。
这多出来的 1 天,就是技术债务造成的利息。因为你需要时间去梳理现在臃肿的代码,以找到合适的位置添加代码;修改代码后还可能导致原有系统不稳定,需要额外的时间去修复系统不稳定的问题。
技术债务不一定都是坏的
现实中,如果是贷款买辆豪车,一方面要支付利息,一方面车子一直在贬值,这不一定是个良性的债务;但如果你贷款买房子,虽然支付了利息,但如果房子升值,这个债务其实是良性的。
在软件项目中,也经常会刻意的欠一些技术债务,提升短期的开发速度,让软件能尽快推出,从而抢占市场;还有像快速原型开发模型,通过欠技术债务的方式快速开发快速验证,如果验证不可行,甚至这笔技术债务都不需要偿还了。
但技术借债也一样不能是无限制的,因为借债越多,利息