详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”。
详细设计的结果基本上决定了最终的程序代码质量。
结构程序设计
- 经典的结构程序设计:只允许使用顺序、IF_THEN_ELSE型分支和DO_WHILE型循环这3种基本控制结构。
- 拓展的结构程序设计:除上述三种基本控制结构外,还允许使用DO_CASE型多分支结构和DO_UNTLT型循环结构。
- 修正的结构程序设计如果再允许使用LEAVE(或BREAK)结构。
人机界面设计
人机界面设计指南
一般交互指南
- 1.保持一致性
- 2.提供有意义的反馈
- 3.在执行有较大破坏性的动作之前要求用户确认
- 4.允许取消绝大多数操作
- 5.减少在两次之间必须记忆的值
- 6.提高对话、移动和思考的效率
- 7.允许犯错误
- 8.安功对动作分类,并据此设计屏幕布局
- 9.提供对用户工作内容敏感的帮助设施
- 10.用简单的动词或动词短语作为命令名
信息显示指南
- 1.只显示与当前工作内容有关的信息
- 2.不要用数据淹没用户(用图而不是用表)
- 3.使用一致的标记、标准的缩写和可预知的颜色
- 4.允许用户保持可视化的语境
- 5.产生有意义的出错信息
- 6.使用大小写、缩进和文本分组以帮助理解
- 7.使用窗口分隔不同类型的信息
- 8.使用“模拟”显示方式显示信息,以使信息更容易被用户获取(更有好的展示数据)
- 9.高效率的使用显示屏
数据输入指南
- 1.尽量减少用户的输入动作
- 2.保持信息显示和数据输入之间的一致性
- 3.允许用户自定义输入
- 4.交互应该是灵活的
- 5.使在当前动作语境中不适用的命令不起作用
- 6.让用户控制交互流
- 7.对所有输入动作都提供帮助
- 8.消除冗余的输入
过程设计的工具
程序流程图
描述过程设计的方法
优点:
对控制流程的描绘很直观,便于初学者掌握。
缺点:
- 诱使程序员过地考虑程序的控制流程,而不考虑程序的全局结构
- 用箭头代表控制流,可以随意转移控制
- 不易表示数据结构

盒图
又称为N-S图
特点:
- 1.功能域(一个特定控制结构的作用域)明确,可以从盒图上一眼看出来。
- 2.不可以任意转移控制
- 3.很容易确定局部和全程数据的作用域
- 4.很容易表现嵌套关系,也可以表示模块的层次结构

PAD图

判定表
清晰的表示复杂的条件组合与应做的动作之间的关系
判定表由四部分组成:左上为所有的条件,左下是所有可能的动作,右上是各种条件组合的一个矩阵,右下是每种条件组合相对应的动作。

比如第一列,从上面可以看到只要行李小于30KG所对应的值就都免费
比如第三列,从上面可以看到是国内乘客的头等舱并且是残乘客所以为两倍价格。
过程设计语言PDL

程序复杂程度的定量度量
评测详细设计阶段设计出的模块质量。
定量度量程序复杂程序的方法很有价值:把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量,定量度量的结果可以用来比较两个不同的设计或两个不同算法的优缺;程序的定量的复杂程度可以作为模块规模的精确限度。
计算程序复杂程度的两种方法:
- McCabe方法
- Halstead方法
McCabe方法
使用McCabe方法首先需要画出程序图,所谓程序图可以堪称是“退化了的”程序流程图。

计算环形复杂度的方法
根据图论,在一个强连通的有向图中线性无关的个数由下买你的公式给出:
V(G) = m - n + p
其中V(G)是有向图G中的环数,
- m是有向图G中的弧数
- n是有向图G中的结点数
- p是有向图G中分离部分的数目
强连通图就是从图中人一个结点触发都可以到达所有其他结点

环形复杂度的用途
程序中的环形复杂度取决于程序控制流的复杂度,也即是取决于程序结构的复杂程度。
实践证明,模块规模以V(G)<=10为宜,也就是说,V(G)=10是模块规模的更科学更精确的上限。
Halstead方法
它根据程序中运算符和操作数的总数来度量程序的复杂度。
程序的长度N为:
N = N1(运算符的总次数) + N2(操作数的总次数)
