第四章:面向过程的软件设计
一、软件设计的目标:
根据有用信息域表示的软件需求以及功能和性能的需求进行: 数据设计、系统结构设计、过程设计。
二、软件设计的任务:
分两步完成:概要设计和详细设计(过程设计)
概要设计:将软件的需求转化为数据结构和软件的系统结构,完成系统结构设计。
详细设计:通过结构表示进行的细化。
软件设计原则:自顶向下,逐步细化。软件结构:程序的模块结构和数据的结构。
三、模块设计:
1、模块中的调用:直接调用,判断调用,循环调用。
2、模块间的耦合:
耦合性由低到高的排列依次为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
3、模块内聚:内聚性越高,模块独立性越强。
内聚性由低到高的排列依次为:巧合内聚、逻辑内聚、时间内聚、 过程内聚、通信内聚、信息内聚、功能内聚。
四、结构化程序设计:
1、在结构图中模块的画法:
各模块说明:
传入模块:从下属模块中取得数据,经过处理,传入上级模块,
传出模块:向右斜。
变换模块:原数据传入,经过转换,输出。
协调模块:传入 X经过协调,输出Y。
变换行系统结构示意图:过程分为三步:取得数据,变换数据,给出数据。
2、变换结构分析:(四步)
a、重画数据流图;b、区分有效输入有效输出和中心变换部分。c、进行一级分解,设计上层模块;d、二级分解,设计输入、输出和中心变换的中、下层模块。
注意: 1、选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成。
2、设计下层模块时,考虑到模块的耦合和内聚问题
3、使用黑箱技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”(即不考虑内部结构,只考虑接口部分。)
4、在模块划分时,一个模块的直接下属一般在5个左右。
5、当模块不能再细分为明显的子任务时,停止分解。
3、事物分析:也是从分析数据流图开始,自顶向下,逐层分解,建立系统到结构图。
4、软件模块结构的改进:
1、模块功能的完善化:执行规定的功能的部分。出错处理的部分。给它的调用者返回一个结束状态标识。
2、消除重复功能,改善软件结构:a、完全相似,b、局部相似。
3、模块的作用范围应在控制范围之内。
A、模块控制范围包括它本身及其所有的从属模块。
B、模块作用范围值模块内一个判定的作用范围,凡是收这个判定影响的所有模块都属于这个判定的作用范围。
4、尽可能减少高扇出结构,随着深度增大扇入。
5、减少使用病态联接。限制使用三种:直接病态联接(直接调用)。公共数据域病态联接。通信模块联接。
6、模块大小要适中。语句行数在50~100行左右。保持在一页纸之内,不超过500行。
7、设计功能可预测的模块,但要避免过分受限制的模块。(不能约束太多。)
8、软件包应满足设计约束和可移植性。
设计后的处理: 为模块写意处理说明(名称,位置,结构),一个接口说明,确定全局数据结构和局部数据结构,指出所有的设计约束和限制,进行概要设计的评审(依据概要说明书)。
六、数据设计及文件设计
(一)数据设计的原则
1、用于软件的系统化方法也适用于数据。
2、确定所有的数据结构和在其上施加的操作。
3、建立一个数据词典,并用来定义数据和软件的设计。
4、低层数据设计应推迟到设计的后期进行。
5、数据结构的表示只限于那些必须使用该数据结构内数据的模块才能知道。
6、建立一个存放有效数据结构及相关操作的库。
7、软设和程设应当支持抽象数据类型的定义和实现。
这7条适用于软工的定义阶段和开发阶段。
(二)文件设计:两个阶段:逻辑设计(主要是在概要设计阶段。实施),物理设计
1、整理必须的数据元素。2、分析数据间的关系。3、确定文件的逻辑设计。(前三个是逻辑设计)4、理解文件的特性。
5、确定文件的组织方式:顺序文件和直接存取文件(带关键字的和不带关键字的)。
索引顺序文件、分区文件(用于存放程序。)虚拟存储文件,倒排文件(按候选属性简历索引表)、
6、确定文件存储介质。7、确定文件记录格式。8、估算存取时间和存储容量。
七、过程设计:(详细设计)设计全部必要的详细部分。
三种工具:图形(用的较多)、表格、语言、