技术负债就好比修改和扩展软件系统,每当添加新功能时,需要付出的额外努力就好像是债务利息一样。那么身为技术开发者,该如何偿还技术负债?



作者 | Martin Fowler

译者 | 弯月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

软件系统常常建立在内部质量有缺陷的代码之上,因此比理想情况下更难修改和扩展系统。技术负债是Ward
Cunningham提出的一个比喻,形容这个问题就像金融债务一样,添加新功能时,需要付出的额外努力就好像债务利息。

 



 


假设我的代码库中有一个混乱的模块结构。此时,我需要添加一个新功能。如果这个模块结构清晰,那么我只需要4天时间就可以添加好这个功能,但是如今这个模块的结构很混乱,所以我需要6天时间。多出来的这两天就是债务利息。

 


关于债务的这个比喻最吸引我的地方在于,它让我思考如何处理这个问题。假设我可能需要5天时间来清理这个模块化的结构,改好不健全的功能,这就相当于支付本金。如果只有这个功能需要用到这个模块,那么就得不偿失,因为我总共需要9天时间,如果我继续容忍这个模块的话只需要6天。然而,如果有两个相似的功能都用到了这个模块,那么我肯定会首先改好这个模块来加快速度。

 


如此说来,听起来这是个简单的数字问题,凡是有电子表格的经理都应该能够做出很好的选择。遗憾的是,我们并不能很好地衡量我们的生产力,因此这些成本都无法客观地衡量。我们可以估算完成一个功能需要多长时间,我们需要估算做新功能的时间(在改好模块后的情况下),以及改好这个模块的时间。然而,我们的估算的准确性非常低。

 


鉴于此,通常我们的做法是:背负着负债继续做新功能,并逐步支付本金。在做第一个功能的时候,我会花额外的几天时间来修复一些不健全的功能。这可以将未来的利息降低到一天。虽然这之后我们仍然需要花费额外的时间,但是这些代码附带的负债会降低。这种逐步改进的好处在于,如果我们频繁地改动某个有待修改的负债,那么就证明这些代码正是最需要被清理的区域。

 


这种用支付利息代替支付本金的方式,可以帮助我们决定优先解决哪个负债。假设有一个非常可怕的代码库,修改这个代码库简直就是一个噩梦,如果我没有必要动这个代码库,那就不是个问题。只有当我用到这部分软件时,才需要支付利息(这是这个比喻与金融上的负债不同的地方,因为金融的利息支付是由时间决定的)。因此,我们可以不必理会那些稳定的负债。相比之下,活跃度非常高的区域需要非常及时地修改,我们应该采取零容忍的态度,因为这部分债务的利息非常高。这一点非常重要,因为开发人员往往只知道一味地更改代码,却不关注内部质量的时候,这些负债将不可避免地积累起来——代码变更越多,风险就越大。

 


有时,这种债务的比喻也可以判断是否应该忽略内部质量。关键在于我们需要付出时间和精力才能阻止负债的积累。如果有些新功能非常迫切,那么也许我们不得不继续背负债务,只有等到将来再来处理这笔负债。

 


然而,大多数时候我们的这种分析做得都不好。另一方面,技术负债的影响非常快,会迅速拖慢新功能开发的速度。不断积累负债的团队最终都会被自己的债务搞得一塌糊涂,大幅延迟交付,所以还不如趁早努力提高内部的质量。这个比喻往往会让人误解,因为这种发展趋势与金融贷款并不完全相同。

 

人们经常会争论是否应该将不同种类的质量问题视为债务。我觉得我们应该考虑这些债务是有意造成的,还是一时不小心造成的。

 



 

原文链接:https://martinfowler.com/bliki/TechnicalDebt.html

本文为 CSDN 翻译,转载请注明来源出处。

程序员转行学什么语言?

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
<https://edu.csdn.net/topic/ai30?utm_source=csdn_bw>

 

【END】




6月29-30日,2019以太坊技术及应用大会特邀以太坊创始人V神与以太坊基金会核心成员,以及海内外知名专家齐聚北京,聚焦前沿技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。
扫码即享优惠购票!



 热 文 推 荐 

