《软件工程敏捷软件开发.ppt》由会员分享,可在线阅读,更多相关《软件工程敏捷软件开发.ppt(47页珍藏版)》请在优知文库上搜索。
1、 软件工程软件工程 极限编程(极限编程(XP)方法)方法 相关敏捷过程模型相关敏捷过程模型 Scrum方法方法 动态系统开发方法动态系统开发方法 敏捷建模敏捷建模 敏捷统一过程敏捷统一过程2 软件工程软件工程 软件开发的新挑战软件开发的新挑战快速的市场进入时间,要求高生产率快速的市场进入时间,要求高生产率快速变化的需求快速变化的需求快速发展的技术快速发展的技术 传统的软件开发方法传统的软件开发方法强调过程和文档强调过程和文档对变化的适应能力偏弱对变化的适应能力偏弱3 Martin Fowler认为:认为:提前预测需求是困难的。同样,对项目进行提前预测需求是困难的。同样,对项目进行过程中客户需求
2、优先级的变更进行预测也很过程中客户需求优先级的变更进行预测也很困难困难对很多项目来说,软件设计和构建是交错进对很多项目来说,软件设计和构建是交错进行的。也就是说,设计需要通过实施构建来行的。也就是说,设计需要通过实施构建来获得验证,而在构建的过程中新获得的知识获得验证,而在构建的过程中新获得的知识又可以帮助设计又可以帮助设计从制定计划的角度来看,分析、设计、构建从制定计划的角度来看,分析、设计、构建和测试活动并不容易预测和测试活动并不容易预测 软件工程软件工程4 软件工程软件工程5 强调强调适应性适应性而不是可预测性而不是可预测性 经典软件开发方法经典软件开发方法:通过控制变化实现软件开发的通
3、过控制变化实现软件开发的可预测性可预测性 敏捷敏捷软件开发方法软件开发方法:变化变化是不可避免的,应该通过是不可避免的,应该通过改善管理实践和工程实践来更好地适应改善管理实践和工程实践来更好地适应变化变化 强调强调人人在在项目中项目中的的关键作用关键作用 敏捷软件开发认为人不是可以互相替换的敏捷软件开发认为人不是可以互相替换的“编程部编程部件件”,而是具有创造力的个体,成功的软件开发活,而是具有创造力的个体,成功的软件开发活动依赖于人的主观能动性动依赖于人的主观能动性 软件工程软件工程6 软件工程软件工程 强调强调“刚刚好刚刚好”(Just enough) 在保证软件开发有成功产出的前提下,尽
4、量减少开在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品的方法,即开发中的活动及发过程中的活动和制品的方法,即开发中的活动及制品既不要太多也不要太少制品既不要太多也不要太少7 从从20世纪世纪90年代开始,逐渐产生了一大年代开始,逐渐产生了一大批敏捷软件开发方法批敏捷软件开发方法其中比较有影响的包括:极限编程、其中比较有影响的包括:极限编程、Scrum、看板方法、精益软件开发方法、水晶软件开发看板方法、精益软件开发方法、水晶软件开发方法(方法(crystal)、自适应软件开发()、自适应软件开发(adaptive software development,ASD)、动态系统开)
5、、动态系统开发方法(发方法(dynamic system development method,DSDM)等)等 软件工程软件工程8 2001年年2月,月,17位敏捷方法的先驱在美国位敏捷方法的先驱在美国犹他州召开了为期犹他州召开了为期2天的会议,天的会议,成立了敏成立了敏捷软件开发联盟捷软件开发联盟 并并发布了发布了“敏捷宣言敏捷宣言” 该宣言由四个价值观声明组成,并提炼出该宣言由四个价值观声明组成,并提炼出敏捷软件开发方法必须遵循的敏捷软件开发方法必须遵循的12条原则条原则 软件工程软件工程9我们我们正通过亲身或者协助他人进行软件开发实践来正通过亲身或者协助他人进行软件开发实践来探索更好的
6、软件开发方法。探索更好的软件开发方法。基于此,我们建立了如下的价值观:基于此,我们建立了如下的价值观:个体个体和交互和交互 重于重于 过程和工具过程和工具工作的软件工作的软件 重于重于 详尽的文档详尽的文档客户合作客户合作 重于重于 合同谈判合同谈判响应变化响应变化 重于重于 遵循计划遵循计划也就是说也就是说,尽管右项有其价值,尽管右项有其价值,我们更重视左项的价值我们更重视左项的价值 软件工程软件工程10 软件工程软件工程 过程和工具是重要的,但是软件开发中人的作用和过程和工具是重要的,但是软件开发中人的作用和交流的作用更需要被进一步强调交流的作用更需要被进一步强调 软件是由人组成的团队来开
7、发的,与软件项目相关软件是由人组成的团队来开发的,与软件项目相关的各类人员通过充分的交流和有效的合作,才能成的各类人员通过充分的交流和有效的合作,才能成功地开发出得到用户满意的软件功地开发出得到用户满意的软件 如果光有定义良好的过程和先进的工具,而人员的如果光有定义良好的过程和先进的工具,而人员的技能很差,或者不能很好地交流和协作,软件是很技能很差,或者不能很好地交流和协作,软件是很难成功地开发的难成功地开发的11 软件工程软件工程可以工作的软件是软件开发工作的最终目标可以工作的软件是软件开发工作的最终目标好的好的必要的文必要的文档能档能帮助我们理解软件做什么,怎么帮助我们理解软件做什么,怎么
8、做以及如何使用做以及如何使用,是有价值的。但是,软,是有价值的。但是,软件开发的件开发的主要目主要目标仍然是标仍然是创建可运行的创建可运行的软件软件敏捷敏捷软件开发强调不断地快速地向用户提交可运行软件开发强调不断地快速地向用户提交可运行的软件(不一定是完整的软件),以得到用户的的软件(不一定是完整的软件),以得到用户的认认可可12 软件工程软件工程 只有客户才能明确说明需要什么样的软件,然而,只有客户才能明确说明需要什么样的软件,然而,大量的实践表明,在开发的早期客户常常不能完整大量的实践表明,在开发的早期客户常常不能完整地表达他们的全部需求,有些早期确定的需求,以地表达他们的全部需求,有些早
9、期确定的需求,以后也可能会改变后也可能会改变 由于软件开发的预测性的困难,想通过合同谈判的由于软件开发的预测性的困难,想通过合同谈判的方式,将需求固定下来常常是困难的方式,将需求固定下来常常是困难的 敏捷软件开发强调与客户的协作,通过与客户的交敏捷软件开发强调与客户的协作,通过与客户的交流和紧密合作来发现用户的需求流和紧密合作来发现用户的需求13 软件工程软件工程 任何软件项目的开发都应该制订一个项目计划,以任何软件项目的开发都应该制订一个项目计划,以确定各开发任务的优先顺序和起止日期。然而,随确定各开发任务的优先顺序和起止日期。然而,随着项目的进展,需求、业务环境、技术等都可能变着项目的进展
10、,需求、业务环境、技术等都可能变化,任务的优先顺序和起止日期也可能因种种原因化,任务的优先顺序和起止日期也可能因种种原因会改变会改变 因此,项目计划应具有可塑性,有变动的余地。当因此,项目计划应具有可塑性,有变动的余地。当出现变化时及时做出反应,修订计划以适应变化出现变化时及时做出反应,修订计划以适应变化14 我们的最高优先级是持续不断地、及早地交付有价值的我们的最高优先级是持续不断地、及早地交付有价值的软件来使客户满意软件来使客户满意 拥抱变化,即使是在项目开发的后期。敏捷过程愿意为拥抱变化,即使是在项目开发的后期。敏捷过程愿意为了客户的竞争优势而了客户的竞争优势而接纳接纳变化变化 经常地交
11、付可工作的软件,相隔几星期或一两个月,倾经常地交付可工作的软件,相隔几星期或一两个月,倾向于向于采用采用较短的周期较短的周期 业务人员和开发人员必须在项目的整个阶段紧密合作业务人员和开发人员必须在项目的整个阶段紧密合作 围绕着被激励的个体构建项目。为个体提供所需的环境围绕着被激励的个体构建项目。为个体提供所需的环境和支持,给予信任,从而达成目标和支持,给予信任,从而达成目标 在团队内和团队间沟通信息的最有效和最高效的方式是在团队内和团队间沟通信息的最有效和最高效的方式是面对面的交流面对面的交流 软件工程软件工程15 可工作的软件是进度的首要度量标准。可工作的软件是进度的首要度量标准。 敏捷过程
12、倡导可持续开发。项目发起者、开发人员和用户敏捷过程倡导可持续开发。项目发起者、开发人员和用户应该维持一个可持续的步调。应该维持一个可持续的步调。 持续地追求技术卓越和良好设计,可以提高敏捷性持续地追求技术卓越和良好设计,可以提高敏捷性 以简洁为本,它是减少不必要工作的艺术。以简洁为本,它是减少不必要工作的艺术。 最好的架构、需求和设计是从自组织的团队中涌现出来的最好的架构、需求和设计是从自组织的团队中涌现出来的。 团队定期地反思如何变得更加高效,并相应地调整自身的团队定期地反思如何变得更加高效,并相应地调整自身的行为。行为。 软件工程软件工程16 致力于降低变化致力于降低变化带来带来的成本的成
13、本 强调强调价值价值 强调强调人的人的作用作用 使用增量和迭代的开发方法使用增量和迭代的开发方法 软件工程软件工程17 软件工程软件工程 敏捷软件开发概述敏捷软件开发概述 相关敏捷过程模型相关敏捷过程模型 Scrum方法方法 动态系统开发方法动态系统开发方法 敏捷建模敏捷建模 敏捷统一过程敏捷统一过程18 软件工程软件工程1996年,年,Kent Beck等人在等人在Chrysler的的C3项项目的开发过程中逐步产生了极限编程的基本概目的开发过程中逐步产生了极限编程的基本概念念1999年,年,Kent Beck撰写了撰写了解析极限编程:解析极限编程:拥抱变化拥抱变化,对极限编程的价值观、原则和
14、实,对极限编程的价值观、原则和实践进行了阐述践进行了阐述19 软件工程软件工程20 XP 策划策划 开始于倾听,倾听产生一系列开始于倾听,倾听产生一系列“用户故事用户故事”。 团队成员评估每一个故事,并给出以开发周数为度量单团队成员评估每一个故事,并给出以开发周数为度量单位的位的成本成本。 团队共同决定如何将故事分组,并置于将要开发的下一团队共同决定如何将故事分组,并置于将要开发的下一个个软件增量软件增量中中。 给出对给出对下一个发布版本的基本承诺(就包括的故事、交下一个发布版本的基本承诺(就包括的故事、交付日期和其他项目事项)付日期和其他项目事项) 项目的第一个发行版本(也称为一个软件增量)
15、交付之项目的第一个发行版本(也称为一个软件增量)交付之后,后,XP团队计算团队计算项目的速度项目的速度,用于帮助估计后续发行版用于帮助估计后续发行版本的发布日期和进度安排。本的发布日期和进度安排。 软件工程软件工程21 XP设计设计 严格遵循KIS(Keep It Simple,保持简洁)原则。 鼓励使用CRC卡。 如果在设计中碰到困难,推荐使用“Spike解决方案” 鼓励“重构”以不改变代码外部行为而改进其内部结构的方式来修改软件系统的过程。 XP编程编程 推荐在编码开始之前建立单元测试。 鼓励“结对编程”。 XP测试测试 所有单元测试应当使用一个可以自动实施的框架。 “验收测试”由客户规定
16、技术条件,并且着眼于客户可见的系统级特征和功能。22 结对编程结对编程提高了设计的可靠性和质量提高了设计的可靠性和质量 在做任何设计的时候在做任何设计的时候,都有两个程序员一起思考,都有两个程序员一起思考,可以汇集两个程序员的设计思想可以汇集两个程序员的设计思想 在代码编写完成的时候同时也通过了代码审查在代码编写完成的时候同时也通过了代码审查 这种方式有助于减少程序中的错误,降低测试这种方式有助于减少程序中的错误,降低测试时间和测试成本时间和测试成本 软件工程软件工程23 软件工程软件工程 故事是对团队应该完成的工作的陈述故事是对团队应该完成的工作的陈述 。极限编程。极限编程通过故事来体现价值观中的通过故事来体现价值观中的“沟通沟通”的原则。好的原则。好的用户故事应该能够触发客户和开发团队之间的的用户故事应该能够触发客户和开发团队之间的沟通沟通 作为和客户的良好沟通的成果,故事拥有清楚的作为和客户的良好沟通的成果,故事拥有清楚的完成标准。一种常见的策略是,从用户的角度描完成标准。一种常见的策略是,从用户的角度描述一组验收测试用例,开发团队使用该验收测试述一组验收测试用例,开发团队使用该