Ⅰ 常用的敏捷开发模式有哪些
敏捷开发模式是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。
它们的具体名称、理念、过程、术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。
传统的开发模式是基于“计划”开展的,而因为大多数项目周期通常较长,这种计划模式在实施过程中会遇到很多问题,比如项目需求一开始并不明朗,项目团队也不一定完整,这时候计划本身都是存在瑕疵的,那项目开发管控过程可想而知。
而敏捷开发模式则提供了一种新的模式,即小步快走,不断调整,快速迭代!你需求不明朗没关系,我们先做一小丢丢,对了就继续不对也不至于说损失很大,调整方向也来得及,通过这种模式不断纠正最后不断趋近客户最终想要的东西。
既然是新的开发模式,那自然要匹配新的工具——低代码开发平台,这种将常用功能控件组件化,常用业务场景模板化的开发工具和传统底层编码模式相比,开发周期更短,开发成本更低,业务调整更加灵活,国内专注这一块的厂商也挺多。
天翎MYAPPS,普元,起步,天纵等老牌厂商已经耕耘了将近二十年,随着低代码概念的火热,又出现了搭搭云,简道云,宜搭,氚云等新晋品牌。
连微软上个月也宣布推出低代码产品并将商用。他们有的擅长复杂业务流程处理,有的擅长数据填报分析,有的擅长网站小程序搭建,在实践领域已经具备规模并日渐发展成熟。
敏捷开发模式在管理层面对项目开发模式产生了积极影响,低代码开发平台从技术层面对项目开发产生了积极影响,两者结合一定能开出美丽的花。
Ⅱ 敏捷开发的敏捷开发的原则
1. 快速迭代
相对那种半年一次的大版本发布来说,小版本的需求、开发和测试更加简单快速。一些公司,一年仅发布仅2~3个版本,发布流程缓慢,它们仍采用瀑布开发模式,更严重的是对敏捷开发模式存在误解。
2. 让测试人员和开发者参与需求讨论
需求讨论以研讨组的形式展开最有效率。研讨组,需要包括测试人员和开发者,这样可以更加轻松定义可测试的需求,将需求分组并确定优先级。 同时,该种方式也可以充分利用团队成员间的互补特性。如此确定的需求往往比开需求讨论大会的形式效率更高,大家更活跃,参与感更强。
3. 编写可测试的需求文档
开始就要用“用户故事”(User Story)的方法来编写需求文档。这种方法,可以让我们将注意力放在需求上,而不是解决方法和实施技术上。过早的提及技术实施方案,会降低对需求的注意力。
4. 多沟通,尽量减少文档
任何项目中,沟通都是一个常见的问题。好的沟通,是敏捷开发的先决条件。在圈子里面混得越久,越会强调良好高效的沟通的重要性。
团队要确保日常的交流,面对面沟通比邮件强得多。
5. 做好产品原型
建议使用草图和模型来阐明用户界面。并不是所有人都可以理解一份复杂的文档,但人人都会看图。
6. 及早考虑测试
及早地考虑测试在敏捷开发中很重要。传统的软件开发,测试用例很晚才开始写,这导致过晚发现需求中存在的问题,使得改进成本过高。较早地开始编写测试用例,当需求完成时,可以接受的测试用例也基本一块完成了。
Ⅲ 怎样让团队快速开始敏捷开发
试试Teamin。
我们之前做项目的时候,陷入bug里面怎么也搞不完,一直发不了版本,被老板骂很多次。 后来用Teamin管项目,很快就找到节奏,每周都能固定发布版本。总之,很赞!
Ⅳ 快速迭代就是敏捷开发吗
敏捷开发和迭代开发是不同的
迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
什么是迭代式开发?
每次只设计和实现这个产品的一部分,
逐步逐步完成的方法叫迭代开发,
每次设计和实现一个阶段叫做一个迭代。
在迭代式开发方法中,整个开发工作被组织为一系列的短小的、
固定长度(如3周)的小项目,被称为一系列的迭代。
每一次迭代都包括了需求分析、设计、实现与测试。
采用这种方法,开发工作可以在需求被完整地确定之前启动,
并在一次迭代中完成系统的一部分功能或业务逻辑的开发工作。
再通过客户的反馈来细化需求,并开始新一轮的迭代。
迭代式开发的优点:
1. 降低风险。
2. 得到早期用户反馈。
3. 持续的测试和集成。
4. 使用变更。
5. 提高复用性。
敏捷软件开发又称敏捷开发, 是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不 尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织 型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
Ⅳ 如何借助“敏捷开发”快速实现MVP
在敏捷实践体系中,迭代交付模式是敏捷开发的核心要素。敏捷开发方法有很多,Scrum提供了迭代管理和持续改进的框架,如图5-15所示。Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责维护过程和任务,产品负责人代表利益所有者,开发团队包括了所有开发人员。
图5-16 用户需求列表(产品功能需求)
步骤2. 召开计划会议和制定开发计划(计划版)
Scrum Master负责组织召开计划会议,产品经理和团队一起根据需求的重要性、开发量来确定开发优先级,做工作量预估,制定迭代开发计划(从需求列表中挑选出高优先级 Story(用户需求)[张乐飞3] 作为本次迭代完成的目标,这个目标的时间周期是1~4个星期,然后把这个Story进行细化,形成一个Sprint Backlog(迭代代办事项)[张乐飞4] )。开发团队一旦接受这些开发任务,就应该准时完成,不得修改交付标准。
步骤3. 执行迭代计划(任务板)
首先,你需要确定每次Sprint(开发冲刺)[张乐飞5] 的周期,短的周期可以更频繁的发布产品版本,因此可以从客户那里更迅速地收到反馈,修正错误。这个周期一般为1~4周,当然,你可以根据团队成熟程度或迭代任务确定一个合适的迭代周期,比如2周。这样可以让开发人员更投入地工作。
所谓Sprint,就是在一定时间内全身心投入开发。这个阶段通常用看板来管理需求,每个卡片[张乐飞6] 就是一个开发任务,工作完成后,可以将卡片移到下一个阶段,用看板管理需求,如图5-17所示:你也可以使用专门的软件来管理看板,例如国外的Jira、国内的明道。
图5-17 敏捷开发项目管理看板
在冲刺中,每一天都会举行项目状况会议,被称为“每日站会”。会议在固定地点和每天的同一时间举行,对于迟到者团队常常会制定惩罚措施(例如罚款,做俯卧撑,在脖子上挂橡胶鸡玩具)。不论团队规模大小,会议被限制在15分钟。所有出席者都应站立,每个人都必须发言。会议的目标是讨论当前的任务的状态,一个推荐的汇报形式是:我昨天已经做了什么?我接下来准备做什么?现在遇到什么阻碍和问题?注意在会议中团队成员不必要针对每个问题进行探讨,只是作为一个重要信息的反馈通道,具体问题相关成员在会后私下当面沟通解决,这样更加高效,避免浪费问题无关成员的时间。
步骤4. 产品测试和演示
因为每次的Sprint目标就是交付一个可以用的产品特性,所以测试工作非常重要。有不少方法可以减少测试周期,比如,你可以减少需求数量,或者让开发参与测试。当一个Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,这时,我们要进行演示会议,也称为评审会议。产品负责人和客户都要参加(最好本公司老板也参加),每一个Scrum团队的成员都要向他们演示自己完成的软件产品(这个会议非常重要,一定不能取消)。
步骤5. 回顾会议和下一个Sprint计划
每一个冲刺完成后,都会举行一次冲刺回顾会议。回顾会议也称为总结会议,会议的时间限制在4小时,以轮流发言方式进行,每个人都要发言,哪里做得好、哪里不好都可以提出,总结并讨论改进的地方,放入下一轮Sprint计划。
Ⅵ 如何通过“敏捷开发”模式开发MVP产品
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行产品开发。在敏捷开发中,产品项目在构建初期被切分成多个子产品,各个子产品的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大产品分为多个相互联系,但也可独立运行的小产品模块或功能,并分别完成,在此过程中产品一直处于可使用状态。
在2001年,17位敏捷方法论的拥护者和倡议者聚集在犹他州的雪鸟滑雪场,起草了一份陈述敏捷组织原则的文件。这份文件基本上代表了不同敏捷方法论的共同点,我们称之为“敏捷宣传”,也叫做敏捷软件开发宣言,是指导以人为中心的迭代软件开发方法,具体四个核心价值内容如图5-14所示。
图5-14 敏捷开发宣传
1. 个体和互动高于流程和工具
项目是通过人来完成的,流程和工具可以帮助人,但绝不能自行完成工作。虽然,过程和工具都是好东西,但是它们有时也会成为障碍。面对面的直接沟通,比一些流程性的文件和工具沟通,效率要高出很多。当然最好的是,在沟通后就多方达成的共识形成一个简要性的文档备录。
2. 工作的软件高于详尽的文档
可用软件的价值是很重要的,因为软件是为业务目标提供支持的,是可用软件(而不是文件)为客户和也会[张乐飞1] 传递了高价值。一般来说,一个敏捷项目的进展情况是由开发了多少可用软件来跟踪和报告的。但不是说文档一无是处,适量的文档在绝大多数的项目中是有益的和必要的。敏捷通过寻求“刚好足够”的文档来避免这种情况。其中的原则是任何文件的创建都应与为客户创造的价值直接挂钩,且不论该价值体现在现状还是将来。
3. 客户合作高于合同谈判
这个[张乐飞2] 价值观的核心是越接近你的客户越好。客户最清楚他想要什么,即使在需求明确过程中也会包含一些试验和错误。在合同谈判期间,试图避免所有的尝试和错误不发生是不现实的,也是徒劳的。定位你与客户的关系很重要,你是选择对抗你的客户还是选择与你的客户一起为接近方案努力而使每个人都受益?敏捷团队更愿意和客户在同一方向一起使劲而不是把力气花在背离客户的方向。
4. 响应变化高于遵循计划
任何一个曾在软件项目工作过的人都知道这些项目的本质就是变化。即使底层的技术也在快速变化,新的途径和可能性在不断的被打开。对变化响应的速度就决定你在市场上的灵活性,循规蹈矩的做事将被市场甩在后面,永远慢市场半拍,慢慢你的市场会被蚕食掉。
当你读到这个宣言,你会发现它具有最高原则性,因为敏捷方法论在最高层面上是一致的,但到具体细节上每种方法都会不同。除了敏捷宣言之外,还有12条准则的支持文件,为敏捷宣言提供了更多的扩充细节。
l准则1:我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。敏捷团队可以很快将可用软件交付到客户手中,并且是开放式地快速更新,给客户带来优先级最高地价值。
l准则2:欢迎对需求提出变更,即使在项目开发后期;要善于利用需求变更,帮助客户获得竞争优势。传统项目管理中地一个原则是设法去影响和控制会导致变化地因素。敏捷项目管理预期到需求会发生变化,并在实际过程中欢迎拥抱这些变化,即使这些变化发生在项目后期。迅速应对和适应变化能给客户带来显着地竞争优势,从而应对新的机遇。
l准则3:要不断交付可用的软件,周期从几周到几个月不等,且越短越好。不同的敏捷方法论采用不同的迭代周期,但都是相对较短的。关键是能快速把可用的软件交付到客户手上并能利用软件获得有意义的回报。较短的迭代周期可以使团队持续关注客户的价值。[张乐飞3]
l准则4:在项目过程中,业务人员、产品经理与开发人员必须在一起。敏捷项目管理,让业务人员、产品经理和开发人员彼此靠近,并时常让他们在同一个地方一起工作,通过这样的方式让业务人员和开发人员之间没有隔阂。是因为业务人员和开发人员的共同目标就是通过可用的软件向客户传递价值。
l准则5:要善于激励项目人员,给他们所需要的环境和支持,并相信他们能够完成任务。传统项目管理,常对员工进行微观管理,不仅告诉他们要做什么,还告诉他们如何做,无意间形成自上而下的管理方式。敏捷项目建立了一支强有力的团队并积极避免微观管理,要求一个自律的团队,自发告知开发人员做什么。提供相关资源,给予鼓励,相信团队能够完成任务。
l准则6:无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。非正式口头的沟通在敏捷项目管理中远比正式的书面沟通更普遍。其想法是两个人坐在一起为一个解决方案努力会比他们用邮件来来往往或交换文件更有效率。面对面沟通是敏捷项目管理的精髓。这种沟通是公开的,任何团队成员都可以自由参与对话。
l准则7:可用的软件是衡量进度的主要指标。计划和文件可能是有用的,但是当最根本的目标发生变化时,它们就可能失去应有的价值。传统项目往往极其纠结的是,项目的不断更新使得文件成为一种负担。真正的价值是通过结果来表达的,结果又是通过可用的软件来呈现的。
l准则8:敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持恒久稳定的进展速度。可持续开发的焦点是在团队身上,他们会努力保持一个稳定的可持续的进展速度,从而使得团队成员不会在迭代周期的尾端匆忙赶工。理想的目标是保持一种可持续的速度,使团队成员不会感到过度的压力和筋疲力尽,而是能够保持在一个理想的强度下工作。
l准则9:对技术的精益求精及对设计的不断完善将提升敏捷性。设计的越完善,维护起来就越简单,即使遇到变化。稳定和优质的项目会比劣质的项目更加允许团队快速应对变化。
l准则10:要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术,被所有的敏捷方法所拥护,尤其是精益方法。[张乐飞4] 关键点对客户价值保持关注和毫无犹豫的削减不增加价值的活动。保持简单不只是一种愿望,它使最基本的原则。
l准则11:最佳的架构、需求和设计出自自我组织的团队。自我组织是敏捷团队的核心元素之一。当一个团队是自我组织型的时候,说明该团队自己去决定工作如何分配及谁去做某个特定的工作,而不是人力资源部门或管理层来决定。不仅小团队是自我组织的,较大的跨职能团队也可以是自我组织的。
l准则12:团队要定期反省如何能够做到更有效,并相应的调整团队的行为。敏捷项目中最可预见的事情就是变更。传统项目里当项目或阶段完成时开会总结是最常见的做法。而敏捷试着通过更频繁的回顾来完成这项工作。在一个回顾活动中,团队查看各迭代周期中已完成的工作或发布,并评估下一次如何改进他们的做法。每日站立会议即每天简单碰头15分钟是另一项协调团队努力方向、团队自我评定和自我调整的重要方式。
敏捷开发的业务目标是更早的交付价值,价值的交付不仅仅是早晚上线两天的问题,而是更早上线能够给自己和客户带来更大的价值越晚交付,价值越低。更快不是绝对速度的快,而是指时间上的早,即通过迭代交付实现分批和更早的交付。同时灵活地响应变化,当今世界跨界颠覆的案例数不胜数,一个企业的核心能力不再是已有的能力有多强,而是灵活响应变化,快速学习的能力有多好。
Ⅶ 如何敏捷开发 如何快速迭代
快速迭代,版本更新快,所以要考虑降低项目风险,确保正确的方向。
敏捷开发能够缩短项目的反馈周期,因其将项目分成了若干个迭代周期,每个迭代周期结束都能立即反馈。且通过不断的沟通,还能减少理解上的偏差,配合反馈,减少误解,从而降低修正错误的代价。且每个迭代周期的结束都能接受验证,从而能快速的适应变化,及时的适应新的需求,保证产品的正确性。
Ⅷ 敏捷开发模式的对比其它方法
敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性。
适应性的方法集中在快速适应现实的变化。当项目的需求起了变化,团队应该迅速适应。这个团队可能很难确切描述未来将会如何变化. 两者没有很多的共同点,瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。
瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。
相对来讲,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强。
有人可能在这样小规模的范围内的每次迭代中使用瀑布式方法,另外的人可能将选择各种工作并行进行。
Ⅸ 敏捷方法的敏捷开发
敏捷开发(agile development)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发是全新理论吗?答案莫衷一是。细心的人们可以发现,敏捷开发其实借鉴了大量软件工程中的方法。迭代与增量开发,这两种在任何一本软件工程教材中都会被提到的方法,在敏捷开发模式中扮演了很重要的角色。再向前追溯,我们还也可见到瀑布式与快速原型法的影子,也许还有更多。
改善,而非创新。敏捷开发可理解为在原有软件开发方法基础上的整合——取其精华,去其糟粕。因此敏捷开发继承了不少原有方法的优势。“在敏捷软件开发的过程中,我们每两周都会得到一个可以工作的软件,”Fowler介绍,“这种非常短的循环,使终端客户可以及时、快速地看到他们花钱构建的软件是一个什么样的结果。”
也许是因为时间关系,Fowler只说出了这些优势中的一部分。允许开发过程中的需求变化、通过早期迭代可以较早发现风险、使代码重用变得可行、减少项目返工……借鉴了众多先进方法和丰富经验,拥有的众多优势使得敏捷开发看来已经成为解决软件危机的标准答案。
问题与思考然而,我们不得不面对的现实却是,模式与方法的优化并不意味着问题的终结。作为一种开发模式,敏捷开发同样需要面对众多挑战。
大项目的拆分意味着更多子项目的出现,协调这些同步或异步推进的子项目,合理的资源调配都将变得更加复杂。另外,在当前项目和项目组普遍“增容”的情况下,遇到的问题同样成倍增长。人的重要性被提到了更高的高度,而缺乏有效协调手段,减少人员流动和项目变更对整个项目造成的影响也将成为一大挑战……新方法带来众多便利的同时,也相应引发了几乎同样多的问题。
敏捷开发(agile development)概念从2004年初开始广为流行。Bailar非常支持这一理论,他采取了敏捷方式组建团队:Capital One的敏捷团队包括3名业务人员、两名操作人员和5~7名IT人员,其中包括1个业务信息指导(实际上是业务部门和IT部门之间的翻译者);另外,还有一个由项目经理和至少80名开发人员组成的团队。这些开发人员都曾被Bailar送去参加过敏捷开发的培训,具备相关的技能。
每个团队都有自己的敏捷指导(Bailar聘用了20个敏捷指导),他的工作是关注流程并提供建议和支持。最初提出的需求被归纳成一个目标、一堆记录详细需要的卡片及一些供参考的原型和模板。在整个项目阶段,团队人员密切合作,开发有规律地停顿--在9周开发过程中停顿3~4次,以评估过程及决定需求变更是否必要。在Capital One,大的IT项目会被拆分成多个子项目,安排给各敏捷团队,这种方式在敏捷开发中叫蜂巢式(swarming),所有过程由一名项目经理控制。
为了检验这个系统的效果,Bailar将项目拆分,从旧的瀑布式开发转变为并列式开发,形成了敏捷开发所倡导的精干而灵活的开发团队,并将开发阶段分成30天一个周期,进行冲刺--每个冲刺始于一个启动会议,到下个冲刺前结束。
在Bailar将其与传统的开发方式做了对比后,他感到非常兴奋--敏捷开发使开发时间减少了30%~40%,有时甚至接近50%,提高了交付产品的质量。不过,有些需求不能用敏捷开发来处理。 Bailar承认,敏捷开发也有局限性,比如对那些不明确、优先权不清楚的需求或处于较快、较便宜、较优的三角架构中却不能排列出三者优先级的需求。此外,他觉得大型项目或有特殊规则的需求的项目,更适宜采用传统的开发方式。尽管描述需求一直是件困难的事,但经过阵痛之后,需求处理流程会让CIO受益匪浅。
敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,他们认为: 个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合同谈判 响应变化 胜过 遵循计划 并提出了以下遵循的原则: 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。 工作的软件是首要的进度度量标准。 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。 不断地关注优秀的技能和好的设计会增强敏捷能力。 简单是最根本的。 最好的构架、需求和设计出于自组织团队。 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。 一、敏捷开发方法
(一) 说明 本文是阅读Alistair Cockburn的Agile Software Development和William C. Wake的XP Explored的一些笔记和想法,Agile Software Development是一组软件开发方法的总称,包括(Crystal , Extreme Programming , Adaptive software development等等)。敏捷开发方法又称为“轻量级”开发方法。
下面这段话摘自Martin Fowler的一篇文章:
从无到繁重再到敏捷多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” (code and fix)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。 我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。 这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞重型”方法,或Jim HighSmith 所称的“巨型”(monumental)方法。 作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。 敏捷型与滞重型方法有一些显着的区别。其中一个显而易见的不同反映在文档上。敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应该是源码。 但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表象,它其实反映的是更深层的特点: ? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。 ? 敏捷型方法是“面向人”的(people-oriented) 而非“面向过程”的 (process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调软件开发应当是一项愉快的活动。我认为以上两个特点很好的概括了敏捷开发方法的核心思想:适应变化和以人为中心
(二) 方法背后的思想
Alistair Cockburn在Agile Software Development中讲述了敏捷开发方法背后的思想
人们掌握过程(process)可以分为3个阶段:1 following 遵循一个定义好的process2 detaching 知道不同process的适用范围,在不同的场合使用不同的process3 fluent 不关心是否遵循特定的process,知道在什么情况下采用什么动作
软件开发是一个充满发明和交流的协作性游戏(cooperative game of invertion and communication)。软件开发的首要目标是生产出软件,遵循特定的过程和模型只是手段,只要传递了足够的信息,手段是次要的。交流的效果要远远重于交流的形式(Effect of communication is more important than the form of communication)。一般软件开发有两个目标:1 尽快的生产出软件2 为下一个team或项目做准备,有时这两个目标是矛盾的,我们要在这两个目标之间寻求平衡
在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:1 容易犯错误,因此必须在错误扩散之前找到并改正错误2 当觉得可能失去较多的时候,不愿意冒险3 重新构造而不愿意重复使用已有的东西4 难于坚持一个习惯
针对个人因素的几个建议:1 具体的模型较抽象的模型更容易理解2 从一个例子开始是容易的3 通过观察他人的成果学习4 要有足够的不受打扰的时间5 分配的工作要与个人意向,能力匹配6 不正确的奖励会有坏作用,从长期看个人兴趣比奖励更重要,培养在工作中的自豪感:1) pride in work参与工作的自豪感,通常参与一个重要的工作会有自豪感2) pride in accomplishment 完成工作的自豪感,长期未完的工作会使士气低落3)pride in contribution 为他人贡献的自豪感7 鼓励关心其他人的工作和整体的工作
在一个团队之间,交流是最重要的,实践证明面对面的实时的交流是最有效的,对交流的延误会损失信息,白板是最好的交流工具,交流工具的先进并不能提高交流效果。文档的作用是记录和备忘,不能通过文档交流。
敏捷开发方法要避免的过程设计的几个常见错误1 对所有的项目使用同一种过程2 没有弹性3 过于沉重4 增加不必要的“必须完成”(“should do” is really should?)5 没有经过实践检验
敏捷开发方法过程设计的几个原理:1 交互的面对面的交流是代价最小,最迅速的交换信息的方法2 超过实际需要的过程是浪费的3 大的团队需要重量级方法4 处理重大问题的项目需要重量级方法强调5 增加反馈和交流可以减少中间产品和文档的需求6 轻量级方法更强调理解(understanding),自律(discipline)和技能(skill),重量级方法更强调文档(documentation),过程(process)和正式(formality)understanding指整个团队关于项目的全部知识,包括讨论的过程,documentation只能记录其中的一部分discipline是指个人主动的完成工作,process指个人根据指令完成工作skill指具有良好技能的人可以省略中间的产品,formality指必须按照规定步骤完成工作
7 确定开发中间的瓶径,提高它的效率对于瓶径处的工作应该尽量加快,减少重复,(使用更熟练的人,使用更多的人,使用更好的工具,使瓶径处的工作的深入尽量稳定)对于非瓶径处的工作可以多一些重复,在输入还不确定的情况下也可以尽早开始。
这些原理的几个结论:1 向一个项目增加人员要花费较大代价(constly),因为原有人员和新人员之间的交流要花费大量时间2 团队的规模经常是跳跃的,例子:需要6个熟练的程序员,但是只有4个,于是增加不熟练的程序员,结果团队的大量时间花费在培训不熟练的程序员上面,最后增加到了20个不熟练的程序员。3 应该侧重于提高团队的技能而不是扩充团队4 对不同的项目使用不同的过程5 在适用的条件下,轻量级的方法优于重量级的方法6 对不同的项目要裁减过程
敏捷开发方法的原则是“刚刚好”(Light and Sufficient)
Ⅹ 敏捷开发方式有哪些
敏捷开发包括一系列的方法,主流的有如下七种:
XP
XP(极限编程)的思想源自 Kent Beck和Ward Cunningham在软件项目中的合作经历。XP注重的核心是沟通、简明、反馈和勇气。因为知道计划永远赶不上变化,XP无需开发人员在软件开始初期做 出很多的文档。XP提倡测试先行,为了将以后出现bug的几率降到最低。
SCRUM
SCRUM是一种迭代的增量化过程,用于产品开发或工作管理。它是一种可以集合各种开发实践的经验化过程框架。SCRUM中发布产品的重要性高于一切。
该方法由Ken Schwaber和 Jeff Sutherland 提出,旨在寻求充分发挥面向对象和构件技术的开发方法,是对迭代式面向对象方法的改进。
Crystal Methods
Crystal Methods(水晶方法族)由Alistair Cockburn在20实际90年代末提出。之所以是个系列,是因为他相信不同类型的项目需要不同的方法。虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。
FDD
FDD (Feature-Driven Development,特性驱动开发)由Peter Coad、Jeff de Luca 、Eric Lefebvre共同开发,是一套针对中小型软件开发项目的开发模式。此外,FDD是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、 易于被开发团队接受,适用于需求经常变动的项目。
ASD
ASD(Adaptive Software Development,自适应软件开发)由Jim Highsmith在1999年正式提出。ASD强调开发方法的适应性(Adaptive),这一思想来源于复杂系统的混沌理论。ASD不象其他方法那样 有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
DSDM
DSDM(动态系统开发方法)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它已成为应用最为广泛的快速应用开发方法。
DSDM不但遵循了敏捷方法的原理,而且也适合那些成熟的传统开发方法有坚实基础的软件组织。
轻量型RUP
RUP其实是个过程的框架,它可以包容许多不同类型的过程, Craig Larman 极力主张以敏捷型方式来使用RUP。他的观点是:目前如此众多的努力以推进敏捷型方法,只不过是在接受能被视为RUP 的主流OO开发方法而已。