ThoughtWorks文集精选版 - 5篇敏捷实践文章
概述
本文集从《ThoughtWorks文集》精选5篇文章编撰而成,是敏捷入门手册。文章共同点是介绍最根本、最易施行、又能立竿见影的敏捷实践,帮助读者从持续集成和测试入手,建立项目健康保障体系。
核心文章摘要
1. 对象健身操 - Jeff Bay
九步迈向优秀软件设计
作者给出”九诫”作为练习规则,在1000行代码的微型项目中严格实践,提升面向对象编程和重构能力:
- 方法只使用一级缩进 - 每个方法只做一件事,嵌套控制结构意味着同时做多件事
- 拒绝使用else关键字 - 用多态、策略模式、卫语句和提前返回替代
- 封装所有的原生类型和字符串 - 使用小对象(如Hour、Money)提高可维护性
- 一行代码只有一个”.”运算符 - 遵循迪米特法则,避免对象间过度耦合
- 不要使用缩写 - 抵制类名、方法名缩写诱惑
- 保持实体对象简单清晰 - 类不超过50行,包不超过10个文件
- 任何类中的实例变量不要超过两个 - 降低类的内聚性
- 使用一流的集合 - 包含集合的类不能再有其他成员变量
- 不使用任何Getter/Setter/Property - 让对象自己管理自己的行为
关键洞察:优秀设计背后的核心概念其实并不高深——内聚性、松耦合、零重复、封装、可测试性、可读性以及单一职责。困难在于如何付诸实践。
2. 项目生命体征 - Dave Farley
如何运用沟通技巧获悉项目健康情况
介绍适用于敏捷项目的度量标准和展现方式:
| 度量维度 | 信息指示器 | 用途 |
|---|---|---|
| 范围增量图 | 燃尽图 | 发现瓶颈 |
| 交付质量 | 缺陷数量图 | 监控质量问题 |
| 预算燃尽 | 预算燃尽图 | 跟踪资源消耗 |
| 开发状态 | 故事板与故事卡 | 可视化当前工作 |
| 团队心情 | 团队心情图 | 关注团队状态 |
关键原则:度量数据是用来衡量软件质量和测试成果的,而不是用来考核个人的。
3. 一键发布 - Dave Farley
全生命周期的持续集成
持续集成覆盖范围从开发阶段延伸至整个软件生命周期:
持续集成管道设计:
- 提交测试门:单元测试 + 冒烟测试,快速失败
- 验收测试门:端到端功能测试,证明满足业务需求
- 部署准备阶段:标准服务器镜像、自动化配置
关键实践:
- 将构建或部署脚本分成多个部分,每个只完成一个具体任务
- 使用受控的二进制文件仓库,保存历史版本
- 自动部署流水线,消除人为错误
核心观点:持续集成在消除人为错误方面效果显著,不但可以提高生产效率,还能提高交付质量,降低交付压力。
4. 企业Web应用中的敏捷测试和瀑布测试 - Kristan Vingrys
测试生命周期对比
| 测试类型 | 敏捷标准 | 瀑布特点 |
|---|---|---|
| 单元测试 | 100%自动化,纳入持续构建 | 不关注,随意为之 |
| 功能测试 | 90%以上自动化 | 测试团队主导 |
| 探索性测试 | 关键测试阶段 | 没有此分类 |
| 性能测试 | 尽早启动 | 项目尾声才做 |
测试角色分配:
- 敏捷项目:所有团队成员都参与测试
- 瀑布项目:测试人员主导
测试环境要求:
- 开发环境:集成+构建+测试 ≤ 15分钟
- 系统集成环境:以天计部署频率
- 试机环境:与产品环境镜像一致
5. 实用主义的性能测试 - James Bull
性能需求驱动的性能测试策略
性能测试四要素:需求、度量数据、沟通、流程
需求采集要点:
- 要度量什么:最大吞吐量、给定吞吐量下的响应时间、伸缩性、可靠性
- 谁来决定:关注性能的客户
- 如何设定目标:分析用户数量、使用模式、UI响应时间
运行测试策略:
- 频繁进行:性能测试本质需要长时间运行
- 环境模拟:尽量模拟生产环境,或至少保持相对比例一致
- 数据库规模:与生产数据规模相当或更大
沟通机制:
- 定期会议:每周与关注性能的客户开会
- 展示方式:网站展示最新测试结果,而非邮件报告
- 异常优先:只讨论异常之处,正常结果无需每次都报
核心洞察总结
敏捷测试 vs 瀑布测试的关键差异
| 维度 | 敏捷项目 | 瀑布项目 |
|---|---|---|
| 测试时机 | 尽早启动,贯穿全程 | 等待前阶段完成 |
| 测试自动化 | 全力追求100% | 部分自动化 |
| 测试责任 | 全员参与 | 测试人员主导 |
| 缺陷修复 | 快速迭代修复 | 后期集中修复 |
持续集成的价值
- 消除人为错误 - 自动化流程减少手工操作
- 快速反馈 - 问题早发现早解决
- 可重复部署 - 标准化的构建和部署过程
- 二进制文件管理 - 历史版本可追溯
性能测试的流程化
- 项目启动阶段:识别关注性能的客户,启动需求采集
- 开发阶段:编写性能测试脚本,逐步增加覆盖
- 每周循环:与客户讨论需求,展示测试结果
- 关键:性能测试必须与开发同步,不能等到项目结束
与其他知识的关联
- 梦断代码 - 开源软件开发故事,与敏捷实践相关
- Scrum敏捷软件开发 - Mike Cohn的经典敏捷著作
- 用户故事与敏捷方法 - 用户故事在敏捷中的应用
- 实现模式 - Kent Beck的测试驱动开发实践
可行动点
- 对象健身操练习 - 在小项目中实践九诫规则
- 建立项目健康看板 - 使用范围增量图、缺陷趋势图等度量
- 构建持续集成管道 - 从提交测试门开始,逐步扩展到验收测试
- 性能测试左移 - 项目启动时就确定性能需求
- 测试自动化策略 - 单元测试100%自动化,功能测试90%+