敏捷开发简述
1、敏捷开发简介
“敏捷”一词,解释为灵敏迅速、灵活。敏捷开发(Agile Programming)是时下流行的软件开发方法。
传统的软件开发模型,主要包含两种“瀑布型”、“螺旋型”。敏捷开发本身属于“螺旋型”的开发模型,并辅之以必要的实施过程。敏捷开发有两个重要模型,极限编程(eXtreme Programming、XP)、Scrum模型。XP模型,与其他模型的不同在于“结对编程”(即两个人在一个机器上同时开发程序),这在国内是几乎不可能的,没有听说过XP模型的案例。Scrum模型的一个显著特点就是响应变化,它能够尽快地响应变化,是比较常用的方式,案例是比较多。
| 敏捷开发宣言:
个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合同谈判 相应变化 胜过 遵循计划 虽然右项也具有价值,但我们认为左项具有更大的价值 |
2、Scrum过程讲解
Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战, 确保每天、每个阶段都朝向目标有明确的推进。
Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于 30 天后交付成果,团队每天用 15 分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除。
2.1、有关Scrum的几个名词
Backlog: 可以预知的所有任务,包括功能性的和非功能性的所有任务。
Sprint:一次跌代开发的时间周期,一般最多以30天为一个周期.在这段时间内,开发团队需要完成一个制定的Backlog,并且最终成果是一个增量的,可以交付的产品。
Sprint Backlog:一个Sprint周期内所需要完成的任务。
Scrum Master: 负责监督整个Scrum进程,修订计划的一个团队成员。
Tme-box: 一个用于开会时间段。比如每个Daily Scrum Meeting的Time-box为15分钟。
Sprint Planning Meeting: 在启动每个Sprint前召开。一般为一天时间(8小时)。该会议需要制定的任务是:产品Owner和团队成员将Backlog分解成小的功能模块, 决定在即将进行的Sprint里需要完成多少小功能模块,确定好这个Product Backlog的任务优先级。另外,该会议还需详细地讨论如何能够按照需求完成这些小功能模块。制定的这些模块的工作量以小时计算。
Daily Scrum Meeting:开发团队成员召开,一般为15分钟。每个开发成员需要向Scrum Master汇报三个项目:今天完成了什么?是否遇到了障碍?即将要做什么?通过该会议,团队成员可以相互了解项目进度。
Sprint Review Meeting:在每个Sprint结束后,这个Team将这个Sprint的工作成果演示给Product Owner和其他相关的人员。一般该会议为4小时。
Sprint Rtrospective Meeting:对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为3小时。
2.2、实施Scrum的过程简单介绍
1) 将整个产品的Backlog分解成Sprint Backlog,这个Sprint Backlog是按照目前的人力物力条件可以完成的。
2) 召开Sprint Planning Meeting,划分,确定这个Sprint内需要完成的任务,标注任务的优先级并分配给每个成员。注意这里的任务是以小时计算的,并不是按人天计算。
3) 进入Sprint开发周期,在这个周期内,每天需要召开Daily Scrum Meeting。
4) 整个Sprint周期结束,召开Sprint Review Meeting,将成果演示给Product Owner.
5) 团队成员最后召开Sprint Retrospective Meeting,总结问题和经验。
6) 这样周而复始,按照同样的步骤进行下一次Sprint.
3、敏捷开发一些看法
1)敏捷开发以人为核心,直接以用户需求作为驱动,易于接受需求的变化。以小的开发粒度来应对需求的变更,最小成本的满足与用户的互动。
2)敏捷开发的过程是不断改进的,敏捷团队可以根据具体情况构建自己的敏捷开发过程。
3)敏捷开发并不要求“精英个体”而是致力于构建“精英团队”。足够粒度的分解开发任务,用以保证人员的临时变化。倡导开发个体能够熟悉整个产品的开发方面,以避免人员流动造成技术缺失。
4)敏捷开发的开发者是一个不断学习的个体,需要掌握必要的开发技巧,如:移除重复代码、注释转换、去除代码异味、保持代码简洁、慎用继承、正确处理引用、分离数据库访问/UI/域逻辑、单元测试、测试驱动编程等。