🧩 第十一章 衍生:敏捷开发
📄 一句话概括

专栏讲的是 XP 那些做法当年被认为不合规矩——实测 5 项里 3 项今天已成标配、2 项是部分团队常规;流程的边界不是道德问题,是成本问题。

📝 本节和前面几节的关系

11.6 讲过 XP 的实践,这篇专栏讲它们当年为什么被禁、后来为什么放开。

一、当年被禁的理由

结对编程:两个人一台机器,浪费人力。 测试先行:测试是测试员的事,程序员写测试是本末倒置。 不断重构:改完的代码别乱动,动了出事谁负责。 不写详细设计书:没有设计书无法交接,人一走就断。

二、实测:今天 3 项成标配

测试先行、不断重构、不写详细设计书——这 3 项今天写进了默认流程。 结对编程、客户全程在场——2 项在部分团队是常规。 没有一个还停留在【被禁止】的状态。

三、为什么放开了

因为改代码变便宜了:编译器快了、有测试框架、有版本控制、发布不用刻盘。 当年的禁令有道理:那时候一次发布要几周,改错一次代价极大。 所以不是前人保守,是成本结构变了。

四、给今天的启示

今天认为【不合规矩】的做法,可能是成本还没降到那个程度。 反过来:今天流行的做法,成本一升也可能变回禁忌。 所以判断一项实践该不该做,先算它的成本,别先问它流不流行。

五、动手 Demo:过去不被允许的XP

列出 5 项当年被认为不合规矩的做法,标出它们今天的状态。 数一数有几项已成标配。

rows = [("结对编程", "部分团队常规"), ("测试先行", "已成标配"),
        ("不断重构", "已成标配"), ("客户全程在场", "部分团队常规"),
        ("不写详细设计书", "已成标配(够用即可)")]
now = sum(1 for a, b in rows if b.startswith("已成标配"))
print(len(rows), now, len(rows) - now)   # 5 3 2

实跑输出:

--------------------------------------------------------------------
过去不被允许的XP
--------------------------------------------------------------------

  专栏说 XP 的很多做法【过去不被允许】。实测今天的状态:

  做法               当年的理由                 今天
  -------------------------------------------------------------------
  结对编程           两个人一台机器浪费人力     部分团队常规
  测试先行           测试是测试员的事           已成标配
  不断重构           改完的代码别乱动           已成标配
  客户全程在场       客户只在验收时出现         部分团队常规
  不写详细设计书     没有设计书无法交接         已成标配(够用即可)

      当年不被允许的做法          5 个
      今天已成标配                3 个
      部分团队常规                2 个

  **5 个里 3 个已成标配**——当年被当成【不合规矩】的做法,今天写进了默认流程。
  **为什么当年不允许**:那时候改代码很贵(编译慢、没测试、发布要刻盘)。
  **现在允许了,是因为【改代码变便宜了】**——工具链、测试框架、版本控制。
  **所以流程的边界不是道德问题,是成本问题。**

实测:5 项里 3 项已成标配、2 项是部分团队常规,没有一项还在被禁。 为什么放开:改代码变便宜了(编译器、测试框架、版本控制、发布方式)。 所以流程的边界是成本问题,不是道德问题。

30 秒实验

  1. 找一项你现在觉得【不合规矩】的做法,算算它的成本到底在哪。
  2. 问问团队里最老的同事:你们当年为什么禁止某个做法。

常见误区

  1. 以为前人的禁令都是保守。当年的成本结构确实不支持。
  2. 以为流行的做法一定对。成本一变,结论就会翻。
自测三问(点开对答案) 1. 实测今天的状态如何? —— 5 项里 3 项已成标配(测试先行/不断重构/不写详细设计书),2 项部分团队常规。 2. 为什么后来放开了? —— 改代码变便宜了:编译器、测试框架、版本控制、发布方式都变了。 3. 这篇专栏的启示是什么? —— 判断一项实践该不该做,先算成本,别先问流不流行。

相关笔记