1、软件开发的新方法NewMethodology概概 述述 传统的软件开发方法传统的软件开发方法 强调过程 强调文档 开发人员负担过重重载(Heavyweight)方法概述概述Agile方法的产生方法的产生针对上述问题,产生了一系列轻载(Lightweight)方法,如XP,SCRUM等。2001年2月,新方法的一些创始人在美国犹他州成立Agile 联盟(http:/www.agilealliance.org/)LightweightAgile概述概述Agile方法的含义方法的含义Agile方法是在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品的方法。笼统的讲就是,“刚刚好”(Ju
2、st enough),即开发中的活动及制品既不要太多也不要太少。概述概述 Agile方法的实践效果方法的实践效果我预言XP对当今时代的作用可与CMM在八十年代和九十年代初的作用相媲美-Tom DeMarco,Cutter Trends Report新方法在实践中取得了巨大的成功 IONA公司的Obix技术支持小组在采用了XP方法后,软件生产率提高了67%SPG(software productivity group)的Capers Jones则称,SCRUM方法可提高生产率6倍Agile方法的核心理念方法的核心理念 基于适应而非预测 以人为导向而非过程导向-Martin Fowler“New
3、Methodology”Agile方法的核心理念及特点方法的核心理念及特点适应而非预测适应而非预测开始计划的结果实际需要的结果需求不可预测-Peter Wegner用数学的方法给出了严格的证明按计划的过程基于适应的过程理论上来说,软件开发应是一个自适应的跟踪过程 Agile方法的核心理念及特点方法的核心理念及特点适应而非预测适应而非预测自适应系统是一个强反馈系统 在软件开发中,需求的获取和分析、软件设计、编码等实质上均为前馈环节,真正的反馈环节应该是用户对可运行软件的使用、使用中的判断及判断后与开发人员的信息交流。反馈和前馈这一回路的响应速度应大于被跟踪(或被适应)的系统的变化速度,这就要求软
4、件开发有快速的产出能力。Agile方法的核心理念及特点方法的核心理念及特点适应而非预测适应而非预测特点特点 Agile方法通过快速、短迭代式的开发,不断产出和演化可运行软件,根据用户的反馈信息作适应性调整,然后进入下一轮快速短迭代式开发。软件开发中,人的因素是第一位的软件开发中,人的因素是第一位的 Agile方法的核心理念及特点方法的核心理念及特点以人为导向而非过程导向以人为导向而非过程导向 人是过程的主体,而人的工作承受力是有限的软件开发中的大部分是需要创造力的设计工作,软件人员是创造性的工作者软件人员有主观上做好工作的意愿软件开发的目的是为人提供方便,应首先着眼于有用的可执行的软件,也就是
5、首先考虑商务目标,而不是为过程而过程Agile方法的核心理念及特点方法的核心理念及特点以人为导向而非过程导向以人为导向而非过程导向 强调软件开发中相关人员间信息交流强调软件开发中相关人员间信息交流 软件开发中的中间过程和制品(文档),追根究底其目的是为了交流项目失败的原因最终都可追溯到某个信息没有及时准确地传递到应该接收它的人-Alistir Cockburn人特别擅长面对面的交流,面对面交流的成本要远远低于文档交流的成本-Alistir cockburnAgile方法的核心理念及特点方法的核心理念及特点 Agile方法的一个共同特点方法的一个共同特点:努力营造诚信、开放的组织氛围,根据项目中
6、信息流通的具体情况,按高内聚、松耦合的原则,将项目组划分为若干个小组(每个小组以不超过10人为宜,组员均在一个工作间内工作),通过小组内各种渠道的沟通,来减少中间制品的工作负担,提高应变能力。以人为导向而非过程导向以人为导向而非过程导向 任何软件开发方法都有一个相应的价值系统(Value system),方法通过价值系统对过程予以指导,方法只有在其应用周境(context)与价值系统相吻合时才能发挥真正效力 Agile联盟提出了“四个价值”、“十二个指导原则”Agile方法的核心理念及特点方法的核心理念及特点Agile方法的价值系统和指导原则方法的价值系统和指导原则Agile方法的核心理念及特
7、点方法的核心理念及特点Agile方法的价值系统方法的价值系统 较之于过程和工具过程和工具,更注重人及其相互作用人及其相互作用的价值 较之于无所不及的各类文档无所不及的各类文档,更注重可运行的软件运行的软件的价值 较之于合同谈判合同谈判,更注重与客户合作与客户合作的价值 较之于按计划行事按计划行事,更注重适应需求变化适应需求变化的价值(1)在快速不断地交付用户可运行软件的过程中,将使用户满意放在第一位(2)以积极的态度对待需求的变化(不管该变化出现在开发早期还是后期)(3)以几周到几个月为周期,尽快、不断地交付可运行的软件供用户使用 (4)在项目过程中,业务人员和开发人员最好能一起工作(5)以积
8、极向上的员工为中心建立项目组,给予他们所需的环境和支持,对他们的工作予以充分的信任(6)在项目组中,最有用、最有效的信息沟通手段是面对面的交谈Agile方法的核心理念及特点方法的核心理念及特点Agile方法的指导原则方法的指导原则 Agile方法的核心理念及特点方法的核心理念及特点 Agile方法的指导原则方法的指导原则(7)测量项目进展的首要依据是可运行的软件(8)Agile过程高度重视可持续开发 项目发起者、开发者和用户应能始终保持步调一致(9)应时刻关注技术上的精益求精和设计的合理,这样能提高软件的快速应变力(10)简单化(尽可能减少不必要工作的艺术)(11)最好的框架结构、需求和设计产
9、生于自组织的项目组(12)项目组要定期对其运作情况进行反思,提出改进意见,并进行相应的微调Agile方法的核心理念及特点方法的核心理念及特点Agile方法的适用范围方法的适用范围 Martin Fowler认为:新方法不是到处可适用的新方法不是到处可适用的适合采用适合采用Agile方法的情况:方法的情况:l 需求不确定、易挥发(Volatile,意指今天的要求明天就不需要了)l 有责任感和积极向上的开发人员l 用户容易沟通并能参与Agile与与CMM(1)CMM更注重管理问题(组织过程的有效性和过程的系统化改进),Agile更注重技术和效率(2)CMM提供了一个高度抽象的框架,有广泛的适用范围
10、,Agile适用于小组织和需求不定、有用户紧密参与的情况(在高可靠性要求和大型项目组,或虚拟项目组中不宜采用)(3)CMM与Agile方法虽有一些公共的特点,但Agile方法只是满足或部分满足了CMM2到3级中部分KPA(关键过程区域)的要求(4)Agile方法提出了在某些周境(context)下非常有效的实践,与CMM方法有一定的互补性,CMM着重于“应该做什么”,Agile则侧重于“如何做”CMM的视角(的视角(Mark Paulk 的看法)的看法)XP方法从某种意义上来说是CMM2到5级的一个垂直切片(满足了CMM2到5级中的部分KPA目标要求)若将之应用于整个组织则还需更多的度量工作,
11、但他同时指出,XP方法中更多的度量不是不可以做,而是要根据投入回报分析决定是否有必要Agile与与CMMXP的视角(的视角(Ron Jeffries的看法)的看法)CMM更注重质量,Agile更注重生产率 CMM强调过程的可观测性,Agile强调可观测的结果(可运行软件)CMM注重管理和过程,Agile注重技术和效率 CMM注重组织,Agile注重个人 CMM无所不包(Universal),Agile有明确的适用范围 它们都包含了一些软件工程的好的实践(Practices)Agile与与CMM个人观点(仅供参考)个人观点(仅供参考)结合点在哪里,如何Just Enough?Agile 具体方法
12、介绍具体方法介绍 Extreme Programming(简称XP)SCRUM Crystal Methodologies(简称Crystal)Feature Driven Development(简称FDD)Dynamic Systems Development Methodology(简称DSDM)Adaptive Software Development(简称ASD)Pragmatic Programming等 由Kent Beck提出,是Agile方法中最引人注目的一个 XP最初实践于1997年Crysler公司的C3项目(Smalltalk开发)适用于10人以下项目组、开发地点集中的
13、场合 广泛用于需求模糊和挥发性强的场合 Agile 具体方法介绍具体方法介绍XP方法方法Website:http:/http:/www.extremeprogramming.org/l 交流(交流(Communication)项目相关人员之间充分、多渠道(最好面对面)的沟通l简化(简化(Simplicity)在系统可运转的前提下,做最简洁的工作在开发中不断优化设计,时刻保持代码简洁、无冗余l反馈(反馈(Feedback)强调各种形式(如小交付、短迭代等)的反馈l 胆识(胆识(Courage)面对压力做正确的判断并敢于付诸行动(如敢于丢弃设计不良的代码,疲惫时立即休息等)Agile 具体方法介绍
14、具体方法介绍XP方法方法(4(4个价值)个价值)l工作团队(工作团队(Whole Team)所有的小组成员应在同一个工作地点工作成员中必须有一个现场用户(On-site User)通常还设一个“教练”(Coach)角色l 计划(计划(Planning Game)包括两类:交付计划和迭代(Iteration)计划l 系统比拟(系统比拟(Metaphor)相当于一个粗略的软件体系结构l 小交付(小交付(Small release)l测试(测试(testing)先开发测试用例后进行编码(testing then coding)Agile 具体方法介绍具体方法介绍XP方法方法(12(12个核心实践)个
15、核心实践)Agile 具体方法介绍具体方法介绍 XP方法方法(12(12个核心实践)个核心实践)l简洁设计(简洁设计(Simple Design)设计只考虑当前定义的功能而不考虑以后需求的变化该设计是完成目前功能所需的最简洁的设计l 结对开发(结对开发(Pair Programming)l 设计改进(设计改进(Design Improvement)l 持续集成(持续集成(Continuous Integration)l 代码共享(代码共享(Collective code Ownership)任何结对开发者在任何时候都可改进项目组中的任何代码l 编码标准(编码标准(Coding Standard
16、)l 可持续步调(可持续步调(Sustainable Pace)每周40小时工作制Agile 具体方法介绍具体方法介绍XP方法(开发过程)最新版本体系结体系结构刺探构刺探(spike)系统比拟制订交制订交付计划付计划交付计划 迭代迭代开发开发验收验收测试测试用户认可小交付小交付 用户用户 故事故事(user stories)下一迭代Bugs新用户故事需求测试用例不 确定 的估计确定的估计难点难点刺探刺探 由Ken Schwaber和 Jeff Sutherland 提出 名称来自Rugby Scrum(英式橄榄球)最初实践于Easel公司(1993年)是对迭代式面向对象方法的改进 基于复杂性理
17、论,过程分为确定性(Defined)过程和经验性(Empirical)过程 适用于需求难以预测的复杂商务应用产品的开发 Agile 具体方法介绍具体方法介绍SCRUM方法方法Agile 具体方法介绍具体方法介绍SCRUM方法方法 提出的SCRUM Meeting、Sprint、Backlog、SCRUM Master、SCRUM Team、Demo等模式已被PLOP(Pattern Language Of Programs)作为组织和过程模式(Organizational and Process Pattern)的标准 被认为可提高生产率6倍(微软的开发过程与此类似,另一与此类似的开发过程是B
18、orland 的Quattro项目,每人周产出1000行的交付代码)Website:http:/ Agile 具体方法介绍具体方法介绍SCRUM方法(开发过程)方法(开发过程)确定性过程经验性过程确定性过程Agile 具体方法介绍具体方法介绍SCRUM方法(开发过程)方法(开发过程)(1)计划和体系结构设计(确定性过程)计划和体系结构设计(确定性过程)将Backlog(急待完成的一系列任务,包括:未细化的产品功能要求、Bugs、缺陷、用户提出的改进、具竞争力的功能及技术升级等)按优先级排序形成Backlog 列表,根据该表和风险评估制订产品交付基线。建立系统体系结构(如为已有系统改进,则只作有
19、限分析、调整),将Backlog项按高内聚低耦合的原则分解为一系列问题包(Packets,每个Packet是一组对象或构件的集合),依据同样原则相应划分若干个开发小组(SCRUM 小组小组),分配各小组合适的Backlog项或问题包。建立开发运行环境。Agile 具体方法介绍具体方法介绍SCRUM方法(开发过程)方法(开发过程)(2)(2)SprintSprint(经验性过程)(经验性过程)该过程由若干个迭代的冲刺(SprintSprint)活动组成,直至风险评估认为产品可交付为止。一个SprintSprint是在限定时间段内(SprintSprint周期,通常为16周,可在前一个Sprint
20、Sprint结束时调整)的一系列开发活动(包括分析、设计、编码、测试等),每个SCRUM小组并行开发且必须步调一致(在一个SprintSprint结束后,均须完成所分配的BacklogBacklog项并有可执行的产出)。Agile 具体方法介绍具体方法介绍SCRUM方法(开发过程)方法(开发过程)每个SprintSprint包含以下活动:开发。开发。对分配的BacklogBacklog工作进行分析,打开packets,进行领域分析,然后设计、开发、实施、测试、文档化这些改动。打包打包(Wrap)(Wrap)。封装packets,产生一个满足BacklogBacklog需求的可执行版本。评审(评
21、审(ReviewReview)。)。所有的SCRUM小组一起开会,提交各自的工作并演示(DemoDemo),然后提出和解决问题(Issue)及难点(problem),增加新的BacklogBacklog项;发布、审查或调整产品的标准规范;进行风险评估并提出合适的对策;确定下一个SprintSprint的工作内容和结束时间。调整(调整(Adjust)。)。根据评审会汇集的信息,对受影响的Packets进行适当调整和巩固。Agile 具体方法介绍具体方法介绍SCRUM方法(开发过程)方法(开发过程)(3)交付和巩固(确定性过程)交付和巩固(确定性过程)一旦根据风险评估结果认为可交付产品时,即进入该
22、阶段。该阶段的活动包括:组装,系统测试和回归测试(Regression),准备培训材料,完成最终文档。SCRUM过程认为一个产品的开发将一直持续下去,除非经风险评估后认为应停止。产品交付后的巩固活动类似于传统方法中的维护和改善,目的在于整理Sprint期压力下忽略的工作,为下一阶段的开发做准备,以便轻装上阵。小 结 我国95%以上的企业均不超过500人。加入WTO后,研究和实践Agile方法对我国的软件企业尤为重要。Agile方法面临的一些问题:“刚刚好”的尺度在实践中不易把握;Agile方法与CMM/SPICE/ISO9000等的结合点在哪里?Agile方法特别强调人的重要性,那么如何考虑文化的差异,特别是中国的文化?等等。