《软件工程第1章课件》由会员分享,可在线阅读,更多相关《软件工程第1章课件(81页珍藏版)》请在金锄头文库上搜索。
1、 软件工程导论软件工程导论(第第5 5版版) 前言前言软软件件工工程程是是计计算算机机专专业业的的一一门门重重要要的的专专业业基基础础课课,它它对对于于培培养养学学生生的的软软件件素素质质,提提高高学学生生的的软软件件开开发发能力能力与软件与软件项目管理能力项目管理能力具有重要的意义。具有重要的意义。1995年年,Standish Group针针对对系系统统开开发发成成功功的的研研究究表表明明,所所有有的的开开发发项项目目中中有有32%的的项项目目在在它它们们结结束束之之前前被被中中止止。此此外外多多于于一一半半的的软软件件项项目目花花费费的的成成本本相当于原来预算的相当于原来预算的2倍。倍。
2、只只有有42%的的软软件件项项目目完完成成时时达达到到了了预预期期的的范范围围和和功能,事实上,许多系统只完成了部分预期的需求。功能,事实上,许多系统只完成了部分预期的需求。因因此此,软软件件的的开开发发是是一一个个很很困困难难的的活活动动,要要求求很很仔细的计划和执行。仔细的计划和执行。软软件件工工程程就就是是在在这这样样的的背背景景下下,由由许许多多计计算算机机科科学学家家经经过过多多方方面面的的探探索索和和总总结结而而成成形形的的,目目前前发发展展十分迅速。十分迅速。课程的主要内容有:课程的主要内容有:介介绍绍软软件件的的基基本本概概念念和和软软件件工工程程的的目目标标,通通过过对对传传
3、统统的的面面向向过过程程的的软软件件开开发发方方法法和和面面向向对对象象的的软软件件开开发发方方法法的的介介绍绍,使使学学生生掌掌握握开开发发高高质质量量软软件件的的方方法;法;通通过过对对软软件件开开发发过过程程和和过过程程管管理理技技术术的的学学习习,使使学学生生了了解解如如何何进进行行软软件件质质量量的的度度量量和和管管理理,怎怎样样进进行行质质量量保保证证活活动动,从从而而能能够够有有效效地地策策划划和和管管理理软软件件开发活动。开发活动。管理的思想,工程的方法管理的思想,工程的方法 重点内容重点内容1.软件工程概念与软件工程的基本要素;软件工程概念与软件工程的基本要素;2.软件开发活
4、动以及在这些活动中经常使用的系软件开发活动以及在这些活动中经常使用的系统定义技术、软件设计技术、程序设计技术和统定义技术、软件设计技术、程序设计技术和软件测试技术;软件测试技术;3.软件开发范型以及在软件开发中典型的软件开软件开发范型以及在软件开发中典型的软件开发模型;发模型;4.软件过程及分类;软件过程及分类;5.软件工程管理以及软件规模估算、项目成本估软件工程管理以及软件规模估算、项目成本估算、软件复杂性度量等技术;算、软件复杂性度量等技术;6.软件质量、质量特征以及软件质量保证;软件质量、质量特征以及软件质量保证;7.能力成熟度模型(能力成熟度模型(CMM)。课程教材课程教材软件工程导论
5、(第软件工程导论(第5版)版) 张海藩张海藩 清华大学出版社清华大学出版社参考教材:参考教材:实用软件工程(第二版)实用软件工程(第二版) 郑人杰郑人杰 殷人昆殷人昆 陶永雷陶永雷 清华大学出版社清华大学出版社软件工程实验与课程设计指导软件工程实验与课程设计指导 王华王华 周丽娟周丽娟 谭小慧谭小慧 电子工业出版社电子工业出版社课程考核要求课程考核要求u课上认真听讲课上认真听讲u课后认真总结课后认真总结u高质量完成课程设计高质量完成课程设计总总 目目 录(录(1)第第1章章 软件工程学概述软件工程学概述第第2章章 可行性研究可行性研究第第3章章 需求分析需求分析第第4章章 形式化说明技术形式化
6、说明技术*第第5章章 总体设计总体设计第第6章章 详细设计详细设计第第7章章 实现实现总总 目目 录(录(2)第第8章章 维护维护第第9章章 面向对象方法学引论面向对象方法学引论第第10章章 面向对象分析面向对象分析第第11章章 面向对象设计面向对象设计*第第12章章 面向对象实现面向对象实现*第第13章章 软件项目管理软件项目管理 第第14章章 UML概述概述第第1章章 软件工程学概述软件工程学概述1.1 软件危机软件危机1.2 软件工程软件工程1.3 软件生命周期软件生命周期1.4 软件过程软件过程1.5 小结小结国家计算机软件著作权保护条例国家计算机软件著作权保护条例 第二条本条例所称计
7、算机软件第二条本条例所称计算机软件(以下简称软件以下简称软件),是指计,是指计算机程序及其有关文档。算机程序及其有关文档。第三条本条例下列用语的含义:第三条本条例下列用语的含义:(一一)计算机程序,是指为了得到某种结果而可以由计算计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。为同一作品。(
8、二二)文档,是指用来描述程序的内容、组成、设计、功文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。表等,如程序设计说明书、流程图、用户手册等。软件工程发展的起因:软件工程发展的起因:“软件危机软件危机”为了更有效地开发与维护软件,软件工作者在为了更有效地开发与维护软件,软件工作者在20世世纪纪60年代后期开始认真研究消除软件危机的途径,年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科从而逐渐形成了一门新兴的工程学科计算机软计算机软件
9、工程学件工程学(通常简称为软件工程通常简称为软件工程)。在计算机系统发展的早期时代在计算机系统发展的早期时代(20世纪世纪60年代中期年代中期以前以前):除了程序清单之外,没有其他文档资料保存下来。除了程序清单之外,没有其他文档资料保存下来。从从20世纪世纪60年代中期到年代中期到70年代中期:年代中期:这个时期的一个重要特征是出现了这个时期的一个重要特征是出现了“软件作坊软件作坊”,广泛使用产品软件,软件难以维护。广泛使用产品软件,软件难以维护。 由此产生了由此产生了软件危机软件危机1.1 软件危机软件危机1968年北大西洋公约组织的计算机科学家在联邦德年北大西洋公约组织的计算机科学家在联邦
10、德国召开国际会议,讨论软件危机问题,在这次会议国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了上正式提出并使用了“软件工程软件工程”这个名词,一门这个名词,一门新兴的新兴的工程学科工程学科就此诞生了!就此诞生了!软件危机是指在计算机软件的开发和维护过程中所软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。都不同程度地存在这些问题。概括地说,软件危机包含下述两方面的问题:如何概括地说,软件
11、危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。护数量不断膨胀的已有软件。1.1.1 软件危机的介绍软件危机的介绍(1) 对软件开发成本和进度的估计常常很不准确。对软件开发成本和进度的估计常常很不准确。 (2) 用户对用户对“已完成的已完成的”软件系统不满意的现象经软件系统不满意的现象经常发生。常发生。(3) 软件产品的质量往往靠不住。软件产品的质量往往靠不住。(4) 软件常常是不可维护的。软件常常是不可维护的。(5) 软件通常没有适当的文档资料。软件通常没有适当的文档资料。(6) 软件成本在计算机
12、系统总成本中所占的比例逐软件成本在计算机系统总成本中所占的比例逐年上升。年上升。(7) 软件开发生产率提高的速度,远远跟不上计算软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。机应用迅速普及深入的趋势。在软件开发和维护的过程中存在这么多严重问题,在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。开发与维护的方法不正确有关。1.1.2 产生软件危机的原因产生软件危机的原因人们在开发和使用计算机系统的长期实践中,也确人们在开发和使用计算机系统的长期实践中,也确实积累和总结
13、出了许多成功的经验。如果坚持不懈实积累和总结出了许多成功的经验。如果坚持不懈地使用经过实践考验证明是正确的方法,许多困难地使用经过实践考验证明是正确的方法,许多困难是完全可以克服的。是完全可以克服的。目前相当多的软件专业人员对软件开发和维护还有目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。危机的主要原因。事实上,对用户要求没有完整准确的认识就匆忙着事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多
14、软件开发工程失败的主要原因之手编写程序是许多软件开发工程失败的主要原因之一。事实上,越早开始写程序,完成它所需要用的一。事实上,越早开始写程序,完成它所需要用的时间往往越长。时间往往越长。软件生命周期软件生命周期一个软件从定义、开发、使用和维护,直到最终被一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把软件经历的废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。这个漫长的时期称为生命周期。图图1.1 引入同一变动付出的代价随时间变化的趋势引入同一变动付出的代价随时间变化的趋势统计数据表明,实际上用于软件维护的费用占软件统计数据表明,实际上用于
15、软件维护的费用占软件总费用的总费用的55%70%。软件工程学的一个重要目标。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。就是提高软件的可维护性,减少软件维护的代价。为了消除软件危机,首先应该对计算机软件有一个为了消除软件危机,首先应该对计算机软件有一个正确的认识。一个软件必须由一个完整的配置组成,正确的认识。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据及相关文档的完整集合。事实上,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数指令序列
16、;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图据结构;文档是开发、使用和维护程序所需要的图文资料。文资料。1983年年IEEE为软件下的定义是:计算机程序、方为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。序时所必需的数据。1.1.3 消除软件危机的途径消除软件危机的途径必须充分认识到软件开发不是某种个体劳动的神秘必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项
17、目。员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功应该推广使用在实践中总结出来的开发软件的成功的技术和方法。的技术和方法。应该开发和使用更好的软件工具。应该开发和使用更好的软件工具。软件工程正是从管理和技术两方面研究如何更好地软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。开发和维护计算机软件的一门新兴学科。概括地说,软件工程是指导计算机软件开发和维护概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正方法来开
18、发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。护它,这就是软件工程。人们曾经给软件工程下过许多定义,下面给出两个人们曾经给软件工程下过许多定义,下面给出两个典型的定义。典型的定义。1.2 软件工程软件工程 1.2.1 软件工程的介绍软件工程的介绍1968年在第一届年在第一届NATO会议上曾经给出了软件工程会议上曾经给出了软件工程的一个早期定义:的一个早期定义:“软件工程就是为了经济地获得软件工程就是为了经济地
19、获得可靠的且能在实际机器上有效地运行的软件,而建可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。立和使用完善的工程原理。”这个定义不仅指出了这个定义不仅指出了软件工程的目标是经济地开发出高质量的软件,而软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并且强调了软件工程是一门工程学科,它应该建立并使用完善的工程原理。使用完善的工程原理。1993年年IEEE进一步给出了一个更全面更具体的定进一步给出了一个更全面更具体的定义:义:“软件工程是:软件工程是: 把系统的、规范的、可度量把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,
20、也就是的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;把工程应用于软件; 研究研究中提到的途径。中提到的途径。”虽然软件工程的不同定义使用了不同词句,强调虽然软件工程的不同定义使用了不同词句,强调重点也有差异,但是人们普遍认为软件工程具有重点也有差异,但是人们普遍认为软件工程具有下述的本质特性:下述的本质特性:1.软件工程关注于大型程序的构造软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性软件工程的中心课题是控制复杂性3.软件经常变化软件经常变化4.开发软件的效率非常重要开发软件的效率非常重要5.和谐地合作是开发软件的关键和谐地合作是开发软件的关键6.软件必须有效地
21、支持它的用户软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品替具有另一种文化背景的人创造产品自从自从1968年在联邦德国召开的国际会议上正式提出年在联邦德国召开的国际会议上正式提出并使用了并使用了“软件工程软件工程”这个术语以来,研究软件工这个术语以来,研究软件工程的专家学者们陆续提出了程的专家学者们陆续提出了100多条关于软件工程多条关于软件工程的准则或的准则或“信条信条”。著名的软件工程专家。著名的软件工程专家B.W.Boehm综合这些学者们的意见并总结了综合这些学者们的意见并总结了TRW公司多年
22、开发软件的经验,于公司多年开发软件的经验,于1983年在一篇论文中年在一篇论文中提出了软件工程的提出了软件工程的7条基本原理。他认为这条基本原理。他认为这7条原理条原理是确保软件产品质量和开发效率的原理的最小集合。是确保软件产品质量和开发效率的原理的最小集合。1.2.2 软件工程的基本原理软件工程的基本原理 这这7条原理是互相独立的,其中任意条原理是互相独立的,其中任意6条原理的条原理的组合都不能代替另一条原理,因此,它们是缺组合都不能代替另一条原理,因此,它们是缺一不可的最小集合,然而这一不可的最小集合,然而这7条原理又是相当完条原理又是相当完备的。备的。1.用分阶段的生命周期计划严格管理用
23、分阶段的生命周期计划严格管理2.坚持进行阶段评审坚持进行阶段评审3.实行严格的产品控制实行严格的产品控制4.采用现代程序设计技术采用现代程序设计技术5.结果应能清楚地审查结果应能清楚地审查6.开发小组的人员应该少而精开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性承认不断改进软件工程实践的必要性 软件工程的目标与原则软件工程的目标与原则软件工程需要解决的问题:软件工程需要解决的问题:软件成本、软件可靠性、软件维护、软件生产率和软件成本、软件可靠性、软件维护、软件生产率和软件复用。软件复用。 软件工程需要达到的基本目标:软件工程需要达到的基本目标: 付出较低的开发成本付出较低的开发成
24、本 达到要求的软件功能达到要求的软件功能 取得较好的软件性能取得较好的软件性能 开发的软件易于移植开发的软件易于移植 需要较低的维护费用需要较低的维护费用 能按时完成开发、及时交付使用能按时完成开发、及时交付使用 软件工程原则软件工程原则在软件开发过程中必须遵循的软件工程原则有:在软件开发过程中必须遵循的软件工程原则有:1 1、抽象与自顶向下、逐层细化抽象与自顶向下、逐层细化 采用分层抽象采用分层抽象的方法,有效控制软件开发的复杂性。的方法,有效控制软件开发的复杂性。2 2、模块化模块化 把问题分解为若干较小的较易解决把问题分解为若干较小的较易解决的模块,有助于信息隐蔽和抽象。的模块,有助于信
25、息隐蔽和抽象。3 3、信息隐蔽和数据封装信息隐蔽和数据封装 将模块中的软件设计将模块中的软件设计决策封装在模块内部,使得模块实现与使用分离,决策封装在模块内部,使得模块实现与使用分离,有助于控制修改局部化。有助于控制修改局部化。 4 4、局部化局部化 在一个物理模块内集中逻辑上相互在一个物理模块内集中逻辑上相互关联的计算机资源,促使聚合具有特定目的的关联的计算机资源,促使聚合具有特定目的的事物。事物。5 5、一致性一致性 整个软件系统的模块使用一致的设整个软件系统的模块使用一致的设计策略、编程风格,保持程序内部接口的一致计策略、编程风格,保持程序内部接口的一致性、软件与硬件接口的一致性、系统规
26、格说明性、软件与硬件接口的一致性、系统规格说明与系统行为的一致性。与系统行为的一致性。6 6、完备性完备性 软件系统中不丢失任何成分。软件系统中不丢失任何成分。7 7、可验证性可验证性 系统分解应当遵循易检查、易测系统分解应当遵循易检查、易测试和易评审的原则,以便保证系统的正确性。试和易评审的原则,以便保证系统的正确性。软件工程包括技术和管理两方面的内容,是技术与软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。管理紧密结合所形成的工程学科。所谓管理就是通过计划、组织和控制等一系列活动,所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目
27、标的过合理地配置和使用各种资源,以达到既定目标的过程。程。通常把在软件生命周期全过程中使用的一整套技术通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学方法的集合称为方法学(methodology),也称为范型,也称为范型(paradigm)。在软件工程领域中,这两个术语的含。在软件工程领域中,这两个术语的含义基本相同。义基本相同。1.2.3 软件工程方法学软件工程方法学软件工程方法学包含软件工程方法学包含3个要素:个要素:方法、工具和过程方法、工具和过程其中,方法是完成软件开发的各项任务的技术方法,其中,方法是完成软件开发的各项任务的技术方法,回答回答“怎样做怎样做”的问题;工
28、具是为运用方法而提供的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。架,它规定了完成各项任务的工作步骤。目前使用得最广泛的软件工程方法学,分别是目前使用得最广泛的软件工程方法学,分别是传统传统方法学方法学和和面向对象方法学面向对象方法学。工具工具方法方法过程过程质量焦点质量焦点软件工程的层次软件工程的层次1. 传统方法学传统方法学传统方法学也称为生命周期方法学或结构化范型。传统方法学也称为生命周期方法学
29、或结构化范型。它采用结构化技术它采用结构化技术(结构化分析、结构化设计和结结构化分析、结构化设计和结构化实现构化实现)来完成软件开发的各项任务,并使用适来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。分为若干个阶段,然后顺序地完成每个阶段的任务。采用这种方法学开发软件的时候,从对问题的抽象采用这种方法学开发软件的时候,从对问题的抽象逻辑分析开始,一个阶段一个阶段地进行开发。逻辑分析开始,一
30、个阶段一个阶段地进行开发。把软件生命周期划分成若干个阶段,每个阶段的任把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;作,从而降低了整个软件开发工程的困难程度;在软件生命周期的每个阶段都采用科学的管理技术在软件生命周期的每个阶段都采用科学的管理技术和良好的技术方法,这就使软件开发工程的全过程和良好的技术方法,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。特别是提高了软件的可维
31、护性。总之,采用生命周期方法学可以大大提高软件开发总之,采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。的成功率,软件开发的生产率也能明显提高。2. 面向对象方法学面向对象方法学当软件规模庞大,或者对软件的需求是模糊的或会当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。维护起来仍然很困难。概括地说,面向对象方法学具有下述概括地说,面向对象方法学具有下述4个要点。个要点。(1)
32、 把对象把对象(object)作为融合了数据及在数据上的操作为融合了数据及在数据上的操作行为的统一的软件构件。作行为的统一的软件构件。(2) 把所有对象都划分成类把所有对象都划分成类(class)。(3) 按照父类按照父类(或称为基类或称为基类)与子类与子类(或称为派生类或称为派生类)的的关系,把若干个相关类组成一个层次结构的系统关系,把若干个相关类组成一个层次结构的系统(也称为类等级也称为类等级)。(4) 对象彼此间仅能通过发送消息互相联系。对象彼此间仅能通过发送消息互相联系。面向对象方法学的优点:面向对象方法学的优点:面向对象方法学的出发点和基本原则,是尽量模拟面向对象方法学的出发点和基本
33、原则,是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。可能接近人类认识世界解决问题的方法与过程。用面向对象方法学开发软件的过程,是一个主动地用面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。多次反复迭代的演化过程。面向对象范型的另一个重要优点是促进了软件重用。面向对象范型的另一个重要优点是促进了软件重用。软件生命周期由软件生命周期由软件定义、软件开发和运行维护软件定义、软件开发和运行维护(也称为软件维护也称为软件维护)3个时期组成。个时期组成。软件定义时期的任务是:软件定义时期的任务是
34、: 确定软件开发工程必须完确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度成该项工程需要的资源和成本,并且制定工程进度表。软件定义时期通常进一步划分成表。软件定义时期通常进一步划分成3个阶段,即个阶段,即问题定义、可行性研究和需求分析。问题定义、可行性研究和需求分析。1.3 软件生命周期软件生命周期开发时期具体设计和实现在前一个时期定义的软件,开发时期具体设计和实现在前一个时期定义的软件,它通常由下述它
35、通常由下述4个阶段组成:总体设计,详细设计,个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。为系统设计,后两个阶段又称为系统实现。维护时期的主要任务是使软件持久地满足用户的需维护时期的主要任务是使软件持久地满足用户的需要。通常对维护时期不再进一步划分阶段,但是每要。通常对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义一次维护活动本质上都是一次压缩和简化了的定义和开发过程。和开发过程。软件生命周期每个阶段的基本任务。软件生命周期每个阶段的基本任务。1.问题
36、定义问题定义2.可行性研究可行性研究3. 需求分析需求分析4.总体设计总体设计5.详细设计详细设计6.编码和单元测试编码和单元测试7.综合测试综合测试8.软件维护软件维护软件过程是为了获得高质量软件所需要完成的一系软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应该交付的文档资料、过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。以及标志软件开发各个阶段
37、任务完成的里程碑。通常使用生命周期模型简洁地描述软件过程。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。各个阶段的执行顺序,因此,也称为过程模型。1.4 软件过程软件过程在在20世纪世纪80年代之前,瀑布模型一直是惟一被广泛年代之前,瀑布模型一直是惟一被广泛采用的生命周期模型,现在它仍然是软件工程中应采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。传统软件工程方法学的软用得最广泛的过程模型。传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。件过程
38、,基本上可以用瀑布模型来描述。1.4.1 瀑布模型瀑布模型图图1.2 传统的瀑布模型传统的瀑布模型图图1.3 实际的瀑布模型实际的瀑布模型瀑布模型有许多优点:可强迫开发人员采用规范的瀑布模型有许多优点:可强迫开发人员采用规范的方法(例如,结构化技术);方法(例如,结构化技术); 严格地规定了每个阶严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。都必须经过质量保证小组的仔细验证。各个阶段产生的文档是维护软件产品时必不可少的,各个阶段产生的文档是维护软件产品时必不可少的,没有文档的软件几乎是不可能维护的。瀑
39、布模型的没有文档的软件几乎是不可能维护的。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动成功在很大程度上是由于它基本上是一种文档驱动的模型。的模型。由于瀑布模型几乎完全依赖于书面的规格说明,很由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户可能导致最终开发出的软件产品不能真正满足用户的需要。的需要。所谓快速原型是快速建立起来的可以在计算机上运所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。成的功能的一个子集。快速原型模型的第一步是快速建立一个能
40、反映用户快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。通过实践来了解目标系统的概貌。1.4.2 快速原型模型快速原型模型图图1.4 快速原型模型快速原型模型(1) 原型系统已经通过与用户交互而得到验证,原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。说明文档的错误而进行较大的返工。(2
41、) 开发人员通过建立原型系统已经学到了许多开发人员通过建立原型系统已经学到了许多东西东西 ,在设计和编码阶段发生错误的可能性也比较,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。犯错误的可能性。软件产品一旦交付给用户使用之后,维护便开始了。软件产品一旦交付给用户使用之后,维护便开始了。根据所需完成的维护工作种类的不同,可能需要返根据所需完成的维护工作种类的不同,可能需要返回到需求分析、规格说明、设计或编码等不同阶段。回到需求分析、规格说明、设计或编码等不同阶段。增量模型也称为渐增模型,使用增量模型开
42、发软件增量模型也称为渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。构成,并且能够完成特定的功能。把软件产品分解成增量构件时,必须遵守的约束条把软件产品分解成增量构件时,必须遵守的约束条件是,当把新构件集成到现有软件中时,所形成的件是,当把新构件集成到现有软件中时,所形成的产品必须是可测试的。产品必须是可测试的。能在较短时间内向用户提交可完成部分工作的产品,能在较短时间内向用户提交可完成部分工作的产品,是增量
43、模型的一个优点。是增量模型的一个优点。1.4.3 增量模型增量模型图图1.5 增量模型增量模型增量模型的另一个优点是,逐步增加产品功能可以增量模型的另一个优点是,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。少一个全新的软件可能给客户组织带来的冲击。使用增量模型的软件体系结构必须是开放的。使用增量模型的软件体系结构必须是开放的。从某种意义上说,增量模型本身是自相矛盾的。从某种意义上说,增量模型本身是自相矛盾的。图图1.6 风险更大的增量模型风险更大的增量模型螺旋模型的基本思想是,使用原型及其
44、他方法来尽螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快它看作在每个阶段之前都增加了风险分析过程的快速原型模型。速原型模型。1.4.4 螺旋模型螺旋模型图图1.7 简化的螺旋模型简化的螺旋模型图图1.8 完整的螺旋模型完整的螺旋模型螺旋模型主要适用于内部开发的大规模软件项目。螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。事实上,项目越大,风险则风险分析是不
45、可行的。事实上,项目越大,风险也越大,因此,进行风险分析的必要性也越大。此也越大,因此,进行风险分析的必要性也越大。此外,只有内部开发的项目,才能在风险过大时方便外,只有内部开发的项目,才能在风险过大时方便地中止项目。地中止项目。螺旋模型的主要优势在于,它是风险驱动的,但是,螺旋模型的主要优势在于,它是风险驱动的,但是,这也可能是它的一个弱点。除非软件开发人员具有这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还
46、认为一切正常。开发人员可能还认为一切正常。使用面向对象方法学开发软件时,工作重点应该放使用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。这种方法在开发的早期在生命周期中的分析阶段。这种方法在开发的早期阶段定义了一系列面向问题的对象,并且在整个开阶段定义了一系列面向问题的对象,并且在整个开发过程中不断充实和扩充这些对象,对生命周期各发过程中不断充实和扩充这些对象,对生命周期各阶段的区分就不明显了。阶段的区分就不明显了。喷泉模型是典型的面向对象的软件过程模型。喷泉模型是典型的面向对象的软件过程模型。1.4.5 喷泉模型喷泉模型图图1. 9 喷泉模型喷泉模型 分析阶段得到的对象模型
47、也适用于设计阶段和分析阶段得到的对象模型也适用于设计阶段和 实现阶段,整个开发过程是实现阶段,整个开发过程是“无缝无缝”连接的,很容连接的,很容易实现各个开发步骤的多次反复迭代,达到认识的易实现各个开发步骤的多次反复迭代,达到认识的 逐步深化。逐步深化。Rational统一过程(统一过程( Rational Unified Process,RUP)是由是由Rational软件公司推出的软件公司推出的 一种完整的软件过程。一种完整的软件过程。1、最佳实践、最佳实践 (1)迭代式开发)迭代式开发(2)管理需求)管理需求(3)使用基于构件的体系结构)使用基于构件的体系结构(4)可视化建模)可视化建模
48、(5)验证软件质量)验证软件质量(6)控制软件变更)控制软件变更1.4.6 Rational统一过程统一过程2、RUP软件开发生命周期软件开发生命周期在在RUP中,软件开发生命周期根据时间和中,软件开发生命周期根据时间和RUP的核的核心工作流划分为二维空间。横轴表示项目的时间维,心工作流划分为二维空间。横轴表示项目的时间维,纵轴代表核心工作流。纵轴代表核心工作流。RUP中有中有9个核心工作流,分为个核心工作流,分为6个核心过程工作个核心过程工作流(流(C ore Process Workflows)和)和3个核心支持工作个核心支持工作流(流(Core Supporting Workflows)
49、。)。 9个核心工作流在项目中轮流被使用,在每一次迭个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。代中以不同的重点和强度重复。单击此处编辑母版标题样式单击此处编辑母版标题样式单击此处编辑母版副标题样式单击此处编辑母版副标题样式图图1. 10 RUP软件开发生命周期软件开发生命周期单击此处编辑母版标题样式单击此处编辑母版标题样式单击此处编辑母版副标题样式单击此处编辑母版副标题样式(1)RUP的核心工作流的核心工作流1. 商业建模(商业建模(Business Modeling)2. 需求分析(需求分析(Requirements)3. 分析与设计(分析与设计(Analysis
50、 and Design)4. 实现(实现(Implementation)5. 测试(测试(Test)6. 配置(配置(Deployment)7. 设置和变更管理(设置和变更管理(Configuration and Change Management)8. 项目管理(项目管理(Project Management)9. 环境(环境(Environment)单击此处编辑母版标题样式单击此处编辑母版标题样式单击此处编辑母版副标题样式单击此处编辑母版副标题样式(2)RUP的四个阶段的四个阶段RUP包括以下几个阶段:包括以下几个阶段:起始阶段起始阶段细化阶段细化阶段构建阶段构建阶段交付阶段交付阶段每个阶
51、段结束于一个主要的里程碑(每个阶段结束于一个主要的里程碑(Major Milestones),每个阶段本质上是两个里程碑之),每个阶段本质上是两个里程碑之间的时间跨度。间的时间跨度。 初始阶段:初始阶段:建立业务模型,定义最终产品视图,并建立业务模型,定义最终产品视图,并且确定项目的且确定项目的 范围。范围。精化阶段:精化阶段:设计并确定系统的体系结构,制定项目设计并确定系统的体系结构,制定项目计划,确定资源需求。计划,确定资源需求。构建阶段:构建阶段:开发出所有构件和应用程序,把它们集开发出所有构件和应用程序,把它们集成为客户需要的产品,并且详尽地测试所有功能。成为客户需要的产品,并且详尽地
52、测试所有功能。移交阶段:移交阶段:把开发出的产品提交给用户使用。把开发出的产品提交给用户使用。图图1. 11 RUP的迭代开发模型的迭代开发模型1、敏捷过程、敏捷过程 17位著名的软件专家于位著名的软件专家于2001年年2月联合起草了月联合起草了敏捷软件开发宣言。敏捷软件开发宣言。(1)个体和交互胜过过程和工具)个体和交互胜过过程和工具(2)可以工作的软件胜过面面俱到的文档)可以工作的软件胜过面面俱到的文档(3)客户合作胜过合同谈判)客户合作胜过合同谈判(4)响应变化胜过遵循计划)响应变化胜过遵循计划1.4.7 敏捷过程与极限编程敏捷过程与极限编程 2、极限编程、极限编程极限编程极限编程(eX
53、treme Programming,XP),“极限极限”指指把好的开发实践运用到极致,广泛应用于需求模糊把好的开发实践运用到极致,广泛应用于需求模糊且经常改变的且经常改变的 场合。场合。(1)极限编程的有效实践)极限编程的有效实践u客户作为开发团队的成员客户作为开发团队的成员u使用用户素材使用用户素材u短交付周期短交付周期u验收测试验收测试u结对编程结对编程u测试驱动开发测试驱动开发u集体所有集体所有u持续集成持续集成u可持续的开发速度可持续的开发速度u开放的工作空间开放的工作空间u及时调整计划及时调整计划u简单的设计简单的设计u重构重构u使用隐喻使用隐喻(2)极限编程的整体开发过程)极限编程
54、的整体开发过程(3)极限编程的迭代过程)极限编程的迭代过程图图1. 12 XP 项目的整体开发过程项目的整体开发过程 图图1. 13 XP 项目的迭代开发过程项目的迭代开发过程 1、微软过程准则、微软过程准则l项目计划应该兼顾未来的项目计划应该兼顾未来的 不确定因素不确定因素l用有效的风险管理来减少不确定因素的影响用有效的风险管理来减少不确定因素的影响l经常生成并快速地测试软件的过渡版本经常生成并快速地测试软件的过渡版本l采用快速循环、递进的开发过程采用快速循环、递进的开发过程l用创造性的工作来平衡产品特性和产品成本用创造性的工作来平衡产品特性和产品成本l项目进度表应该具有较高的稳定性和权威性
55、项目进度表应该具有较高的稳定性和权威性l使用小型项目组并发地完成开发工作使用小型项目组并发地完成开发工作l在项目早期把软件配置项基线化,项目后期则冻结产品在项目早期把软件配置项基线化,项目后期则冻结产品l使用原型验证概念,对项目进行早期论证使用原型验证概念,对项目进行早期论证l把零缺陷作为追求的目标把零缺陷作为追求的目标l里程碑评审会的目的是改进工作,切忌相互指责里程碑评审会的目的是改进工作,切忌相互指责1.4.8 微软过程微软过程2、微软软件生命周期、微软软件生命周期微软过程把软件生命周期划分成微软过程把软件生命周期划分成5个阶段个阶段(1)规划阶段)规划阶段(2)设计阶段)设计阶段(3)开
56、发阶段)开发阶段(4)稳定阶段)稳定阶段(5)发布阶段)发布阶段3、微软过程模型、微软过程模型图图1. 14 微软软件生命周期阶段划分和主要里程碑微软软件生命周期阶段划分和主要里程碑 图图1. 15微软过程的生命周期模型微软过程的生命周期模型 微软过程综合了微软过程综合了Rational统一过程和敏捷过程统一过程和敏捷过程的许多优点,是适用于商业环境下具有有限资源和的许多优点,是适用于商业环境下具有有限资源和 有限开发时间约束的软件过程。有限开发时间约束的软件过程。 在实际的开发实践中,应该结合相关软件过程在实际的开发实践中,应该结合相关软件过程的优点,针对不同的项目进行具体分析,定制符合的优点,针对不同的项目进行具体分析,定制符合实际需求的软件过程。实际需求的软件过程。软件危机软件危机软件工程基本原理软件工程基本原理生命周期方法学生命周期方法学面向对象方法学面向对象方法学软件生命周期划分软件生命周期划分软件过程模型软件过程模型1.5 小结小结