☞ 开源“大地震”下,华为如何复制 Google 模式?
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650722391&idx=1&sn=1b1e7333acb3677475b74d05f4a59538&chksm=bea6a18489d12892048eece0bfd93038518c8466795a0213e484c86d59250ec3386d14e7eb6c&scene=21#wechat_redirect>

☞ 微软删除最大的公开人脸识别数据集,只因员工离职?!
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650722391&idx=2&sn=f5b374fa3e2340763bfa1999451bf138&chksm=bea6a18489d1289201f8b059120ac9d0efa9c851243f4d1fd1e9c98d1e349db3437c4979b57a&scene=21#wechat_redirect>

☞仿真技术为“工业 4.0”插上想象的翅膀
<http://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650722391&idx=3&sn=d2f182ab1b82b77a19b66baf4b35c843&chksm=bea6a18489d128929ba8ba22a3383046ae7789d04475850619dbb3c9b31d642628cd0faa2c8a&scene=21#wechat_redirect>

☞ 9 年前他用 1 万个比特币买了两个披萨, 9 年后他把当年的代码卖给了苹果,成为了 GPU 挖矿之父
<http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=2651011547&idx=1&sn=c1edeb322b2f5ae4dee029f81f4f3e67&chksm=8bad8a2cbcda033a216b7ebc9a3e02c34324ca1dce4a1acefd8bb5a3aa1fe0a155ba84a86b60&scene=21#wechat_redirect>

☞ 17 岁的程序员告诉你关于编程的 7 个重要教训!
<http://mp.weixin.qq.com/s?__biz=Mzg3MDA4NDkxMQ==&mid=2247484025&idx=1&sn=86464aa148f90de89ed0ebcdb3c5ced4&chksm=ce927a39f9e5f32f277b0b880a7a3a8f7420848226cfddf76c78d528761cad78c5171662a1b3&scene=21#wechat_redirect>

☞ Bert时代的创新:Bert在NLP各领域的应用进展 | 技术头条
<http://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247505634&idx=1&sn=34e163b399a3fcb9a899cb72aeef1bab&chksm=e99ee51bdee96c0d17695cfd83e5dbcc8467f3d3358c87461416c69d13473c775afbb29405ea&scene=21#wechat_redirect>

☞ Lambda 表达式有何用处?
<http://mp.weixin.qq.com/s?__biz=MzA3MjY1MTQwNQ==&mid=2649828265&idx=1&sn=a4d79825ffa1d19f4b70be1e66de6554&chksm=871e8c4bb069055d3d7d37ae11ddd104fe8127263dd8ea71b32c33f0c8a5d6c031b616dac485&scene=21#wechat_redirect>

☞ Python编写循环的两个建议 | 鹅厂实战
<http://mp.weixin.qq.com/s?__biz=MzU5MjEwMTE2OQ==&mid=2247486644&idx=1&sn=280696b427b1ba49575d7d357fc84b8e&chksm=fe25a6eac9522ffcc43d4ea442211780b1772a4eda2f163ceec42420c9e0a7cf80655a9e4205&scene=21#wechat_redirect>

☞ 漫威金刚狼男主弃影炒币了?
<http://mp.weixin.qq.com/s?__biz=MzU2MTE1NDk2Mg==&mid=2247495860&idx=1&sn=698b80912992b6e6c3340668b05f0d35&chksm=fc7fae49cb08275f733afc16716dff21def4448930e42813f41ea85b1654f586619069dc85c2&scene=21#wechat_redirect>

☞“是!互联网从此没有 BAT!”
<http://mp.weixin.qq.com/s?__biz=MzA5MjcxNjc2Ng==&mid=2650560116&idx=1&sn=f9e86fa3e7b15624177b29ef1a785be4&chksm=88601dc5bf1794d30fd595d413491da189584b44fd2b2e5e40c665e58760e162616585811647&scene=21#wechat_redirect>

点击阅读原文,精彩继续。

你点的每个“在看”,我都认真当成了喜欢

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信