1. 敏捷-高效软件开发之道

个体和交互胜过过程和工具 可工作的软件胜过面面俱到的文档 客户协作胜过合同谈判 响应变化胜过遵循计划 虽然右项也有价值,但我们认为左项具有更大的价值。 敏捷宣言作者,2001年版权所有。

敏捷开发就是在一个高度协作的环境中,不断地使用反馈进行自我调整和完善。

2. 态度决定一切

  • 1.做事:指责不会修复 bug
  • 2.欲速则不达:拙劣的代码工人会这样不假思索地改完代码,然后快速转向下一个问题。不要坠入快速的简单修复之中。要投入时间和精力保持代码的整洁、敞亮。
  • 3.对事不对人:引导性地提出一个疑问,让他们自己意识到问题。你不需要很出色才能起步,但是你必须起步才能变得很出色。 - 设定最后期限;设立仲裁人;支持已经做出的决定
  • 4.排除万难,奋勇前进:

3. 学无止境

  • 5.跟踪变化
  • 6.对团队投资:一个学习型的团队才是好的团队
  • 7.懂得丢弃:学习新东西,抛弃旧的东西
  • 8.打破沙锅问到底:多问为什么
  • 9.把握开发节奏:许多的敏捷技巧来源于时间盒——设定一个短时的期限,为任务设定不能延长的最终期限。

4.交付用户想要的软件

  • 10.让客户做决定:开发者(及项目经理)能做的一个最重要的决定就是:判断哪些是自己决定不了的,应该让企业主做决定
  • 11.让设计指导而不是操纵开发。设计满足需求即可。CRC(类—职责—协作)卡片:类名;职责(它应该做什么);协作者(要完成工作与其他什么对象一起工作)
  • 12:根据需要选择技术
  • 13.保持可以发布:已提交的代码应该随时可以行动
  • 14.提早集成,频繁集成
  • 15.提早实现自动化部署
  • 16.使用演示获得频繁反馈
  • 17.使用短迭代,增量发布
  • 18.固定的价格就意味着背叛承诺

5.敏捷反馈

  • 19.守护天使:编写能产生反馈的代码:测试是可重复的;测试边界条件;不要放过失败的测试用例
  • 20.先用它再实现它:TDD
  • 21.不同环境就有不同问题
  • 22.自动验收测试
  • 23.度量真实的进度:待办
  • 24.倾听用户声音

6.敏捷编码

  • 25.代码要清晰地表达意图。清晰度应该排在效率之前
  • 26.用代码沟通
  • 27.动态评估取舍
  • 28.增量式编程
  • 29.保持简单。开发可以工作的、最简单的解决方案
  • 30.编写内聚的代码:内聚性用来评估一个组件(包、模块或配件)中成员的功能相关性。内聚程度高,表明各个成员共同完成了一个功能特性或是一组功能特性。内聚程度低的话,表明各个成员提供的功能是互不相干的。
  • 31.告知,不要询问:面向过程的代码取得信息,然后做出决策。面向对象的代码让别的对象去做事情。命令与查询相分离模式
  • 32.根据契约进行替换: is-a has-a

7.敏捷调试

  • 33 记录问题解决日志
  • 34 警告就是错误
  • 35 对问题各个击破
  • 36 报告所有的异常:处理或是向上传播所有的异常
  • 37 提供有用的错误信息

8.敏捷写作

  • 38 定期安排会面时间:站立会议
  • 39 架构师必须写代码
  • 40 实行代码集体所有制
  • 41 成为指导者
  • 42 允许大家自己想办法
  • 43 准备好后再共享代码
  • 44 做代码复查
  • 45 及时通报进展与问题。发布进展状况、新的想法和目前正在关注的主题。不要等着别人来问项目状态如何。

9.尾声:走向敏捷

  • 9.1 只要一个新的习惯
  • 9.2 拯救濒临失败的项目
  • 9.3 引入敏捷:管理者指南:从立会开始(见第148页习惯38)。这可以让团队有机会进行彼此讨论,并对一些重大问题达成共识。把之前相对孤立的架构师带到团队中,并让他们参与到日常开发工作(见第152页习惯39)。开展非正式的代码复查(见第165页习惯44),并做出计划,让客户与用户也参与到项目中来(见第45页习惯10)。
  • 9.4 引入敏捷:程序员指南举例来说,从单元测试开始是一个不错的选择。可以先针对自己的代码开始使用。在短时间之内(几周甚至更少),就可以看到代码质量提升了——减少了错误的数目,提高了质量,健壮性也有所提升。你下午5点就可以下班回家,而且所有的任务都可以顺利完成——不必担心半夜被电话叫醒,去修复bug。旁边的开发人员想知道你是如何做到的,而且消息也渐渐传开了。整个团队现在都想尝试这些新奇的习惯,而不需要你努力去说服他们。