1敏捷软件开发麦哲思科技(北京)有限公司2报告人•任甲林–高级咨询顾问,主要从事提升软件研发能力的培训与咨询–Blog:•–工程经验:•93年从事软件开发,参与了50多个项目的开发•曾为中国银联、中国互联网络信息中心、深圳富士康、深圳港航、四川长虹、大连华信、山东中创、北京天柏、南京润和等多家公司咨询3内容•敏捷的含义•产生背景•基本理念•XP方法简介•Scrum方法简介•小结4你是如何理解的”敏捷”?请列出描述敏捷思想的5个词?5““““敏捷””””的含义轻巧、机敏、迅捷、灵活、活力、高效……•敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,做到文档、度量适度。•适用于各类软件企业•所有敏捷方法的特征:–短期的时间箱迭代–对计划和目标的自适应–渐进式精化6敏捷的含义•它并不意味着–没有文档–没有设计–没有计划–万能钥匙7开发方法的简史WATERFALL(Royce)WATERFALL(Royce)WATERFALL(Royce)WATERFALL(Royce)Requirements,designRequirements,designRequirements,designRequirements,designimplementation,implementation,implementation,implementation,verification&verification&verification&verification&maintenancemaintenancemaintenancemaintenance1960196019601960858585859191919119801980198019801970197019701970V-MODEL(Anon)V-MODEL(Anon)V-MODEL(Anon)V-MODEL(Anon)AlignstestingtoAlignstestingtoAlignstestingtoAlignstestingtoWaterfallWaterfallWaterfallWaterfalldevelopmentdevelopmentdevelopmentdevelopmentSPIRALMODELSPIRALMODELSPIRALMODELSPIRALMODEL(BarryBoehm)(BarryBoehm)(BarryBoehm)(BarryBoehm)IterativeIterativeIterativeIterativeRADRADRADRAD(JamesMartin)(JamesMartin)(JamesMartin)(JamesMartin)Prototyping,Prototyping,Prototyping,Prototyping,iterative,time-boxed,iterative,time-boxed,iterative,time-boxed,iterative,time-boxed,userdrivenuserdrivenuserdrivenuserdrivenRUP(Rational)RUP(Rational)RUP(Rational)RUP(Rational)Objectoriented,Objectoriented,Objectoriented,Objectoriented,iterative,time-boxed,iterative,time-boxed,iterative,time-boxed,iterative,time-boxed,userdrivenuserdrivenuserdrivenuserdrivenAGILEe.g.XPAGILEe.g.XPAGILEe.g.XPAGILEe.g.XP(KentBeck)(KentBeck)(KentBeck)(KentBeck)Incremental,userIncremental,userIncremental,userIncremental,userdriven,lowprocessdriven,lowprocessdriven,lowprocessdriven,lowprocess9898989899999999WaterfallWaterfallWaterfallWaterfallV-ModelV-ModelV-ModelV-ModelSpiralModelSpiralModelSpiralModelSpiralModelRADRADRADRADRUPRUPRUPRUP8敏捷方法产生的背景现代软件的•复杂性–软件越来越复杂•可变性–需求越来越多变•一致性–过程越来越规范需求变化率0.0010.0020.0030.0040.0050.001101001000100001000000规模(fp)需求规模变化率需求变化率9软件是新产品开发一般情况下是主动适应没有预定义的变动,并且改动率也比较高一般情况下是不去适应没有预定义的变动,并且改动率也比较低。在开始阶段,识别、定义、调度和安排所有的细节活动是不可能的。通过构建反馈周期,推动自适应步骤有可能识别、定义、调度和安排所有的细节活动在开始阶段很难进行估算。随着经验数据的出现,计划与估算的可能性才会相应增加在开始阶段就能估算出具有参考价值的工作量和成本不可能在前期创建一成不变的、详细的规格说明在第1次完成规格说明后,就进行构建新产品开发(个性定制)预见式制造(重复生产)10为什么敏捷方法可以成功?11WaterfallAgile敏捷方法与规范方法的平衡策略的比较ScopeisFixedQualityisFixedtoHigh!12敏捷方法宣言2001200120012001年初年初年初年初个体和交互过程和工具overoveroverover可以工作的软件面面俱到的文档overoveroverover客户合作合同谈判overoveroverover响应变化遵循计划overoveroverover13沟通方式的有效性14《敏捷宣言》12条原则1.最优先的目标是通过尽早地、持续地交付有价值的软件来满足客户。2.欢迎需求变化,甚至在开发后期。敏捷过程控制、利用变化帮助客户取得竞争优势。3.频繁交付可用的软件,间隔从两周到两个月,偏爱更短的时间尺度。4.在整个项目中业务人员和开发人员必须每天在一起工作。5.以积极主动的员工为核心建立项目,给予他们所需的环境和支持,信任他们能够完成工作。6.在开发团队内外传递信息最有效率和效果的方法是面对面的交流。7.可用的软件是进展的首要度量指标。8.敏捷过程提倡可持续开发。发起人、开发者和用户应始终保持一个长期的、稳定的开发速度。9.简化——使必要的工作最小化的艺术——是关键。10.持续关注技术上的精益求精和良好的设计以增强敏捷性。11.最好的架构、需求和设计产生于自我组织的团队。12.团队定期地对运作如何更加有效进行反思,并相应地调整、校正自己的行为。15代表方法•瑞理统一开发过程:RationalUnifiedProcess•敏捷建模:AgileModeling•极限编程:eXtremeProgramming•自适应软件开发:AdaptiveSoftwareDevelopment•水晶方法体系:Crystal•Scrum方法etc.16极限编程简介17极限编程(eXtremeProgramming)极限编程(XP)是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流。这可以帮助团队最大化地发挥他们的价值。•XP诞生于1996年•XP是以开发符合客户需要的软件为目标而产生的一种方法论•XP是一种以实践为基础的软件工程过程和思想•XP认为代码质量的重要程度超出人们一般所认为的程度18•Fortune500公司中成功应用XP的公司包括Ford,Daimler-Chrysler,FirstUnionNationalBank,IBM,HP等等。•2-10人的小规模开发队伍(小规模开发队伍小规模项目)。•越来越多的公司开始使用敏捷开发过程,或者将其与RUP等开发过程结合使用。谁在用XP19什么时候需要XP?•需求不明确、变化快•高风险:在特定的时间内,面对一个相当难开发的系统•中小型团队(人数不超过10个)•有责任心的、自觉自励的团队20XP体现四个价值目标•沟通(communication)•简单(simplicity)•反馈(feedback)•勇气(courage)21沟通•项目中出现的问题无一例外总是出自那些不愿与别人探讨重要问题的人身上:–有时程序员不把重要的变化告诉别人;–有时程序员不向客户问该问的问题,而导致在关键性领域的决策中出现失误;–有时管理人员不向程序员问该问的问题,而导致项目进度被误报;–有时程序员向管理人员报告了一个坏消息,而管理人员却迁怒与他;–有时客户告诉了程序员一些重要的事情,而程序员却把他当成了耳旁风;•敏捷方法采用了一些实践来强制沟通,比如结对编程、策划游戏、验收测试等。22简单•什么是能成功的最简单的东西?•今天做的简单一些,然后再明天需要时再多花些时间进行改进,要比今天做的复杂,但以后再也用不到要好•需求是否可以更简单一些呢?•设计是否可以更简单一些呢?•沟通的越多,就越清楚哪些该做,哪些不该做•系统越简单,需要的沟通就越少23反馈•乐观是大忌,反馈是良药•及时反馈•反馈的频度:分、小时、天、迭代周期–程序员编写完程序后实时进行单元测试,以得到程序质量的反馈–客户编写完新的用户故事后,程序员马上对其进行估算,以得到故事质量与投入的反馈–程序员完成了用户故事后,客户进行验收测试,以反馈产品的质量–每天的站立会议可以使项目组的所有人了解项目的进展–每次迭代结束了,进行已完成软件的演示,以获得客户的反馈•尽早反馈坏消息•反馈越多,沟通越容易24勇气•正视现实,而非逃避现实,正式问题,而非逃避问题•勇于承担任务•勇于修改Bugs•勇于重构•勇于应对变化•勇于创新,避免教条•为胜利而战,而不是为“不犯错”而战•满足了沟通、简单、反馈原则之后再具有了勇气,才是真正的有勇有谋25XP的开发过程26XP的过程27开发开发开发开发迭代计划CRC卡设计承担Task分解TaskPair进行测试驱动的开发持续集成和发布迭代结束发布计划产生Story评估Story开始提炼Metaphor多个迭代多期计划28XPXPXPXP的增量过程的增量过程的增量过程的增量过程简单设计迭代计划测试驱动Pair开发持续集成重构1..N1..N1..N1..N个IterationIterationIterationIteration发布计划1..N1..N1..N1..N个ReleaseReleaseReleaseRelease小发布发布1..N1..N1..N1..N个TaskTaskTaskTask29XP的反馈环30XPXPXPXP过程过程过程过程1、准备开发环境。2、ExplorationPhase⑴程序员和用户一起把需求分解为UserStory,用户写Story卡。⑵用户把在Story卡上标上商业优先级(1,2,3)。⑶程序员看卡片,估计所需要的理想开发周,把估计的时间写在Story卡上(1,2,3)。(3.1)由一个Senior估计时间。(3.2)如果估计不出来,做Spike。(3.2)如果时间大于三周,分解Story,撕掉旧Story卡,写下新的Story卡。回到(3),重新估计。(3.3)由一个Junior估计时间。衡量二者的差异,取平均值。(3.3)如果时间大于三周,回到(3.2)。(3.4)如果时间小于一周,尝试和其它Story合并。合并后,撕掉原来的Story卡,写下新的Story卡。31XP过程2、ExplorationPhase(4)程序员看卡片,估计开发风险。把风险级别写在Story卡上(1,2,3)。(4.1)程序员将所有卡片放在一起,然后阅读。如果认为风