您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 敏捷软件开发方法简介.
敏捷软件开发方法简介——以极限编程为例宋扬songyang@pku.edu.cn北京大学地球与空间科学学院2003年5月18日主要内容•敏捷方法的含义•软件过程的比较•极限编程(eXtremeProgramming,XP)简介–准则–法则–活动–实践–讨论和应用实例“敏捷”的含义轻巧、机敏、迅捷、灵活、活力、高效……•敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,做到文档、度量适度。•适用于各类软件企业敏捷方法产生的背景现代软件的•复杂性–软件越来越复杂•可变性–需求越来越多变•一致性–过程越来越规范软件开发过程敏捷化趋势据国际著名咨询机构CutterConsortium对全球200位IS/IT经理所做的调查——3个占优的重载方法:•51%RationalUnifiedProcess•27%CMM•26%ISO9000大约50%的被调查者预计到2003年其50%以上的项目会使用敏捷方法;14%的被调查者认为其所有的项目会使用敏捷方法。FromTHEDECISIONISIN:AGILEVERSUSHEAVYMETHODOLOGIES,VOL.2,NO.19,byRobertCharette,SeniorConsultant,CutterConsortium敏捷价值观•“注重个人及互动胜于过程和工具”•“注重可用的软件胜于详尽的文档”•“注重客户协作胜于合同谈判”•“注重响应变化胜于恪守计划”《敏捷宣言》12条原则1.最优先的目标是通过尽早地、持续地交付有价值的软件来满足客户。2.欢迎需求变化,甚至在开发后期。敏捷过程控制、利用变化帮助客户取得竞争优势。3.频繁交付可用的软件,间隔从两周到两个月,偏爱更短的时间尺度。4.在整个项目中业务人员和开发人员必须每天在一起工作。5.以积极主动的员工为核心建立项目,给予他们所需的环境和支持,信任他们能够完成工作。6.在开发团队内外传递信息最有效率和效果的方法是面对面的交流。7.可用的软件是进展的主要度量指标。8.敏捷过程提倡可持续发展。发起人、开发者和用户应始终保持稳定的步调。9.简化——使必要的工作最小化的艺术——是关键。10.持续关注技术上的精益求精和良好的设计以增强敏捷性。11.最好的架构、需求和设计产生于自我组织的团队。12.团队定期地对运作如何更加有效进行反思,并相应地调整、校正自己的行为。代表方法•瑞理统一开发过程:RationalUnifiedProcess•敏捷建模:AgileModeling•极限编程:eXtremeProgramming•自适应软件开发:AdaptiveSoftwareDevelopment•水晶方法体系:Crystaletc.RUP(RationalUnifiedProcess)iter.#1iter.#2iter.#niter.#n+1iter.#n+2iter.#miter.#m+1需求设计实现测试分析核心工作流程先启精化构造转移精化过程中的反复过程初步的反复过程反复序列RUP是Rational公司的改进过程的规范,它被设计成一种由用例驱动的、以体系结构为中心的软件开发过程,它以迭代的方式前进,通过执行工作流程递增地产生结果。它的主要四个阶段是先启、精化、构建和转移,五个核心工作流程为需求、分析、设计、实现和测试。由于RUP是一种框架,你可以以不同的方式来使用它,如象非常传统的“瀑布”式开发方式,或敏捷式,如dX。你可以把用得轻捷灵便,也可把它弄成繁文缛节。这取决于你如何在你的环境中对它裁剪运用。XP到RUP的映射先启精化构建转移需求用户素材小型发布接纳测试测量分析CRC卡片迭代计划任务计划、迭代编程接受背后设计系统隐喻单元测试重构持续集成实现编码标准简单设计集体代码所有权运行所有测试•CRC卡片:Class-Responsibility-CollaboratorAgileModeling•AM是一种最近才出现的软件思想•AM是一种轻方法论•XP实践既给了AM灵感,也是AM的一种具体实现AM核心原则•主张简单•拥抱变化.•你的第二个目标是可持续性。简单的说,你在开发的时候,你要能想象到未来。•递增的变化•令投资人的投资最大化•有目的的建模•多种模型•高质量的工作•快速反馈•软件是项目的主要目标•轻装前进AM补充原则•内容比表示更重要•三人行必有我师•了解你的模型•了解你的工具•局部调整•开放诚实的沟通自适应软件开发ASD的核心是三个非线性的、重迭的开发阶段:猜测,合作与学习。水晶方法体系水晶方法体系与XP一样,都有以人为中心的理念,但在实践上有所不同。水晶方法体系考虑到人们一般很难严格遵循一个纪律约束很强的过程,因此,与XP的高度纪律性不同,水晶方法体系探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。也就是说,虽然水晶系列不如XP那样的产出效率,但会有更多的人能够接受并遵循它。ISO9000•PDCA循环,即由计划(PLAN)、实施(DO)、检查(CHECK)、处理(ACTION)这四个密切相关的阶段所构成的工作方式•持续改进面向对象软件工程概念模型极限编程(eXtremeProgramming)——轻量级敏捷软件开发方法极限编程(XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流。这可以帮助团队最大化地发挥他们的价值。•XP诞生了大概有5年•XP是以开发符合客户需要的软件为目标而产生的一种方法论•XP是一种以实践为基础的软件工程过程和思想•XP认为代码质量的重要程度超出人们一般所认为的程度•XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件XP准则——XP软件开发是什么样的•沟通•简单•反馈•勇气有益的潜在补充准则:•尊重•谦逊沟通XP认为项目成员之间的沟通是项目成功的关键,并把沟通看作项目中间协调与合作的主要推动因素。简单XP假定未来不能可靠地预测,在现在考虑它从经济上是不明智的,所以不应该过多考虑未来的问题而是应该集中力量解决燃眉之急。反馈XP认为系统本身及其代码是报告系统开发进度和状态的可靠依据。系统开发状态的反馈可以作为一种确定系统开发进度和决定系统下一步开发方向的手段。勇气代表了XP认为人是软件开发中最重要的一个方面的观点。在一个软件产品的开发中人的参与贯穿其整个生命周期,是人的勇气来排除困境,让团队把局部的最优抛之脑后,达到更重大的目标。表明了XP对“人让项目取得成功”的基本信任态度。XP的法则——一项实践在XP环境中成功使用的依据•快速反馈•假设简单性•递增更改•提倡更改•优质工作快速反馈XP提倡尽可能早地、迅速地每天反馈,让编程人员始终把注意力放在最重要的软件功能上,促使系统快速演进。XP迭代过程假设简单性XP试图把注意力集中在能工作的尽可能最简单的实现上;另一方面,可以根据给定的项目资源条件,最优地分配项目资源。递增更改XP认为首次更改就尝试重大更改绝对不会成功,提倡以重构概念为基础做小改动,用期望的功能逐步增强系统。提倡更改最佳策略是在实际解决最重要的问题的前提下保留最多选项的那一个,在交付最需要的东西上保留选择余地。优质工作XP活动——XP软件开发的基石•编码•测试•倾听•设计编码作为一种轻量级方法论,XP明确放弃了系统建档和分析以外的任何外在活动。分析保留为一种相当简单,但是在和客户的日常沟通中发生的持续活动。文档则明确不予鼓励,所以编码成为XP最主要的活动。测试为了确保编写好的代码能实践工作,XP提倡编写大量测试来检查代码是否正确。倾听XP编程人员倾听客户和其他编程人员的需求和意图。设计从日常的编码中返回来进行一些一般性设计,小的设计成为XP编程人员日常事务的一部分。XP的实践——项目成员用户成功执行XP活动的技术1.现场客户(On-siteCustomer)2.计划游戏(PlanningGame)3.系统隐喻(SystemMetaphor)4.简单设计(SimpleDesign)5.代码集体所有(CollectiveCodeOwnership)6.结对编程(PairProgramming)7.测试驱动(Test-driven)8.小型发布(SmallReleases)9.重构(Refactoring)10.持续集成(Continuousintegration)11.每周40小时工作制(40-hourWeeks)12.代码规范(CodingStandards)XP层次结构过程团队实践编程现场客户、测试、计划游戏、小型发布简单设计、测试、重构、编码标准代码集体所有、持续集成、隐喻、编码标准、每周40小时工作制、结对编程、小型发布1现场客户始终在开发团队中有一位客户。现场客户的工作:•回答问题•编写验收测试•运行验收测试•指导迭代•接受版本2计划游戏以业务优先级和技术估计为基础,决定下一版本发布的范围。3系统隐喻在XP中,隐喻是一种概念框架并提供名称的描述系统,类似于其他方法中的体系结构(或体系结构基准)。•共识•共享的术语空间例子:Windows风格的界面、网上购物站点的购物车4简单设计系统应设计得尽可能简单。聚沙成塔,集腋成裘5代码集体所有整个团队拥有所有代码。任何人都可以更改他们需要更改的部分。没有唯一对代码有所有权的人。题外话一编程的乐趣(FP.Brooks)•创造的快乐•开发对他人有用的东西•整体过程的魅力•持续学习的快乐•来自于易于驾驭的介质上工作编程的快乐在于它不仅满足了我们内心深处进行创造的渴望,而且还唤醒了每个人内心的情感。题外话二编程的苦恼(FP.Brooks)•来自追求完美•来自由他人设定目标、供给资源、提供信息。•陷入琐碎的重复性劳动•持续学习的快乐•无用功这,就是编程,一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。6结对编程结对编程是让两个人共同设计和开发代码的实践。结对者是全职合作者,轮流执行键入和监视;这提供了持续的设计和代码评审。不是两个人做一个人的事情。积极影响•经济性•满意度•提高设计质量:分享不同的先验知识、理解和角色•持续复查•问题解决更快:集思广益和配对接力•学习:耳濡目染•团队建设和沟通•有利于人员和项目管理卡车问题一个项目组集体外出,不幸被卡车撞上。有多少人受伤使项目不得不停止?最坏的情况是一个!结对编程工作区一般工作区学到的经验•程序员和设计人员\协调人结对编程更有效。•键盘输入效率!•自愿结对编程我们行业的主要问题实质上更侧重于社会学而不是科学技术。——《人件》9重构重构是XP的一个重要组成部分。所谓重构是指在不改变代码外在行为的前提下对代码做出的修改,以改进代码的内部结构。重构是一种有纪律的、经过训练的、有条不紊的代码整理方法,可以将整理过程中不小心引入错误的可能性降到最低。从本质上说,重构就是在代码写好之后改进它的设计。重构的节奏:重新推理、小的更改、重新推理、小的更改、重新推理…7测试驱动结对和简单设计常见问题和解答测试编码重构集成或者丢弃8小型发布XP推荐小而频繁的有意义发布。10持续集成持续集成的思想是任何时候只有一项任务完成,就集成新代码,构造系统并测试。持续集成是每日构建\每晚构建的一种极限形式,是XP的重要基础。每日构建\每晚构建是将一个软件项目的所有最新代码取出,从头开始编译、链接,用安装软件包将链接好的程序安装好,运行安装后的软件,使用测试工具对主要功能进行测试,发现错误并报告错误的完整过程。让开发人员在第一时间了解到软件的错误,并迅速排除错误,是每日构建\每晚构建最重要的目标之一。每日构建\每晚构建必须出日志和报告,并发布构建结果的有关信息,最好能够使用自动化工具发出电子邮件通知。每日构建是项目的心跳。如果一个项目的心跳停止了,这个项目就死亡了。Treatthedailybuildastheheartbeatoftheproject.Ifthereisnoheartbeat,theprojectisdead.作用•降低集成风险•加强错误诊断•降低不
本文标题:敏捷软件开发方法简介.
链接地址:https://www.777doc.com/doc-3638140 .html