软件工程导论第11章软件重用
软件工程导论复习重点总结很全第六版
第1章软件工程学概述1.1 软件危机1.1.1 软件危机旳简介软件危机(软件萧条、软件困扰): 是指在计算机软件旳开发和维护过程中所碰到旳一系列严重问题。
软件危机包括下述两方面旳问题:怎样开发软件, 满足对软件日益增长旳需求;怎样维护数量不停膨胀旳已经有软件。
软件危机旳经典体现:(1)对软件开发成本和进度旳估计常常很不精确;(2)顾客对“已完毕旳”软件系统不满意旳现象常常发生;(3)软件产品旳质量往往靠不住;(4)软件常常是不可维护旳;(5)软件一般没有合适旳文档资料;(6)软件成本在计算机系统总成本中所占旳比例逐年上升;(7)软件开发生产率提高旳速度, 远远跟不上计算机应用迅速普及深入旳趋势。
1.1.2 产生软件危机旳原因(1)与软件自身旳特点有关(2)与软件开发与维护旳措施不对旳有关1.1.3 消除软件危机旳途径对计算机软件有对旳旳认识。
认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完毕旳工程项目。
应当推广使用在实践中总结出来旳开发软件旳成功技术和措施, 并继续研究探索。
应当开发和使用更好旳软件工具。
总之, 为了处理软件危机, 既要有技术措施(措施和工具), 又要有必要旳组织管理措施。
1.21.2.1 软件工程旳简介软件工程: 是指导计算机软件开发和维护旳一门工程学科。
采用工程旳概念、原理、技术和措施来开发与维护软件, 把通过时间考验而证明对旳旳管理技术和目前可以得到旳最佳旳技术措施结合起来, 以经济地开发出高质量旳软件并有效地维护它, 这就是软件工程。
(期中考)软件工程旳本质特性:软件工程关注于大型程序旳构造软件工程旳中心课题是控制复杂性软件常常变化开发软件旳效率非常重要友好地合作是开发软件旳关键软件必须有效地支持它旳顾客在软件工程领域中是由具有一种文化背景旳人替具有另一种文化背景旳人发明产品1.2.2 软件工程旳基本原理用分阶段旳生命周期计划严格管理坚持进行阶段评审实行严格旳产品控制采用现代程序设计技术成果应能清晰地审查开发小组旳人员应当少而精承认不停改善软件工程实践旳必要性1.2.3 软件工程措施学软件工程包括技术和管理两方面旳内容。
软件工程导论第11章
【还可以把适配接口再进一步细分为转换接口和扩充接口。转换接口, 是为了克服与表示方法、数据结构或硬件特点相关的操作给重用带来 的困难而设计的,这类接口是每个类构件在重用时都必须重新定义的 服务的集合。当使用C++语言编程时,应该在根类(或适当的基类)中, 把属于转换接口的服务定义为纯虚函数。如果某个服务有多种可能的 实现算法,则应该把它当作扩充接口。扩充接口与转换接口不同,并 不需要强迫用户在派生类中重新定义它们,相反,如果在派生类中没 有给出扩充接口的新算法,则将继承父类中的算法。当用C++语言实现 时,在基类中把这类服务定义为普通的虚函数。】
4. 弱耦合 耦合:指一个软件结构内不同模块之间互连的紧 密程度。 在面向对象方法中,对象是最基本的模块,因此, 耦合主要指不同对象之间相互关联的紧密程度。 弱耦合是优秀设计的一个重要标准。
5
对象之间的耦合分为两大类: (1) 交互耦合: 对象之间的耦合通过消息连接来实现。 使交互耦合尽可能松散,应遵守下述准则: 尽量降低消息连接的复杂程度。 应该尽量减少消息中包含的参数个数,降低参数的复 杂程度。 减少对象发送(或接收)的消息数。 (2) 继承耦合 与交互耦合相反,应该提高继承耦合程度。 通过继承关系结合起来的基类和派生类,构成系统中 粒度更大的模块。设计时应该使特殊类尽量多继承并 使用其一般化类的属性和服务,从而更紧密地耦合到 其一般化类。
13
2. 软件成分的重用级别 (1) 代码重用 源代码剪贴:最原始的重用形式。 复制或修改原有代码时可能出错,存在严重的配臵 管理问题,人们几乎无法跟踪原始代码块多次修改 重用的过程。 源代码包含:许多程序设计语言都提供包含库中 源代码的机制。配臵管理问题有所缓解,修改了库 中源代码之后,所有包含它的程序自然都必须重新 编译。 继承:利用继承机制重用类库中的类时,无须修 改已有的代码,就可以扩充或具体化在库中找出的 类,基本上不存在配臵管理问题。
《软件工程》第11章 软件重用技术
3. 分析的复用 这是比设计结果更高级别的复用,可复用的分析 构件是针对问题域的某些事物或某些问题的抽 象程度更高的解法,受设计技术及实现条件的 影响很少。 4. 测试信息的复用 主要包括测试用例的复用和测试过程信息的复用。 前者是把一个软件的测试用例在新的软件测试 中使用,或者在软件作出修改时在新的一轮测 试中使用。
11.4 小结
软件重用(Software Reuse,又称软件复用或软件再用)就是将已有的 软件成分用于构造新的软件系统。可以被复用的软件成分一般称作可复 用构件,无论对可复用构件原封不动地使用还是作适当的修改后再使用, 只要是用来构造新软件,则都可称作复用。软件复用不仅仅是对程序的 复用,它还包括对软件生产过程中任何活动所产生的制成品的复用,如 项目计划、可行性报告、需求定义、分析模型、设计模型、详细说明、 源程序、测试用例等等。 目前及近期的未来最有可能产生显著效益的复用是对软件生命周期中一 些主要开发阶段的软件制品的复用,按抽象程度的高低,可以划分为如 下的复用级别:
软部件库组织与检索的关键子任务及其支持工具 关键子任务 软部件库的组织与存储 浏览 检索 结构化查询 基于语义的检索 支持工具 关系数据库或面向对象的数据库系统,类库 超文本浏览工具 自然语言的语法分析与语义理解工具 关系数据库系3 面向对象的软件重用技术
从抽象程度来看,面向对象技术已达到 了类级重用(代码重用),它以类为封装的 单位。这样的重用粒度还太小,不足以 解决异构互操作和效率更高的重用。近 几年来,构件技术的发展, 构件技术已形 成三个流派:Sun的Java平台、Microsoft 的COM+、IBM的CORBA。
11.1.1软件重用定义 软件重用是利用事先建立好的软部品创建新软 件系统的过程。这个定义蕴含着软件重用所必 须包含的两个方面: 1. 系统地开发可重用的软部品。这些软部 品可以是代码,但不应该仅仅局限在代码。我 们必须从更广泛和更高层次来理解,这样才会 带来更大的重用收益。比如软部品还可以是: 分析,设计,测试数据,原型,计划,文档, 模板,框架等等。 2. 系统地使用这些软部品作为构筑模块, 来建立新的系统。
软件工程导论第11章软件重用
软件工程导论第11章:软件重用概述软件重用是软件工程中一个重要的概念。
随着软件行业的快速发展,为了提高软件的开发效率和质量,软件工程师们开始关注如何使用已经存在的软件组件或模块进行开发,而不是重复进行相同的编码工作。
软件重用可以极大地减少软件开发的时间和成本,并提高软件的可维护性和可靠性。
本文将介绍软件工程导论中的第11章内容,主要围绕软件重用展开,包括重用的概念、重用的类型、重用的方法和重用的优势等。
重用的概念软件重用是指在开发新软件的过程中利用已经存在的软件组件或模块。
这些组件或模块可以是已存在于软件开发组织的库中,也可以是来自开源社区或第三方供应商的软件。
重用的关键是将现有的软件资源整理成易于使用和理解的形式,以便在新项目中重复使用。
软件工程师们可以通过各种手段来实现软件重用,例如使用类库、框架、组件等。
重用的类型在软件工程中,重用可以分为三种类型:黑盒重用、白盒重用和灰盒重用。
•黑盒重用:黑盒重用是通过直接使用已存在的二进制或源代码来重用软件。
在黑盒重用中,重用过程不需要了解组件或模块的内部实现细节,只需要知道如何正确地集成和调用已有的组件即可。
•白盒重用:白盒重用是通过理解和修改已存在的源代码或二进制来重用软件。
在白盒重用中,重用过程需要对组件或模块的内部实现细节有一定的了解,并且可能需要对其进行修改以适应新项目的需求。
•灰盒重用:灰盒重用是黑盒重用和白盒重用的一个折中方案。
在灰盒重用中,重用过程需要了解组件或模块的一部分内部实现细节,并且可能需要对其进行修改或扩展以适应新项目的需求。
重用的方法在软件重用中,有几种常见的重用方法:•类库重用:使用已存在的类库,这些类库提供了一组已经实现的功能,包括数据结构、算法、用户界面等。
通过使用类库,开发人员可以节省大量的开发时间和精力。
•框架重用:使用提供了基本架构和组件的框架。
框架通常提供了一整套结构和规范,用于帮助开发人员构建特定类型的应用程序。
《软件工程导论》课后习题答案
*
作业及解答(第1-2章)
05
03
01
在1985年对计算机存储容量的需求,估计是
如果字长为16位,则这个存储器的价格是
如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令。
储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、地址和电话号码,而数额、类型、到期日期、利率和密码则是关系类型存取款的属性。
*
作业及解答(第3章)
*
作业及解答(第3章)
3-6 复印机的工作过程大致如下:未接到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现没纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。
在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。
基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:
*
作业及解答(第1-2章)
在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少?
假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。
如果字长为32位,则这个存储器的价格是:
在1995年对存储容量的需求估计为:
在1995年一名程序员每天可开发出30条指令,每月可开发出600条指令,为了开发出可装满整个存储器的程序,需要的工作量为
软件工程软件重用名词解释
软件工程软件重用名词解释
软件重用 (Software 重用) 是指在软件开发过程中,利用已经开发完成并被验证过的代码或组件来构建新的应用程序或功能。
重用可以提高软件开发的效率和质量,减少开发时间和成本,同时也是遵循软件工程中模块化、组件化、可复用性等原则的重要体现之一。
软件重用可以分为多种形式,包括代码重用、组件重用、文档重用、测试重用等。
其中代码重用是最为普遍的重用形式之一,是指在新的应用程序或功能中,直接使用已有的代码模块或库,而不是重新编写。
这种方式可以减少代码冗余和错误,提高代码的可读性和可维护性。
除了代码重用,软件重用还包括其他形式,例如组件重用、测试重用等。
组件重用是指将已经开发完成的部分组件或模块重新用于新的应用程序或功能中,以实现更高效的代码复用。
测试重用则是指将已经测试好的测试用例或测试数据用于新的测试任务中,以节省时间和成本。
软件重用是软件工程中的重要原则之一,可以提高软件开发的效率和质量,减少开发时间和成本。
开发者应该尽可能利用已有的代码和组件来构建新的应用程序或功能,而不是从头开始编写。
同时,为了保障重用的安全性和可靠性,开发者需要对重用的代码和组件进行仔细的审核和测试。
《软件工程》第11章软件重用技术
《软件工程》第11章软件重用技术在当今的软件开发领域,软件重用技术正发挥着日益重要的作用。
它就像是一把神奇的钥匙,能够为开发者打开高效、高质量软件开发的大门。
软件重用,简单来说,就是在新的软件开发过程中,重复使用已有的软件元素,这些元素可以是代码片段、设计模式、架构,甚至是整个软件组件。
想象一下,如果你每次做饭都要从头开始种植蔬菜、磨面粉,那会是多么繁琐和低效。
而软件重用就像是拥有一个储备丰富的食材库,你可以随时从中选取你需要的材料,快速地烹饪出美味佳肴。
为什么软件重用如此重要呢?首先,它能够显著提高软件开发的效率。
当我们可以直接使用已经经过验证和优化的软件组件时,就不必花费大量的时间和精力去重新开发类似的功能。
这就好比站在巨人的肩膀上,能够更快地达到目标。
其次,软件重用有助于提高软件的质量。
经过多次使用和优化的软件元素往往具有更高的可靠性和稳定性,因为它们已经在不同的场景中经受了考验。
此外,软件重用还能够降低开发成本,使得软件开发能够在更有限的资源下实现更多的功能。
软件重用的方式多种多样。
代码重用是其中最常见的一种形式。
比如,一个用于计算平均值的函数,在多个项目中都可能被需要,如果每次都重新编写这个函数,不仅浪费时间,还容易引入错误。
而将这个函数封装好,在需要的时候直接调用,就能大大提高开发效率。
设计重用则是在更高层次上的重用。
比如,某种特定类型的软件架构,如客户服务器架构,在很多应用中都被证明是有效的,那么在新的项目中,如果条件适合,就可以直接采用这种架构,而不必重新设计。
软件组件的重用也是非常重要的一种方式。
软件组件就像是一个个独立的“小模块”,它们具有明确的功能和接口。
这些组件可以在不同的系统中被重复使用,只要它们的接口与新系统兼容。
例如,一个用于图像压缩的组件,可以在图像编辑软件、网页设计工具等多种不同的应用中发挥作用。
然而,要实现有效的软件重用并不是一件轻而易举的事情。
首先,需要有良好的软件设计和规划。
软件工程导论第11章
2、实现单向关联 1)用指针可以方便地实现单向关联。 2)如果关联的阶是一元的,则实现关联的指
针是一个简单指针;如果阶是多元的,则 需要用一个指针集合实现关联。
39
3、实现双向关联
实现双向关联有下列三种方法:
1. 只用属性实现一个方向的关联,当需要反向 遍历时就执行一次正向查找。
2. 两个方向的关联都用属性实现,这种方法能 实现快速访问。
2、提供一种简便可靠的软构件组合机制。 3、设计类时,应注意以下可能影响重用性的操作:
? 与表示方法有关的操作。例如,不同实例的比较、显 示、擦除等等。
? 与数据结构、数据大小等有关的操作。 ? 与外部设备有关的操作。例如,设备控制。 ? 实现算法在将来可能会改进(或改变)的核心操作 19
11.3.3 软件重用的效益
)、(
)和(
)。
2、软件重用是提高软件(
)和目标系统(
)的重要
途径,它基本上始于设计。其中软件成分重用可划分成以下 3个
级别即代码重用、设计成果重用和分析结果重用。
3、面向对象设计的 6个准则:( )、( )、( )、弱耦合 、( )和( )。
4、一般来说,对象之间的耦合分为两大类:( )和( )。
2. 一般—特殊结构的深度应适当 中等规模的系统中,类等级层次数应保持
为7±2。不是必要情况,不应该随意创建派生类;
3. 设计简单的类:设计小而简单的类,便于 开发和管理; 1)避免包含过多的属性; 2)有明确的定义; 3)尽量简化对象之间的合作关系; 4)不要提供太多服务。
4. 使用简单的协议:设计简单的类接口,发送 的消息中参数要少。
5. 使用简单的服务:编写实现每一个服务时, 避免复杂的语句和结构;
软件工程导论重点内容
第一章软件工程概述重点掌握的内容:软件和软件工程的基本概念一.什么是软件1.满足功能要求和性能的指令或计算机程序集合;2.处理信息的数据结构;3.描述程序功能以及程序如何操作和使用所要求的文档;软件的特点:软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性;软件是通过人们的智力活动,把知识与技术转换成信息的一种产品,是在研制、开发中被创造出来的在软件运行和使用的期间,没有硬件那样的机械磨损、老化问题软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工的开发方式软件的开发费用越来越高,成本相当昂贵;二.软件危机以及产生软件危机的原因1.软件开发生产率提高的速度,远远跟不上计算机迅速普及的趋势;软件产品“供不应求”;2.软件成本在计算机系统总成本中所占的比例逐年上升;3.软件开发人员和用户之间的信息交流往往很不充分,用户对“已完成的”的软件系统不满足的现象经常发生;4.软件产品的质量不容易保证;5.软件产品常常是不可维护的;6.软件产品的重用性差,同样的软件多次重复开发;7.软件通常没有适当的文档资料;产生软件危机的原因可归结为两个重要的方面:软件生产本身存在的复杂性;软件开发所使用的方法和技术;三、软件危机1、软件危机定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;2、软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件;3、软件危机的典型表现:1对软件开发成本和进度的估计常常很不准确;2用户对“已完成的”软件系统不满意的现象经常发生;3软件产品的质量往往靠不住;4软件常常是不可维护的;5软件通常没有适当的文档资料;6软件成本在计算机系统总成本中所占的比例逐年上升;7软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势;软件工程1、软件工程定义:软件工程是指导计算机软件开发和维护的一门工程学科;采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程;软件工程准则可以概括为7条基本原则:用分阶段的生命周期计划严格管理;坚持进行阶段评审实行严格的产品控制采用现代程序设计技术应能清楚地审查结果合理安排软件开发小组的人员承认不断改进软件工程实践的必要性3、软件工程方法学,三要素:方法、工具和过程4、软件生命周期概念、三时期,八阶段软件生命周期由软件定义、软件开发和运行维护也称为软件维护3个时期组成;软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析;软件开发时期分为4阶段:总体设计、详细设计、编码和单元测试、综合测试五、软件开发模型:软件开发模型是跨越整个软件生存周期的系统开发、运作、维护实施的全部工作和任务的结构框架;1瀑布模型采用结构化的分析与设计方法,将逻辑实现与物理实现分开;特点阶段的顺序性和依赖性规范化推迟实现的观点系统化质量保证阶段评审存在问题不适合需求模糊的系统需求的迷糊性和不确定性适用于操作系统、编译系统、数据库管理系统等系统软件的开发快速原型模型:所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集;快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌3增量模型:是瀑布模型的顺序特征与快速原型法德迭代特征相结合的产物;这种模型把软件看成一系列相互联系的增量,在看法过程的各次迭代中,每次完成其中的一个增量;4喷泉模型5微软过程六、思考:你认为“软件就是程序”这一个观点正确吗如果不正确,请批驳之;1.请从以下几个方面结合自己的经验实例加以论述;软件就是程序的观点是不正确的,因为软件等于程序加文档加数据;1文档是软件的一个非常重要的组成部分,在软件的开发过程中起着非常重要的作用;2在软件开发的每一个阶段都应有相应的文档;它是开发人员与用户以及开发人员与项目管理人员之间交流的媒介3文档是软件在不同阶段的表现形式;4程序与文档必须一致,文档才有价值;5文档质量直接决定软件质量的高低;6文档也是软件测试和维护的依据;在没有文档或文档不全的情况下对大型软件进行测试与维护是不可思议的事情;7文档是软件可重用的依据;2、有人说:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大;对否请解释你的回答;答:对,第二章可行性研究重点掌握的内容:可行性研究的系统流程图一般内容:可行性研究的任务和步骤,成本效益分析一、可行使研究:1、可行性研究的任务:是用最小的代价在尽可能短的时间内确定问题是否能够解决;一般来说,应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性可行性研究的目的:在明确了所要研究问题定义之后,分析员应该在明确目标系统所有限制和约束的前提下,去确定该问题是否值得去解决;或就是用最小代价在尽可能短的时间内确定问题是否能够解决;2、可行性研究过程:1)复查系统规模和目标2)研究目前正在使用的系统3)导出新系统的高层逻辑模型4)进一步定义问题5)导出和评价供选择的解法6)推荐行动方针7)草拟开发计划8)书写文档提交审查3、系统流程图的定义和作用:可行性研究对现有系统做概括的物理模型描述,如用图形工具表示则更加直观简洁;系统流程图是描绘物理系统的传统工具,它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件程序、文件、数据库、表格、人工过程等;系统流程图表达的是部件的信息流程,而不是对信息进行加工处理的控制过程;在可行性研究过程中,利用系统流程图来描述所建议系统的物理模型;4、数据流程图的定义和作用:数据流程图有两个特征:抽象性和概括性;抽象性指的是数据流程图把具体的组织机构、工作场所、物质流都去掉,只剩下信息和数据存储、流动、使用以及加工情况;概括性则是指数据流程图把系统对各种业务的处理过程联系起来考虑,形成一个总体5、数据流程图的组成元素数据流图可以用来抽象地表示系统或软件;它从信息传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节;因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型;6、数据流程图的组成:外部实体外部实体是指系统之外的人或单位,它们和本系统有信息传递关系数据流,处理、数据存储;如何绘制数据流程图1识别系统的输入和输出,画出顶层图2画系统内部的数据流、加工与文件,画出一级细化图3加工的进一步分解,画出二级细化图4其它注意事项7、数据流程图的注意点1每个处理都必须有流入的数据流和流出的数据流,如果没有,是错误的;数据守恒2每个数据存储应该有流入的数据流和流出的数据流,如果缺了一种,是Warning的;缺两种就错了;3、数据流只能在处理与处理、数据存储或者外部实体之间流动;、数据存储到数据存储、外部实提到外部实体、外部实提到数据存储之间的数据流都是错误的;4、一个处理可以细分成多个子处理,分成若干个层次均匀分解5、良好命名系统流程图与数据流程图有什么区别答:1系统流程图描述系统物理模型的工具,数据流程图描述系统逻辑模型的工具;2系统流程图从系统功能的角度抽象的描述系统的各个部分及其相互之间信息流动的情况;3数据流程图从数据传送和加工的角度抽象的描述信息在系统中的流动和数据处理的工作状况;三、数据流图:1、组成符号:4中基本图形符号正方形、圆角矩形、开口矩形2、数据流图的基本要点是描绘“做什么”,而不是考虑“怎么做”;3、一套分层的的数据流图由顶层、底层、和中间层组成;4、画分层数据流图基本原则与注意事项:a.自外向内,自顶向下,逐层细化,完善求精;b.保持父图与子图的平衡;也就是说,父图中某加工的输入数据流中的数据必须与它的子图的输入数据流在数量和名字上相同;c.保持数据守恒;也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工能产生的数据;d.加工细节隐藏;根据抽象原则,在画父图时,只需画出加工和加工之间的关系,而不必画出各个加工内部的细节;e.简化加工间关系;在数据流图中,加工间的数据流越少,各加工就越相对独立,所以应尽量减少加工间输入输出数据流的数目;f.均匀分解;应该使一个数据流中的各个加工分解层次大致相同;g.适当地为数据流、加工、文件、源/宿命名,名字应反映该成分的实际意义,避免空洞的名字;h.忽略枝节;应集中精力于主要的数据流,而暂不考虑一些例外情况、出错处理等枝节性问题;i.表现的是数据流而不是控制流;j.每个加工必须既有输入数据流,又有输出数据流.在整套数据流图中,每个文件必须既有读文件的数据流又有写文件的数据流,但在某一张子图中可能只有读没有写或者只有写没有读;小结:一个软件系统,其数据流图往往有多层;如果父图有N个加工Process,则父图允许有0~N张子图,但是每张子图只能对应一张父图;在一张DFD图中,任意两个加工之间可以有0条或多条名字互不相同的数据流;在画数据流图时,应该注意父图和子图的平衡,即父图中某加工的输入输出数据流必须与其输入输出流在数量和名字上相同;DFD信息流大致可分为两类:交换流和事务流;9、数据字典1.数据字典是在数据流程图的基础上,对数据流程图中的各个元素进行详细的定义与描述,起到对数据流程图进行补充说明的作用;2.数据字典的内容包括:数据流、数据流分量即数据元素、数据存贮、处理逻辑和外部实体;3.数据字典的作用是什么对用户来讲,数据字典为他们提供了数据的明确定义;对系统分析员来讲,数据字典帮助他们比较容易修改已建立的系统逻辑模型;数据字典的实现:P4910、成本效益分析:成本/效益分析的目的是要从经济角度分析开发一个特定的新系统是否可行,从而帮助使用部门负责人正确地做出是否投资与这项开发工程的决定;几种度量效益的方法:货币的时间价值、投资回收期、纯收入第三章需求分析一、重点掌握的内容那:需求分析的方法和面向数据流的分析方法二、一般掌握的内容:需求分析的任务和原则三知识点:1、为什么要做需求分析可行性分析研究阶段已经粗略的描述了用户的需求,甚至还提出了一些可行的方案,但是,许多细节被忽略了,在最终目标系统中是不能忽略、遗漏任何一个微小细节的,所以,可行性研究不能代替需求分析;2、需求分析的方法:需求分析方法由对软件的数据域和功能域的系统分析过程及其表示方法组成,它定义了表示系统逻辑视图和物理视图的方式,大多数的需求分析方法是由数据驱动的,也就是说,这些方法提供了一种表示数据域的机制,分析员根据这种表示,确定软件功能及其特性,最终建立一个待开发软件的抽象模型,即目标系统的逻辑模型;3、需求分析的任务:它的基本任务是准确地回答“系统必须做什么”这个问题;需求分析所要做的工作是深入描述软件的共能和性能,确定软件设计的限制和软件同其它系统元素的接口细节,定义软件的其它有效性需求;需求分析的任务不是确定系统如何完成它的工作,而是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求;其实现步骤如下图所示:一般说来需求分析阶段的任务包括下述几方面:1)确定对系统的综合需求对系统的综合需求主要有:系统功能需求、系统性能需求、可靠性和可用性需求、错处理需求、接口需求、约束、逆向需求、将来可能提出的需求:2)分析系统的数据需求就是在理解当前系统“怎样做”的基础上,抽取其“做什么”的本质,明确目标系统要“做什么”,可以导出系统的详细的逻辑模型;具体做法:首先确定目标系统与当前系统的逻辑差别;然后将变化部分看作是新的处理步骤,对功能图一般为数据流图及对象图进行调整;最后有外及里对变化的部分进行分析,推断其结构,获得目标系统的逻辑模型;通常用数据流图、数字字典和主要的处理算法描述这个逻辑模型;3)导出系统的逻辑模型4)修正系统开发计划在经过需求分析阶段的工作,分析员对目标系统有了更深入更具体的认识,因此可以对系统的成本和进度做出更准确地估计,在此基础上应该对开发计划进行修正;5开发原型系统:使用原型系统的主要目的是,使用户通过实践获得关于未来的系统将怎样为他们工作的更直接更具体的概念,从而可以更准确地提出他们的要求;4、需求分析的步骤:1调查研究2分析与综合3书写文档4需求分析评审5、需求分析的原则:1、必须能够表达和理解问题的数据域和功能域2、按自顶向下、逐层分解问题3、要给出系统的逻辑视图和物理视图6、软件需求的验证:需求分析阶段的工作结果是开发软件系统的重要基础,大量统计数字表明,软件系统中15%的错误起源于错误的需求;为了提高软件质量,确保软件开发成功,降低软件开发成本,一旦对目标系统提出一组要求之后,必须严格验证这些需求的正确性;一般说来,应该从下述4个方面进行验证:1一致性所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾;2完整性需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能;3现实性指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的;对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平出发判断需求的现实性;4有效性必须证明需求是正确有效的,确实能解决用户面对的问题;7、状态转换图:指明了作为外部事件结果的系统行为;为此,状态转换图描绘了系统的各种行为模式称为“状态”和在不同状态间转换的方式;状态转换图是行为建模的基础;思考:利用DFD图进行需求分析:在结构化分析方法中,用以表达系统内数据的运动情况的工具有A;供选择的答案:A.数据流图B.数据词典C.结构化英语D.判定表与判定树在结构化分析方法中用状态―迁移图表达系统或对象的行为;在状态―迁移图中,由一个状态和一个事件所决定的下一状态可能会有A个;供选择的答案:多个D.不确定五、总体设计概要设计重点掌握的内容:概要设计的过程和方法一般掌握的内容:概要设计的文档和评审考核知识点:一、总体设计:1、总体设计的目的:总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计;1、面向结构设计SD2、面向对象设计OOD2、总体设计的任务:1系统分析员审查软件计划、软件需求分析提供的文档、提出最佳推荐方案,用系统流程图,组成物理元素清单,成本效益分析,系统的进度计划,供专家沈顶峰,审定后进入设计2去顶模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块;确定模块之间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略;3编写概要设计说明书,用户手册,测试计划,选用相关的软件工具来描述软件结构,结构图是经常使用的软件描述工具;选择分解功能与划分模块的设计原则,例如模块划分独立性原则,信息隐蔽原则等3、总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构;4、典型的总体设计过程包括下述9个步骤:1、设想功选择的方案2、选取合理的方案3、推荐最佳方案4、功能分解5、设计软件6、设计数据库7制定测试计划8、书写文档:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果;9、审查和复审二、设计原理分析模块化,在模块化程序设计中,按功能划分模块的原则是,模块化和软件成本关系:模块具有输入和输出参数传递、功能、内部数据结构局部变量和程序代码四个特性1、模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求.2、模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了. 模块化和软件成本关系:根据总成本曲线,每个程序都相应地有一个最适当的模块数目M,,使得系统的开发成本最小.3、模块设计的准则:1改进软件结构,提高模块独立性:在对初步模块进行合并、分解和移动的分析、精化过程中力求提高模块的内聚,降低藕合;2模块大小要适中:大约50行语句的代码,过大的模块应分解以提高理解性和可维护性;过小的模块,合并到上级模块中;3软件结构图的深度、宽度、扇入和扇出要适当;一般模块的调用个数不要超过5个;4尽量降低模块接口的复杂程度;5设计单入口、单出口的模块;6模块的作用域应在控制域之内;4、抽象的概念:抽出事务的本质特性而暂时不考虑它们的细节.5、信息隐蔽:模块中所包括的信息不允许其它不需这些信息的模块调用信息局部化:是把一些关系密切的软件元素物理地放得彼此靠近6、什么是模块独立性答:模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准;7、模块独立性:是软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中的其它的模块接口是简单的;模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果;8、为什么模块的独立性很重要答:1有效的模块化的软件比较容易开发出来2独立的模块比较容易测试和维护;总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节;9、衡量模块独立的两个标准是什么它们各表示什么含义10、答:衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性;1耦合性;也称块间联系;指软件系统结构中各模块间相互联系紧密程度的一种度量;模块之间联系越紧密,其耦合性就越强,模块的独立性则越差;模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息;2内聚性;又称块内联系;指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量;若一个模块内各元素语句之间、程序段之间联系得越紧密,则它的内聚性就越高;耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础;模块的高内聚、低耦合的原则称为模块独立原则,也称为模块设计的原则;10、启发规则:1)改进软件结构提高模块独立性2)模块规模应该适中3)深度、宽度、扇出、、和扇入都应适当深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度;宽度是软件结构内同一个层次上的模块总数的最大值;一般来说,宽度越大系统越复杂;对宽度影响最大的因素是模块的扇出;一个模块的扇入是指直接调用该模块的上级模块的个数;一个模块的扇出是指该模块直接调用的下级模块的个数;设计原则:低扇出、高扇入;4)模块的作用域应该在控制域内5)力争降低模块接口的复杂程度6)设计单入口和单出口的模块7)模块功能应该可以预测三、概要设计的方法:1、面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法;面向数据流的设计要解决的任务,就是上述需求分析的基础上,将DFD图映射为软件系统的结构;2、数据流图的类型:交换型结构和事务型结构交换型结构:由3部分组成,传入路径,变换中心,输出路径系统的传入流经过变换中心的处理,变换为系统的传出流;事务型结构:有至少一条接受路径,一个事务中心与若干条动作路径组成;当外部信息沿着接受路径进入系统后,经过事务中心获得某个特定值,就能据此启动某一条动作路径的操作;四、结构化设计1、结构化设计方法:是一种面向数据流的设计方法,中心任务就是把用DFD图表示的系统分析模型转换为软件结构的设计模型,确定软件的体系结构域接口;2、结构化方法的步骤:1复审DFD图,必要时刻再次进行修改或细化:2鉴别DFD图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型;3按照SD方法规定的一组规则,吧DFD图转换为初始的SC图;变换型DFD图初始SC图事务型DFD图初始SC图3、结构设计的优化规则:1对模块分割、合并和变动调用关系的指导规则:以提高模块独立性为首要标准,除此之外,适当考虑模块的大小;2保持高扇/入低扇出原则3作用域/控制域规则:作用域不要超出控制域的范围;软件系统的判定,其位置离受它控制的模块越近越好;六、详细设计重点掌握的内容:详细设计的任务和方法一般掌握的内容:详细设计的原则和详细设计的规格与评审。
软件工程导论知识点
软件工程导论知识点软件工程导论一、各章知识点1、统一建模语言(UML):是一种面向对象的建模语言,它是运用统一的,标准化的标记和定义实现对软件系统进行面向对象的描述和建模2、封装从字面上理解,所谓封装就是把某个事物包起来,使外界不知道该事物的具体内容。
封装也就是信息隐藏,通过封装对外界隐藏了对象的实现细节。
3、软件维护性的过程分为四类:改正性维护;适应性维护;完善性维护;预防性维护4、白盒、黑盒测试的概念如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
这种测试叫做白盒测试,也叫结构测试。
如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试叫做黑盒测试,也叫功能测试。
5、继承:继承是指能够直接获得已有的性质和特征,而不必重复定义它们继承分单继承(树型结构)和多重继承(网状结构)6、软件生命周期以及各阶段的任务(3个时期,9个阶段)概括的说,软件生命周期由软件定义,软件开发和运行维护3个时期组成,通常把前两个时期再一步划分成若干个阶段。
软件定义时期:问题定义;可行性研究;需求分析三个阶段软件开发时期:总体设计;详细设计;编码和单元测试;综合测试五个阶段软件定义时期的任务是:确定软件开发工程的总目标;研究该项目的可行性;分析确定客户对软件产品的需求估算完成该项目所需的资源和成本,并且制定工程进度表软件开发时期的任务是:具体设计和实现在前一个时期定义的软件运行维护时期的任务是:通过对已交付使用的软件做必要的修改,使软件持久地满足客户的需求7、需求/概要/详细设计阶段是干什么的?需求分析阶段的基本任务是确定软件必须”做什么”,使用的概念主题是”功能”概要设计阶段的任务是确定“怎样做“,使用的概念是”模块“详细设计阶段的任务就是把解法具体化,即回答“应该怎样具体地实现这个系统”使用的概念是“数据结构“和”算法“8、软件生命周期中时间花费做多的是维护阶段软件生命周期中最重要的是系统分析9、软件的开发模型。
软件工程导论第十一章
数据 问题空间 客观世界的 对象和操作 客观世界算法空间 程序员对 问题的表达 程序设计语言 的对象和操作
2010-11-11
结果 客观世界 的对象
计算机算法 解空间
输出数据
2
liang@
OOD概述
尽管分析和设计的定义有明显区别, 尽管分析和设计的定义有明显区别,但是在实际的 软件开发过程中二者的界限是模糊 界限是模糊的 软件开发过程中二者的界限是模糊的。
重用某个软件系统的设计模型 软件移植
(3)分析结果重用
重用某个系统的分析模型 软件体系结构再工程
2010-11-11 liang@ 21
11.3 软件重用
3.典型的可重用软件成分 3.典型的可重用软件成分
(1)项目计划 • 减少计划制定时间 (2)成本估计 • 类似功能的成本估计可重用 (3)体系结构 • 领域体系结构的重用 (4)需求模型和规格说明 • 类和对象模型的重用 (5)设计 • 系统和对象设计都可被重用 (6)源代码 • 经过验证和测试的程序构件 (7)用户文档和设计文档 (8)用户界面 • 最广泛被重用的部分 (9)数据 • 表、记录结构、文件及DB等 记录结构、文件及DB等 DB (10)测试用例 10) • 设计和代码构件所附带的测试用 例
软件工程导论
梁文新 办公室:综合楼108 电 话: 87571625 liang@
OOD概述
分析: 目标系统精确模型(正确、完整、无二义性) 分析:用户需求 目标系统精确模型(正确、完整、无二义性) 设计: 系统设计模型(抽象的系统实现方案/软件构造的蓝图 软件构造的蓝图) 设计:分析模型 系统设计模型(抽象的系统实现方案 软件构造的蓝图) 面向对象设计OOD就是用面向对象观点建立解空间模型的过程 面向对象设计 就是用面向对象观点建立解空间模型的过程
软件工程导论(第6版)
第一章、软件工程学概述软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含下述两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。
2.如何维护数量不断膨胀的已有软件。
具体的说,软件危机主要有以下一些典型表现:1.对软件开发成本的进度的估计常常很不准确。
2.用户对“已完成的”软件系统不满意的现象经常发生3.软件产品的质量往往靠不住。
4.软件常常是不可维护的。
5.软件通常没有适当的文档材料。
6.软件成本在计算机系统总成本中所占的比例逐年上升。
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
软件生命周期:一个软件从定义、开发、使用和维护,知道最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。
软件配置:程序、文档和数据。
软件工程学的一个重要的目标:就是提高软件的可维护性,减少软件维护的代价。
软件:是程序、数据及相关文档的集合。
程序:是能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
软件工程:指导计算机软件开发和维护的一门工程学科。
软件工程具有下属的本质特性:1.软件工程关注于大型程序的构造。
2.软件工程的中心课题是控制复杂性。
3.软件经常变化。
4.开发软件的效率非常重要。
5.和谐地合作是开发软件的关键。
6.软件必须有效地支持它的用户。
7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
软件工程的7条基本原理:1.用分阶段的生命周期计划严格管理。
2.坚持进行阶段评审。
3.实行严格的产品控制4.采用现代程序设计技术。
5.结构应能清楚的审查。
6.开发小组的人员应该少而精。
7.承认不断改进软件工程实践的必要性。
软件工程:包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
软件工程 第11章 软件重用
软件工程第11章软件重用在软件工程的领域中,软件重用是一项具有重要意义和价值的理念与实践。
它就像是在建筑领域中重复使用标准化的建筑材料和设计模块,能够极大地提高软件开发的效率、质量和可维护性。
软件重用,简单来说,就是在新的软件开发项目中,重复使用已有的软件元素,这些元素可以是代码、设计、文档,甚至是测试用例等。
想象一下,如果每次盖房子都要从烧制砖头开始,那得多麻烦和低效。
同样的道理,在软件开发中,如果每次都要从头开始编写所有的代码,那不仅费时费力,还容易出错。
那么,软件重用到底有哪些好处呢?首先,它能显著提高开发效率。
当我们可以直接使用已经经过验证和优化的软件组件时,就不必再花费大量时间去重新开发类似的功能,从而大大缩短了开发周期。
其次,软件重用有助于提高软件的质量。
因为被重用的软件元素通常已经在之前的项目中经过了充分的测试和验证,其稳定性和可靠性相对较高。
再者,它能够降低开发成本。
减少了重复的开发工作,也就降低了人力、时间和资源的投入。
最后,软件重用还能增强软件的可维护性。
由于重用的部分具有一致性和标准化的特点,维护起来会更加容易。
然而,要实现软件重用,并不是一件简单的事情。
它需要我们在软件开发的整个过程中,建立起一套有效的管理和技术体系。
在需求分析阶段,我们就需要考虑是否有可以重用的软件组件能够满足当前项目的需求。
这就要求开发人员对已有的软件资源有充分的了解和掌握。
同时,还需要对新的需求进行准确的分析和评估,以确定哪些部分可以通过重用现有组件来实现,哪些部分需要进行新的开发。
在设计阶段,我们要设计出具有良好可重用性的软件架构。
这意味着架构应该具有清晰的层次结构、简洁的接口和高度的模块化。
这样的架构能够方便地将不同的软件组件组合在一起,同时也便于对单个组件进行替换和升级。
在编码阶段,开发人员需要遵循一定的规范和标准,以确保编写的代码具有良好的可读性、可维护性和可重用性。
代码的注释、命名规则、代码结构等方面都需要精心设计,以便其他开发人员能够轻松理解和使用。
软件工程导论(第六版)张海藩课后习题答案(1-8章)
第一章1-1 什么是软件危机?是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
1-3 什么是软件工程?是指导计算机软件开发和维护的一门工程学科。
1-4 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
目前使用得最广泛的软件工程方法学(2种):1. 传统方法学:也称为生命周期方法学或结构化范型。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。
2. 面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。
1-6 什么是软件过程?它与软件工程方法学有何关系?z 软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤z 软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型1-7 什么是软件生命周期模型,试比较瀑布模型,快速原型模型,增量模型,和螺旋模型的优缺点,说明每种模型的适用范围。
软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。
瀑布模型的优点:1.可强迫开发人员采用规范的方法;2.严格规定了每个阶段必须提交的文档;3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
瀑布模型的缺点:1.在软件开发初期,指明用户全部需求是困难的;2.需求确定后,经过一段时间才得到软件最初版本;3.完全依赖规格说明,导致不能满足用户需求。
适用中小型项目。
快速原型模型的优点:1满足用户需求程度高;2用户的参与面广;3返工现象少快速原型模型的优点:不适用大型软件的开发适用于小型项目。
软件工程导论第五版第十一章
第11章面向对象设计11.1面向对象设计的准则1. 模块化2. 抽象3. 信息隐藏4. 弱耦合5. 强内聚6. 可重用11.2启发规则1. 设计结果应该清晰易懂2. 一般\|特殊结构的深度应适当3. 设计简单的类4. 使用简单的协议5. 使用简单的服务6. 把设计变动减至最小图11.1理想的设计变动情况11.3软件重用11.3.1概述1. 重用2. 软件成分的重用级别3. 典型的可重用软件成分11.3.2类构件1.可重用软构件应具备的特点2. 类构件的重用方式11.3.3软件重用的效益1. 质量2. 生产率3. 成本11.4系统分解图11.2典型的面向对象设计模型1. 子系统之间的两种交互方式2. 组织系统的两种方案图11.3典型应用系统的组织结构3. 设计系统的拓扑结构11.5设计问题域子系统1. 调整需求2. 重用已有的类3. 把问题域类组合在一起4. 增添一般化类以建立协议图11.4窄菱形模式5. 调整继承层次图11.5阔菱形模式图11.6把多重继承简化为单一层次的单继承6. ATM系统实例图11.7ATM系统问题域子系统的结构11.6设计人机交互子系统1. 分类用户2. 描述用户3. 设计命令层次4. 设计人机交互类11.7设计任务管理子系统1. 分析并发性2. 设计任务管理子系统11.8设计数据管理子系统11.8.1选择数据存储管理模式1. 文件管理系统2. 关系数据库管理系统3. 面向对象数据库管理系统11.8.2设计数据管理子系统1. 设计数据格式2. 设计相应的服务11.8.3例子11.9设计类中的服务11.9.1确定类中应有的服务11.9.2设计实现服务的方法1. 设计实现服务的算法2. 选择数据结构3. 定义内部类和内部操作11.10设计关联1. 关联的遍历2. 实现单向关联图11.8用指针实现单向关联图11.9用指针实现双向关联3. 实现双向关联图11.10用对象实现关联4. 关联对象的实现11.11设计优化11.11.1确定优先级11.11.2提高效率的几项技术1. 增加冗余关联以提高访问效率图11.11公司、雇员及技能之间的关联链图11.12为雇员技能数据库建立索引2. 调整查询次序3. 保留派生属性11.11.3调整继承关系1. 抽象与具体2. 为提高继承程度而修改类定义图11.13设计类继承的例子3. 利用委托实现行为共享图11.14用表实现栈的两种方法11.12小结习题111. 面向对象设计应该遵循哪些准则?简述每条准则的内容,并说明遵循这条准则的必要性。
张海藩《软件工程导论》(第6版)(课后习题 第11章 面向对象设计)【圣才出品】
4.试用面向对象方法,设计本书第 2 章中给出的订货系统的例子。 答:略。
break; }
int main(){ FILE *fi; int i,inQuote; fi=fopen(“xxx.c”, “r”) if(fi==NULL) return 1; i=inQuote=0;
2/8
圣才电子书 十万种考研考证电子书、题库视频学习平台
b.有明确的定义。为使类的定义明确,分配给每个类的任务应该简单。 c.简化对象之间的合作关系。 d.不要提供太多的服务。 ④使用简单的协议 ⑤使用简单的服务 ⑥把设计变动减至最小 (2)启发规则的必要性 人们使用面向对象方法学开发软件的历史虽然不长,但也积累了一些经验。总结这些经 验得出了几条启发规则,它们往往能帮助软件开发人员提高面向对象设计的质量。
char input[Len_Max+2]; int n=sizeof(input); void CheckKeyWord(){ int i,result; for(i=0;i<n;i++) {
result=strcmp(input,Key[i]); if(result==0){ count[i]++; break; } if(result<0)
3/8
圣才电子书 十万种考研考证电子书、题库视频学习平台
5.试用面向对象方法,设计本书习题 2 第 2 题中描述的储蓄系统。 答:使用面向对象方法设计出的储蓄系统的对象模型如图 11-7 所示:
软件工程导论课件之第11章 面向对象设计(第五版)(张海藩编著)精品文档
互
理
部
部
分
分
任务管理部分
11.1 面向对象设计的准则
所谓优秀设计,就是权衡了各种因素,从而使 得系统在其整个生命周期中的总开销最小的设 计。
对大多数软件系统而言,60%以上的软件费用 都用于软件维护,因此,优秀软件设计的一个 主要特点就是容易维护。
设计准则有6条。
1. 模块化
对象就是模块。它是把数据结构和操作这些数 据的方法紧密地结合在一起所构成的模块。
C
C
采用聚合取消继承
6. 对复杂关联的转化 把多对多关联转化为一对多关联
供货商 1..*
客户 1..*
供货商 1..*
客户 1..*
供货商 1
供需合同
买方 1..* 卖方 1..*
……
客户 1
把多元关联转化为二元关联
项目
语言
人员
项目 1
任务项
项目名 1..* 人员 *
语言 ……
1..*
分析结果重用:重用某个系统的分析模型。这 种重用特别适用于用户需求未改变,但系统体 系结构发生了根本变化的场合。
3. 典型的可重用软件成分 项目计划 成本估计 体系结构 需求模型和规格说明 设计 源代码 用户文档和技术文档 用户界面 数据 测试用例
11.3.2 类构件
层次组织(水平)
把软件系统组织成一个层次系统,每层是一个子系 统。上层在下层的基础上建立,下层为实现上层功 能而提供必要的服务。在上、下层之间存在客户供应商关系。
封闭式
开放式
块状组织(垂直)
把软件系统垂直地分解成若干个相对独立的、弱耦 合的子系统,一个子系统相当于一块,每块提供一 种类型的服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)人的因素
喜欢自己创造而不喜欢使用别人的东西。
软件复用的困难
(3)管理因素
把复用构件和一般软件构件同等看待,把复用看作可有可
无的事。
(4)教育因素
软件科学技术的教育与培训中,缺乏关于软件复用的内容, 缺少专门教材和课程。
11.1 可重用的软件成分 11.2 软件重用过程 11.3 领域工程 11.4 开发可重用的构件 11.5 分类和检索构件
采用结构化方法和面向对象方法,而后者将成为主流。
11.3.2
领域特征
为了确定一个可能可重用的软件成分在特定情况 下是否确实可以被使用,有必要定义一组领域特征, 这些特征是该领域中所有软件共有的。领域特征定义 了该领域中所有产品共有的类属属性,例如,安全(或
可靠性)的重要性,程序设计语言,处理中的并发性等。
件和完整的数据库。 · 测试用例。一旦设计或代码构件将被重用,相 关的测试用例应该“附属于”它们。
11.2
11.2.1
软件重用过程
构件组装模型
“重用”应该是每个软件过程的一个不可缺少的 组成部分。图11.1所示的构件组装模型,举例说明了 怎样把一个可重用的软件构件库集成到典型的演化过 程模型中。
· 用户文档和技术文档。即使针对的应用是不同
的,也经常有可能重用用户文档和技术文档的大部分。 · 用户界面。这可能是最广泛被重用的软件成分, GUI(图形用户界面)软件经常被重用。因为它可占到一 个应用程序的60%代码量,因此,重用的效果非常显著。
· 数据。在大多数经常被重用的软件成分中,被
重用的数据包括:内部表、列表和记录结构,以及文
二、基于软件复用的软件开发过程的角度分
1.生产者复用(product reuse)
指建立、获取或者重新设计可复用构件的活动。涉及到的活 动包括:复用的规划、领域分析、构件的开发、构件库的组织和 管理。 2.消费者复用(consumer reuse) 指使用可复用的构件建立新的系统的活动。涉及到的活动包 括:应用系统的规划、构件的检索和选择、应用系统中非复用部 分的开发、应用系统的组装。
的某些事物或某些问题的抽象程度 更高的解法。 受实际环境影响小,可复用机会多, 所需修改少。 包括目标代码,也包括文本形式的 源代码。
设计结果的复用
低
代码的复用
软件成分的重用可以进一步划分成以下三个级别。
(1) 代码重用 (2) 设计结果重用 设计结果重用指的是,重用某个软件系统的设计模型(即求解域 模型)。这个级别的重用有助于把一个应用系统移植到完全不同的 软/硬件平台上。
11.4
11.4.1
开发可重用的构件
为了重用的分析与设计
2. 类构件的重用方式 (1) 实例重用 (2) 继承重用 面向对象方法特有的继承性,提供了一种对已有 的类构件进行裁剪的机制。当已有的类构件不能通过 实例重用完全满足当前系统需求时,继承重用提供了 一种安全地修改已有类构件,以便在当前系统中重用 的手段 (3) 多态重用 利用多态性不仅可以使对象的对外接口更加一般 化(基类与派生类的许多对外接口是相同的),从而降 低了消息连接的复杂程度,而且还提供了一种简便可 靠的软构件组合机制,系统运行时,根据接收消息的 对象类型,由多态性机制启动正确的方法,去响应一 个一般化的消息,从而简化了消息界面和软构件连接 过程。
高
测试信息的复用 抽
象
程 度
分析结果的复用
从现有系统的分析结果中提取可复 用构件用于新系统的分析; 主要包括测试用例(test case) 用一份完整的分析文档作为输入, 的复用和测试过程信息的复用。 成生针对不通软硬件平台和其它实现条 件的多项设计; 独立于具体应用,专门开发一些 可被复用的分析结果是针对问题域 可复用的分析构件。
第11章 软件重用
重用(reuse)也称为再用或复用,是指同一事物不做 修改或稍加改动就多次重复使用。
软件重用的优点:
(1)提高软件生产率,降低软件生产代价; (2)提高软件质量; (3)互操作性好; (4)推动标准化; (5)支持原型开发。
退出
软件复用就是将已有的软件成分用于构造新的软件系统, 以达到提高软件系统的开发质量与效率,降低开发成本的目 的。
图11.2
一个强调重用的过程模型
11.3 领域工程
领域工程的目的是,标识、构造、分类和传播一
组软件成分,在特定的应用领域中这些软件成分可适 用于现有的和未来的软件系统。其总体目标是,建立 相应的机制,使得软件工程师可以在新的或现有的系 统中分享这些软件成分——重用它们。 领域工程包括三个主要的活动,它们是分析、构 造和传播。
11.2.3
重用过程模型
为了实现软件重用,已经提出了许多过程模型, 这些模型都强调领域工程与软件工程同时进行。领域 工程完成一系列工作,以建立一组可以被软件工程师 重用的软件成分。 图11.2给出了一个典型的明显适用于重用的过程 模型。领域工程创建应用领域的模型,在软件工程流 中使用该模型作为分析用户需求的基础。软件体系结 构及相应的结构点(见11.3.3节)为应用系统的设计提 供了输入信息。最后,在可重用的软件成分作为领域 工程的一部分被构造出来之后,它们可以在软件开发 活动中被软件工程师使用。
· 成本估计。因为在不同项目中经常含有类似的
功能,所以有可能在只做极少修改或根本不做修改的 情况下,重用对该功能的成本估计结果。 · 体系结构。即使在考虑不同的应用领域时,也 很少有截然不同的程序和数据体系结构。因此,有可 能创建一组类属的体系结构模板(例如,事务处理体系 结构),并把那些模板作为可重用的设计框架。 · 需求模型和规格说明。类和对象的模型及规格
· 分析每个应用样本。
· 开发对象的分析模型。
领域分析是对特定应用领域中共同的特征、知识、需
求的标识、分析和规约。领域分析是特定领域内软件重用的
基础,它的目标就是:发现和挖掘在特定领域内可以被复用 的构件。领域分析活动中输入和输出如图所示:
输入信息
技术文献 已有应用 专家经验/建议 当前与未来的需求
一个可重用的软件成分的领域特征集可以表示为 {DP},集合中每一项DPi表示一个特定的领域特征。
赋给DPi的值表示等级,它指出该特征与软件成分P的 相关性。典型的等级如下。
· 与重用是否合适不相关。 · 仅在特殊情况下才相关。 · 相关,但存在差异无关紧要,该软件成分经过 修改后仍然可以被使用。 · 明显相关,如果新软件不具有此特征,虽然重 用仍然是可能的,但却是低效的。 · 很相关,如果新软件不具有此特征,重用将是 非常低效的,此时不推荐重用。 当在该应用领域中要开发一个新软件w时,可以为 它导出一组领域特征{Dw},然后比较DPi与Dwi,以决 定是否现存的软件成分P可以在应用系统w中有效地重 用。 表11.1列出了可能对软件重用有影响的典型的领 域特征,为了有效地重用软件成分,必须考虑这些领 域特征。
可 复 用 的 软 件 成 分 , 也 称 为 可 复 用 构 件 (Reusable Component)可从旧软件中提取,也可以专门为复用而开发。
软件复用不仅是对程序的复用,它包括对软件生产过程 中任何活动所产生的制成品的复用。如:项目计划、可行性 报告、需求定义、分析模型、详细说明、源程序和测试用例 等等。
即使待开发的软件明显属于某个应用领域,对该 领域中可重用的软件成分也必须加以分析,以确定它 们在当前项目中的可重用性。在少数情况下,从头开 发可能仍然是成本最低的途径。 11.3.3 结构建模和结构点
每个应用领域都可以用一个结构模型来刻画(例如,
不同飞行器飞行控制系统的细节差别很大,但是在该 领域的所有现代软件都具有相同的结构模型),因此, 结构模型是一种体系结构制品,它可以也应该在该领 域内的所有应用系统中被重用。
图2
典型的重用的过程模型,描述了领域工程与软件工程的关系。
领域工程
领域分析 设计软件 体系结构 开发可重用 的软件成分
领域 模型
结构 模型
中心库
可重用软件 成分/构件
软件工程
系统分析 用户 需求
规格说明 与设计
建造
系统规 格说明
分析与 设计模型
应用 软件
重用的过程模型
11.3.1
分析过程
领域分析过程基本上由下述步骤组成。 · 定义被研究的领域。 · 把从该领域中抽取出来的项分类。 · 收集该领域中有代表性的应用样本。
软件生产过程主要是正向过程,即软件产品从抽象级别较高
的形态向抽象级别较低的形态演化,所以较高级别的复用容易带
动较低级别的复用,反之则不然。 复用级别越高,可得到的回报也越大,因此分析软件 (Analysis Ware)和设计软件(Design Ware)的复用备受重视。
软件复用的形式
一、按照重用活动所跨越的应用领域的类型分
表 11.1 影响重用的领域特征 产品 需求稳定性 并发软件 内存限制 应用大小 用户界面复杂性 程序设计语言 安全/可靠性 寿命需求 产品质量 产品可靠性 过程 过程模型 过程符合性 项目环境 进度限制 预算限制 生产率 人员 动机 教育 经验/培训 · 应用领域 · 过程 · 平台 · 语言 开发队伍 生产率
输出信息
领域分析 领域语言 复用标准 分类方法 功能/行为模型
领域分析的输入和输出
领域分析不是针对某个特定的软件系统,而是针对一类
软件系统的共同的特征、知识和需求。比需求分析更一般、更 抽象、更广泛的特征。 领域分析(Domain Analysis)是对一类应用系统的共同应 用领域进行系统化分析,以发现该领域的共同知识、需求及其应 用系统的共同特征。 领域分析又称领域工程(Domain Engineering),是软件工 程的发展与延伸。 领域分析是一项比系统分析更难的工作。领域分析方法可
(3) 分析结果重用
这是一种更高级别的重用,即重用某个系统的分析模型。这种 重用特别适用于用户需求未改变,但系统体系结构发生了根本变化 的场合。更具体地说,可能被重用的软件成分主要有以下10种。