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