一、敏捷的背景与动机

1.1 软件危机及软件工程的出现

速度是企业竞争致胜的关键因素,软件项目的最大挑战在于,一方面要应付变动中的需求,一方面要在紧缩的时程内完成项目,传统的软件工程难以满足这些要求, 所以软件团队除了在技术上必须日益精进,更需要运用有效的开发流程,以确保团队能够发挥综效。这正是Agile Process (敏捷的软件开发流程)于近年来兴起的主要原因。

1.2 软件项目的复杂

        

横轴代表需求的复杂度

纵轴表示技术的复杂度

还有人力资源的复杂度

解决复杂性问题需要采用经验式方式:解决问题的两种方式:1、预定义过程控制(富士康流水线生产),2、经验性过程控制(摸着石头过河), 如果复杂度超过预定义方式的能力范围,应该采用经验性方式, 经验性方式的三大支柱:可见性、检查及适应

1.3 他山之石

互联网时代的出版模式:

        作者最开始的时候并没有想出一本书,而只是把多年的积累梳理出来写成了博客,凭借博客的成功最后得到了出版商和纸版读者的认可。在写成本书的过程中,作者是渐进式的进行的,每写完一个章节,放到博客上去征求读者的反馈,很多反馈意见在后面的章节或修订中及时地体现出来,这样就形成了与读者之间的良好反馈,在出版之前就锁定了大量的读者。这就是敏捷开发提倡的“增量迭代、及时交付”的思想。 这种模式能最大程度地不偏离客户需求的本质。

精益制造:

       消除浪费、关注流程、建立无间断流程以快速应变 、降低库存 、一次做对、基于顾客需求的拉动生产 、标准化与工作创新 、尊重员工,给员工授权 等

二、敏捷宣言及原则

2.1敏捷的历史

敏捷软件开发又称敏捷开发,从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。

       2001年初,因观察到许多的软件团队身陷不断扩大的流程之中的困境,一群业界专家聚集在一起,勾勒出一些能让软件团队迅速工作,以及响应变化的价值观和原则。他们自称为Agile Alliance。

       之后的七个月里,他们创造具有价值的声明,也就是敏捷软件的开发宣言。

       十五人中包括:大名鼎鼎的Kent Beck(XP,TDD的创始人,Junit的创始人之一)、Ward Cunningham(Wiki概念的发明者)、Martin Fowler(《企业应用架构模式》作者)、Robert C. Martin、Ken Schwaber

2.2敏捷价值观之敏捷宣言

        

敏捷开发的核心思想是:以人为本,适应变化。

敏捷价值观之敏捷宣言-1    个体和交互胜过过程和工具:

人是软件项目获得成功最为重要的因素;合作、沟通能力以及交互能力比单纯的软件编程能力和工具更为重要;方法和工具是死的,人是活的,人要是太“面”或者协作不好,再强大的方法和工具都是白扯;

敏捷价值观之敏捷宣言-2     可以工作的软件胜过面面俱到的文档:

        过多的面面俱到的文档往往比过少的文档更糟;软件开发的主要和中心活动是创建可以工作的软件;直到迫切需要并且意义重大时,才进行文档编制;编制的内部文档应尽量短小并且主题突出

敏捷价值观之敏捷宣言-3      客户合作胜过合同谈判:

        客户不可能做到一次性地将他们的需求完整清晰地表述在合同中;为开发团队和客户的协同工作方式提供指导的合同才是最好的合同;

敏捷价值观之敏捷宣言-4      响应变化胜过循环计划:

        变化是软件开发中存在的现实;计划必须有足够的灵活性与可塑性;短期的迭代的计划比中长期计划更有效

2.3敏捷开发的12个原则

(1)我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

(2)即使到了开发的后期,也欢迎改变需求。

(3)经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好 。

