一些概念
敏捷开发宣言:
-
Individuals and interactions over processes and tools
-
Working software over comprehensive documentation
-
Customer collaboration over contract negotiation
-
Responding to change over following a plan
归纳:固定节奏、小步快跑、及时反馈、应对变化、快速交付
本质:以快速的增量和迭代方式进行软件开发
eXtreme Programming
Planning
-
倾听客户陈述,形成一组“用户故事(User Stories)” ,描述其输出、 特性、功能等,用户故事可以分为:所有用户故事,优先级高的用户故事,风险高的用户故事
-
按照价值或风险排序:客户为每个用户故事指定优先级(Priority)
-
XP团队评估各个用户故事,为其指定成本(Cost, 开发周数),若超过3 周,则拆分
-
将若干个用户故事指定为下一次发布的增量,确定发布日期
-
规划整体进度(project velocity):以怎样的速度开展项目
-
客户可以在开发过程中扩展新故事、去除原有故事、改变优先级、拆分等
Design
-
遵循KIS原则(Keep It Simple)
-
设计模型:面向对象方法,CRC卡片(Class-Responsibility-Collaborator)
-
遇到困难问题,创建“Spike Solutions”(探针原型)
-
对设计方案不断重构(Refactoring):
-
遵循用户故事的外特性要求
-
改善内部结构
-
消除bug
-
提高效率
-
提高易读性
-
Coding
-
在编码之前,根据用户故事设计单元测试用例
-
结对编程(Pair programming):两人一起编程,实时讨论、实时评审
-
测试驱动的开发(TDD):先写测试用例,再写代码
Pair programming
-
驾驶员(Driver):控制键盘输入的人 – 写设计文档,进行编码和单元测试等XP开发流程
-
领航员(Navigator):起到领航、提醒的作用 – 审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖程度;是否需要和如何重构;帮助驾驶员解决具体的技术问题
-
驾驶员和领航员不断轮换角色,不宜连续工作超过一小时;领航员要控制时间
结对编程(Pair programming)的好处:
-
在开发层次上,结对编程能提供更好的设计质量和代码质量,两人 合作能有更强的解决问题的能力
-
对开发人员自身来说,结对工作能带来更多的信心,高质量的产出 能带来更高的满足感
-
在心理上, 当有另一个人在你身边和你紧密配合,做同样一件事情 的时候, 你不好意思开小差, 也不好意思糊弄
-
在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地应对人员流动;因为一个人的知识已经被其他人共享
Pair programming
Testing
-
自动化单元测试(Unit test)
-
持续集成(Continuous Integration)
-
持续进行回归测试(Regression test)
-
验收测试(Acceptance test)
Scrum
基本过程
-
Product Owner组织会议将计划开发的产品分解成若干开发项(Product Backlog),该列表是有优先级的;该表中的开发项在没有被开发前是可以新增 或删除的(引入需求变更)
-
Product Backlog中的一个或几个任务项,是一次Scrum Sprint(Scrum冲 刺)要开发的任务;1个Sprint一般为2-4周;一旦Sprint启动,在开发完成前是 不允许变更需求的
-
在Sprint开始前,Scrum Master组织Scrum Team会议将Sprint的任务分解 为更小的开发单元(Backlog Tasks);Scrum Team成员的开发任务单元就是每个 Task
-
Sprint启动后,每天需要召开一次会议(Daily Scrum Meeting),一般不超 过15分钟,每人简短陈述3句话:上次Scrum例会后做了什么?遇到了什么问题? 下次Scrum例会前计划做什么?(注意:提出的问题在例会上不做任何讨论)
-
Sprint启动后,每天需要召开一次会议(Daily Scrum Meeting),一般不超 过15分钟,每人简短陈述3句话:上次Scrum例会后做了什么?遇到了什么问题? 下次Scrum例会前计划做什么?(注意:提出的问题在例会上不做任何讨论)
-
上述Sprint过程循环进行,直到Product Backlog列表空了为止
每日站会
-
团队成员站着开会 — 强迫在短时间(15分钟)内高效率讨论问题,保持 注意力集中
-
强迫每个人向同伴报告进度, 迫使大家把问题摆在明面上,如果每日站 会定于早上开会的话,则每个团队成员应该回答下面问题:
-
我昨天做了什么
-
我今天要做什么
-
我碰到了哪些问题
-
-
用简明的图表展现整个项目的进度,这个图最好放在大家工作的环境 中,或者每天传达给各个成员