7Software Engineering at Google

技术债务

技术债务管理

技术债务债务追踪重构策略渐进改进

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第7章:技术债务(Technical Debt)

一、导读

1.1 本章学习目标

第7章讲解技术债务——识别、追踪和管理技术债务。

本章的核心学习目标包括:

  • 理解技术债务的本质
  • 掌握技术债务的分类
  • 学会追踪和管理技术债务
  • 理解重构与债务偿还的关系

1.2 为什么本章如此重要

技术债务是软件工程的自然产物。完全不产生债务是不可能的,关键是管理和偿还。忽视技术债务会导致系统逐渐腐化,最终无法维护。

1.3 核心问题引导

什么是技术债务?它和 bug 有什么区别?

技术债务有哪些类型?

如何追踪和量化技术债务?

如何平衡新功能开发和技术债务偿还?


二、核心概念详解

2.1 技术债务的本质

技术债务 = 为了短期利益而做的次优技术决策

类比金融债务:
- 借债(技术债务)可以获得短期利益(快速交付)
- 但需要支付利息(维护成本增加)
- 需要偿还(重构、重写)

技术债务 vs Bug:
- Bug:代码没有按预期工作
- 技术债务:代码能工作,但难以维护/扩展

2.2 技术债务分类

按产生原因分类:

1. 故意债务(Deliberate)
   - 明知故犯,为了赶工期
   - "我们知道这不好,但先这样吧"
   - 需要追踪和计划偿还

2. 无意债务(Inadvertent)
   - 不知道更好的做法
   - "我们现在才知道应该这样做"
   - 需要培训和知识共享

按偿还难度分类:

1. 轻量债务
   - 命名不好、缺少注释
   - 容易发现和修复

2. 中等债务
   - 重复代码、过长方法
   - 需要重构

3. 重度债务
   - 架构问题、技术栈过时
   - 需要大规模重写

2.3 追踪技术债务

Google 的技术债务管理:

1. 代码注释标记
   // TODO(bugId): 描述
   // FIXME: 描述
   // HACK: 描述

2. Bug 追踪系统
   - 创建技术债务 Bug
   - 标记优先级和影响
   - 纳入迭代计划

3. 技术债务看板
   - 可视化所有债务
   - 追踪偿还进度
   - 按影响排序

4. 定期审查
   - 每个迭代审查债务
   - 分配偿还时间
   - 追踪趋势

2.4 偿还技术债务

偿还策略:

1. 童子军规则
   - "让营地比你来时更干净"
   - 每次修改代码时顺手改善

2. 专项偿还
   - 分配专门的迭代偿还债务
   - 通常 20% 的时间用于技术改进

3. 绞杀者模式
   - 逐步替换旧代码
   - 新功能用新代码实现

4. 预防债务
   - 代码审查关注债务
   - 自动化检测债务
   - 建立编码标准

平衡新功能 vs 债务偿还:
- Google 建议 20% 时间用于技术改进
- 太少:债务积累,系统腐化
- 太多:新功能交付慢

三、实战案例

3.1 案例一:技术债务追踪

技术债务清单:

| ID | 描述 | 类型 | 影响 | 优先级 | 状态 |
|----|------|------|------|--------|------|
| TD-001 | OrderService 过长(2000行) | 中等 | 高 | P1 | 计划中 |
| TD-002 | 缺少集成测试 | 中等 | 高 | P1 | 进行中 |
| TD-003 | 硬编码的配置值 | 轻量 | 中 | P2 | 待处理 |
| TD-004 | 使用已废弃的库 | 重度 | 高 | P1 | 计划中 |
| TD-005 | 重复的用户验证逻辑 | 中等 | 中 | P2 | 待处理 |

偿还计划:
- Sprint 1: 修复 TD-002(集成测试)
- Sprint 2: 开始 TD-001(拆分 OrderService)
- Sprint 3: 完成 TD-001,开始 TD-004

四、本章小结

技术债务:为短期利益做的次优决策。

分类:故意/无意、轻量/中等/重度。

追踪:代码注释、Bug 系统、看板、定期审查。

偿还:童子军规则、专项偿还、绞杀者模式。


五、思考与练习

列出你的项目中的前5个技术债务。

如何说服管理层投入时间偿还技术债务?

如何预防技术债务的产生?


7/8技术债务
0%