这里是修真院pm小课堂,每篇分享文从程序员
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】spring
八个方面深度解析pm知识/技能,本篇分享的是:安全
【什么是敏捷开发 】框架
你们好,我是IT修真院上海分院第4期的学员,一枚正直纯洁善良的PM工具
今天给你们介绍一下什么是敏捷开发。学习
目录:测试
1.几种开发方法编码
1.1瀑布式开发spa
1.2迭代式开发设计
1.3螺旋式开发
2.敏捷开发
2.1 敏捷开发的诞生
2.2敏捷开发宣言
2.3 敏捷开发
3.敏捷开发方法
3.1 Scrum
3.1.1 什么是scrum
3.1.2 Scrum 框架结构
3.2其余开发方法介绍
4.敏捷管理工具
4.1禅道
5.实例:修真院敏捷开发流程
6.讨论
7.参考文献、
1.几种开发方法
1.1瀑布式开发——瀑布模型(Waterfall Model)
1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是惟一被普遍采用的软件开发模型。
瀑布模型要求软件开发严格按按照需求→分析→设计→编码→测试的阶段进行,每个阶段均可以定义明确的产出物和验证准则。瀑布模型在每个阶段完成后均可以组织相关的评审和验证,严格的瀑布模型每个阶段都不该该重叠,而应该是在评审经过后才可以进入到下一个阶段。遵循自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型式是最典型的预见性的方法。
瀑布模型的优势仍然是能够保证整个软件产品较高的质量,保证缺陷可以提早的被发现和解决.采用瀑布模型能够保证系统在总体上的充分把握,使系统具有良好的扩展性和可维护性
瀑布式的主要的问题是它的严格分级致使的自由度下降,项目早期即做出承诺致使对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明而且在项目进行过程当中可能变化的状况下基本是不可行的。
2.1 迭代式开发
迭代式开发也被称做迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具备更高的成功率和生产率。
在迭代式开发方法中,整个开发工做被组织为一系列的短小的、固定长度(如3周)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。采用这种方法,在需求被完整地肯定以前就能启动开发工做,并在一次迭代中完成系统的一部分功能或业务逻辑的开发工做。再经过客户的反馈来细化需求,并开始新一轮的迭代。
1.3螺旋开发——螺旋模型(Spiral Model)
螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特色在于强调其余模型所忽视的风险分析,螺旋模型很大程度上是一种风险驱动的方法体系,由于在每一个阶段以前及常常发生的循环以前,都必须首先进行风险评估。。
一般螺旋模型由四个阶段组成:制定计划、风险分析、实施工程和客户评估。
(1)制定计划:肯定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工做,提出修正建议,制定下一步计划。
螺旋模型适用于庞大而且复杂,高风险的项目,需求不明确的状况下,便于风险控制和需求变动。
2.敏捷开发
2.1 敏捷开发的诞生
程序员说,要有敏捷
——因而就有了敏捷。
敏捷这个词被用的过于泛滥了,你们都在讨论它,能够把它视为一种宗教。
美国在计算机行业已经走了几十年,瀑布流、螺旋模型、快速迭代...各类各样的软件开发流程雨后春笋各领风骚一段时间。虽然不断变化和完善,但互联网的加速发展让传统方法显得笨重,难以快速适应变化。有十七个程序员(程序员改变世界)在美国犹他州盐城湖的一个风景区开了个碰头会,找到了一个团队耦合度高,流程极其灵活的方法,他们把它称为敏捷开发(Agile program development)。
2.2 敏捷开发宣言
.png](/img/bVblSqN)
![图片上传中...]
• 个体和交互重于过程和工具
敏捷方法认为,人是软件开发中最重要的因素,开发团队要能作到团结协做,人与人面对面的交流、沟通,是最快速、最有效的途径。
• 能够工做的软件重于面面俱到的文档
文档的意义在于为程序服务,过多的文档须要开发人员花费大量的时间去维护,并且还要确保文档与代码的实时性,不然就失去了文档的意义。而问题也就在于,开发人员没有把时间、精力放到最重要的任务上,能力、资源没有最大化的发挥效能。敏捷方法认为,文档应当短小精悍、易于维护,并且主题突出。
• 客户协做重于合同谈判
作过软件开发的人都知道,客户对产品的需求是不断变化的,试图一开始就规定项目的细节和进度,显然是不现实的,只有开发团队和客户彼此精诚合做,常与沟通,频繁的客户反馈,才能促使项目的成功。
• 随时响应变化重于循规蹈矩
客户的需求在产品的开发阶段是不断变化的,即便谈判时肯定的需求,也可能会根据某些因素而发生巨大的改变。所以,敏捷方法认为,在制定计划时应尽量的简洁、灵活,以适应技术和需求方面的变更。固然,全部的未知的因素是不可能考虑周全的,这就要求咱们在制定计划时,留出必定的缓冲期,来应对这些未知状况。
• 适应变化
传统的软件开发强调的是,足够清晰的需求,制定详细的文档,按照预约的计划逐一进行开发、测试。这样的方式在制定好计划以后拒绝变化,没法应对客户对需求的实时更改,后续的维护必将会付出巨大的代价。
而敏捷方法则是以最简的方式来迎接变化,客户在整个开发过程当中都是参与者,开发团队可以在最短的时间内获得客户的反馈,不断适应需求的变动,从而使得最终的产品可以充分的符合客户的要求。
2.3敏捷开发
敏捷开发是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协做、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、可以很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程当中人的做用。
敏捷开发以用户的需求进化为核心,采用迭代、按部就班的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分红多个子项目,各个子项目的成果都通过测试,具有可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程当中软件一直处于可以使用状态。
敏捷开发能够说是在迭代开发的基础上发展造成的,它额外强调了沟通合做、以人为本的思想。敏捷开发的缺陷可能在于团队不能过大,通常少于20人,且要求成员都是精干,有互相信任的基础。
3.敏捷开发方法:
3.1 Scrum
3.1.1 什么是scrum
Scrum 是当前最流行的敏捷软件开发方法论和实施框架。
Scrum 是一种团队管理工做的方式,其将工做分解为较小的工做单元,并在周期性固定的时间段内持续地交付工做单元
上面描述的周期性固定的时间段,称为迭代(Iteration)或者冲刺(Sprint)。
上面描述的较小的工做单元,称为用户故事(User Story)。
用户故事可使用特定的格式来描述,其描述了一个对于客户有价值的工做,并且能够在一个迭代周期内完成。
3.1.2 Scrum 框架结构
Scrum敏捷开发流程主要包括:三个角色、三个物件和四个会议。
三个角色:
产品经理(Product Owner):主要负责肯定产品的功能和达到要求的标准,指定软件的发布日期和交付的内容,同时有权力接受或拒绝开发团队的工做成果。
敏捷教练(Scrum Master):主要负责整个Scrum流程在项目中的顺利实施和进行,以及清除挡在客户和开发工做之间的沟通障碍,使得客户能够直接驱动开发。
开发团队(Scrum Team):主要负责软件产品在Scrum规定流程下进行开发工做,人数控制在5~10人左右。
三个物件:
一、product Backlog : 产品Backlog指根据初始需求分解出的任务列表,包括功能性和非功能性的全部功能。
二、Sprint Backlog ,这是一个迭代计划会议的输出,包含开发团队在迭代周期内所要完成的工做列表。 若是说产品backlog是以story为单位,文档归属为PM团队,那么Sprint Backlog 是以小时(时间)为单位的,文档归属为开发团队。
三、燃尽图。
燃尽图(burn down chart)是在项目完成以前,对须要完成的工做的一种可视化表示。燃尽图有一个Y轴(工做)和X轴(时间)。理想状况下,该图表是一个向下的曲线,随着剩余工做的完成,“烧尽”至零。燃尽图向项目组成员和企业主提供工做进展的一个公共视图。(引自百度百科)
scrum基本流程(四个会议):
1.产品负责人负责整理user story,造成左侧的product backlog。
2.产品发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。
4.spring每日立会:天天,开发团队和产品负责人都要进行一个短暂的沟通。团队成员回答昨天作了什么?今天计划作什么?遇到了什么问题?
5.spring演示会议:在迭代周期结束时,开发团队向产品负责人及全部干系人进行演示,并接受反馈。
6.spring回顾会议:在迭代周期结束时,Scrum 团队经过会议来对迭代的过程进行总结,以促使团队自我持续改进。
3.2其余开发方法介绍
水晶方法,Crystal ,是由 Alistair Cockburn 和 Jim Highsmith 创建的敏捷方法系列,其目的是发展一种提倡“机动性的”方法,包含具备共性的核心元素,每一个都含有独特的角色、过程模式、工做产品和实践。Crystal 家族其实是一组通过证实、对不一样类型项目很是有效的敏捷过程,它的发明使得敏捷团队能够根据其项目和环境选择最合适的 Crystal 家族成员。
透明水晶方法,适合于一个小团队来进行敏捷开发,人数在6人如下为宜。
七大致系特征:
•1. 常常交付
任何项目,不管大小、敏捷程度,其最重要的一项体系特征是每过几个月就向用户交付已测试的运行代码。若是你使用了此体系特征,你就会发现,“常常交付”的做用仍是很让人吃惊的。
项目主办者根据团队的工做进展得到重要反馈。用户有机会发现他们原来的需求是不是他们真正想要的,也有机会将观察结果反馈到开发当中。开发人员打破未决问题的死结,从而实现对重点的持续关注。团队得以调整开发和配置的过程,并经过完成这些工做鼓舞团队的士气。
• 2.反思改进
在咱们的开发中,时常会出现这样那样的问题,技术难题、各类烦心事等等,这会在很大的程度上影响项目的进展。并且,若是其余任务对这项任务有依赖的话,那么其余的任务也会被推迟,这就极可能会致使项目的失败。
换句话说,若是,咱们可以常常在迭代会中及时的反思和改进,那么,这种事情应该是不会发生的,或者说发生了,也可以很快的找到解决方案去应对它。事实上,从慌乱的平常开发中,抽出一点时间来思考更为行之有效的工做方法就已经足够了。
• 3.渗透式交流
渗透交流就是信息流向团队成员的背景听觉,使得成员就像经过渗透同样获取相关信息。这种交流一般都是经过团队成员在同一间工做室内工做而实现的。若其中一名成员提出问题,工做室内的其余成员能够选择关注或不关注的态度,能够加入到这个问题的讨论当中来,也能够继续忙本身的工做。
•4. 我的安全
我的安全指的是当您指出困扰您的问题时,您不用担忧受到报复。我的安全很是重要,有了它,团队能够发现和改正自身的缺点。没有它,团队成员们知而不言,缺点则愈发严重以至于损害整个团队。我的安全是迈向信任的第一步。有了信任,团队协做才能真正的实施,开发效率也就会直线上升的。
•5.焦点
所谓“焦点”,就是肯定首先要作什么,而后安排时间,以平和的心态开展工做。确保团队成员清楚的了解他们本身最重要的任务是什么,确保他们可以有充分的时间去完成这些任务。
• 6.与专家用户创建方便的联系
与专家用户持续创建方便的联系可以给团队提供:对常常交付进行配置以及测试的地方,关于成品质量的快速反馈,关于设计理念的快速反馈,最新的(用户)需求。
• 7.配有自动测试、配置管理和常常集成功能的技术环境
自动测试能够为开发人员在代码修改后就能够进行自动测试,而且可以发现存在的一些bug,以致开发人员可以及时的进行修改,对于他们来讲,节省了时间,提升了效率,并且还不用为烦人的测试而苦恼。
总结:
基于敏捷指导思想 ,造成了很多敏捷软件开发方法 (例如XP、scrum、水晶方法等 ),它们大都强调适应性而非预测性、强调以人为中心,而不以流程为中心 ,以及对变化的适应和对人性的关注。
纵观全部敏捷开发方法,其基本都具有轻载、基于时间、Just Enough、并行并基于构件的迭代和增量的特色 。
4.敏捷管理工具
4.1 禅道
禅道是一款国产专业的研发项目管理软件,主要管理思想基于国际流行的敏捷项目管理方法—Scrum。
这是修真院里学员使用的项目管理工具,实际操做带你们了解一下。
5.实例:修真院敏捷开发流程
这里结合修真院敏捷开发PPT讲解。
最后再捋一遍:
敏捷开发是一种以人为核心、迭代、按部就班的开发方法。在敏捷开发中,软件项目常常被拆分为多个子项目或多个步骤来完成,而一个步骤又称为一次迭代,在每一次迭代完成以后,都会产生一个可交付的产品。这样作有效的分解了整个项目的复杂度,便于实现产品交付目标,同时在项目的早起,就能拿出初具雏形的产品。
敏捷开发方法的核心思想归纳起来,就是“以人为本”和“适应变化”。
本身目前仍是学习基础理论阶段,没有实际项目经验,讲敏捷可能纸上谈兵了,你们有什么意见和补充欢迎提出。
6.讨论
7.参考文献