《软件工程课件136114.pptx》由会员分享,可在线阅读,更多相关《软件工程课件136114.pptx(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、现代软件工程计算机信息工程学院2004年9月授课教师:李德生授课教师:李德生答疑时间:周三下午答疑时间:周三下午答疑地点:计算机应用教研室答疑地点:计算机应用教研室E_mail:Lids_E_mail:Lids_Software=Programming+DocumentsProgramming=Data Structure+algorithm第一章第一章 软件工程概述软件工程概述1.1 1.1 软件工程的基本概念、特点和分类软件工程的基本概念、特点和分类1.1.1 1.1.1 软件的概念、特征软件的概念、特征计算机软件是程序、数据及相关文档的集合。计算机软件是程序、数据及相关文档的集合。1.1
2、 1.1 软件工程的基本概念、特点和分类软件工程的基本概念、特点和分类软件的特征:软件的特征:P1P1。1.1 1.1 软件工程的基本概念、特点和分类软件工程的基本概念、特点和分类1.1.2 1.1.2 软件的分类:软件的分类:系统软件、支撑软件、应用软件。系统软件、支撑软件、应用软件。软件规模:软件规模:类别参加人员数研制期限产品规模(源程序行数)微型114周0.5k小型116月1k2k中型2512年5k50k大型52023年50k100k甚大型100100045年1M(=1000k)极大型20005000510年1M10M1.2.1 软件的发展软件的发展1946年,第一台计算机诞生,通过编
3、写机器码指令的方式来编写程年,第一台计算机诞生,通过编写机器码指令的方式来编写程序,满足了人们计算方面的需要。序,满足了人们计算方面的需要。之后,计算机硬件以空前的速度飞速发展。由电子管计算机时代之后,计算机硬件以空前的速度飞速发展。由电子管计算机时代晶体管计算机时代晶体管计算机时代集成电路计算机时代,集成电路计算机时代,按照摩尔法则(微处理器的性能每按照摩尔法则(微处理器的性能每18个月翻番)使计算机的性能不个月翻番)使计算机的性能不断提高。同时硬件技术的突破,为软件技术的发展提供了空间,断提高。同时硬件技术的突破,为软件技术的发展提供了空间,软件技术也得到了相应的发展,由最初的机器码编程软
4、件技术也得到了相应的发展,由最初的机器码编程汇编语言汇编语言高级语言。关系数据库理论的发展也促进了数据库应用系统的高级语言。关系数据库理论的发展也促进了数据库应用系统的发展。发展。软件技术上的这一系列发展的结果使得计算机的应用领域由最初的软件技术上的这一系列发展的结果使得计算机的应用领域由最初的科学计算发展到军事、经济、科学、文化等各个领域。计算机应科学计算发展到军事、经济、科学、文化等各个领域。计算机应用系统由简单到复杂,由小型到大型,到了用系统由简单到复杂,由小型到大型,到了60年代末期,从事软年代末期,从事软件开发的人员发现,他们使用过去一直使用的方法来开发大型复件开发的人员发现,他们使
5、用过去一直使用的方法来开发大型复杂的应用系统遇到了问题。过去,编制程序完全是一种技巧,主杂的应用系统遇到了问题。过去,编制程序完全是一种技巧,主要依赖于程序员的素质,程序是程序员智慧的结晶,每个程序员要依赖于程序员的素质,程序是程序员智慧的结晶,每个程序员编程无章法,随意性大,开发模式完全是手工小作坊式的。由此,编程无章法,随意性大,开发模式完全是手工小作坊式的。由此,60年代末,对大型系统的开发呈现出年代末,对大型系统的开发呈现出“软件危机软件危机”。1.2 软件危机与软件工程软件危机与软件工程例例:Windows9595有有10001000万行代码万行代码 Windows20002000有
6、有50005000万行代码万行代码Exchange2000和和 Windows20002000开发人员开发人员结构结构Exchange2000Windows20002000项目经理项目经理25人人约约250人人开发人员开发人员140人人约约1700人人测试人员测试人员350人人约约3200人人自自20世纪世纪40年代中出现了世界上第一台计算机年代中出现了世界上第一台计算机以后,就有了程序的概念。其后经历了几十以后,就有了程序的概念。其后经历了几十年的发展,计算机软件经历了四个发展阶段:年的发展,计算机软件经历了四个发展阶段:程序设计阶段,约为程序设计阶段,约为50至至60年代年代程序系统阶段,
7、约为程序系统阶段,约为60至至70年代年代软件工程阶段,约为软件工程阶段,约为70年代以后年代以后面向对象软件工程阶段,约为面向对象软件工程阶段,约为80年代以后年代以后Evolution of software 早期早期 第二阶段第二阶段 第三阶段第三阶段 第四阶段第四阶段面向批处理面向批处理 多用户多用户 分布式系统分布式系统 强大的桌面系统强大的桌面系统有限的分布有限的分布 实时实时 嵌入嵌入“智能智能”面向对象技面向对象技术术自定义软件自定义软件 数据库数据库 低成本硬件低成本硬件 专家系专家系统 软件产品软件产品 消费者的影响 人工神经网络人工神经网络 并行计算并行计算 网络计算机网
8、络计算机1950196019701980199020001.2.2 软件危机的主要表现软件危机的主要表现1.对软件开发成本和进度的估计常常很不准确。对软件开发成本和进度的估计常常很不准确。(下页下页图图)软件开发很难按预定计划实现,投入了资金,能否出结果,出软件开发很难按预定计划实现,投入了资金,能否出结果,出怎样的结果,事先难以预料。怎样的结果,事先难以预料。2.用户对用户对“已完成已完成”的软件系统不满意的现象经常发的软件系统不满意的现象经常发生。生。3.软件产品的质量往往不可靠。软件可靠性和质量保软件产品的质量往往不可靠。软件可靠性和质量保证的定量概念刚刚出现不久。证的定量概念刚刚出现不
9、久。1962年年6月,美国飞向金星的第一个空间探测号(水手月,美国飞向金星的第一个空间探测号(水手1号),因其号),因其飞舱中的计算机导航程序之一的一个语句的语义出错,总是偏离航线无飞舱中的计算机导航程序之一的一个语句的语义出错,总是偏离航线无法取得成功。法取得成功。1965年年1970年,美国范登堡基地因程序有错误造成发射年,美国范登堡基地因程序有错误造成发射火箭多次失败。火箭多次失败。1.2 软件危机与软件工程软件危机与软件工程yet,Success Hasnyet,Success Hasn t Come Easilyt Come Easily31%31%53%53%16%16%Succe
10、ssfullyChallengedCanceled4.软件常常是不可维护的。通常软件维护的费用占总软件常常是不可维护的。通常软件维护的费用占总费用的费用的55%-70%。错误具有累积和放大效应。错误具有累积和放大效应。在后期发现的错误改正的成本和难度将是巨大的(比早期进在后期发现的错误改正的成本和难度将是巨大的(比早期进行修正所付出的代价高行修正所付出的代价高2-3个数量级),甚至是不可能改正个数量级),甚至是不可能改正的。的。改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.
11、5(美元)(人天)5.软件通常没有适当的文档资料,给软件开发软件通常没有适当的文档资料,给软件开发和维护带来极大困难。和维护带来极大困难。文档的作用:文档的作用:管理人员:评价软件开发进度。管理人员:评价软件开发进度。开发人员:通讯工具。开发人员:通讯工具。维护人员:维护的依据。维护人员:维护的依据。6.软件成本在计算机系统总成本中所占的比例软件成本在计算机系统总成本中所占的比例逐年上升。(见下页图)逐年上升。(见下页图)7.软件开发生产率提高的速度远远跟不上计算软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。机应用迅速普及深入的趋势。处在十字路口的中国软件产业处在十字路口的中
12、国软件产业 主权大国必须建立基于自主技术的、主权大国必须建立基于自主技术的、完整的软件产业体系。完整的软件产业体系。软件本国提供率:中国软件本国提供率:中国1/31/3左右,美国左右,美国97%97%“印度模式印度模式”还是还是“中国模式中国模式”软件人才结构不合理,软件人才结构不合理,缺乏中高级软缺乏中高级软 件人才。软件人员缺乏软件工程化件人才。软件人员缺乏软件工程化的概念。的概念。1.2.3 1.2.3 软件工程软件工程 1968 1968年由年由NATO(北大西洋公约北大西洋公约组织组织)在德国在德国Garmish召开的学术会议召开的学术会议上,上,Feitz BauerFeitz B
13、auer首先提出了首先提出了“软件软件工程工程”概念。概念。P.Wegner 和和B.Boehm认为软件认为软件工程可定义为:工程可定义为:科学知识在设计和构造计算机程科学知识在设计和构造计算机程序,以及开发、运作和维护这些序,以及开发、运作和维护这些程序所要求的有关文档编制中的程序所要求的有关文档编制中的实际应用。实际应用。软件工程的定义软件工程的定义 Fritz Bauer在在NATO会议上会议上给出的定义:给出的定义:“软件工程是为了经济地软件工程是为了经济地获得可靠的和能在实际机器上高获得可靠的和能在实际机器上高效运行的软件而确立和使用的健效运行的软件而确立和使用的健全的工程原理(方法
14、)。全的工程原理(方法)。”软件工程的定义软件工程的定义 IEEE IEEE【IEE83】给出的软给出的软件工程定义:件工程定义:“软件工程是开发、运行、软件工程是开发、运行、维护和修复软件的系统方法。维护和修复软件的系统方法。”软件工程的定义软件工程的定义 IEEEIEEE【IEE93】给出了一个更给出了一个更加综合的定义:加综合的定义:“将系统化的、规范的、可将系统化的、规范的、可度量的方法应用于软件的开发、度量的方法应用于软件的开发、运行和维护的过程,即将工程化运行和维护的过程,即将工程化应用于软件中。应用于软件中。”软件工程的定义软件工程的定义 软件工程是指导软件开发和维护的软件工程是
15、指导软件开发和维护的工程类学科,它以计算机科学理论及工程类学科,它以计算机科学理论及其他相关学科的理论为指导,采用工其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行程化的概念、原理、技术和方法进行软件的开发和维护,把经过时间证明软件的开发和维护,把经过时间证明正确的管理措施和当前能够得到的最正确的管理措施和当前能够得到的最好的技术方法结合起来,以较少的代好的技术方法结合起来,以较少的代价获取高质量的软件价获取高质量的软件 软件工程是应用计算机科学、数学及软件工程是应用计算机科学、数学及管理科学等原理,借鉴传统工程的管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到原则
16、、方法来创建软件,从而达到提高质量、降低成本的目的其中提高质量、降低成本的目的其中计算机科学和数学用于构造模型、计算机科学和数学用于构造模型、分析算法,工程科学用于制定规范、分析算法,工程科学用于制定规范、明确风范(明确风范(paradigmparadigm)、评估成本、)、评估成本、确定权衡,管理科学用于进度、资确定权衡,管理科学用于进度、资源、质量、成本等的管理源、质量、成本等的管理1.2.4 软件工程的研究对象与基本原理软件工程的研究对象与基本原理研究对象:研究对象:软件工程主要研究与软件开发和维护有关的四个方面软件工程主要研究与软件开发和维护有关的四个方面的内容:过程与模型、方法和技术
17、、工具和环境、的内容:过程与模型、方法和技术、工具和环境、标准和规范。软件工程管理则贯穿于这四个方面。标准和规范。软件工程管理则贯穿于这四个方面。1.所有软件开发和维护都是由一系列过程所构成,它所有软件开发和维护都是由一系列过程所构成,它将其他三个方面结合起来。以合理及时地进行软件将其他三个方面结合起来。以合理及时地进行软件开发和维护。软件生存周期模型则将软件工程过程开发和维护。软件生存周期模型则将软件工程过程有机的结合起来,提供一个结构框架,明确主要活有机的结合起来,提供一个结构框架,明确主要活动和任务,忽略次要的细节,以利于开发维护人员动和任务,忽略次要的细节,以利于开发维护人员理解并适应
18、不同的项目。过程强调的是具体的活动理解并适应不同的项目。过程强调的是具体的活动和任务等,模型则突出表现过程的有机结合。和任务等,模型则突出表现过程的有机结合。2.软件开发和维护方法体现了软件开发和维护软件开发和维护方法体现了软件开发和维护人员看待系统的立场和观点,即方法论意义人员看待系统的立场和观点,即方法论意义上的方法。上的方法。例如,结构化方法认为系统是由一些结例如,结构化方法认为系统是由一些结构化的功能相互联系、相互作用而构成,面构化的功能相互联系、相互作用而构成,面向对象的方法则认为系统是由一些对象的相向对象的方法则认为系统是由一些对象的相互联系、相互作用而构成。技术则是方法的互联系、
19、相互作用而构成。技术则是方法的具体实现,有若干步骤构成,突出具体实现,有若干步骤构成,突出“如何做如何做”,有时也不加区别的称为技术方法。,有时也不加区别的称为技术方法。3.工具为软件开发和维护的方法、技术提供了工具为软件开发和维护的方法、技术提供了自动或半自动的软件支持,以提高软件生产自动或半自动的软件支持,以提高软件生产效率。效率。将各种工具结合起来,连同有关的软硬将各种工具结合起来,连同有关的软硬件便形成软件开发和维护环境,其目的是使件便形成软件开发和维护环境,其目的是使软件工具支持整个软件生存周期。如北大的软件工具支持整个软件生存周期。如北大的青鸟系统等。青鸟系统等。4.作为工程而言,
20、标准化、规范化可以使各种作为工程而言,标准化、规范化可以使各种工作有章可循,进而提高生产效率和产品质工作有章可循,进而提高生产效率和产品质量。量。软件工程标准主要有五个层次:国际标软件工程标准主要有五个层次:国际标准、国家标准、行业标准、企业规范和项目准、国家标准、行业标准、企业规范和项目规范。规范。软件工程是一门交叉学科软件工程是一门交叉学科软件工程的主要研究内容u软件开发技术软件开发技术:软件开发方法学软件开发方法学 软件开发过程软件开发过程 软件工具和软件工程环境软件工具和软件工程环境 u软件工程管理软件工程管理:软件管理学软件管理学 软件经济学软件经济学 软件心理学软件心理学 软件工程
21、所包含的内容不是一成不变的,软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解而随着人们对软件系统的研制开发和生产的理解而不断变化。不断变化。软件工程的层次结构:软件工程的层次结构:任何工程化方法都必须围绕高质量这一核心。任何工程化方法都必须围绕高质量这一核心。软件工程的四个研究对象构成了以软件质量软件工程的四个研究对象构成了以软件质量为核心的层次结构。为核心的层次结构。软件工程 一种层次化技术一种层次化技术工具和环境层工具和环境层方法和技术层方法和技术层过程和模型层过程和模型层质量核心层质量核心层Software engineering layersSoftware
22、 engineering layers标准和规范层标准和规范层软件工程三个要素:软件工程三个要素:软件工程三个要素:软件工程三个要素:方法、工具、过程方法、工具、过程方法、工具、过程方法、工具、过程软件工程框架可可用用性性性性性性确确正正合合算算选取适宜的开发模型选取适宜的开发模型采用合适的设计方法采用合适的设计方法提供高质量的工程支持提供高质量的工程支持重视软件工程的管理重视软件工程的管理基基本本过过程程原则原则 目标目标 过过 程程支支支支持持持持过过过过程程程程组组组组织织织织过过过过程程程程软件工程知识结构软件工程知识结构 20012001年年5 5月月ISO/IEC JTC 1ISO
23、/IEC JTC 1(ISOISO和和IECIEC的第一联合技术委员会)发布了的第一联合技术委员会)发布了 SWEBOK指南指南V0.95(V0.95(试用版试用版)(Guide to the Software Engineering Body of Knowledge,简简称称SWEBOK)SWEBOK把软件工程学科的主把软件工程学科的主体知识分为体知识分为10个知识领域。个知识领域。软件工程知识结构软件工程知识结构 软件需求软件需求 软件设计软件设计 软件构造软件构造 软件测试软件测试 软件维护软件维护 软件配置管理软件配置管理 软件工程管理软件工程管理 软件工程过程软件工程过程 软件工程
24、工具和方法软件工程工具和方法 软件质量软件质量软件工程的基本原理:软件工程的基本原理:著名软件工程专家著名软件工程专家Boehm于于1983年提出了软年提出了软件工程的七条基本原理:件工程的七条基本原理:1.用分段的生存周期计划严格管理。用分段的生存周期计划严格管理。2.坚持进行阶段评审。坚持进行阶段评审。3.实施严格的产品控制。实施严格的产品控制。4.采用现代程序设计技术。采用现代程序设计技术。5.结果应能清楚地审查。结果应能清楚地审查。6.开发小组的成员应该少而精。开发小组的成员应该少而精。7.承认不断改进工程实践的必要性。承认不断改进工程实践的必要性。1.3.1 结构化方法结构化方法 结
25、构化方法基于软件工程生存周期的概结构化方法基于软件工程生存周期的概念之上。目前,已经形成了完整的念之上。目前,已经形成了完整的SA-SD-SP方法。方法。总的指导思想:自顶向下、逐步求精、总的指导思想:自顶向下、逐步求精、单入口、单出口。基本原则:抽象和功能分单入口、单出口。基本原则:抽象和功能分解。结构化方法围绕处理解。结构化方法围绕处理“功能功能”的实现过的实现过程来构造软件系统。适于需求可以预先确定程来构造软件系统。适于需求可以预先确定的系统开发。的系统开发。1.3 软件开发方法软件开发方法1.3.2 面向对象方法面向对象方法面向对象方法有如下要点:面向对象方法有如下要点:1.世界由世界
26、由Object构成。复杂对象由简单对象组成。构成。复杂对象由简单对象组成。2.把对象归为把对象归为Class,每个类都定义了一组数据(属性,每个类都定义了一组数据(属性)和方法。)和方法。3.按照子类(派生类)和父类(基类)的关系,可以按照子类(派生类)和父类(基类)的关系,可以把若干个类组成一个层次结构的系统。在这个系统把若干个类组成一个层次结构的系统。在这个系统中,子类可以继承(中,子类可以继承(Inheritance)父类的数据和方)父类的数据和方法。法。4.对象之间只能通过传递消息进行通信。对象之间只能通过传递消息进行通信。Object-Oriented=Objects+Classes
27、+Inheritance+Communication with Message面向对象的方法现已形成一整套的开发方法,面向对象的方法现已形成一整套的开发方法,由由Object-Oriented Analysis、Object-Oriented Design、Object-Oriented Programming组成。组成。1.3.3 形式化方法形式化方法形式化方法生成的模型比结构化方法或面向对形式化方法生成的模型比结构化方法或面向对象方法得到的模型更完整、一致且无二义性。象方法得到的模型更完整、一致且无二义性。主要包括:主要包括:形式化分析形式化分析形式化设计形式化设计翻译翻译“软件工程软件工
28、程”课程课程 与其它软件专业课的区别与其它软件专业课的区别(1)(1)立足于系统的整体。立足于系统的整体。(2)(2)讲授系统分析、系统设计、讲授系统分析、系统设计、测试及维护的理论和方法。测试及维护的理论和方法。(3)(3)构筑一个软件系统,实践构筑一个软件系统,实践 软件开发全过程。软件开发全过程。“软件工程”课程教学与实践的目标u 转变对软件的认识:转变对软件的认识:上升上升 程序程序 系统系统u 转变思维定式:转变思维定式:上升上升 程序员程序员 系统工程师系统工程师 (系统分析员系统分析员)工程化训练工程化训练系统分析员的地位用户用户分析员分析员程序员程序员“一个好的工业,应有一套良
29、好的标准来配套”软件的工业化生产过程应具备的特点:软件的工业化生产过程应具备的特点:明确的工作步骤明确的工作步骤详细具体的规范化文档详细具体的规范化文档明确的质量评价标准明确的质量评价标准软件产品的标准化软件产品的标准化软件产品的标准化软件产品的标准化软件开发过程的标准化软件开发过程的标准化软件开发过程的标准化软件开发过程的标准化软件工程技术的两个明显特点:u 强调规范化强调规范化u 强调文档化强调文档化1.4 1.4 软件生命周期软件生命周期1.4.1 1.4.1 软件生命周期软件生命周期 (Software Life Cycle)软件产品或软件系统从项目需求定义开始,软件产品或软件系统从项
30、目需求定义开始,到开发成功后投入使用,在使用过程中不断增补到开发成功后投入使用,在使用过程中不断增补修订,直到停止使用,这一期间的各种活动过程。修订,直到停止使用,这一期间的各种活动过程。通常分三个阶段:定义阶段、开发阶段、维通常分三个阶段:定义阶段、开发阶段、维护阶段。维护阶段又分为纠错、适应、增强、预护阶段。维护阶段又分为纠错、适应、增强、预防。防。1.4.2 1.4.2 软件生存期的阶段划分(1)(1)可行性研究与计划可行性研究与计划(2)(2)需求分析需求分析(3)(3)总体设计总体设计 上游上游 (4)(4)详细设计详细设计(5)(5)实现实现(6)(6)集成测试集成测试(7)(7)
31、确认测试确认测试 下游下游(8)(8)使用和维护使用和维护(根据国标计算机软件开发规范)(根据国标计算机软件开发规范)1.4.3 软件生命周期模型软件生命周期模型 软件生命周期模型是从软件项目需求定义直软件生命周期模型是从软件项目需求定义直至软件使用后废弃为止,针对系统开发、运行和至软件使用后废弃为止,针对系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。维护所实施的全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。的主要活动、任务和开发策略。软件生命周期模型也常称为:软件生命周期模型也常称
32、为:软件过程模型软件过程模型 软件开发模型软件开发模型 软件工程范型软件工程范型1.瀑布模型瀑布模型 Waterfall Model (线形顺序模型线形顺序模型)1970年年WRoyce提出的最早出现的软件开发模型。提出的最早出现的软件开发模型。瀑布模型将软件生存周期各活动规定为依线性顺序瀑布模型将软件生存周期各活动规定为依线性顺序联接的若干阶段的模型。它包括可行性分析、项目开发联接的若干阶段的模型。它包括可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和计划、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,如同维护。它规定了由前至后、相
33、互衔接的固定次序,如同瀑布流水,逐级下落。瀑布流水,逐级下落。瀑布模型的表示下图所示。该模型说明整个软件开瀑布模型的表示下图所示。该模型说明整个软件开发过程是按图中发过程是按图中6个阶段进行的。每个阶段的任务完成个阶段进行的。每个阶段的任务完成之后,产生相应的文档,文档要进行评审,若经过确认,之后,产生相应的文档,文档要进行评审,若经过确认,表明该阶段工作完成,并进入下一阶段的工作(向下箭表明该阶段工作完成,并进入下一阶段的工作(向下箭头所表示),否则则要返回到上一阶段去重新进行工作,头所表示),否则则要返回到上一阶段去重新进行工作,甚至更前一项的活动。每个阶段均以上一阶段的文档作甚至更前一项
34、的活动。每个阶段均以上一阶段的文档作为开发的基础。为开发的基础。瀑布模型 Waterfall Model(线形顺序模型线形顺序模型)可行性研究与计划可行性研究与计划需求分析需求分析设计设计编码编码运行维护运行维护测试测试定义定义阶段阶段开开发发阶阶段段维护阶段维护阶段按照传统瀑布模型开发软件的特点1.1.阶段间具有顺序性和依赖性。阶段间具有顺序性和依赖性。2.2.推迟实现的观点。推迟实现的观点。它强调了每一阶段的严格性,特别是要求定它强调了每一阶段的严格性,特别是要求定义阶段,希望得到完整、准确、无二义性的需求说明,以减少义阶段,希望得到完整、准确、无二义性的需求说明,以减少后面各阶段不易估量
35、的浪费。后面各阶段不易估量的浪费。3.3.每个阶段必须完成规定的文档每个阶段必须完成规定的文档;每个阶段结束前完成文档审查每个阶段结束前完成文档审查,及早改正错误。及早改正错误。它是以文档作为驱动、适合于需求很明确的软它是以文档作为驱动、适合于需求很明确的软件项目开发的模型。件项目开发的模型。瀑布模型为软件开发提供了一种有效的管理模型。根据这一模式瀑布模型为软件开发提供了一种有效的管理模型。根据这一模式制定开发计划,进行成本预算,组织开发力量,以项目的阶段制定开发计划,进行成本预算,组织开发力量,以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导。评审和文档控制为手段有效地对整个开发
36、过程进行指导。1.阶段和阶段划分完全固定,阶段间产生大量的文档,极大地阶段和阶段划分完全固定,阶段间产生大量的文档,极大地增加了工作量。增加了工作量。2.由于开发模型呈线性,所以当开发成果尚未经过测试时,用由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。软件与用户见面的时间间隔较长,户无法看到软件的效果。软件与用户见面的时间间隔较长,也增加了一定的风险,后果可能是灾难性的。也增加了一定的风险,后果可能是灾难性的。3.前面未发现的错误传到后面的开发活动中,可能会扩散,进前面未发现的错误传到后面的开发活动中,可能会扩散,进而可能会造成更严重的错误。由于固定的顺序,前期阶段
37、工而可能会造成更严重的错误。由于固定的顺序,前期阶段工作中所造成的差错越到后期阶段所造成的损失和影响也越大,作中所造成的差错越到后期阶段所造成的损失和影响也越大,为了纠正它而花费的代价也越高。为了纠正它而花费的代价也越高。4.对于当前的大型软件项目,特别是应用软件项目,在开发前对于当前的大型软件项目,特别是应用软件项目,在开发前期用户常常对系统只有一个模糊的想法,很难明确确定和表期用户常常对系统只有一个模糊的想法,很难明确确定和表达对系统的全面要求。因此,要保证每个阶段特别是定义阶达对系统的全面要求。因此,要保证每个阶段特别是定义阶段的正确性、完整性属于理想情况,实际上是做不到或很难段的正确性
38、、完整性属于理想情况,实际上是做不到或很难做到的。做到的。5.随着项目向前推进,用户会产生新的要求,或因环境变化希随着项目向前推进,用户会产生新的要求,或因环境变化希望系统也能随之变化。这将难以保证严格线性开发。望系统也能随之变化。这将难以保证严格线性开发。6.可能导致可能导致“阻塞状态阻塞状态”。传统瀑布模型开发软件的缺点传统瀑布模型开发软件的缺点2.原型模型(快速原型模型)(快速原型模型)建造建造/修改修改 原型原型用户测试用户测试运行原型运行原型 听取用听取用 户意见户意见原型范型原型范型原型范型原型范型Rapid Prototyping Model原型是一个可以实际运行的模型,在功能上
39、可原型是一个可以实际运行的模型,在功能上可看作是最终产品的子集。不会过多的注重如看作是最终产品的子集。不会过多的注重如输入数据的合法性检查等细节问题,也不会输入数据的合法性检查等细节问题,也不会过多关注性能问题。过多关注性能问题。使用这种模型的第一步是建立一个原型并让用使用这种模型的第一步是建立一个原型并让用户在计算机上使用。然后用户通过使用原型户在计算机上使用。然后用户通过使用原型提出意见。开发人员根据意见快速修改原型。提出意见。开发人员根据意见快速修改原型。重复这一过程,直到用户不再提出意见为止。重复这一过程,直到用户不再提出意见为止。最后,开发人员根据原型形成最终系统。最后,开发人员根据
40、原型形成最终系统。主要优点:能够开发出真正满足用户需要的软主要优点:能够开发出真正满足用户需要的软件。件。主要缺点:对原型的修改可能非常快,以至于主要缺点:对原型的修改可能非常快,以至于当最终产品开发出来以后,用户可能还要求当最终产品开发出来以后,用户可能还要求对最终产品进行各种快速修改,这就比较困对最终产品进行各种快速修改,这就比较困难。而且,若采用原型作为最终产品,不利难。而且,若采用原型作为最终产品,不利于维护工作。于维护工作。因此,常常把用户满意的原型作为瀑布模型的因此,常常把用户满意的原型作为瀑布模型的输入,避免了瀑布模型向上的反复。输入,避免了瀑布模型向上的反复。采用原型模型的软件
41、生存周期分析定义分析定义系统需求系统需求生成生成原型原型系统系统设计设计程序程序设计设计编码编码测试测试运运 行行和维护和维护原型化原型化含原型化的含原型化的软件生存期软件生存期3.快速应用开发模型快速应用开发模型 RADRapid Application Development ModelRAD也是一种线形的软件开发模型,但是该模型特别也是一种线形的软件开发模型,但是该模型特别强调采用极短的开发周期(强调采用极短的开发周期(2-3个月)。这种快速开个月)。这种快速开发是通过使用基于组件的程序构造方法实现。如果发是通过使用基于组件的程序构造方法实现。如果需求非常清楚并且项目范围边界清晰,适于采
42、用这需求非常清楚并且项目范围边界清晰,适于采用这种模型。种模型。RAD主要应用于信息系统应用开发,通常主要应用于信息系统应用开发,通常包括:商务(业务)建模、数据建模、过程建模、包括:商务(业务)建模、数据建模、过程建模、应用生成、测试等阶段。应用生成、测试等阶段。RAD模型假设采用第四代技术复用已有的程序构件或模型假设采用第四代技术复用已有的程序构件或创建可复用的构件。使用自动化工具辅助软件建造。创建可复用的构件。使用自动化工具辅助软件建造。业务建模:对信息流建模。业务建模:对信息流建模。数据建模:一部分信息流数据建模:一部分信息流数据对象(属性、数据对象(属性、对象间的关系),常用对象间的
43、关系),常用ER图表示。图表示。过程建模:从数据对象出发,依据每一个要实过程建模:从数据对象出发,依据每一个要实现的业务功能的需要,建立对每一个对象上现的业务功能的需要,建立对每一个对象上的插入、删除、更新、获取信息等操作的过的插入、删除、更新、获取信息等操作的过程化描述。常用程化描述。常用DFD图表示。图表示。应用生成:是用第四代应用生成技术,尽可能应用生成:是用第四代应用生成技术,尽可能使用已有的可复用软件组件。使用自动化工使用已有的可复用软件组件。使用自动化工具构造软件。具构造软件。测试。测试。4.4.演化模型演化模型前面的三种软件生命周期模型基本都属于线前面的三种软件生命周期模型基本都
44、属于线性顺序的开发模型,其中原型模型的迭代性顺序的开发模型,其中原型模型的迭代只涉及软件开发的某些阶段,整个开发过只涉及软件开发的某些阶段,整个开发过程还是线性的。程还是线性的。演化模型都是迭代式的。这些模型使得软件演化模型都是迭代式的。这些模型使得软件工程师能够开发出越来越完善的软件版本。工程师能够开发出越来越完善的软件版本。下面介绍两种演化模型。下面介绍两种演化模型。4.1 4.1 增量模型增量模型(渐增模型渐增模型)Incremental Model 渐增模型结合了瀑布模型的直线式特点(渐渐增模型结合了瀑布模型的直线式特点(渐增模型的每一轮开发过程都是直线式的)和快增模型的每一轮开发过程
45、都是直线式的)和快速原型化模型的迭代思想(反映在渐增模型中速原型化模型的迭代思想(反映在渐增模型中由若干轮开发过程组成,每一轮都在前一轮基由若干轮开发过程组成,每一轮都在前一轮基础上进行)。础上进行)。先完成一个系统子集的开发(往往是一个基先完成一个系统子集的开发(往往是一个基本产品),只考虑一些基本需求,其他需求并本产品),只考虑一些基本需求,其他需求并不在基本产品中反映出来。这时,可以提交这不在基本产品中反映出来。这时,可以提交这一基本产品给用户使用和评价。基于用户的评一基本产品给用户使用和评价。基于用户的评价结果和提出的修改、补充意见,即可着手下价结果和提出的修改、补充意见,即可着手下一
46、轮的计划和开发。这一过程不断重复,直到一轮的计划和开发。这一过程不断重复,直到完成最终产品。完成最终产品。分析分析 渐增模型设计设计 编码编码测试测试 分析分析 设计设计 编码编码测试测试 分析分析 设计设计 编码编码测试测试 分析分析 设计设计 编码编码测试测试 第一轮第一轮第一轮第一轮第二轮第二轮第二轮第二轮第三轮第三轮第三轮第三轮第第第第N NN N轮轮轮轮交付客户使用交付客户使用交付客户使用交付客户使用交付客户交付客户交付客户交付客户日历时间日历时间日历时间日历时间.交付客户使用交付客户使用交付客户使用交付客户使用交付客户使用交付客户使用交付客户使用交付客户使用渐增模型与快速原型的相同
47、之处是其迭代的特征,不同之处是渐增模型与快速原型的相同之处是其迭代的特征,不同之处是渐增模型的每一轮都得到一个用户可真正使用和操作的完整渐增模型的每一轮都得到一个用户可真正使用和操作的完整版本,而快速原型每一轮得到的是在性能和功能上大大简化版本,而快速原型每一轮得到的是在性能和功能上大大简化的版本。的版本。优点:优点:渐增模型对项目组的组成人员不是非常充裕的情况下十分有用。渐增模型对项目组的组成人员不是非常充裕的情况下十分有用。早期对基本系统的开发需要的人员比较少,后续的各轮开发早期对基本系统的开发需要的人员比较少,后续的各轮开发可以根据需要补充人员。此外,这种增量式的开发,可以有可以根据需要
48、补充人员。此外,这种增量式的开发,可以有效地防止技术风险。效地防止技术风险。渐增模型每一轮都可以向用户发布一个高质量的可操作的版本。渐增模型每一轮都可以向用户发布一个高质量的可操作的版本。用户容易接受并可以提出中肯的意见,不需要非常大的原始用户容易接受并可以提出中肯的意见,不需要非常大的原始资金投入。资金投入。缺点:由于要求下一轮新增的功能能够无缝集成到上一轮系统缺点:由于要求下一轮新增的功能能够无缝集成到上一轮系统中去,如果整体结构设计不当,则有可能导致整个软件的结中去,如果整体结构设计不当,则有可能导致整个软件的结构变差。构变差。该模型由该模型由TRW公司的公司的BBoehm于于1988年
49、提出通年提出通过使用原型或其他类似的手段降低风险,是螺旋模过使用原型或其他类似的手段降低风险,是螺旋模型蕴涵的基本思想。螺旋模型是瀑布模型与演化模型蕴涵的基本思想。螺旋模型是瀑布模型与演化模型相结合,并增加两者所忽略的风险分析,该模型型相结合,并增加两者所忽略的风险分析,该模型通常用来指导大型软件项目的开发,它将开发划分通常用来指导大型软件项目的开发,它将开发划分为制订计划、风险分析、实施开发和客户评估四类为制订计划、风险分析、实施开发和客户评估四类活动沿着螺旋线每转一圈,表示开发出一个更完活动沿着螺旋线每转一圈,表示开发出一个更完善的新的软件版本如果开发风险过大,开发机构善的新的软件版本如果
50、开发风险过大,开发机构和客户无法接受,项目有可能就此终止;多数情况和客户无法接受,项目有可能就此终止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品最终得到满意的软件产品4.2 螺旋模型螺旋模型下图显示了螺旋模型的原理,沿着螺旋线旋转,在笛下图显示了螺旋模型的原理,沿着螺旋线旋转,在笛卡儿坐标的四个象限上分别表达了四类活动:卡儿坐标的四个象限上分别表达了四类活动:l)制定计划:确定软件目标,选定实施方案,弄清)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;项目开发的限制条件;2)风险分析:分析所选方案,考虑