(4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

(5)围绕被激励起来的个人来构建项目。

(6)在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。

(7)工作的软件是首要的进度度量标准。

(8)敏捷过程提倡平稳的开发节奏;发起人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

(9)不断地关注优秀的技能和好的设计会增强敏捷能力。

(10)简单化是根本(不做过度设计和预测)。

(11)最好的构架、需求和设计出自于自组织的团队。

(12)每隔一定时间,团队会在如何才能更有效地工作方面进行反思并对自己的行为进行相应调整。

三、敏捷方法是什么?

3.1什么是敏捷方法?

敏捷方法是一类软件开发流程的泛称;敏捷方法是相对于传统的瀑布式软件过程提出的;敏捷方法可以用敏捷宣言(4条)、敏捷原则(12条)来概括;敏捷原则通过一系列的敏捷实践来体现出来;敏捷方法有很多种。

问题1,请举出你知道的2个以上敏捷方法名字来

  

       

敏捷的方法(Agile Mthods):

                Extreme Programming (XP)极限编程

                Scrum 

                Adaptive Software Development (ASD)自适应软件开发

                Crystal Clear and Other Crystal Methodologies水晶方法

                Dynamic Systems Development Method (DSDM)动态系统开发方法

                等

3.2敏捷方法VS瀑布模型

敏捷方法:

      

  

完整地开发,每少数几周或是少数几个月里可以测试功能;强调在获得最简短的可执行功能的部分,能够及早给予企业价值;在整个项目的生命周期里,可以持续的改善、增加未来的功能。

瀑布模型:

​    

固定的、没有弹性的;  很困难去达到互动; 假如说需求没有完全的被了解,或是可能需要完全地改变项目的需求,瀑布式的model是比较不适合的。

3.3敏捷项目管理VS传统项目管理:

敏捷项目管理:

        对整个项目做一个粗略的估计,每一次迭代都有详细的计划;

鼓励变化, 客户价值驱动开发;信任和赋予权力;合约使变更变得简单,增加价值;客户和开发人员之间是紧密的连续的合作关系;每次迭代都产生可交付的软件;专注于交付软件;第一次迭代就可交付能工作的版本,风险发现的早。

传统项目管理:

        事先对整个项目进行估计、计划、分析;反对变更; 变更需要重新估计、重新规划;严密的合同来减少风险, 如果改变需求要走 CR 流程;项目作为一个“黑盒子” ,对客户与供应商的可视性差;文档和计划驱动的方法;软件交付时间晚, 意识到风险的时间晚;WBS,甘特图,关键路径分析。

敏捷 与CMMI双剑合璧:

​    

CMMI更加关注于流程,敏捷更加关注于人;CMMI自顶向下,敏捷自底向上;敏捷并不排斥必要的文档;敏捷的很多实践是对CMMI的一种实现,比如sprint计划会议就是PP的实现,每日例会就是在做PMC;很多CMMI4~5级的公司也在应用敏捷,比如说宝信、华为;项目级的敏捷实践通过CMMI可以在组织级得以重用;

3.4Extreme Programming(极限编程):

​      

XP我们一般称为极限编程,是最轻量级的开发流程。

        最主要的精神是:『在客户有系统需求时,给予及时满意的可执行程序』,所以最适合需求快速变动的项目。

        它强调客户所要的是:workable的执行码,所以把与撰写程序无关的工作降至最低,并要求客户与开发人员最好以side-by-side的方式一起工作。

        XP的实践包括:

    完整团队、计划游戏、客户测试;简单设计、结对编程、测试驱动开发; 改进设计、持续集成、集体代码所有权;编码标准、隐喻、可持续的速度

3.5Scrum开发流程

​   

3.6为什么采用敏捷? –预期的收益

采用敏捷方法得当的话,可以:(1)更加透明; 随时跟踪项目的状态和进展情况,及早发现问题和风险;(2)快速交付, 每次迭代都能交付可运行的软件;(3)最高风险和最高优先级的需求,最优先进行开发;(4)改善应对变更能力, 减少大量的重计划;(5)改善项目沟通;(6)更好的客户参与, 避免错误的假设.

        总之:(1)提高了生产率; 减少“浪费” (不需要的文档,重复工作等) ,项目的每次迭代都有明确的目标;(2)提高客户满意度; 短期内产生成效, 按预期交付软件, 每次迭代结束产生可以运行的软件;(3)改善员工的满意度; 团队精神,减少官僚,能够规划和管理自己的工作,减少“恐慌” ,稳定的工作量(可持续的步伐)

敏捷开发(Scrum)的更多相关文章

  1. 敏捷开发 Scrum 综述

    敏捷开发 Scrum 综述 这一星期学习了敏捷开发,然后阅读了相关的书籍,从网上查找了很多相关的资料,对敏捷开发scrum有了更加深刻了理解,对敏捷开发做了如下总结: 一.什么是敏捷开发? 敏捷开发提 ...

  2. 敏捷开发--scrum

    1.  请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成.  敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个 ...

  3. 【转】敏捷开发 Scrum 总结

    转:http://www.open-open.com/lib/view/open1330413325514.html 最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据 ...

  4. 敏捷开发-Scrum 真实

    近期研究前 Scrum 数据编译的文件,在接下来的团队和项目开发.项目根据该引入 Scrum 一些练习,提高团队成员和项目之间的交付质量的合作. 参考资料: <轻松Scrum之旅-敏捷开发故事& ...

  5. 敏捷开发— —Scrum 学习笔记

    敏捷开发模式是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它们的具体名称.理念.过程.术语都不尽相同,相对于"非敏捷" ...

  6. 敏捷开发(Scrum)与敏捷测试

    1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...

  7. 敏捷开发 scrum管理

    项目准备阶段 1.产品经理将整体项目拆分成不同的单独模块,每个模块尽量细化到能够自成一体.例如app的登录注册模块,不能仅仅就是登录注册这两个界面,而是要将所有与这有关的需求整合到一块.要达到的效果就 ...

  8. 敏捷开发Scrum

  9. 敏捷开发Scrum学习

    官方:http://baike.baidu.com/link?url=VGFzdJpuHX3g90kIX6l1QABWMmBNyf30sTGuEcJ6OJVMq0Cot1G9Imbu1gls-xpI6 ...

  10. 【科普】Scrum——从橄榄球争球到敏捷开发

    对敏捷开发Scrum稍有了解的都知道Scrum来源于橄榄球,但你知道为何要以这项球类运动的术语来命名这个敏捷开发方法论吗? Scrum与橄榄球对应关系 Scrum 一词源于英式橄榄球运动,是指双方球员 ...

随机推荐

  1. C++ 初始化列表(Initialization List)

    请注意以下继承体系中各class的constructors写法: 1 class CPoint 2 { 3 public: 4 CPoint(float x=0.0) 5 :_x(x){} 6 7 f ...

  2. containerd 源码分析:启动注册流程

    0. 前言 containerd 是一个行业标准的容器运行时,其强调简单性.健壮性和可移植性.本文将从 containerd 的代码结构入手,查看 containerd 的启动注册流程. 1. 启动注 ...

  3. C# 方块热力图

      这张图右侧,0 3 6...... 30表示每个数字出现的次数,左侧就是每个数字出现次数的方块颜色图. 具体的思路是,找两个颜色 渐变的画出右侧的色条. 计算所有数字的最大最小次数,然后用他们色条 ...

  4. 开发中你不得不知的一个Git小技巧

    一. 背景 在工作中大家应会碰到需要频繁在两个分支中切换工作的情况,我们通常做法是利用git stash命令暂存当前工作区中的变更,然后git checkout到目标分支中工作,工作完成后回到刚刚分支 ...

  5. CSS——鼠标样式

    在浏览网页的过程中,当我们将鼠标移动到一些元素上时,鼠标的样式会发生相应的改变,例如当鼠标指向文本时,鼠标的样式会变成类似大写字母I的样子:当鼠标指向链接时,鼠标会变成一个小手的形状等. 除了这些默认 ...

  6. Android 13 - Media框架(20)- ACodec(二)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节开始我们就来学习 ACodec 的实现 1.创建 ACodec ACodec 是在 MediaCodec 中创建的,这里先贴出创建部分的代码: ...

  7. Flutter(六):Flutter_Boost接入现有原生工程(iOS+Android)

    本篇博客会介绍如何通过第三方插件Flutter_Boost实现接入原有工程. 如果不希望引入第三方插件,可以参考博客Flutter混合开发--接入现有原生工程(iOS+Android) 一.新建原生工 ...

  8. C# 关于图片转ICO的代码整理(无损,不需要第三方类库)

    概述(Overview) 感觉网上文章整理的不全,我这边做个专栏,专门做这个事情吧,节省大家搜索.筛选.整理的时间精力.有用可以点个赞.引用本文章请注明出处,谢谢. (I feel that the ...

  9. Swift全局变量的线程安全分析

    一.示例代码 import UIKit let obj = TestObj() class TestObj { init() { print("\(type(of: self)) init& ...

  10. 7.20考试总结(NOIP模拟21)[Median·Game·Park]

    雨滴降落的速度是每秒十米,我该用怎么样的速度,才能将你挽留? 前言 关于语文素养如何限制OI水平2,正好现在文化课巨佬们正在考语文(那我走???) T1 我以为整数是不用输出 .0 的,然后喜挂 30 ...