《软件开发生命周期与统一建模语言UML 01 软件工程概述.ppt》由会员分享,可在线阅读,更多相关《软件开发生命周期与统一建模语言UML 01 软件工程概述.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程概述软件工程概述软件开发生命周期与统一建模语言软件工程概述软件工程概述1结构化程序设计与面向对象程序设计结构化程序设计与面向对象程序设计 2统一建模语言与现代软件工程统一建模语言与现代软件工程 3用例图用例图 4静态模型静态模型 5软件开发生命周期与统一建模语言UML软件工程概述软件工程概述软件开发生命周期与统一建模语言动态模型动态模型 6UML实现与部署实现与部署 7新闻发布系统的实例新闻发布系统的实例 8Rational Rose简介简介 9软件开发生命周期与统一建模语言UML软件工程概述软件工程概述第1章 软件工程概述 v1.1 用例概述用例概述 1.1.1 软件及其特点 1.1
2、.2 软件危机 1.1.3 软件工程的定义1.1.4 软件工程的基本原理v1.2 软件开发生命周期软件开发生命周期 v1.3 过程模型过程模型 1.3.1 常见的生命周期模型 1.3.2 生命周期模型的应用 v1.4 软件工程方法学软件工程方法学 软件开发生命周期与统一建模语言UML软件工程概述软件工程概述第1章 软件工程概述 v教学要求教学要求理解:软件和软件工程的概念;软件开发生命周期。掌握:软件过程模型运用的原则。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述v软件开发是一个专业领域的人在为另一个专业领域的软件开发是一个专业领域的人在为另一个专业领域的人服务人服务v在软件开
3、发过程中,需求可能经常在变,每次需求变在软件开发过程中,需求可能经常在变,每次需求变化会带来软件系统的开发延迟,甚至出现变更反复,化会带来软件系统的开发延迟,甚至出现变更反复,被推倒了的内容又要重新确立被推倒了的内容又要重新确立v在软件没有最终交付时,用户如何了解开发进展情况在软件没有最终交付时,用户如何了解开发进展情况v系统难以维护和扩展,经常重复开发类似的功能系统难以维护和扩展,经常重复开发类似的功能v项目经常延期,实际成本往往远远高于估计成本项目经常延期,实际成本往往远远高于估计成本v开发团队内部使用了不同的技术,在交流时常常有障开发团队内部使用了不同的技术,在交流时常常有障碍碍v如何应
4、对软件开发过程中如何应对软件开发过程中的种种不确定因素,更有的种种不确定因素,更有效地开发与维护软件?效地开发与维护软件?1.1 软件、软件危机和软件工程的定义软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义软件与硬件软件与硬件软件开发生命周期与统一建模语言UML软件工程概述软件工程概述软件的特点软件的特点软件是脑力劳动的产品,但它不同于追求个性化的艺术作品;软件是脑力劳动的产品,但它不同于追求个性化的艺术作品;软件是产品,但它又不同于工业化生产得到的有形产品软件是产品,但它又不同于工业化生产得到的有形产品 1.1 软件、软件危机和软件工程的定
5、义软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义软件的特点描述抽象性抽象性软件是一种逻辑实体而不是具体的物理实体,必须通过测试、分析、思考、判断来了解它的功能、性能及其他特性可复制性可复制性软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。一旦某一软件项目研制成功,以后就可以大量地复制同一内容的副本,即其研制成本远远大于其生产成本不会磨损不会磨损在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题,但软件也会出现故障,软件维护比硬件维护要复杂得多,与硬件的维修有着本质的差别依赖性依赖性软件的开发和运
6、行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖。为了消除这种依赖,在软件开发中提出了软件移植的问题,并且把软件的可移植性作为衡量软件质量的因素之一开发效率低开发效率低软件的开发尚未完全摆脱手工的方式,依然有大量重复性的劳动开发费用高开发费用高软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,需要较高的成本。软件的开发是一个复杂的过程,因而管理是软件开发过程中必不可少的内容软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义v什么是软件软件软件=程序程序+数据数据+文档文档 数据包括初始化数据、测试数据、研发数据、运行数据、维护数据
7、,以及软件企业积累的项目工程数据和项目管理数据。文档是开发、使用和维护程序所需要的图文资料。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义v什么是软件危机什么是软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题如何开发软件,以满足对软件日益增长的需求 如何维护数量不断增加的已有软件 软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义消除软件危机的途径消除软件危机的途径v正确认识软件。正确认识软件。软件=程序+数据+文档在软件开发的各个阶段都要有完备的文档。v加强管理。加强管
8、理。软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,应该推广使用在实践中总结出来的开发软件的成功的技术和方法。v使用软件工具。使用软件工具。在软件开发的每个阶段都有许多烦琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。v总之,为了解决软件危机,既要有技术措施(方法和工具),总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门学科。面研究如何更好地开发和维护计算机软件的一门学科。软件开发
9、生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义软件工程的定义软件工程的定义v软件工程软件工程=管理管理+技术技术v软件工程的目标软件工程的目标 软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.1 软件、软件危机和软件工程的定义软件工程的基本原理软件工程的基本原理(1)用分阶段的生命周期计划严格管理。)用分阶段的生命周期计划严格管理。统计发现,不成功的软件项目中有一半左右是由于计划不周造成的。因此,有必要制定完善的计划,分阶段地进行管理和控制。(2)坚持进行阶段评审。)坚持进行阶段评审。软件中的大部分错误是在编码之前造成的;错误发现与改
10、正得越晚,所需付出的代价也就越高,如图1-4所示。因此,在每个阶段都进行严格的评审以尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。早中晚低中高变化出现的时期代价(3)实行严格的产品控制。)实行严格的产品控制。软件开发过程中,需求的变更往往需要付出较高的代价,但这种改变又是难以避免的,因此不能硬性禁止客户提出改变需求的要求,而要依靠科学的产品控制技术来顺应这种要求,按照严格的规程进行变更控制。(4)采用现代程序设计技术。)采用现代程序设计技术。如“清晰第一、效率第二”的程序风格;面向对象的分析方法;各种框架技术的使用、模式的应用;软件建模方法的运用等。实践表明,采用先进的技术不仅
11、可以提高软件开发和维护的效率,而且可以提高软件产品的质量。(5)结果应能清楚地审查。)结果应能清楚地审查。软件是脑力劳动的逻辑产品,应该根据软件开发项目的总目标及完成期限规定开发组织的责任和产品标准,制定出完备的文档,从而提高其“可见性”。(6)开发小组的人员应该少而精。)开发小组的人员应该少而精。(7)不断改进软件工程实践的经验和技术。)不断改进软件工程实践的经验和技术。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述v改正同一错误付出的代价随时间变化的趋势改正同一错误付出的代价随时间变化的趋势早早中中晚晚低低中中高高变化出现的时期变化出现的时期代代价价1.1 软件、软件危机和软
12、件工程的定义软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期v如何盖一栋大楼?如何盖一栋大楼?软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期 1问题定义问题定义“要解决的问题是什么?要解决的问题是什么?”2可行性论证可行性论证“有行得通的解决办法吗?有行得通的解决办法吗?”3需求分析需求分析“系统必须做什么?系统必须做什么?”4总体设计总体设计“概括地说,怎样做?概括地说,怎样做?”5详细设计详细设计“具体怎样做?具体怎样做?”6编码和单元测试编码和单元测试7综合测试综合测试8运行运行/维
13、护维护软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期1问题定义“要解决的问题是什么?”v通过对客户的访问调查,系统分析员扼要地写出通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客经过讨论和必要的修改之后这份报告应该得到客户的确认。户的确认。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期2可行性论证及软件计划“有行得通的解决办法吗?”v目的:用最小的代价在尽可能短的时
14、间内确定该目的:用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。软件项目是否能够开发,是否值得去开发。v主要任务:了解客户的要求及现实环境,从技术、主要任务:了解客户的要求及现实环境,从技术、经济和社会因素三方面研究并论证本软件项目的经济和社会因素三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步的项目可行性,编写可行性研究报告,制定初步的项目开发计划。开发计划。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期可行性论证及软件计划(续)v具体步骤:具体步骤:(1)确定项目规模和目标。)确定项目规模和目标
15、。(2)研究正在运行的系统。)研究正在运行的系统。(3)建立新系统的高层逻辑模型。)建立新系统的高层逻辑模型。(4)导出和评价各种方案。)导出和评价各种方案。(5)推荐可行的方案。)推荐可行的方案。(6)编写可行性研究报告。)编写可行性研究报告。v系统分析员需要进行一次大大压缩和简化了的系统分析和系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,研究问题的范围,探索这个问题是否值得去解设计过程,研究问题的范围,探索这个问题是否值得去解决,是否有可行的解决办法。如果可行,制定出初步的开决,是否有可行的解决办法。如果可行,制定出初步的开发计划。发计划。软件开发生命周期与统一建模语言UML
16、软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期3需求分析“系统必须做什么?”v确定目标系统必须具备哪些功能。确定目标系统必须具备哪些功能。v软件开发是一个专业领域的人在为另一个专业领域的人做软件开发是一个专业领域的人在为另一个专业领域的人做事。用户了解他们所面对的问题,知道必须做什么,但是事。用户了解他们所面对的问题,知道必须做什么,但是通常不能完整准确地表达出他们的要求,更不知道怎样利通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员知道怎样用软件用计算机解决他们的问题;软件开发人员知道怎样用软件实现人们的要求,但是对特定用户的具体要求并
17、不完全清实现人们的要求,但是对特定用户的具体要求并不完全清楚。因此,系统分析员在需求分析阶段必须和用户密切配楚。因此,系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出用户认可的各种模型。常用的合,充分交流信息,以得出用户认可的各种模型。常用的有用例模型、活动图、顺序图、类图、数据流图、层次图有用例模型、活动图、顺序图、类图、数据流图、层次图等。等。v需求分析阶段的两个任务是捕获需求和分析整理需求。需求分析阶段的两个任务是捕获需求和分析整理需求。v需求分析阶段确定的系统逻辑模型是以后设计和实现目标需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础,因此必须准确完整地体现
18、用户的要求。这个系统的基础,因此必须准确完整地体现用户的要求。这个阶段的一项重要任务是,用正式文档准确地记录对目标系阶段的一项重要任务是,用正式文档准确地记录对目标系统的需求,即规格说明书。统的需求,即规格说明书。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期4总体设计“概括地说,应该怎样做?”v基本任务:基本任务:(1)设计出实现目标系统的几种可能的方案。)设计出实现目标系统的几种可能的方案。软件工程师用适当的表达工具描述每种方案,分析每软件工程师用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上种方案
19、的优缺点,并在充分权衡各种方案的利弊的基础上推荐一个最佳方案。此外,还应该制定出实现最佳方案的推荐一个最佳方案。此外,还应该制定出实现最佳方案的详细计划。详细计划。(2)设计软件体系结构。)设计软件体系结构。通常指划分模块,确定模块的功能及其相互之间的调通常指划分模块,确定模块的功能及其相互之间的调用关系,确定模块间的接口等。用关系,确定模块间的接口等。(3)数据库设计。)数据库设计。(4)编写概要设计文档。)编写概要设计文档。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期5详细设计“具体怎样做?”v总体设计阶段以比较抽象概括的方式提出了解
20、决总体设计阶段以比较抽象概括的方式提出了解决问题的办法,详细设计阶段的任务就是把解法具问题的办法,详细设计阶段的任务就是把解法具体化。体化。v这个阶段的任务不是编写程序,而是设计出程序这个阶段的任务不是编写程序,而是设计出程序的详细规格说明,这种规格说明应该包含必要的的详细规格说明,这种规格说明应该包含必要的细节,程序员可以根据它们写出实际的程序代码。细节,程序员可以根据它们写出实际的程序代码。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期6编码和单元测试v关键任务:写出正确的、容易理解、容易维护的关键任务:写出正确的、容易理解、容易维护的
21、程序模块。程序模块。v程序员应该根据目标系统的性质和实际环境选取程序员应该根据目标系统的性质和实际环境选取一种适当的程序设计语言,把详细设计的结果翻一种适当的程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。写出的每一个模块。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期7综合测试v软件测试的目的是希望以最低代价尽可能多地找软件测试的目的是希望以最低代价尽可能多地找出软件中潜在的各种错误和缺陷。软件测试并不出软件中潜在的各种错误和缺陷。软件测试并不是在软件交
22、付之后才开始,而应尽早地、不断地是在软件交付之后才开始,而应尽早地、不断地进行,贯穿于软件定义与开发的整个期间。例如,进行,贯穿于软件定义与开发的整个期间。例如,在需求分析和设计阶段就要尽可能地考虑到如何在需求分析和设计阶段就要尽可能地考虑到如何提高软件的可测试性。提高软件的可测试性。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.2 软件开发生命周期软件开发生命周期8运行/维护v这一阶段的关键任务是,通过各种必要的维护活这一阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。动使系统持久地满足用户的需要。软件开发生命周期与统一建模语言UML软件工程概述软件工程
23、概述1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)1瀑布模型瀑布模型核心思想是阶段性的评审和验证,每一阶段结束时都要给出完整的文档。缺点是该模型缺乏灵活性,后一阶段出现的问题需要通过前一阶段的重新确认来解决。软件开发生命周期与统一建模语言UML软件工程概述软件工程概述2原型模型原型模型快速设计软件中对用户可见部分的表示,构造原型,由用快速设计软件中对用户可见部分的表示,构造原型,由用户评估,逐步调整原型,使之满足用户需要。户评估,逐步调整原型,使之满足用户需要。其优点是开发者和用户可以充分沟通,开发过程也是学习其优点是开发者和用户可以充分沟通,开发过程也是学习过程,可以
24、低风险开发柔性较大的计算机系统。过程,可以低风险开发柔性较大的计算机系统。1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述3螺旋模型螺旋模型把软件开发过程组把软件开发过程组成为一个逐步细化成为一个逐步细化的螺旋周期,每经的螺旋周期,每经历一个周期,系统历一个周期,系统就得到进一步的细就得到进一步的细化和完善;整个模化和完善;整个模型紧密围绕开发中型紧密围绕开发中的风险分析,推动的风险分析,推动软件设计向深层扩软件设计向深层扩展和求精。该模型展和求精。该模型要求开发人员与用要求开发人员与用户能经常直接进行户能经常直
25、接进行交流,通常用来指交流,通常用来指导内部发行的大型导内部发行的大型软件项目的开发软件项目的开发 1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述4增量模型增量模型一种渐近式的模型一种渐近式的模型 第一个增量构件往往实现软件的基本需求,提供最核心的功能优点:能在较短的时间内,向用户提交可完成部分工作的产品;1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述5迭代模型迭代模型一种渐近式的模型,一种渐近式的模型,迭代模型与增量模型假设现
26、在要开发A、B、C、D四个大的业务功能,每个功能都需要开发两周的时间。对于增量方法而言可以将四个功能分为两次增量来完成,第一个增量完成A、B功能,第二次增量完成C、D功能;而对于迭代开发来讲则是分两次迭代来开发,第一次迭代完成A、B、C、D四个基本业务功能,但不含复杂的业务逻辑,而第二次迭代再逐渐细化补充完整相关的业务逻辑。就对风险的消除上,增量和迭代模型都能够很好地控制前期的风险,但迭代模型在这方面更有优势。迭代模型可以更多地从总体方面思考系统问题,一开始就给出相对完善的框架或原型,后期的每次迭代都是针对上次迭代的逐步精化。1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型
27、)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述6快速原型模型快速原型模型快速建立起可以在计算机上运行的程序,快速建立起可以在计算机上运行的程序,它所完成的功能往往是最终产品功能的一个子集。通过让用户试用,收集反馈意见,从而获取准确的需求。这是一种很好的启发式方法,可以快速地挖掘用户需求并达成需求理解上的一致。当用户没有信息系统的使用经验或系统分析员没有过多的需求分析和挖掘经验的时候,这种方法将非常有效。1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述7喷泉模型喷泉模型认为软件生命周期的各个阶段是相
28、互重叠和多次反复的,就像水喷上去又可以落下来,水既可以落在中间,也可以落在最底部。整个开发过程中都使用统一的概念“对象”进行分析,使用统一的概念和符号表示分析设计过程,各阶段间没有明显的边界,即“无缝”衔接,因此各开发步骤可以多次反复迭代,逐步深化。1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述8MSF过程模型过程模型吸收了瀑布模型的吸收了瀑布模型的里程碑和螺旋模型里程碑和螺旋模型的反复迭代的思想的反复迭代的思想 分为5个阶段每一阶段结束时都有明确的交付成果1.3 软件过程模型软件过程模型(软件生命周期模型)软
29、件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述v生命周期模型的应用总体上说面向对象的程序设计采用的是喷泉喷泉模型,但局部可以结合其它模型。在前期需求明确、资料完整的情况下尽量采用瀑布瀑布模型。在用户无信息系统使用经验,需求分析人员技能不足情况下要借助原原型型。在不确定性因素很多,很多东西前面无法计划的情况下尽量采用增量增量模型和螺旋模型。在需求不稳定情况下尽量采用增量迭代增量迭代模型。在资金和成本无法一次到位情况下可以采用增量增量模型,将产品分多个版本进行发布。增量、迭代和原型增量、迭代和原型可以综合使用,但每一次增量或迭代都必须有明确的交付内容。总之,每个软件开
30、发组织都应该根据所要开发的软件特点及本组织的特点,选择适合于自己的软件过程模型,把各种生命周期模型的特性有机地结合起来,充分利用它们的优点,回避缺陷。1.3 软件过程模型软件过程模型(软件生命周期模型)软件生命周期模型)软件开发生命周期与统一建模语言UML软件工程概述软件工程概述1.4 软件工程方法学软件工程方法学v研究如何通过分解和抽象,将复杂问题转化成一系列可以理解和实现的简单问题 软件开发生命周期与统一建模语言UML软件工程概述软件工程概述v面向过程的程序面向过程的程序=算法算法+数据结构。数据结构。v面向对象的程序面向对象的程序=对象对象+类类+继承继承+消息通消息通信。信。v面向构件
31、的程序面向构件的程序=构件构件+架构。架构。v形式化方法是建立在严格的数学基础上,以逻辑形式化方法是建立在严格的数学基础上,以逻辑推理为出发点,具有精确数学语义的开发方法。推理为出发点,具有精确数学语义的开发方法。1.4 软件工程方法学软件工程方法学软件开发生命周期与统一建模语言UML软件工程概述软件工程概述本本章章小结小结v软件不仅仅是程序,软件软件不仅仅是程序,软件=程序程序+数据数据+文档。软件工程文档。软件工程是为了尽可能消除软件危机的影响,克服软件缺乏是为了尽可能消除软件危机的影响,克服软件缺乏“可见可见性性”的缺点,借鉴工业化生产的成功经验,对软件产品的的缺点,借鉴工业化生产的成功
32、经验,对软件产品的生产过程加以严格管理和控制的一门学科。它的最终目的生产过程加以严格管理和控制的一门学科。它的最终目的是实现软件的工业化生产。是实现软件的工业化生产。v传统软件工程将软件开发生命周期划分为问题定义、可行传统软件工程将软件开发生命周期划分为问题定义、可行性分析、需求分析、概要设计、详细设计、编码、测试、性分析、需求分析、概要设计、详细设计、编码、测试、运行维护运行维护8个阶段,每一阶段都有具体的任务和交付成果。个阶段,每一阶段都有具体的任务和交付成果。v软件过程模型指如何具体地组织衔接软件开发生命周期的软件过程模型指如何具体地组织衔接软件开发生命周期的各个阶段。常见的有瀑布模型、螺旋模型、喷泉模型等。各个阶段。常见的有瀑布模型、螺旋模型、喷泉模型等。软件开发生命周期与统一建模语言UML中国水利水电出版社中国水利水电出版社