敏捷开发有什么好处

软体开发方法一直处在不断发展过程中。在诸多方法中,敏捷开发以其能持续满足不断变化的使用者需求正在受到越来越多人的重视,从中小专案开始进入大型开发专案,近几年来上升势头明显。那么,敏捷开发有什么好处呢?

敏捷式开发(Agile Development)是近来时常耳闻的一个名词,我们或多或少对于这个名词有些微的概念,但是却又很难具体的描述出一个全面性的观点来。原则上敏捷式开发主要的精神在于较短的开发循环(建立在反复式开发方式上)以及渐进式开发与交付。换句话来说,专案的成果,包含计划、各类的需求细节、设计等都会随著专案的进行而渐渐完整,而非在一开始将所有的计划与需求拟定完成。

在敏捷式开发中有个很重要的观点是笔者很感兴趣的,它认为塑模(Modeling)的目的在于增加开发者了解软体的程度,进而使得软体更接近于使用者的需求,而非使用塑模之后产生的文件。

The purpose of modeling (Sketching UML,…) is primarily to understand,not to document.[Apply UML and Patterns,3/e]

换句话说,它希望开发者使用塑模的时机,是当使用这个技术有助于开发者更了解被开发的软体时才使用,例如某些具关键性的议题或者高风险性的项目,而非不管三七二十一的将软体所有范围的设计都加以塑模留下文件。

 

在软体工业界,敏捷开发已成为众多高效开发团队的制胜之道。在欧美软体企业中,有近半数企业已采用敏捷方法进行开发,而近几年受软体外包和外企的带动,敏捷开发在中国也出现了日渐普及的态势,如腾讯内部几乎所有的开发团队都在实施敏捷方法。敏捷开发的流行绝非偶然,其最大的推动力是采用这种方法所能带来的受益。相关统计表明,敏捷开发可以将效率提高3~10倍,软体的质量也有更加可靠的保证; 同时,还给团队内的每个成员提供了良好的发展机会,技术和合作水平都能得到相应提高。当然,敏捷的成功前提是其方法本身的适用性和团队对它的深入理解和合理运用。
 
敏捷开发由几种轻量级的软体开发方法组成,包括极限程式设计、Scrum、精益开发(Lean Development)、动态系统开发方法、特征驱动开发(Feature Driver Development)、水晶开发(Cristal Clear)等等。所有这些方法都具有以下共同特征,它们也是敏捷开发的原则:

agile umbrella visual paradigm的圖片搜尋結果

  1. 迭代式开发。即整个开发过程被分为几个迭代周期,每个迭代周期持续的时间一般较短,通常为1到6周
  2. 增量交付。产品是在每个迭代周期结束时被逐步交付使用,每次交付的都是可以被部署、能给使用者带来即时效益和价值的产品。
  3. 开发团队和使用者反馈推动产品开发。敏捷开发方法主张使用者能够全程参与到整个开发过程中。这使需求变化和使用者反馈能被动态管理并及时整合到产品中。
  4. 持续整合。新的功能或需求变化总是尽可能频繁地被整合到产品中。有些是在每个迭代周期结束的时候整合, 有些则每天都在这么做。
  5. 开发团队自我管理。人是敏捷开发的核心。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。

敏捷开发的优势:
满足使用者不断变化的需求是软体开发的长期无法解决的难题之一,经典的瀑布模式在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。敏捷方法满足需求的办法主要通过迭代。在每一次迭代周期结束时,都能交付使用者一个可用的、可部署的系统,使用者使用并体验该系统并反馈意见,在随后的迭代周期这些意见和需求的其他变化一起在产品中实现和整合。每次迭代周期应尽可能短,以便能及时地处理需求变化和使用者反馈。
 
敏捷开发方式能给企业和使用者带来以下好处:

  1. 精确。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿著直线不断往前走。然而当专案到达终点时,使用者通常会发现那已经不是他们想去的地方。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。
  2. 质量。敏捷方法对每一次迭代周期的质量都有严格要求。一些敏捷方法如极限程式设计等,甚至使用测试驱动开发(test-driven development),即在正式开发功能程式码之前先开发该功能的测试程式码。这些都为敏捷专案的整个开发周期提供了可靠的质量保证。
  3. 速度。敏捷团队只专注于开发专案中当前最需要的、最具价值的部分。这样能很快地投入开发。另外,较短的迭代周期使团队成员能迅速进入开发状态。
  4. 丰厚的投资回报率。在敏捷开发过程中,最具价值的功能总是被优先开发,这样能给客户带来最大的投资回报率。
  5. 高效的自我管理团队。敏捷开发要求团队成员必须积极主动,自我管理。在这样的团队中工作,每个团队成员的技术能力、交流、社交、表达和领导能力也都能得以提高。

主要的敏捷方法:

敏捷开发方法是一组开发方法的统称,主要包括以下几种:
极限程式 (XP) 设计其主要目的是降低需求变化的成本。它引入一系列优秀的软体开发方法,并将它们发挥到极致,结对程式设计(pair-programming)就是其中比较知名的方法之一。除此之外, 其核心做法还有小规模、频繁的版本释出、短迭代周期、测试驱动开发、持续整合、每日站立会议、共同拥有程式码、系统隐喻等。

extreme programming的圖片搜尋結果

Scrum是一个敏捷开发框架,它由一个开发过程、几种角色以及一套规范的实施方法组成。在Scrum中,产品需求被定义为产品需求积压(product backlogs)。所有的产品需求积压都是从一个简单的想法开始,并逐步被细化,直到可以被开发的程度。Scrum将开发过程分为多个Sprint周期,每个Sprint代表一个2~4周的开发周期,有固定的时间长度。

scrum visual paradigm的圖片搜尋結果

精益开发 (Lean) 精益开发的核心思想是查明和消除浪费。在软体开发过程中bug、没用的功能、等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。精益开发的其他原则包括强调学习、在最后时刻做决定、用最快的速度交付使用者等。

lean software development的圖片搜尋結果

其他敏捷方法还包括动态系统开发方法 DevOps、(DSDM)、特征驱动开发(FDD)、Crystal Clear等,各种敏捷方法的区别在于它们对敏捷的不同阐释和不同侧重。理解这些方法可以帮助我们从多个角度理解敏捷开发,并且了解更多的最佳应用。


 
如何选择一种敏捷方法:

 选择一种合适的软体开发方法取决于多种因素。在做出决定之前,我们需要充分考虑以下这些方面:

  1. 方法的复杂度。确保你的团队或组织能够应付这种复杂度。
  2. 社群和业界支援。有较多的社群及行业支援可以使你受益匪浅。
  3. 实用工具。一个良好的软体工具可以帮助团队有效地处理日常工作,促进团队协作,并减少管理成本。
  4. 对敏捷方法的认识程度。选择一些与你当前开发方式比较接近的敏捷方法将有助于推动该方法的实施。
  5. 你的团队规模。较小规模的团队最好从简单的方式入手。
  6. 你不需要只遵从一种方法。你可以为团队选择一个主要的方法(如Scrum),然后借鉴其他方法。

 

Agile & Scrum Resources

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章