18600329666

咨询技术专家

扫一扫
与技术专家在线沟通

Menu
敏捷软件开发知多少
       一、对敏捷软件开发和传统瀑布模型开发方法的理解
       敏捷软件开发是一种新型的软件开发方法,强调开发人员与业务专家(客户)之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用,开发团队不仅包括开发人员,还包括管理人员和客户。它鼓励团队成员的相互交流通过反馈机制尽早纠正软件中的错误,提高开发效率,同时为需求的调整提供更多机会,保证软件向正确的方向发展。
        传统软件开发与
 敏捷软件开发相比而言,传统软件开发如瀑布模型强调预见性,严格遵循计划、分析、设计、编码、测试和维护等几个阶段。瀑布模型开发各阶段间具有严格的顺序性和依赖性,必须等到前一阶段的工作结束后才能开始下一阶段的工作,前一阶段的输出文档是后一阶段的输入文档,只有前一阶段的输出文档完全正确,后一阶段才能获得正确的结果。
 敏捷软件开发示意
    二、敏捷软件开发方法的特点
  1. 极限编程(XP):沟通,简单,反馈,胆识,为四项基本准则,快速反馈,假设简单,递增更改,优质工作,为5条法则,几乎无文档。在所有的敏捷方法中,XP对日期产生的兴趣最多,并且在对良好不定的问题领域的特殊实践方面最为具体。
  2. SCRUM:特别强调开发队伍和管理层的交流协作。每天,开发队伍都会向管理层汇报进度,如果有问题,也会向管理层要求帮助解决。
  3. 动态系统开发方法:坚持功能在项目的全过程中都可以改变,当功能被允许改变时,通过使用时间框控制的目的就能达到。重视为项目营造一个正确的文化氛围,如手册中描述了项目有不同的侧重点,并指出对于那些缺陷在传统方法中转变起来是多么的困难。也非常重视协作价值和原理,以及文档。
  4. .功能驱动开发方法,短时间的迭代阶段和可见可用的功能,适合于那些不确定或常变更的需求的系统。它抓住了软件开发的核心问题领域,即正确和及时地构造软件。
  5. 水晶系列方法:相对于其它敏捷方法,水晶系列方法强调软件开发流程的纪律性,所以它比其它敏捷方法易于使用,但它的生产率不如Xp等其它敏捷方法。水晶系列与Xp一样,都有以人为中心的理念,但在实践上有所不同。人们一般很难严格遵循一个纪律约束很强的过程,因此,与Xp的高度纪律性不同,水晶系列方法试图用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。
  6. 自适应软件开发(ASD):ASD强调开发方法的适应性,这一思想来源于复杂系统的混沌理论。ASD不像其他方法那样有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
  7. 迭代式开发。整个开发过程被分为几个迭代周期,每个迭代期是一个定长或不定长的时间块,每个迭代周期持续的时间一般较短,通常为1~6 周。
  8. 开发团队和用户反馈推动产品开发。敏捷开发方法主张用户能够全程参与整个开发过程。这使需求变化和用户反馈能动态管理并及时集成到产品中。同时,团队也能及时对用户的需求提供反馈意见。
  9. 开发团队自我管理。拥有一个积极的、自我管理的、具备自由交流风格的开发团队,是每个敏捷项目的必要条件。敏捷开发总是以人为中心建立开发的过程和机制,而非把过程和机制强加给人。
  10. 持续集成。新的功能或需求变化总是尽可能频繁地被整合到产品中。一些项目是在每个迭代周期结束的时候集成,有些项目则每天都在集成。
  11. 增量交付。产品在每个迭代周期结束时被逐步交付使用,而不是在整个开发过程结束时一次性交付。每次交付的都是可被部署到用户应用环境中的、能给用户带来即时效益和价值的产品
   三、敏捷软件开发和传统软件开发团队建设方面的区别
  1. 团队建设:以团队为单位,强调团队建设,赋予高度的责任,支持开发、透明的交流环境;以项目经理为领导核心,团队成员之间交付很少
  2. 管理流程:流程可以简单,但规划与执行必须严谨;复杂,繁琐,静态,变更成本大
  3. 用户参与程度:强调用户保持密切的联系和交流;很少涉及用户参与
  4. 业务需求:需求具有优先级次序,开发以增量方式逐步完成功能,有助于量化项目过程;假设需求是明确的,一旦需求变更势必增加其余环节的复杂度
  5. 交付频率:经常交付,交付周期短;项目结束时交付,交付周期长
  6. 文档量:最必要最实用,高的应用度和阅读度;产生大量中间文档,低的应用度和阅读度
    四、敏捷软件开发的缺陷 
     敏捷方法明显地降低了文档的数量,甚至声明代码本身就是文档。这就需要开发人员为代码添加更多的注释,但是对于不习惯敏捷开发或团队新成员则很难做到,他们必须不断询问有经验的开发人员,这样会导致延迟迭代交付时间,甚至增加开发费用。而传统开发则强调文档对团队成员的指导作用,开发人员可以在不知道项目细节的情况下完成开发。
 
      敏捷开发中强调交互和客户的参与。每次迭代前,团队和客户都将召开一个会议,团队成员将介绍在这次迭代中所作的工作,而客户则根据成员的介绍给出新的功能要求。实际中大部分情况,这种例会是非常乏味和沉闷的,因为团队成员必须重复地向其他
 
       成员和客户展示自己负责的模块,接受给出各种对需求的更改,而且每次迭代都是如此,通常为迭代分配的时间都是以周为单位的,开发人员经常感到时间不够用,尤其是自己负责的模块中包含一些复杂的算法时,时间就变得越紧,经常使得迭代延迟。而传统开发中客户不会参与开发过程,实现过程中开发人员只是根据文档编写代码,然后交付最终产品。这样开发人员不必关心那些频繁的迭代会议,而且时间上更加宽泛,有利于开发出更好的产品。
  
      敏捷开发对开发人员的个人技能要求更高。敏捷开发强调交互和客户的参与,这就意味着每个团队成员都要具备一定的个人能力和社交技能。每次迭代都必须给客户提供完整的功能模块,并且需要让客户明白当前的开发进程以及开发中遇到的一些问题,开发人员不但需要将自己的工作描述清楚,还得正确理解客户提出的新需求,这需要具备较好的沟通技能。而实际中,不一定每一个开发人员都能具备这样的技能,一旦某一个人不能正确理解一些重要信息,将可能导致下一次迭代不能准确交付,更糟糕的是,如果理解有误,会使得开发的模块中包含多余的功能,结果是对模块进行修改,从而增加开发费用。因此,开发人员社交技能的提升将增加开发过程的稳定性。
 
      敏捷开发允许增加需求也导致两个设计中的问题:系统过于僵硬和机动性强。僵硬是指系统中一旦有更改的地方容易引起其他模块的级联改动。机动性是指可能由于需求改变而压缩一些可重复使用的组件,这意味着大量的工作量和对系统整体稳健性带来风险。如果系统中存在这些问题,会违反面向对象设计中的接口隔离原则,从而导致部署过程中的很多问题。
     结束语:传统软件开发方法和
 敏捷软件开发方法各有利弊,任何一种方法都不是完美的,软件开发项目管理的核心问题还是人的问题,在一定的管理机制制约之下,充分发挥和调动开发工程师个人工作积极性和主动性才能保证开发质量,至于管理模式和机制的选择因地制宜不拘一格。