关键词:
背景
过去我们用合同死死地固定住需求,然后乙方千方百计的只按照合同办事,没有发挥更大的创造力,而甲方在固定的成本面前,不想多花一分钱,却不停的要求新功能。那么甲乙双方就形成了矛盾的局面,甚至是敌对的局面。如何破除这种局面呢?这就是本期要讲的敏捷开发。
敏捷的起源
硬件领域有摩尔定律,即每隔18~24个月,每1$能买到的电脑性能将翻翻一倍以上。而软件行业却没有相应的规律。那么软件行业如果提高生产率、质量、价值等。而目前软件公司是如何提高生产率、质量呢?实际上很多传统的企业仍然靠加班、流程和工具、合同和文档的约束,而且沟通困难是导致bug、延期的重要原因,这里的沟通包括开发团队和甲方的沟通,团队之间的沟通,团队和管理者的沟通等等;在瀑布式开发模式中,我们会做大量的前期需求分析和详细设计,我们自认为我们这些努力会保证交付的软件会是客户期望的,但是事实并不是如此。另外,所有的软件开发者都是知识工作者,那么知识工作者的主管能动性和创造力是管理人员管控出来的吗?
上述这些软件行业中的痛点,并不是新生的,早在1987年Fred brooks就在《没有银弹》中提到没有任何一项技术或方法可以能让软件工程的生产率在十年内提高十倍。软件开发本身具有复杂性、不可见性、可变性以及一致性,使得软件开发难以管理,所以将它比喻成" 狼人",但是没有一项技术或方法来解决它,即没有银弹。
而敏捷开发正是解决软件开发冲存在的问题的。
瀑布模型
在具体介绍敏捷开发之前,先介绍"不敏捷"的开发模式,即"瀑布模型",这套方法论分为5个阶段:需求分析、设计、编码、测试和维护。需求分析阶段通常定义系统需求;设计阶段通常确定系统使用什么数据库,系统模块的划分,各个模块的功能;编码阶段用编程语言实现设计阶段的功能;测试阶段主要测试功能是否实现;维护阶段是根据用户新的需求重新修改系统,使系统运行正常,更加稳定。
瀑布模型的局限性非常明显,比如对市场变化和用户需求的响应比较慢,更改成本高,甚至可能出现产品一退出市场就宣告失败。
敏捷开发
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合作谈判
- 响应变化 高于 遵循计划
敏捷开发宣言
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意
- 欣然面对需求变化,即使在开发后期也一样,为了客户的竞争优势,敏捷过程掌控变化
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外
- 激发个体的斗志,以他们为核心搭建项目,提供所需的环境和支援,辅以信任,从而达成目标
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面交谈
- 可工作的软件是进度的首要度量标准
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够同步维持其步调稳定延续
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强
- 以简洁为本,它是极力减少不必要工作量的艺术
- 最好的架构、需求和设计出自组织团队
- 团队定期地反思如何能提高成效,并以此调整自身的举止表现
敏捷开发的原则
- 凝聚人的力量,紧密协(合)作。包括业务负责人、开发团队、客户、管理者之间的关系,所有这些关系在以前都是造成项目危机的原因之一,那么,在敏捷时代,我们需要这些角色 紧密合作,最大限度的发挥各个角色的力量
- 聚焦客户价值,消除浪费(如何聚焦用户价值,即频繁的交付用户可工作的软件,快速收到用户反馈)
- 除了有人和有价值,我们还需要持续地学习与改进,因为这个世界变化的太快了。
敏捷团队
敏捷开发的价值观和原则看起来很美,但是如何落地呢?首先它需要组建一个敏捷团队。相交于传统团队,敏捷团队具有以下特点:
- 团队要求团队小,通常是个位数的人数(3-9人)
- 全职专注,必须是全职人员
- 跨职能
- 被授权自组织
敏捷团队运作机制
- 一个团队有自己的×××事项,对×××事项进行拆小
- 按客户价值进行优先级排序,产品经理负责价值排序
- 团队成员的工作不是被主管推动的,而是自己拉动工作
- 小而稳定,跨职能团队
- 多个团队松耦合(依赖性比较低),对齐迭代时间和战略目标
关键的团队角色
- 产品负责人
- Scrum主管(流程主管)?
- 开发团队
产品负责人(Product Owner)
- 负责管理产品backlog(×××事项)的唯一负责人
- 代表客户/项目如责任人
- 定义产品的所有特性
- 负责产品的投入产出
- 管理干系人和他们的利益
- 接受或者拒绝迭代的结果
- 维护正好够的,准时生产(Just -in-Time)的特性细节
- 跟团队共享成功
- 负责最大化产品和开发团队工作的价值
Scrum Master(流程主管)
- 起到教练的职责
- 领导团队完成Scrum的实践以及体现其价值
- 排除团队遇到的困难
- 使得团队紧密合作,使得团队个人具有多方面职能的工作能力
- 确保团队能胜任其工作,并保持高效的生产率
- 保护团队不受到外来无端影响
开发团队
- 团队拥有3-9人
- 团队成员跨职能,多面手
- 团队成员都全职工作
- 团队自我组织和管理
- 团队关系在一个迭代周期中应该是固定的,个人的职能可以在新迭×××始时发生调整
关键的团队活动
-
每日站会
每日站会每天都会召开,时间维持在15分钟内,站着开会,所有相关人员都需要参加,避免无关问题的讨论。 - 评审会
需要在迭代周期的最后一天召开,1个小时左右就可以了,需要客户出席,如果客户不能出席,则需要产品经理出席 - 迭代回顾会
迭代回顾会是在每个迭代结束时进行,总结工作中的经验和教训,时间维持在30-60分钟内,整个团队都需要参加(Scrum Master、Product Owner、开发团队以及客户)。迭代回顾会包括两部分,第一部分是定量分析,第二部分是定性分析。其中定量分析又包含团队是否完成了迭代目标,收集并评审迭代度量指标(包括速率、迭代燃尽图、迭代计划故事和实际完成故事、计划发布日期与实际发布日期、客户满意度、团队满意度、生产环境Bug数、生产Bug解决时间、用户故事等)。定性分析包含哪些工作良好(应该继续保持),哪些做的不好(应该停止)?哪些可以改进(团队选出1-2条在下一个迭代实现)?
最常用的敏捷方法和实践
- Scrum
- XP
欢迎关注微信公众号:木可大大,所有文章都将同步在公众号上。
敏捷软件开发
...rks(中国)在西安举办的暑期特训营,因此我也接触到了敏捷软件开发思想。但是我对其理解还是不够,在这里整理整理,增加认知。敏捷软件开发(Agilesoftwaredevelopment)敏捷软件开发又称敏捷开发,是一种从1990年代开始逐渐... 查看详情
敏捷开发感想
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。敏捷开发是针对传统的瀑布开发模式的弊端而产生的一种新的开发模式,目标是提高开发效率和响应能力。除了原则和实践,模式也是很重要的,... 查看详情
敏捷开发
传统软件开发流程:敏捷开发流程: 查看详情
什么叫敏捷开发?
参考技术A问题一:敏捷开发到底是什么意思其实就是一种思想,有别于传统的瀑布开发思路,传统的是可研,需求,设计,开发,测试,上线......敏捷看重的是快速实现交付物,快速的响应用户需求......极限编程是敏捷的一种... 查看详情
敏捷开发实施方案
今天把前段时间,给公司讲解敏捷开发流程的PPT文档发出来。由于近来比较喜欢用Markdown编写文档,发现博客园不支持Markdown编辑,有点失望。小小吐槽,O(∩_∩)O~ 敏捷开发实施流程 敏捷开发实施流程1、迭代计划2、... 查看详情
什么是敏捷开发?
1、什么是敏捷开发? 敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。 在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。 简单地来说... 查看详情
敏捷软件开发与传统软件工程
敏捷软件开发与传统软件工程 摘要:本文从敏捷软件、传统软件的概念,提出相关开发模型等方面对敏捷软件工程和传统软件工程进行描述。 一、敏捷软件开发 敏捷型软件开发是一种... 查看详情
敏捷开发
转自维基百科敏捷软件开发敏捷软件开发(英语:Agilesoftwaredevelopment),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理... 查看详情
敏捷开发
敏捷开发是一种应对快速变化的需求的一种软件开发能力。敏捷开发的原则:1.以最有效率的方式交付使客户满意的软件。2.在开发期间开发人员与业务人员必须天天在一起。3.在开发团队中要以面对面方式交流。4.每隔一段时间... 查看详情
敏捷开发-敏捷基础知识导入
...的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》传递给世界,同时即宣告了敏捷开发... 查看详情
敏捷开发:最通俗易懂的敏捷开发漫画
...一:小灰在餐厅场景二:无奈的项目经理什么是敏捷开发?敏捷开发(Agile)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切 查看详情
何为敏捷开发
何为敏捷开发?简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。 敏捷开发... 查看详情
关于敏捷开发的学习
1.知识储备敏捷开发(Agiledevelopment)敏捷开发概述 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换... 查看详情
敏捷开发与传统开发方式的比较
敏捷开发的起源在90年代末期,传统软件开发的方式因为其繁杂的过程,以及对文档的过于严格的要求,造成了很大程度上的效率下降,也就是人们所说的“重型化危机”。因为这一原因,人们开始反思传统方法的利弊,并对其... 查看详情
scrum敏捷开发规则一栏
敏捷、敏捷开发这类词近期非常火!敏捷开发,就是指可以在需求迅速变化的情况下高速开发软件。我们接触最多的和敏捷相关的名词是:极限编程(XP)、结对编程、測试驱动开发(TDD)等。敏捷建模(AgileModeling,AM),的价&... 查看详情
敏捷开发
1.敏捷开发是相对于传统的开发的一种新的开发模式,敏捷开发适用于互联网企业比较多,特别是微服务的迅速崛起,对于当今高并发的需求,微服务是技术方案,敏捷开发是开发方法,两者相辅相成,共同推进项目的迅速落地... 查看详情
什么是敏捷开发?(扫盲)
敏捷开发的4句宣言个体与交互胜过过程与工具可以工作的软件胜过面面俱到的文挡客户协作胜过合同谈判响应变化胜过遵循计划 最近一直听人说“敏捷开发”,一脸懵逼,根本不知道什么是敏捷开发,然后百度了一下,上... 查看详情
关于敏捷开发
目录前言什么是敏捷开发敏捷软件开发宣言敏捷的项目管理--追求最大价值的成功总结 一、前言 在这瞬息万变的环境里,企业的生存与发展状况取决于其快速响应变化的能力,而敏捷运作是构建该能力的核... 查看详情