软件工程课件教案1-软件工程学概论.ppt
教学目标 了解软件危机的产生以及解决办法软件工程的重要性;了解软件生命周期以及常用软件开发模型。教学重点 软件工程的基本原理。教学难点 软件过程中各种模型的特点、使用范围的了解。,第一章软件工程学概述,第一章软件工程学概述,1.1 软件危机1.2 软件工程1.3 软件生命周期1.4 软件工程过程,IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。”,1.1 软件危机,先看几个例子:,1.1 软件危机,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO 5 I=1,3 误写为:DO 5 I=1.3,1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。,1.1.1 软件危机的介绍,“软件危机”(Software crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。1968年北大西洋公约组织的计算机科学家为了解决“软件危机”正式提出“软件工程”。,1.1.1 软件危机的介绍,软件危机的主要表现对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。,1.1.2 产生软件危机的原因,软件危机源于:软件本身:与软件的特点有关人为因素:软件开发与维护的方法不正确有关,1.1.2 产生软件危机的原因,软件的特点1、软件是一种逻辑实体,不是具体的物理实体。2、软件产品的生产主要是研制。3、软件具有“复杂性”,其开发和运行常受到计算机系统的限制。4、软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式。5、软件不存在磨损和老化问题,但存在退化问题。,1.1.2 产生软件危机的原因,人为因素 软件专业人员对软件开发和维护有不少糊涂观念,导致在实践过程中或多或少地采用了错误的方法和技术。错误的认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。,1.1.2 产生软件危机的原因,软件生命周期理论:几个阶段编写程序所占的工作量:10%20%软件不同生命周期引入变化的代价:如图所示软件维护的代价:55%70%的费用,1.1.3 消除软件危机的途径,应该彻底消除“软件就是程序”的错误观念。1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。,1.2 软件工程,1.2.1 软件工程的介绍,软件工程的两个定义 1968年在第一届NATO(北大西洋公约组织)会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”这个定义不仅指出了软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程原理。,1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究中提到的途径。”,1.2.1 软件工程的介绍,1.2.1 软件工程的介绍,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统的软件工程2、第二代软件工程 对象工程3、第三代软件工程 过程工程4、第四代软件工程 构件工程,软件工程的发展已经历了四个重要阶段:1、第一代软件工程 传统的软件工程,1.2.1 软件工程的介绍,60年代末到70年代为了克服“软件危机”(Software crisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。,软件工程的发展已经历了四个重要阶段:2、第二代软件工程 对象工程,80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。,1.2.1 软件工程的介绍,80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。,软件工程的发展已经历了四个重要阶段:3、第三代软件工程 过程工程,1.2.1 软件工程的介绍,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,软件工程的发展已经历了四个重要阶段:4、第四代软件工程 构件工程,1.2.1 软件工程的介绍,90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。,软件工程的发展已经历了四个重要阶段:4、第四代软件工程 构件工程,1.2.1 软件工程的介绍,1.2.1 软件工程的介绍,软件工程的本质特征:1.软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人,软件工程的7条基本原理:用分阶段的生命周期计划严格管理 实践证明,一半以上的不成功的软件是由于计划不周造成的。应按软件的不同周期,划分阶段有计划进行开发,不受干扰地按计划进行。2.坚持进行阶段评审大部分错误是在编码之前;错误发现越晚,改正错误付出的代价越多;,1.2.2 软件工程的基本原理,软件工程的7条基本原理:3.实行严格的产品控制 不得已修改需求时,为了保持软件各个配置成分的一致性,要实行严格产品控制实施基准配置管理。基准配置管理(变动控制):一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。,1.2.2 软件工程的基本原理,软件工程的7条基本原理:4.采用现代程序设计技术 实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。5.结果应能清楚地审查 软件产品的开发过程比一般产品的开发过程更难于评价和管理。为提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查。,1.2.2 软件工程的基本原理,软件工程的7条基本原理:6.开发小组的人员应该少而精 素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。此外,因为交流情况讨论问题而造成的通信开销也急剧增加。当开发小组人员数为N时,可能的通信路径有N(N-1)/2条,可见随着人数N的增大,通信开销将急剧增加。,1.2.2 软件工程的基本原理,软件工程的7条基本原理:7.承认不断改进软件工程实践的必要性承认不断改进软件工程实践的必要性,1.2.2 软件工程的基本原理,软件工程包括是技术与管理紧密结合所形成的工程学科。管理:13章项目管理将有介绍,即通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。技术:在软件生命周期全过程中使用的一整套技术,称谓方法学方法学(methodology),也称为范型(paradigm)。软件工程方法学:包括内容(3个要素):方法、工具和过程。,1.2.3 软件工程方法学,方法:技术方法工具:软件工程支撑环境过程:一系列任务框架,以保证质量。当前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,1.2.3 软件工程方法学,1、传统方法学 也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。问题简单化、便于阶段性审查、有一定应用、便于区别面相对象方法学。,1.2.3 软件工程方法学,2、面向对象方法学 当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难,原因是这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。,1.2.3 软件工程方法学,2、面向对象方法学 面向对象方法学具有下述4个要点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。(2)把所有对象都划分成类(class)。(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。(4)对象彼此间仅能通过发送消息互相联系。,1.2.3 软件工程方法学,2、面向对象方法学 面向对象方法学的出发点和基本原则:模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。,1.2.3 软件工程方法学,1.3 软件生命周期,软件生命周期包括:软件定义、软件开发和软件维护期。软件定义期问题定义、可行性研究、需求分析(定义期也成为系统分析)。主要目的:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。,软件开发期总体设计、详细设计、编码和单元测试,其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。软件维护期使软件持久地满足用户的需要。当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应及时改进,满足用户新需要。,1.3 软件生命周期,1.问题定义 问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。,1.3 软件生命周期,2.可行性研究 这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。,1.3 软件生命周期,可行性研究的结果是用户部门负责人作出是否继续进行这项工程的决定的重要依据。可行性研究以后的各个阶段,将需要投入多少相应的人力物力。及时终止不值得投资的工程项目,可以避免更大的浪费。,1.3 软件生命周期,3.需求分析 这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。用户通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员对特定用户的具体要求并不完全清楚。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。完成系统的需求规格说明书。,1.3 软件生命周期,4.总体设计 这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。软件工程师分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。此外,还应该制定出实现最佳方案的详细计划。,1.3 软件生命周期,软件设计的一条基本原理就是,程序应该模块化,即一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。,1.3 软件生命周期,5.详细设计 详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”主要任务是设计出程序的详细规格说明。类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。,1.3 软件生命周期,6.编码和单元测试 这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。,1.3 软件生命周期,7.综合测试 这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试则是按照规格说明书的规定,由用户对目标系统进行验收。,1.3 软件生命周期,应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。,1.3 软件生命周期,8.软件维护 维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。,1.3 软件生命周期,每一项维护活动都应该经过提出维护要求(或报告问题),分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收等一系列步骤,因此实质上是经历了一次压缩和简化了的软件定义和开发的全过程。每一项维护活动都应该准确地记录下来,作为正式的文档资料加以保存。,1.3 软件生命周期,1.4 软件工程过程,软件工程过程(Software engineering process):是指在软件工具的支持下,所进行的一系列软件工程活动。通常包括以下四类基本过程:1、软件规格说明:规定软件的功能及其运行环境2、软件开发:产生满足规格说明的软件3、软件确认:确认软件能够完成客户提出的要求4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。,软件工程过程的特性:1、可理解性 2、可见性(过程的进展和结果可见)3、可靠性 4、可支持性(易于使用CASE工具支持)5、可维护性 6、可接受性(为软件工程师接受)7、开发效率 8、健壮性(抵御外部意外错误的能力),1.4 软件工程过程,通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。目前有若干软件生存期模型,各种模型有其不同的特点,并适用于不同的开发方法。常见的模型:瀑布模型、快速开发模型、增量模型、螺旋模型、喷泉模型等。,1.4 软件工程过程,1.4.1 瀑布模型,传统瀑布模型,1.4.1 瀑布模型,1.阶段间具有顺序性和依赖性 这个特点有两重含义:必须等前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。2.推迟实现的观点 对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。,1.4.1 瀑布模型,瀑布模型分析与设计阶段的基本任务主要考虑目标系统的逻辑模型,不涉及软件的物理实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。3.质量保证的观点 软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:,1.4.1 瀑布模型,(1)每个阶段都必须完成规定的文档 完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。(2)每个阶段结束前都要对文档进行评审 尽早发现问题,改正错误。实际的瀑布模型是带“反馈环”的,如图所示,1.4.1 瀑布模型,实际的瀑布模型,1.4.1 瀑布模型,瀑布模型有许多优点:可强迫开发人员采用规范的方法(结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型缺点:“强调文档驱动”,导致用户在使用软件之前只能通过文档认识软件,而真正使用软件时可能出现与想象之间有差异。,1.4.2 快速原型模型,所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。,1.4.1 瀑布模型,快速原型模型,快速原型没有反馈环,同用户已经充分交流、开发人员对系统也充分了解。广泛地使用第四代语言(4GL)构建快速原型。,增量模型,增量模型,增量模型,增量模型也称为渐增模型如图所示 增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。增量模型则分批地逐步向用户提交产品,开发人员一个构件接一个构件地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。能在较短时间内向用户提交可完成部分工作的产品。,增量模型,图1.6描绘了一种风险更大的增量模型:一旦确定了用户需求之后,就着手拟定第一个构件的规格说明文档,完成后规格说明组将转向第二个构件的规格说明,与此同时设计组开始设计第一个构件用这种方式开发软件,不同的构件将并行地构建,因此有可能加快工程进度。但是,使用这种方法将冒构件无法集成到一起的风险,除非密切地监控整个开发过程,否则整个工程可能毁于一旦。,图1.6风险更大的增量模型,螺旋模型,对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。螺旋模型的基本思想是:使用原型及其他方法来进来降低风险。如下图简化的螺旋模型所示,简化的螺旋模型,螺旋模型,螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:1.确定目标、方案和限制条件;2.评估方案、标识风险和解决风险;3.开发确认产品;4.计划下一周期工作。,喷泉模型,该模型是由和于1990年提出的一种新的开发模型。主要用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。迭,轮流也,代,替换也。,其特点如下:、开发过程有分析、系统设计、软件设计和实现4个阶段。、各阶段相互重叠,它反映了软件过程并行性的特点。、以分析为基础,资源消耗成塔型。、反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。、强调增量开发,整个过程是一个迭代的逐步提炼的过程。,喷泉模型,Rational统一过程,Rational统一过程(RUP,Rational Unified Process)是Rational公司推出的较完美、流行的软件过程。它总结了6条最有效的开发经验最佳实践。1、最佳实践(1)迭代式开发 通过反复迭代,使得用户得以参与、开发人员可不断提供可以使用的阶段性的软件产品(提高士气),适合大型复杂软件的开发。,Rational统一过程,1、最佳实践(2)管理需求 用户需求的不断变化,要求提供如何提取、组织系统的功能需求的有效办法。RUP提供了通过用例分析捕获需求的方法,使用性极强。(3)使用基于构件的体系结构 RUP提供了使用现有的或新开发的构件定义体系结构的系统化方法,降低了软件开发的复杂性,提高了软件重用率。,Rational统一过程,1、最佳实践(4)可视化建模 使用UML进行建模。(5)验证软件质量 软件质量的验证,贯穿于整个软件的开发过程,且所有开发成员参与。(6)控制软件变更 RUP给出了如何控制、跟踪和监控修改,以确保迭代开发的成功。,Rational统一过程,2、RUP软件开发生命周期 RUP软件开发周期是一个以时间代表横轴、核心工作流代表纵轴的二维生命周期模型。,Rational统一过程,2、RUP软件开发生命周期(1)核心工作流6个核心过程工作流:业务建模:深入了解目标系统的用户,评估目标系统对用户的影响;需求:捕获用户需求,并达成共识;分析与设计:将需求分析的结果转化为分析模型和设计模型;实现:将设计模型转化为实现结果;测试:尽最大可能清除错误;部署:成功生成目标系统的可运行版本,提交软件给最终用户;,Rational统一过程,2、RUP软件开发生命周期(1)核心工作流3个核心支持工作流:配置与变更管理:跟踪并维护在软件开发过程中产生的所有制品的完整性和一致性;项目管理:提供管理框架及一系列管理手段;环境:向软件开发机构提供软件开发环境,包括过程管理和工具支持。,Rational统一过程,2、RUP软件开发生命周期(2)工作阶段 4个连续的阶段,每个阶段有明确目标并通过一次或多次迭代完成之,定义了用来评估是否完成目标的里程碑。初始阶段:建立业务模型,定义最终产品是图,并确定项目的范围;精化阶段:设计并确定系统的体系结构,制定项目计划,确定资源需求;构建阶段:开发出所有软件并集成为用户需求的产品,经测试确定所有功能;移交阶段:将开发的产品提交用户使用。,Rational统一过程,2、RUP软件开发生命周期(3)RUP迭代式开发 采用迭代和渐增的方式来开发软件,有多个迭代过程,每次迭代只考虑一部分需求;每次迭代都是一个完整的软件生命周期,包括:分析、设计、实现、测试和部署等工作;每个生命周期包括4个连续阶段:初始、精化、构建、移交阶段;每个阶段有进一步细化为一次或多次迭代。目前,RUP已成为公认的对象工程的标准,采用UML及ROSE工具完成。,敏捷过程与极限编程,1、敏捷过程(2001年2月,17位软件工程专家)敏捷过程目的是提高工作效率和快速相应变化能力,为此提出4个价值观:(1)个体和交互胜过过程和工具 优秀的团队是项目开发获得成功的关键,合作、沟通、交互的能力更重要;(2)可以工作的软件胜过面面俱到的文档 软件为主,不能偏废文档,但文档只是在极其需要时起作用,文档无法代替软件;(3)客户合作胜过合同谈判 合同重要,但能指导开发团队与客户协同工作的合同将更有意义;,敏捷过程与极限编程,1、敏捷过程(4)相应变化胜过遵循计划 客观世界不断变化,软件开发要反映现实。2、极限编程 极限编程(eXtreme Programming,XP),是敏捷过程典型的开发方法,使合于需求模糊且经常改变的场景。(1)极限编程的有效实践客户作为开发团队的成员:至少一人使用用户素材:根据用户的情况,合理安排解决需求的时间短交付周期:每两周交付,短时间内与用户交流,敏捷过程与极限编程,(1)极限编程的有效实践验收测试结对编程测试驱动开发集体所有持续集成可持续的开发速度开放的工作空间及时调整计划简单的设计重构使用隐喻,2、极限编程(2)极限编程的整体开发过程,图1.11 XP项目的整体开发过程,2、极限编程(2)极限编程的迭代过程,图1.12 XP迭代开发过程,微软过程,1 微软过程准则项目计划兼顾不确定因素风险管理减少不确定因素影响以过度版本提供稳定性和可预测性采用快速循环、递进的开发过程平衡产品特性和成本项目进度表的稳定性和权威性小项目组并发开发软件配置项基线化原型验证,早期论证零缺陷为追求目标里程碑评审会,2.微软软件生命周期,图1.13微软软件生命周期阶段划分和主要里程碑,3.微软过程模型,图1.14微软过程的生命周期模型,