敏捷软件开发方法概念

2018-06-09 09:55:43


     自从软件工程产生以来,我们在降低软件开发项目的风险过程中尝试过多种方法,虽然面向对象、结构化、CMM等技术有利于帮助软件危机的解决,然而其复杂的过程使软件行业陷入低效泥沼中。2001年Kent beck Martin Fowler Robert Martin等经验论阵营的头领发起了敏捷联盟向全世界发布了他们的宣言:个体和交互胜过过程和工具;工作软件高于理解文档;客户合作胜过合同谈判;响应变化胜过遵循计划。宣言体现了软件开发方法必须去适应软件变化的特征,在宣言的基础上就提出了敏捷软件开发方法。 

  1 敏捷方法概述 
  截止现在敏捷软件开发方法还没有一个确定的定义。但它的特点是重视软件生产效率的,适用于软件需求不确定、用户易沟通并且能参与开发、开发人员有责任感并且积极向上、十个人以下的小项目的开发,是以保证软件开发有成功产出为前提的,尽可能减少在开发过程中制成品的方法,体现“刚刚够”(Just enough)的观点。 
  人作为核心、循序渐进和迭代算法是敏捷软件开发的宗旨。在敏捷软件开发过程中,软件项目被分解成很多个小项目,每个小项目的成果都经过测试,再把他们集成起来。它的灵活性、协作性和软件的商业价值上作出的贡献是敏捷软件开发方法的优势。这都在“敏捷宣言”的核心原则中得到了体现:交互和独立工作是建立在工具和过程基础上的、软件使用是建立在文档基础上的、客户的协作是建立在合同谈判基础上的、对变更做出的响应是建立在遵循计划基础上的。 
  2 几种常用的敏捷方法比较 
  2.1 极限编程(XP) 
  极限编程(简称XP)是由KentBeck于1996年提出的,极限编程要求把它列出的每一个思想和方法都做到极限、做到最好。 
  极限编程的核心价值是我们在开发中必须注意的:Communication(沟通)、Simplicity(简单)、Feedback(反馈)、Courage(勇气)、此外还有第五个价值: Modesty(谦虚)。因为计划赶不上变化,使用极限编程的软件开发人员只需要在开发的初期做出一些文档。极限编程把软件测试放在首位,这样以后出现漏洞的几率就会降到最低。 
  极限编程是一种近螺旋式的开发方法,它把复杂的开发分解为相对比较简单的小软件;通过沟通、反馈和其它的方法,客户和开发人员就可以清楚的了解到开发进度、变化、困难和急需解决的问题等,并及时地调整开发过程。 
  2.2 SCRUM 
  SCRUM的宗旨是发挥构件技术和面向对象的开发方法,对迭代式面向对象方法进行改进,适用于需求不确定的产品的开发。是迭代的增量化过程,便于工作管理和产品研发。更综合了各种开发的经验。 
  SCRUM把项目分成N个为期15-30天的迭代阶段,称之为“冲刺”(sprint)。每个“冲刺”之前,你明确这一个“冲刺”需要实现的功能,然后让开发人员去完成。但是,在“冲刺”时,SCRUM的核心是所有开发都围绕着迭代,需求是固定的。SCRUM方法中只有3中角色:SCRUM主管、开发团队、产品负责人。 
  2.3 动态系统开发方法(DSDM) 
  开发一种面向领域的快速开发方法是产生动态系统开发方法的原因,动态系统开发方法在技术支持、应用推广、研究改进培训认证和培训认证等方面都比其他方法要完善,适用于对时间要求很紧的开发项目,动态系统开发方法应用范围不再仅仅局限于IT行业。 
  DSDM方法提倡以业务为核心,快速而有效地进行系统开发,并提出了探索式开发方法的概念。强调软件使用者一开始就预见所有需求是不可能的。该方法中,只要进能入下一步,当前的算法就是可行的。 
  2.4 水晶方法(Crystal) 
  水晶方法是Alistair Cockburn于上世纪90年代末提出的,水晶方法目的是发展一种提倡“机动性的”方法。 
  Crystal是根据项目重要性和规模来区别项目的,并给出相应的办法。所以,crystal是多种方法的组合.它阐明了要把对话和交流放在第一位的观点。Crystal方法中有两条准则:(1)应用反思工作室促使方法学的自适应,(2)使用的增量式循环不超过4个月。 
  2.5 特性驱动开发(FDD) 
  特性驱动开发是一个强调快速迭代、特性驱动的软件开发方法,适用于周期短的开发。它既能保证文档和质量,又能保证软件的快速开发,并提出划分的每一个功能开发时间不超过两星期,要求两星期内生产出可见的、能运行的代码。 
  特性驱动开发方法认为简单的过程和良好的定义就能很好地被执行,它强调的是实用、简化、易于被开发人员接受,是一个特性驱动快速迭代的过程,适用的项目为软件需求经常变动。 
  2.6 自适应软件开发(ASD) 
  自适应软件开发方法的理论来源是复杂自适应系统理论,目的是通过提高自适应性用来应对互联网时代下的软件需求难于预测并高速变化的软件开发,它与水晶方法正在相互借鉴和融合。 
  在一个环境中,结果是不可预测的,把计划看成是一个自相矛盾的。在计划中,偏离计划就是错误的,要纠正。而在一个适配性环境里,偏离计划恰恰是在引导开发人员走向正确的目标。在不可预测的环境中,需要我们用各式各样的方法来应对不确定性。在管理中,重点在于鼓励大家交流沟通,而不是告诉大家需要做什么,从而使开发人员能自己提出具有创造性的解决方案。 

  不同的开发方法对于不同的开发人员来说,意义是不同。不同的项目规模,不同的开发环境,也决定了开发团队采用哪种开发方法,本文仅仅对敏捷开发方法做了一个简单介绍,相信能为开发团队在实践中选择方法提供一个比较客观的参考。