知识卡片

技术债的金融隐喻与四种分类

普通读书笔记卡

内容

技术债概念源自Ward Cunningham 1992年的一场报告,指开发人员为加速开发、或因自身经验不足,在应该采用最佳方案时做出妥协,使用短期能加速开发的方案,从而在未来带来额外开发负担;最初的表述是”不是很正确的代码,我们推迟使它正确”。这个隐喻的精妙之处在于严格对应金融债务的运作机制:借贷(欠债)本身不是问题,按时还款(及时偿还技术债)就不会产生新问题;但一旦拖欠不还,”利息”就会累积——若长期不能偿还,累积的利息会让总债务膨胀到无法偿还的地步,最终不得不”申报破产”(对应软件领域的”技术破产”:累积的技术债达到无法偿还的程度,只能放弃该软件产品)。这个隐喻还揭示了技术债的一个反直觉本质:它不是纯粹的坏事——就像金融债务能加快资金周转、提高效益一样,小额的软件”欠债”也能提高开发速度、加快产品上市,只要及时偿还就不会产生问题;真正的危害只在”久拖不还”这一种情况下才会显现。技术债按来源分四类:代码债(开发时未遵守代码规范导致,来源包括静态分析工具发现的违规行为和不一致的编码风格);设计债(设计时未采用最优方案导致,来源包括设计坏味道和违背设计规则的行为,架构技术债ATD正是设计债的一种);测试债(测试环节产生,一般由测试缺乏、测试覆盖面不充分、测试设计不恰当导致);文档债(技术文档问题导致,包括缺少重要文档、文档质量差、文档未及时更新)。这四类分类的价值在于:它把”技术债”这个笼统的说法拆分成了四个可以分别定位、分别管理的具体维度,而不是一个模糊的整体评价。

参考来源

- 位置:《软件架构理论与实践》第19章《软件架构技术债》"19.2.1 技术债的定义"及"19.2.2 技术债的分类"节(源文件:_epub-src/OEBPS/text00159.html) - 结论依据:原文说明"技术债类似于金融领域的债务……若某人长期不能支付分期付款(或信用卡账单),则累积的利息会使得总债务变得巨大,以至于此人必须申报破产",并列出代码债、设计债、测试债、文档债四种类型及各自来源,直接支撑本卡片结论。 - 原始内容:技术债这一概念最初的描述是——"不是很正确的代码,我们推迟使它正确"……直到有一天根本无法偿还技术债,也就是说,累积的技术债达到无法偿还的地步,使其不得不放弃该软件产品,这种情况被称为"技术破产"。