软件工程导论第六版 第五章 总体设计知识点总结
目录
- 总体设计概述
- 目的
- 任务
- 设计过程
- 设计原理
- 什么是模块?什么是模块化?
- 模块化的优点
- 模块化和软件成本
- 逐步求精
- 什么是逐步求精?
- Miller法则
- 抽象
- 信息隐藏和局部化
- 什么是信息隐藏
- 信息隐藏的优点
- 模块独立
- 耦合
- 内聚(==内聚程度由低到高:偶-逻-时-过-通-顺-功==)
- 启发规则
- 面向数据流的设计方法
- 总结
- 本章练习
总体设计概述
目的
总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题。因此,总体设计又称为概要设计或初步设计。
任务
① 划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等(但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计)
② 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
设计过程
总体设计过程通常由两个主要阶段组成
- 系统设计阶段(确定系统的具体实现方案)
- 结构设计阶段(确定软件结构)。
典型的总体设计过程包括以下9个步骤:
- 设想供选择的方案。需求分析阶段得出的数据流图是总体设计的极好的出发点(上一阶段的DFD在本阶段细化之后可以被下一阶段使用)。
- 选取合理的方案
- 推荐最佳方案
- 功能分解。功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。
- 设计软件结构。通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块从而完成程序的一个子功能,最下层的模块完成最具体的功能。软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
- 设计数据库
- 制定测试计划
- 书写文档
- 审查和复审
设计原理
什么是模块?什么是模块化?
答:模块是由边界元素限定的相邻程序元素序列,而且有一个总体标识符代表它。像C、C++和Java语言中的{…}对,都是边界元素的例子。按照模块的定义,函数、子程序都可作为模块。面向对象方法学中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。
模块化就是把程序划分成为独立命名且可以独立访问的模块,每个模块完成一个子功能,把所有的模块集成起来构成一个整体,可以完成指定的功能,满足用户的需求。
模块化的优点
- 采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。
- 因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。
- 因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。
- 模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。
模块化和软件成本
如果无限地分割软件,最后为了开发软件而需要的工作量就小得可以忽略了。上述结论不能成立,如下图,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本确实减少了,但是随着模块数目增加,设计模块间接口所需要的工作量也将增加。根据这两个因素。得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。
逐步求精
什么是逐步求精?
可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”事实上,可以把逐步求精看作是一项把一个时期内必须解决的种种问题按优先级排序的技术,逐步求精方法确保每个问题都将被解决,而且每个问题都将在适当的时候被解决。
Miller法则
逐步求精之所以如此重要,是因为人类的认知过程遵守 Miller法则 : 一个人在任何时候都只能把注意力集中在7士2个知识块上。Miller法则是人类智力的基本局限,人们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽自己的最大努力工作。
抽象
抽象与求精是一对互补的概念。抽象使得设计者能够说明过程和数据,同时却忽略了低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出低层细节。
信息隐藏和局部化
什么是信息隐藏
信息隐藏原理指出:一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
信息隐藏的优点
- 如果在测试期间和以后的软件维护期间需要修改软件,使用信息隐藏原理作为模块化系统设计的标准会带来极大好处。(有利于软件的修改)
- 由于绝大多数数据和过程对于软件的其他部分而言是隐藏的,在修改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。(防止错误的扩大和传播)
模块独立
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相连接的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
耦合
耦合是对一个软件结构内不同模块之间互连程度的度量。在软件设计中应该追求尽可能松散耦合的系统(由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小)。
耦合分为以下几类:(耦合程度由低到高:无-数-标-控-外-公-内)
- 无直接耦合。如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接。
- 数据耦合。如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。
- 控制耦合。如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。
- 外部耦合。
- 公共耦合。当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。
- 内容耦合。最高程度的耦合是内容耦合,应该坚决避免使用内容耦合。
- 特征耦合。当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。在这种情况下,被调用的模块可以使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。
内聚(内聚程度由低到高:偶-逻-时-过-通-顺-功)
内聚标志着一个模块内各个元素彼此结合的紧密程度,设计时应该力求做到高内聚,内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。模块化设计的原则一般遵循:高内聚、低耦合。
内聚分为以下几类:
- 偶然内聚:0分
- 逻辑内聚:1分
- 时间内聚:3分
- 过程内聚:5分
- 通信内聚:7分
- 顺序内聚:9分
- 功能内聚:10分
启发规则
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出和扇入都应适当。深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。宽度是软件结构内同一个层次上的模块总数的最大值。一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。
扇出是一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂,需要控制过多的下级模块;扇出过小也不好。经验表明,一个设计得好的典型系统的平均扇出通常是3或4(扇出的上限通常是5~9)。
一个模块的扇人表明有多少个上级模块直接调用它,扇入越大则共享该模块的上级模块数目越多,这是有好处的(扇入可以影响模块的复用率)。但是,不能违背模块独立原理单纯追求高扇人。 - 模块的作用域应该在控制域之内
- 力争降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
面向数据流的设计方法
通常用数据流图描绘信息在系统中加工和流动的情况。
因为 任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。通常所说的结构化设计方法(简称SD方法),也是基于数据流的设计方法。
面向数据流的设计方法把 信息流 映射成 软件结构。
信息流有两种类型,分别是变换流和事务流。
需要注意的是:
交换流是线性的、顺序的。
事务流是分支的。
下图中T称为事务中心,它完成下述任务。
- 接收输入数据(输入数据又称为事务)
- 分析每个事务以确定它的类型
- 根据事务类型选取一条分支(活动通路)
66
总结
1、总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务。因此,总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,然后进行软件结构设计。
2、在软件结构设计中,层次图和结构图是描绘软件结构的常用工具。
3、自顶向下逐步求精是进行软件结构设计的常用途径。但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图映射出软件结构。 应该记住,这样映射出来的只是软件的初步结构,还必须根据设计原理并且参考启发式规则,认真分析和改进软件的初步结构,以得到质量更高的模块和更合理的软件结构。(数据流图的作用 —— 软件结构设计)
本章练习
1、模块是构成程序的基本构件。
2、模块是构成程序的基本构件。
3、如果无限地分割软件,最后为了开发软件而需要的工作量就小得可以忽略了。(×)
4、数据耦合可有可无。(×)
(数据耦合是低耦合。系统中至少必须存在数据耦合,因为只有当某些模块的输出数据作为另一些模块的输人数据时,系统才能完成有价值的功能)
5、控制耦合通常可以被数据耦合代替。(√)
(控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合往往是多余的,在把模块适当分解之后 通常可以用数据耦合代替控制耦合。)
6、任何软件系统都可以用数据流图示。(√)
软件工程导论第六版 第五章 总体设计知识点总结相关推荐
- [软件工程导论(第六版)]第5章 总体设计(复习笔记)
文章目录 5.1 设计过程 5.2 设计原理 5.2.1 模块化 5.2.2 抽象 5.2.3 逐步求精 5.2.4 信息隐藏和局部化 5.2.5 模块独立 5.3 启发规则 5.4 描绘软件结构的图 ...
- [软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)
文章目录 1. 什么是面向对象方法学?它有哪些优点? 2. 什么是"对象"?它与传统的数据有何异同? 3. 什么是"类"? 4. 什么是"继承&quo ...
- [软件工程导论(第六版)]第4章 形式化说明技术(课后习题详解)
文章目录 1. 举例对比形式化方法和欠形式化方法的优缺点. 2. 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则? 3. 一个浮点二进制数的构成是:一个可选的符号(+或-),后 ...
- 数据库系统概念第六版 第五章练习题 2 4
数据库系统概念第六版 第五章练习题 2 4 5.2 写一个使用JDBC元数据特性的JAVA函数,该函数用ResultSet作为输入参数,并把结果输出为用合适的名字作为列名的表格形式. (对JAVA不太 ...
- 材料力学Ⅰ(第六版)第五章课后习题答案
第一章 绪论 第二章 拉伸.压缩与剪切 第三章 扭转 第四章 弯曲内力 第五章 弯曲应力 第六章 弯曲变形 第七章 应力和应变分析强度理论 第八章 组合变形 第九章 压杆稳定
- 软件工程导论第六版 第一章 软件工程学概述知识点总结(上)
目录 关于20世纪60年代 (选择题考点) 软件危机 软件危机的概念 (填空题考点) 软件危机的表现 (简答题考点) 软件危机产生的原因 (简答题考点) 软件工程的概念 软件工程的七条基本原理 软件生 ...
- 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)
目录 软件过程 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 Rational 统一过程 敏捷过程和极限编程 面向对象方法学 简答题 本章练习 软件过程 顺口溜:布 原 增 螺 喷 统 瀑布模 ...
- C Primer Plus第六版第五章运算符,表达式,语句源码
源码 //5.1#include<stdio.h> #define ADJUST 7.31 int main(void) {const double SCALE = 0.333;doubl ...
- c primer plus 第六版 第五章练习
/* 1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的 时间.使用#define或const创建一个表示60的符号常量或const变量.通 过while循环让用户重复输入值,直到用户输入小 ...
最新文章
- 如何实时主动监控你的网站接口是否挂掉并及时报警
- 关于找工作和选专业的思考
- nginx 开展对RT5350
- python顺序查找的递归算法_Python实现查找算法
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
- itext7相关使用
- 定位(一):扩展卡尔曼滤波
- cousera视频无法加载
- Cisco NAT --- 从内网用公网IP地址访问内网服务器
- 洛奇服务器维护,《洛奇Mabinogi》官方网站
- 锂电池的充电电压和电流应该是多少
- matlab 场仿真,利用MATLAB软件实现温度场的仿真
- 华为ModelArts自定义镜像(PyTorch镜像)
- 软件设计师学习笔记-计算机网络
- 计算机右键管理提示没有关联应用,win10计算机右键管理 没有与之关联的程序来执行此操作的解决方法...
- 金融风控场景下:数据分析、模型与策略。
- STAR原则:挖掘闪光点
- 半导体光放大器SOA原理及应用
- Java登录QQ邮箱整理邮件的58的简历(一)
- 2021-09-11meituan-011.搭配出售
热门文章
- 如何删除mysql数据库的重复数据
- 第2.2章 使用两个“半加器”实现一个“全加器”
- BZOJ1123BLO Tarjan割点+乘法原理+dfs
- Nginx和Tomcat优化
- js页面跳转和js对iframe进行页面跳转、刷新
- Window 电脑C盘清理
- Python全国计算机等级考试(2021)
- BIM应用(VR\AR\MR)相关设备及软件——来自《中国建筑业BIM应用分析报告(2020)》
- [share]深入探讨PHP中的内存管理问题
- pytest自动化测试