第6章 详细设计
6.1 结构程序设计
实际上用顺序结构和循环结构(又称DO-WHILE结构)完全可以实现选择结构(又称IF-THEN-ELSE结构) ,因此,理论上最基本的控制结构只有两种。
1968年Dijkstra再次建议从一切高级语言中取消GO TO语句,只使用3种基本控制结构写程序。学界认识到不是简单地去掉GO TO 语句的问题,而是要创立一种新的程序设计思想、方法和风格。
1971年IBM公司在纽约时报信息库管理系统的设计中成功地使用了结构程序设计技术
1972年IBM公司的Mills进一步提出,程序应该只有一个入口和一个出口,补充了结构程序设计的规则。
结构程序设计经典定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
结构程序设计更全面的定义:结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。
如果只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这3种基本控制结构,则称为经典的结构程序设计;
如果除了上述3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构,则称为扩展的结构程序设计;
如果再允许使用LEAVE(或BREAK)结构,则称为修正的结构程序设计。
6.2 人机界面设计
6.2.1 设计问题
6.2.2.设计过程
6.2.3 人机界面设计指南
6.3 过程设计的工具
6.3.1 程序流程图
总的趋势是越来越多的人不再使用程序流程图了。
程序流程图的主要缺点如下。
(1) 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
(2) 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
(3) 程序流程图不易表示数据结构。
6.3.2 盒图
6.3.3 PAD图
PAD图的主要优点如下:
(1) 使用表示结构化控制结构的PAD符号所设计出来的程序
必然是结构化程序。
(2) PAD图所描绘的程序结构十分清晰。
(3) 用PAD图表现程序逻辑,易读、易懂、易记。
(4) 容易将PAD图转换成高级语言源程序,这种转换可 用软
件工具自动完成,从而可省去人工编码的工作,有利于提高
软件可靠性和软件生产率。
(5) 即可用于表示程序逻辑,也可用于描绘数据结构。
(6) PAD图的符号支持自顶向下、逐步求精方法的使用。
6.3.4 判定表
6.3.5 判定树
6.3.6 过程设计语言
过程设计语言(PDL)也称为伪码。是用正文形式表示数据和处理过程的设计工具。
PDL有下述特点:
(1)关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点。如,if…fi(或endif)等
(2) 自然语言的自由语法,它描述处理特点。
(3) 数据说明的手段。应该既包括简单的数据结构(例如纯量和数组),又包括复杂的数据结构(例如,链表或层次的数据结构)。
(4) 模块定义和调用的技术,应该提供各种接口描述模式。
PDL有下述优点:
- 可以作为注释直接插在源程序中间。
- 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
- 已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码。
PDL的缺点是不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。
6.4 面向数据结构的设计方法
6.4.1 Jackson图
6.4.2 改进的Jackson图
6.4.3 Jackson法
下面结合一个具体例子进一步说明Jackson结构程序设计方法。
例:一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。
6.5 程序复杂程度的定量度量
定量度量程序复杂程度的方法很有价值:
- 把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量,
- 定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;
- 程序的定量的复杂程度可以作为模块规模的精确限度。
6.5.1 McCabe方法
2. Halstead方法
根据程序中运算符和操作数的总数来度量程序的复杂程度。 令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为
程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。Halstead给出预测程序长度的公式如下:
多次验证都表明,预测的长度H与实际长度N非常接近。
Halstead还给出了预测程序中包含错误的个数的公式如下:
本章小结
1.结构程序设计技术是进行详细设计的逻辑基础。
2.人机界面设计必须重视。
3.过程设计是详细设计阶段完成的主要工作。
4.在开发有清楚的层次结构时可采用面向数据结构的设计方法完成设计过程设计。
5.使用环形复杂度可以定量度量程序的复杂程度。