敏捷开发(Scrum)
一、敏捷的背景与动机
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)的更多相关文章
- 敏捷开发 Scrum 综述
敏捷开发 Scrum 综述 这一星期学习了敏捷开发,然后阅读了相关的书籍,从网上查找了很多相关的资料,对敏捷开发scrum有了更加深刻了理解,对敏捷开发做了如下总结: 一.什么是敏捷开发? 敏捷开发提 ...
- 敏捷开发--scrum
1. 请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成. 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个 ...
- 【转】敏捷开发 Scrum 总结
转:http://www.open-open.com/lib/view/open1330413325514.html 最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据 ...
- 敏捷开发-Scrum 真实
近期研究前 Scrum 数据编译的文件,在接下来的团队和项目开发.项目根据该引入 Scrum 一些练习,提高团队成员和项目之间的交付质量的合作. 参考资料: <轻松Scrum之旅-敏捷开发故事& ...
- 敏捷开发— —Scrum 学习笔记
敏捷开发模式是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它们的具体名称.理念.过程.术语都不尽相同,相对于"非敏捷" ...
- 敏捷开发(Scrum)与敏捷测试
1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...
- 敏捷开发 scrum管理
项目准备阶段 1.产品经理将整体项目拆分成不同的单独模块,每个模块尽量细化到能够自成一体.例如app的登录注册模块,不能仅仅就是登录注册这两个界面,而是要将所有与这有关的需求整合到一块.要达到的效果就 ...
- 敏捷开发Scrum
- 敏捷开发Scrum学习
官方:http://baike.baidu.com/link?url=VGFzdJpuHX3g90kIX6l1QABWMmBNyf30sTGuEcJ6OJVMq0Cot1G9Imbu1gls-xpI6 ...
- 【科普】Scrum——从橄榄球争球到敏捷开发
对敏捷开发Scrum稍有了解的都知道Scrum来源于橄榄球,但你知道为何要以这项球类运动的术语来命名这个敏捷开发方法论吗? Scrum与橄榄球对应关系 Scrum 一词源于英式橄榄球运动,是指双方球员 ...
随机推荐
- Splashtop :符合 HIPAA 标准的远程桌面软件
如果您正在寻找可帮助您保持 HIPAA 遵从性的远程桌面软件,那么 Splashtop 就是您的最佳选择. 如果您的公司属于美国医疗保健行业,则您知道您必须遵守有关敏感和私人患者信息的联邦 HIPAA ...
- C 语言编程 — 代码规范
目录 文章目录 目录 前文列表 空行 空格 缩进 对齐 代码行 注释 示例 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 ...
- angular路由跳转并传值的多种方式
Angular的学习使用过程中,路由跳转支撑了项目的全过程,所以路由跳转是一个很常见也是一个很容易忽略的点,,对于页面之间的跳转有着很多的问题,跳转的方式/如何携带参数跳转,下面是自己在学习过程中对a ...
- ASP.NET Core的全局拦截器(在页面回发时,如果判断当前请求不合法,不执行OnPost处理器)
ASP.NET Core RazorPages中,我们可以在页面模型基类中重载OnPageHandlerExecuting方法. 下面的例子中,BaseModel继承自 PageModel,是所有页面 ...
- Selenium4自动化测试8--控件获取数据--上传、下载、https和切换分页
10-上传 上传不能模拟用户在页面上选择本地文件,只能先把要上传的文件先准备好在代码里上传 import time from selenium.webdriver.support.select imp ...
- Django——form组件的全局钩子
前面提到过的都是针对单个字段的校验,如果想同时对多个字段进行校验,就可以使用全局钩子(编写全局钩子预留的clean方法,可以获取到多个字段并进行校验) 注意: ---- 默认的校验.自定义正则规则的校 ...
- 在WPF中判断是是否为设计时模式
方式一: using System.ComponentModel; private bool IsInDesignMode { get { return DesignerPro ...
- ubuntu下openCV-Haar特征分类器训练
ubuntu下openCV-Haar特征分类器训练 这段时间在学openCV,准备做一个头部检测,但是openCV自带的分类器只有人脸检测的,而且准确度不高,就准备自己训练一个分类器.在网上看了很多的 ...
- Stable diffusion采样器详解
在我们使用SD web UI的过程中,有很多采样器可以选择,那么什么是采样器?它们是如何工作的?它们之间有什么区别?你应该使用哪一个?这篇文章将会给你想要的答案. 什么是采样? Stable Diff ...
- 2023 Hive 面试大纲
先说一些废话 总结一下Hive面试宝典中的要点,方便读者快速过一遍Hive面试所需要的知识点. 本文请搭配 Hive面试宝典 来食用更美味哟 ┗( ▔, ▔ )┛ 方便自己系统性回忆,根据*的数量来标 ...