跳到主要内容

敏捷开发模型及其原则

什么是敏捷开发

敏捷开发(Agile development)通常指敏捷软件开发模式,是一种应对快速变化需求的一种软件开发模式,描述了一套软件开发的价值和原则。

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

在敏捷开发模式中,自组织的跨功能团队在紧密的协作中发掘使用者或客户的需求以及优化解决方案,同时也强调适度的计划、迭代开发、提前交付与持续集成,并且鼓励快速与灵活地面对开发与变更。

经过不断的发展,目前使用最广泛的敏捷软件开发框架是 Scrum 与 Kanban。

敏捷软件开发宣言

实际上,“敏捷”(Agile 或 agile)一词源自于“敏捷软件开发宣言”(Manifesto for agile software development),该宣言定义了相关的价值和原则。下面是 2001 年发表的《敏捷软件开发宣言》的内容。

我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人,由此我们建立了如下价值观:

  • 个体和互动 高于 流程和工具
  • 工作的软件 高于 详尽的文档
  • 客户合作 高于 合同谈判
  • 响应变化 高于 遵循计划

也就是说,尽管右项有其价值,但我们更重视左项的价值。

敏捷软件开发原则

  • 对我们而言,最重要的是通过尽早和不断交付有价值的软件满足客户需要。
  • 我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。
  • 经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
  • 业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
  • 围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
  • 在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
  • 可以工作的软件是进度的主要度量标准。
  • 敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。
  • 对卓越技术与良好设计的不断追求将有助于提高敏捷性。
  • 简单——尽可能减少工作量的艺术至关重要。
  • 最好的架构、需求和设计都源自自我组织的团队。
  • 每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。

敏捷软件开发方法

敏捷软件开发方法支持广泛的软件开发生命周期。有的专注于实践(例如 极限编程、务实编程,敏捷建模),而有的专注于管理工作流程(例如 Scrum、看板)。有的支持需求规范和开发(例如 FDD)的活动,而另一些则试图涵盖整个开发生命周期(例如 DSDM、RUP)。

流行的敏捷软件开发框架包括(以下列举常见的方法):

  • 自适应软件开发(ASD)
  • 敏捷建模
  • 敏捷统一过程(AUP)
  • 纪律敏捷交付
  • 动态系统开发法(DSDM)
  • 极限编程(XP)
  • 功能驱动开发(FDD)
  • 精益软件开发
  • 看板
  • 快速应用程序开发(RAD)
  • 并列争求法(Scrum)
  • Scrumban

敏捷开发的优缺点

敏捷开发具有如下优点:

  • 强调“响应变化”。在做出开发计划后,计划并不是需要唯一遵循的指南。开发过程会因客户需求的改变而出现改变,这时就需要产品经理不断更新产品需求,开发团队中的成员主动配合,使迭代过程可以根据需求变化灵活调整。
  • 使资源利用最大化。瀑布式开发要求每个人各司其职,但敏捷开发要求大家能够互相信任、互相帮助,合作开发。在某一位置出现空缺时,其他人可以暂时代工,这一现象有效地使资源利用效率最大化。
  • 反馈及时。与瀑布式开发在整个生命周期后期才能得到反馈的状态相比,敏捷开发在每个迭代后都能交付可独立运行的成果。不论是团队对迭代成果进行测试,还是从客户那里,都能得到及时的反馈。
  • 短周期。每一个迭代就是一个周期,因此交付成果的效率得到显著提高。
  • 客户参与。在每个迭代结束后都能将迭代的成果交付到客户手中,客户可以及时跟踪到最新的产品状态,且参与到产品开发中去。

同时,敏捷开发也存在一些缺点:

  • 忽视文档的重要性。敏捷开发认为工作的软件高于详尽的文档,在注重成员之间沟通的同时,过于忽视文档的重要性,这会在团队中增添新人时产生一些不必要的、繁琐的沟通环节。
  • 开发成本。由于敏捷开发是迭代式开发,在每个迭代中都有一个小型的、完整的开发流程,因此开发成本高。
  • 需求分析失误。在需求分析阶段,一旦需求分析出现问题,会导致接下来的工作及开发流程都会出现方向上的偏差。