ThoughtWorks 文集 - 敏捷开发最佳实践精选

本书从《ThoughtWorks 文集》13篇文章中精选5篇,涵盖持续集成、项目度量、测试策略、面向对象设计等核心敏捷实践。

核心内容

1. 对象健身操 - 九步迈向优秀软件设计(Jeff Bay)

作者提出9条规则来提升面向对象设计质量:

  1. 方法只使用一级缩进 - 每个方法只做一件事,避免多层嵌套控制结构
  2. 拒绝使用 else 关键字 - 用卫语句、提前返回、策略模式替代复杂条件分支
  3. 封装所有原生类型和字符串 - 用领域对象(如 Hour、Money)替代裸类型参数
  4. 一行代码只有一个”.”运算符 - 遵守迪米特法则,减少对象间耦合
  5. 不要使用缩写 - 保持类名方法名简洁可读
  6. 保持实体对象简单清晰 - 类不超过50行,包不超过10个文件
  7. 任何类中实例变量不超过两个 - 高内聚,单一职责
  8. 使用一流的集合 - 集合类只包含集合,不含其他成员变量
  9. 不使用任何 Getter/Setter/Property - 彻底封装,“Tell, don’t ask”

2. 项目生命体征 - 敏捷项目度量(Dave Farley)

5个关键度量指标:

  • 项目范围增量图 - 追踪已完成的故事/特性数量,发现瓶颈
  • 交付质量 - 缺陷数量趋势,越早发现越便宜
  • 预算燃尽 - 剩余工作量 vs 时间
  • 当前开发状态 - 故事板与故事卡
  • 团队感觉 - 团队成员情绪状态

3. 一键发布 - 全生命周期持续集成(Dave Farley)

持续集成管道五阶段:

  1. 提交测试 - 快速失败,单元测试+冒烟测试
  2. 验收测试套件 - 端到端功能验证
  3. 部署准备 - 环境基线化,标准化配置
  4. 后续测试 - 性能测试、集成测试可选
  5. 部署到生产 - 自动化部署流程

关键原则:

  • 二进制文件统一管理,避免重复编译
  • 配置信息版本控制,代码与配置分离
  • 每一步都自动化,减少人为错误

4. 企业Web应用中的敏捷测试 vs 瀑布测试(Kristan Vingrys)

敏捷测试特点:

  • 测试阶段可重叠,无需严格准入标准
  • 单元测试和功能测试是重点
  • 100%自动化目标
  • 所有团队成员参与测试

测试类型与标准:

  • 单元测试: 100%自动化,>90%覆盖率
  • 功能测试: 90%+自动化
  • 探索性测试: 结构化的随机测试
  • 集成测试: 100%自动化
  • 性能测试: 容量、负载、压力三类
  • 用户验收测试(UAT): 业务代表认可

5. 实用主义的性能测试(James Bull)

性能测试四要素:需求、数据、沟通、流程

关键建议:

  • 性能需求要与客户共同确定
  • 从项目一开始就进行性能测试
  • 每周运行全套性能测试
  • 用mock/stub替代第三方系统
  • 测试环境与生产环境按比例模拟

核心观点

  • 持续集成是敏捷项目的基石,越早发现问题修复成本越低
  • 面向对象设计需要刻意练习,9条规则是有效训练方法
  • 性能测试应贯穿整个项目周期,而非最后阶段
  • 测试自动化程度直接决定敏捷项目的质量保障能力