软件工程导论第五章复习总结附思维导图及部分习题答案
总体设计
一、设计过程
1.设想提供选择的方案
2.选取合理的方案
3.推荐最佳方案
4.功能分解
5.设计软件结构
6.设计数据库
7.制定测试计划
8.书写文档
-
1.系统说明
-
2.用户手册
-
3.测试计划
-
4.详细的实现计划
- 1.测试策略
- 2.测试方案
- 3.预测的测试结果
- 4.测试进度计划
-
5.数据库设计结果
9.审查和复查
二、设计原理
1.模块化
2.抽象
3.逐步求精
4.信息隐藏和局部化
5.模块独立 目标:高内聚,低耦合
-
1.耦合:软件结构内不同模块之间互连程度的度量
-
1.完全独立:模块间无任何连接
-
2.数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据
-
3.控制耦合:传递的信息中有控制信息
-
4.特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中的一部分数据元素
-
5.公共环境耦合:两个或多个模块通过一个公共数据环境相互作用
-
6.内容耦合:
- 1.一个模块访问另一个模块的内部数据
- 2.一个模块不通过正常入口而转到另一个模块内部
- 3.两个模块有一部分程序代码重叠(只可能出现在汇编语言中)
- 4.一个模块有多个入口
-
-
2.内聚:一个模块内各个元素彼此间结合的紧密程度
-
1.低内聚
- 偶然内聚:一个模块完成一组任务,这些任务彼此间即使有关系,关系也很松散的
- 逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类
- 时间内聚:一个模块包含的任务必须在同一段时间执行
-
2.中内聚
- 过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行
- 通信内聚:模块中所有元素都使用同一个输入数据或产生同一个输出数据
-
3.高内聚
- 顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行
- 功能内聚:模块内所有处理元素属于同一个整体,完成一个单一的功能
-
三、启发规则
1.改进软件结构提高模块独立性
2.模块规模应该适中
3.深度,宽度,扇出,扇入都应适当
- 深度:软件结构中控制的层数,能粗略地标志一个系统的大小和复杂程度
- 宽度:软件结构内同一个层次上的模块总数的最大值
- 扇出:一个模块直接控制(调用)的模块数目
- 扇入:表明有多少个上级模块直接调用它
4.模块的作用域应该在控制域之内
- 作用域:受该模块内一个判定影响到所有模块的集合
- 控制域:这个模块本身以及所有直接或间接从属于它的模块的集合
5.力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7.模块功能应该可以预测
四、描绘软件结构的图形工具
1.层次图和HIPO图Page102
- 层次图:描绘软件的层次结构;适于在自顶向下设计软件的过程中使用
- HIPO图:层次图加输入/处理/输出图,具有可追踪性
2.结构图Page103
- 1.一个方块代表一个模块
- 2.框内注明模块的名字或主要功能
- 3.方框之间的箭头(或直线)表示模块的调用关系
五、面向数据流的设计方法
1.概念:面向数据流的设计方法把信息流映射成软件结构
-
1.变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的的信息通过变换中心,经加工率处理以后再沿输入通路变换成外部形式离开软件系统
-
2.事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选一个来执行
- 1.接收输入数据(有称事务)
- 2.分析每个事务以确定它的类型
- 3.根据事务类型选取一条活动通路
-
设计过程Page106
2.变换分析
-
1.例子:Page106
-
2.设计步骤
- 1.复查基本系统模型
- 2.复查并精华数据流图
- 3.确定数据流图具有变换特性还是事务特性
- 4.确定输入流和输出流的边界,从而孤立出变换中心
- 5.完成第一级分解
- 6.完成第二级分解
- 7.使用手机度量和启发规则对第一次分割得到的软件结构进一步精化
-
3.事务分析
- 由事务流映射成的软件结构包括一个接受分支和一个发射
-
4.设计优化
六、小结
总体设计阶段主要由两个小阶段组成
- 1.系统设计,从数据流图出发设想完成系统功能的若干种合理方案,分析员应该仔细分析比较这些方案,并且和用户共同选定一个最佳方案
- 2.软件结构设计:确定软件由哪些模块组成以及这些模块之间的动态调用关系
数据流图映射出软件结构
习题
1.为每种类型的模块耦合举一个具体例子
事实上耦合如果细分的话,有7种,分别是非直接耦合、数据耦合、特征耦合、控制耦合、外部耦合、公共耦合、内容耦合,他们的关系从低到高
我在上面的思维导图中只写了6种,课本中就只细讲了4中,老师课堂上也只讲了4种偶尔,所以这道题就只举例4中耦合。
- 数据耦合:
- 即一个模块访问另一个模块的时候,彼此间是用过数据参数来交换输入,输出信息的
- 例子:计算机网络属于松耦合系统
- 控制耦合:
- 即如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能
- 例子:遥控器和电视
- 公共环境耦合:
- 一组模块都访问同一个公共数据环境
- 多机系统
- 内容耦合:
- 就是做了多余的工作
- 例子:汇编程序模块
2.为每种类型的模块内聚举一个例子
- 功能内聚
- 一个程序中的所有操作就是为了做一件事(计算年龄)
- 顺序内聚
- 有一个程序,通过给出的生日,先计算出年龄,在根据年龄算出退休时间,有顺序进行
- 通信内聚
- 有一个子程序将打印实验报告,并且在完成后重新初始化传来的实验数据。这个程序具有通信内聚。因为这两个操作由于使用同一个数据源联系在一起
- 过程内聚
- 一个子程序,将开始读取学生的学号,然后是姓名,最后将读取分数,由于特定的顺序将这些操作联系组合在一起
- 时间内聚
- 将多个变量的初始化放在同一模块中
- 逻辑内聚
- 一个子程序将打印的季度开支报告、月份开支报告和日开支报告,具体打印哪一个,将由传入的控制标志决定,这个子程序具有逻辑内聚行,因为他的内部逻辑是由输入进去的外部竞争标签决定的
- 偶然内聚
- 一个模块完成一组任务,这些任务彼此间即使有关系