zoukankan      html  css  js  c++  java
  • 敏捷软件开发概述

    背景

         由于软件开发过程中需求不断变动,致使开发周期不断延迟,经费预算一再上涨,在规定的时间内开发出令用户满意的软件越来越难。而传统软件开发方法则认为只要软件工作人员足够努力,就可以在早期确定所有的需求,从而减少后期需求变动引发的成本增加,并且把变动排斥在开发进程之外。事实上,外部环境变化往往引起软件开发过程中的重大变动,这在飞速发展的当今社会是难以避免的,从而敏捷型软件开发方法应运而生。

         2001年初,一批业界专家聚集在一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷(Agile)联盟。在随后的几个月中,他们创建出了一份价值观声明。也就是敏捷联盟宣言(The Manifesto of the Agile Alliance)。

    敏捷软件开发宣言内容

    个体和交互        胜过       过程和工具 

    可以工作的软件    胜过      面面具到的文档 

    可户合作          胜过     合同谈判 

       响应变化          胜过     遵循计划       

    虽然右项也有价值,但是我们认为左项具有更大的价值。

    敏捷实践原则:  

    1. 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
    2. 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
    3. 经常性的交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
    4. 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
    5. 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
    6. 在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。
    7. 工作的软件是首要的进度度量标准。
    8. 敏捷过程提倡可持续的开发进度。责任人、开发者和用户应保持一个长期恒定的开发速度。
    9. 不断关注优秀的技能和好的设计会增强敏捷能力。
    10. 简单——使未完成的工作最大化的艺术——是根本的。
    11. 最好的构架、需求和设计出自于自组织的团队。
    12. 每隔一定时间,团队会在如何才能更有效的工作方面进行反省,然后相应地对自己的行为进行调整。

        敏捷软件开发是一个开发软件的管理新模式,用来替代以文件驱动开发的瀑布开发模式。敏捷方式也称轻量级开发方法。能不断根据环境的变化,修改自己的设计,指导开发的方向是敏捷开发的目标。

         敏捷开发避免了传统瀑布方式的弊端,主要是吸收了各种新型开发模式的“动态”特性,关注点从文档到开发者,管理方式也从工厂的流水线到团队的自我放松式的组织。总结敏捷开发与瀑布模式的不同,主要是下面几个“敏捷”的关注点:一是迭代。软件的功能是客户的需求,界面的操作是客户的“感觉”,对迭代的强调是缩短了软件版本的周期; 二是

    客户的参与。以人为本,客户是软件的使用者,是业务理解的专家,没有客户的参与,开发者很难理解客户的真实需求 ;三是版本小。能快速的展示给客户,对于复杂的客户要求,有机的进行分割和兼顾整体的统一是很不容易的,要两者相结合。

    极限编程(eXtreme Programming,简称XP)是敏捷方法中最著名的一个。它由一系列简单却互相依赖的实践组成。这些实践结合在一起形成了一个敏捷开发过程。如下:

    迭代:一次又一次循环逼近的过程

    完整团队:XP项目的所有参与者(开发人员、业务分析师、测试人员等等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。

    计划游戏:计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。

    客户测试:作为选择每个所期望的特性的一部分,客户定义出自动验收测试来表明该特性可以工作。

    简单设计:团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。

    结对编程:所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。

    测试驱使开发:程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。测试用例循序渐进的对代码的编写进行指导

    改进设计:随时改进糟糕的代码。保持代码尽可能的干净、具有表达力。

    持续集成:团队总是使系统完整的被集成。

    集体代码所有权:任何结对的程序员都可以在任何时候改进任何代码

    编码标准:系统中所有的代码看起来就好像是被单独一个——非常值得信任的——人编写的。

    隐喻:团队提出一个程序工作原理的公共景象。

    可持续的速度:团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作。他们保存精力,他们把项目看做是马拉松长袍,而不是全速短跑。

          敏捷就是“快”,快才可以适应目前社会的快节奏;要快就要发挥个人的个性思维多一些,个性思维的增多,虽然通过结队编程、代码共有、团队替补等方式减少个人对软件的影响力,但也会造成软件开发继承性的下降,因此敏捷开发是一个新的思路,但不是软件开发的终极选择。对于长时间、人数众多的大型软件应用的开发,文档的管理与衔接作用还是不可替代的。如何把敏捷的开发思路与传统的“流水线工厂式”管理有机地结合,是软件开发组织者面临的新课题。

  • 相关阅读:
    【WPF】 打开本地的文件或者文件夹
    Angularjs中的拦截器 (卧槽,好牛逼)
    oracle中to_date() 与 to_char() 日期和字符串转换
    mysql中如何嵌套使用insert和select
    angularjs中的路由介绍详解 ui-route
    sql中的or的用法说明
    AngularJS路由 $state服务、路由事件、获取路由参数
    No identifier specified for entity
    常用正则表达式集锦
    APP_Store
  • 原文地址:https://www.cnblogs.com/lixialei/p/3608546.html
Copyright © 2011-2022 走看看