软件工程-第六章-详细设计
6. 详细设计
6.1 结构程序设计
3种基本的控制结构是“顺序”、“选择”和“循环”。
6.2 人机界面设计
6.2.1 设计问题
- 系统相应时间
- 用户帮助设施
- 出错信息处理
- 命令交互
6.2.3 人机界面设计指南
- 一般交互指南
- 信息显示指南
- 数据输入指南
6.3 过程设计的工具
6.3.1 程序流程图
优点:
对控制流程的描绘直观,初学者很容易掌握。
缺点:
①程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构
②程序流程图中用箭头代表控制流 ,因此程序员不受任何约束,可以完全不顾结构程序设计的思想,随意转移控制
③程序流程图不易表示数据结构
6.3.2 盒图
又称 N-S 图,特点:
- 功能域(即一个特定控制结构的作用域)明确
- 不可能任意转移控制
- 很容易确定局部和全程数据的作用域
- 很容易表现嵌套关系,也可以表示模块的层次结构
6.3.3 PAD 图
问题分析图,使用二维树形结构的图来表示程序的控制流。
优点:
- 使用PAD符号设计出来必然是结构化程序
- PAD图描绘的程序结构十分清楚
- PAD图表现程序的逻辑,易读、易懂、易记
- 很容易将PAD图转化为高级语言程序
- 即可表示程序逻辑,也可表示数据结构
- PAD符号支持自动向下,逐步求精
6.3.4 判定表
当算法中含有多重嵌套的条件选择时,用判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。
优点:
- 能清晰表示复杂的条件组合与应做的动作之间的关系
缺点:
2. 判定表的含义不能一眼看出来
3. 当数据元素多于两个时,判定表的简洁程度下降
6.3.5 判定树
判定表变种
优点:
- 一眼看出其含义,易于掌握和使用
缺点:
- 简洁性不如判定表,数据元素需重复写多遍
- 判定树的分支次序对画出的判定树的简洁程度有较大影响
6.3.6 过程设计语言
过程设计语言(PDL):也称伪码,具有严格的关键字外部语法,用于定义控制结构和数据结构,内部语法灵活自由,适应各种工程项目。
其优点:
- 可作为注释直接插在源程序中间
- 可使用普通的正文编辑程序或文字处理系统完成PDL的书写和编辑
- 已有自动处理PDL的程序,可自动生成程序代码
其缺点:
- 不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单
6.4 面向数据结构的设计方法
Jackson 方法和 Warnier 方法是最著名的两个面向数据结构的设计方法。
6.4.1 Jackson 图
虽然程序中实际使用的数据结构种类繁多,但是它们的数据元素彼此间的逻辑关系却只有顺序、选择和重复3类。
6.4.3 Jackson 方法
6.5 程序复杂程度的定量度量
6.5.1 McCabe 方法
- 流图:
McCabe 方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。
在流图中用圆表示节点,一个圆代表一条或多条语句。
流图中的箭头线称为边,它和程序流图中的箭头线类似,代表控制流。
有边和结点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来的那个区域。
包含条件的结点称为判定节点。
- 计算环形复杂度的方法:
可以用下述3种方法中的任何一种来计算环形复杂度。
- 流图中线性无关区域数等于环形复杂度
- 流图G的环形复杂度
V(G)=E-N+2
,其中E是流图中边的条数,N是结点数 - 流图G的环形复杂度
V(G)=P+1
,其中P是流图中判定结点的数目
习题
- 假设只有 SEQUENCE 和 DO_ WHILE 两种控制结构,怎样利用它们完成 IF_THEN-ELSE 操作?
- 假设只允许使用 SEQUENCE 和 IF_THEN-ELSE 两种控制结构,怎样利用它们完成 DO_WHILE 操作?
- 为什么说它是非结构化的?