敏捷开发

关于软件开发模式的记录

传统软件开发模式

  1. 需要经历问题评估、计划解决方案、设计系统架构、开发代码、测试、部署和使用系统、维护解决方案等过程。
  2. 如瀑布流模式: 它是以文档为驱动,在整个开发过程中,开发人员根据需求文档进行开发,一切以文档为依据。

缺点

  1. 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
  2. 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
  3. 各个软件生命周期衔接花费时间较长,团队人员交流成本大。
  4. 在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。

软件开发的11种模式

敏捷开发(Agile Development)

什么是敏捷开发

  1. 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方式。
  2. 在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
  3. 它并不是一门技术,而是一种开发方式,是一种软件开发的流程。
  4. 作用指导我们用规定的环节去一步一步完成项目的开发。因为它采用的是迭代式开发,所以这种开发方式的主要驱动核心是人。

敏捷开发适用于

  • 客户不知道自己要啥的情况,这样的客户占绝大多数。因为客户不知道要啥,所以你需要不断帮客户弄明白他到底想要啥。换句话说,你需要和客户沟通,合作,倾听反馈,持续改进;
  • 竞争激烈的市场,这样的情况下,赶在竞争对手前交付一个不完美但至少能用的产品非常重要;
  • 快速变化的市场,你在埋头造一辆汽车的时候,客户已经想开飞机满天飞了,这就需要你能一步步的把汽车改成飞机,还能按时交付;
  • 适用于在一个地方办公的小团队,一般 10 个人以内。这样能使敏捷中主要的沟通方式「Face to Face」是可行的。

敏捷开发流程

敏捷开发实现方式

  • Scrum
  • XP

Scrum

项目角色

  • 产品负责人(Product Owner):主要负责确定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工作成果。
  • 流程管理员(Scrum Master):主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工作之间的沟通障碍,使得客户可以直接驱动开发。
  • 开发团队(Scrum Team):主要负责软件产品在Scrum规定流程下进行开发工作,人数控制在5~10人左右,每个成员可能负责不同的技术方面,但要求每成员必须要有很强的自我管理能力,同时具有一定的表达能力;成员可以采用任何工作方式,只要能达到Sprint的目标。

XP(Extreme Programming)

什么是XP

  • 极限编程(eXtreme Programming),是一种全新的、轻量级的、灵巧的软件开发方法,是一种软件工程方法学。它强调程序设计团队与业务专家之间的紧密协作、面对面的沟通(比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好的适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用。
  • XP的核心是沟通(Communication)、简单(Simplicity)、反馈(Feedback)、勇气(Courage)四大价值观,它们是XP的基础,也是XP的灵魂。

敏捷开发之XP

敏捷开发中XP与SCRUM的区别

  1. 迭代长度的不同

    • XP的一个Sprint的迭代长度大致为12周, 而Scrum的迭代长度一般为 2 4周.
  2. 在迭代中, 是否允许修改需求

    • XP在一个迭代中,如果一个User Story(一个用户需求)还没有实现, 则可以考虑用另外的需求将其替换,替换的原则是需求实现的时间量是相等的。
    • 而Scrum是不允许这样做的,一旦迭代开工会完毕, 任何需求都不允许添加进来,并有Scrum Master严格把关,不允许开发团队受到干扰
    • 在迭代中,User Story是否严格按照优先级别来实现
    • XP是务必要遵守优先级别的。 但Scrum在这点做得很灵活, 可以不按照优先级别来做

    Scrum这样处理的理由是:如果优先问题的解决者,由于其它事情耽搁,不能认领任务,那么整个进度就耽误了。 另外一个原因是,如果按优先级排序的User Story #6和#10,虽然#6优先级高,但是如果#6的实现要依赖于#10,则不得不优先做#10.

  3. 软件的实施过程中,是否采用严格的工程方法,保证进度或者质量

    • Scrum没有对软件的整个实施过程开出个工程实践的处方,要求开发者自觉保证。
    • 但XP对整个流程方法定义非常严格,规定需要采用TDD, 自动测试, 结对编程,简单设计,重构等约束团队的行为。