代码改变世界

敏捷开发方法综述

2014-03-19 19:09  铿锵玫瑰—叶  阅读(399)  评论(0编辑  收藏  举报

一、传统软件开发方法

传统的重量级软件开发方法存在很多局限:
  (1)传统软件开发过程是基于设计之初正确的设计与估计.并通过开发人员开发出完美的产品。开发方式以“明确需求”为核心.从需求分析、软件设计到系统实现,再进行集成和测试。这样,系统集成进行得比较晚,集成的时间周期比较长,集成时发现的缺陷也比较多。
  (2)虽然目前有许多项目采用增量迭代的开发周期,但是通常项目在部署前才发布版本,用户只有在部署后才能看到真正的系统.因此,用户会提出很多修改意见,包括流程方面的问题.有此问题可能会影响到系统的架构设计。
  (3)开发人员由于进度或成本等因素,对单元测试重视程序不足,又缺乏有效的回归测试方法,这样,对于用户提交的Bug,开发人员对Bug的定位时间会比较长,因此,修改的周期也会比较长。
  (4)传统的开发方法中规定了各种文档,如需求分析、软件设计和各种测试文档等等。在软件开发过程中变更是不可避免的,但是经常需求变了、设计变了,程序变了,而相应的文档却没修改。时间越久,文档就越不符合实际情况。

为克服以上限制,敏捷开发方法应运而生:

二、敏捷开发方法

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

Test Diven Development:
       测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
测试驱动开发的基本过程如下:
① 快速新增一个测试
② 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
③ 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
④ 运行所有的测试,并且全部通过
⑤ 重构代码,以消除重复设计,优化设计结构
简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。
Continuous integration:持续集成
       大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚软件
持续集成优点:

1、减少风险

2、减少重复过程

3、任何时间、任何地点生成可部署的软件

4、增强项目的可见性

Refactoring重构

优点:

  • 能改进软件设计使软件更容易被理解
  • 能帮你找到bug
  • 提高软件的开发速度

Pai-Programing:结对编程技术

       是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试。与两位程序员各自独立工作相比,结对编程往往只需花费大约一半的时间就能编写出质量更高的代码。

Stand up:站立式会议

     是一种新型的会议方式,为一些新兴科技公司所开创。它提倡员工可选择以站姿而不是坐姿来开会,以身体的放松来带动精神的放松,一方面提升工作效率,另一方面也有助员工身体健康

Frequent Releases:小版本发布

敏捷开发中,尽量多的发布以周、月为单位的产品,这样客户每隔一段时间就会拿到发布的产品进行使用,通过反馈信息来改进产品。这样可以与客户的需求和变化进行很好的互动。

Minimal Documentation:较少的文档

敏捷开发中并不是没有文档,而是由大量的文档,即测试。这些测试代码真实地反映了客户的需求以及系统API的用法,如果有新人加入团队,最快的熟悉项目的方法就是给他看测试代码,如果用书面文档或者注释,某些代码变化了,需要对文档进行更新。

Collaborative Focus:以合作为中心,表欣慰代码共享

在敏捷开发中,代码是贵团队所有而不是某些人,每个人都有权利或的系统任何一部分的代码然后修改它,如果有人看到某些代码不好的话,拿她能够对这部分代码重构而不需要征求代码作者的同意,很可能也不知道谁写的这部分代码。这样每个人能够熟悉系统的代码,技师团队的人员变动,也没有风险。

Customer Engagement:现场客户

在敏捷开发中,客户是与开发团队一起工作的,团队到客户现场进行开发或者邀请客户到团队公司李开发。如果开发过程中有什么问题或者产品经过一个迭代后,能够以最快的速度得到客户的反馈。

Automated Testing:自动化测试

为了减小人力或者重复劳动,所有的测试都是自动化的,这对QA人员提出了更高的要求。他们要熟悉开发语言、自动化测试工具,能够编写自动化测试脚本或者实用工具录制。

Adaptive Planing:可调整计划

       敏捷开发计划是可以调整的,需求分析-概要设计-详细设计-开发-测试-交付,每一个阶段都是有计划的进行。 

      总之,敏捷开发与传统开发过程有很大不同,在这过程中,团队是有激情和活力的,能偶适应较大的变化,做出更高质量的软件。

.敏捷软件开发方法:
          由 极限编程XP, Scrum ,精益软件开发 , 动态系统开发, 特性驱动开发 ,水晶开发等几种开发方法组成。
          
1、极限编程XP
                     极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:
               加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
                      极限编程中有四个核心价值是我们在开发中必须注意的:沟通、简单、反馈、勇气;  XP用“沟通、简单、反馈、勇气和谦逊”来减轻开发压力和包袱;
                      基于敏捷的核心思想和价值目标,XP要求项目团队遵循几个核心实践:
                      团队协作,规划策略,结对编程,测试驱动开发,重构,简单设计,代码集体所有权,持续集成,客户测试,小型发布,编码规范,系统隐喻;
 2、Scrum
                    Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。包括了一系列实践和预定义角色的过程骨架。
                    Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。
 3、精益软件开发
                  七条原则:
                  尊重一线人员 ,消除浪费 ,增强学习 ,尽量延迟决定 ,嵌入质量,快速交付,整体优化;敏捷软件开发方法的特征(原则和方法)
   4、迭代式开发 :迭代开发将整个软件生命周期分成多个小的迭代(一般2-4周),每一次迭代都由需求分析、设计、实现和测试在内的多个活动组成,每一次迭代都可以生成一个稳定和被验证过的软件版本。
            增量交付:产品在每个迭代期结束时就要交付,而不是一次性的最终交付,并且每次交付都能部署到用户得应用环境中去。
            开发团队和用户反馈推动产品开发:通过团队的交互以及用户的反馈可以更好的完成产品的设计及制作;
            持续集成:一项软件开发实践,其中团队的成员经常集成他们的工作,通常每人每天至少集成一次,每次集成通过自动化构建完成。
           开发团队自我管理:一个拥有积极的,自我管理的,具有自由交流风格的团队是敏捷开发所必需的。
 敏捷开发的宣言
         个体和交互        胜过  过程和工具
         可以工作的软件  胜过  面面俱到的文档
         客户合作           胜过  合同谈判
         响应变化           胜过  遵循计划