6.1 结构程序设计
定义:结构程序设计是尽可能少用go to语句的程序设计方法。最好仅在检测出错误时才使用go to语句,最好只使用向前的go to语句。
经典的结构程序设计:顺序,IF-THEN-ELSE, DO-WHILE,
6.2 人机界面设计
6.2.1 设计问题
- 系统响应时间
- 长度:时间过长,用户就会感到紧张,过短,加快用户操作节奏,可能会犯错。
- 易变性:系统的响应时间相对于平均响应时间的偏差。
- 用户帮助设施
常见的帮助设施可分为集成的和附加的两类
- 出错信息处理
(1)用用户可以到解的术语描述问题。
(2)提供有助于从错i吴中恢复的建设性意见。
(3)指出错误可能导致哪些负曲后果(例如,破坏数据文件)
(4)伴随着听觉或视觉的提示
(5)不能带,自指色彩,不能责怪用户
- 命令交互
(1)是否每个菜单选项都有对应的命令?
(2)采用何种命令形式?有3种选择:控制序列(例如,ctrl+P),功能键和输入命令。
(3)学习和记忆命冷的难度有多大?忘记了命令怎么办?
(4)用户是否可以定制或缩写命令。
在越来越多的应用软件屮,人机界面设计者提供了“命令宏机制”,
在理想的情况下,所有应用软件都有一致的命令使用方法。
6.2.2 设计过程
用户界面设计是一个迭代的过程,通常先创建设计模型,再用原型实现这个设计模型,并由用户实现
创建了用户界面的设计模型之后,以运用下述评估标准对设计进行早期复审。
(1)系统及其界面的规格说明.书的长度和复杂程度,预示了用户学习使用该系统所需要的工作量。
(2)命令或动作的数量、命令的平均参数个数或动作中单个操作的个数,预示了系统的交互时间和总体效率。
(3)设计模型中包含的动作、命令和系统状态的数量,预示了用户学习使用该系统时需要记忆的内容的多少。
(4)界面风格、帮助设施和出错处即协议,预示了屏面的复杂程度及用户接受该面的程度
6.2.3 人机界面设计指南
- 一般交互指南:
- 保持一致性
- 提供有意见的反馈
- 在执行有较大破快醒的动作之前要求用户确认
- 允许取消绝大数操作
- 减少在两次操作之间的。。
- 信息显示指南:
数据输入指南:
1.尽量减少用户的输入动作
2.保持信息显示和数据输入之间的一致性
3.允许用户自定义。。6.3过程设计的工具
6.3.1 程序流程图
程序流程图的缺点:
(1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。
(2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。
(3)程序流程图不易表示数据结构。6.3.2 盒图
又称N-S图
它有下述特点:
(1)功能域(即一个特定控制结构的作用域)明确,可以从 盒图上一眼就看出来。
(2)不可能任意转移控制。
(3)很容易确定局部和全程数据的作用域。
(4)很容易表现嵌套关系,也可以表示模块的层次结构。
6.3.3 PAD图(Problem analysis diagram)
(b)图上面是T,下面是F
PAD图的主要优点如下:
(1)使用表示结构化控制结构的PAD符号所设计出来的程序 必然是结构化程序。
(2)PAD图所描绘的程序结构十分清晰。
(3)用PAD图表现程序逻辑,易读、易懂、易记。
(4)容易将PAD图转换成高级语言源程序,这种转换可用软 件工具自动完成,从而可省去人工编码的工作,有利于提高 软件可靠性和软件生产率。
(5)即可用于表示程序逻辑,也可用于描绘数据结构。
(6)PAD图的符号支持自顶向下、逐步求精方法的使用。
6.3.4 判定表
判定表由4部分组成,
左上部列出所有条件
左下部是所有可能做的动作
右上部是表示各种条件组合一个矩阵
右下部是和每种条件组合相对应的动作
下面以行李托运费的算法为例说明判定表的组织方法。假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定表可以清楚地表示与上述每种条件组合相对应的计算行李费的算法,如表6.1所示。
6.3.5 判定树
6.3.6 过程设计语言
(PDL)也成伪码
关键字+自然语言
PDL有下述特点:
(1)关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点。如,if.fi或 end if等
(2)自然语言的自由语法,它描述处理特点。
(3)数据说明的手段。应该既包括简单的数据结构(例如纯量和数组),又包括复杂的数据结构(例如,链表或层次的数据 结构)
(4)模块定义和调用的技术,应该提供各种接口描述模式。
PDL的优点:
(1)可以作为注释直接插在源程序中间。
(2)可以使用普通的正文编辑程序或文字处理系统,很方便 地完成PDL的书写和编辑工作。
(3)已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码。
PDL的缺点是不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。
或者 闰年的判定
6.4 面向数据结构的设计方法
6.4.1 Jackson图
6.4.2 改进的Jackson图
6.4.3 Jackson法
Jackson结构程序设计方法基本上由下述5个步骤组成。
(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。
(2)找出输入数据结构和输出数据结构中有对应关系的数据单元。
(3)用下述3条规则从描绘数据结构的Jackson图导出描绘程序 结构的Jackson图。
①为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框
②根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。
③根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。
(4)列出所有操作和条件(包括分支条件和循环结 束条件),并且把它们分配到程序结构图的适当位置。
(5)用伪码表示程序。Jackson方法中使用的伪码和Jackson图是
例:一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。
6.5 程序复杂程度的定量度量
定量度量程序复杂程度的方法很有价值:
a)把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量;
b)定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;
c)程序的定量的复杂程度可以作为模块规模的精确限度。
6.5.1 McCabe方法
1.流图
McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。流图实质上是“退化了的”程序流程图,描绘程序的控制流程,不表现对数据的具体操作以及分支或循环的具体条件。
一个圆代表一条或多条语句;
1.
2.条件的判定
一个顺序结构可以合并一个结点;
- 只能给一个条件判定
流图中的箭头线称为边,代表控制流;
在流图中一条边必须终止于一个结点。
对于一个复合条件的判定框,必须分解成两个节点
2.计算环形复杂度的方法:
(1)流图中线性无关的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。(11-9+2)
(3)p+1,p为条件判定节点,看分支数为2的
由PDL翻译成的流图:
复合条件,就是在条件中包含了一个或多个布尔运算符(OR,AND,NAND,NOR):
3.环形复杂度的用途:
对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。
实践表明,模块规模以V(G)≤10为宜
6.5.2Halstead
根据程序中运算符和操作数的总数来度量程序的复杂程度。令N1为程序中运算符出现的总次数,N2为操作数出现的总次数, 程序长度N定义为:N = N1+N2。
详细设计完成之后,可以知道程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。Halstead给出预测程序长度的公式如下:
多次验证都表明,预测的长度H与实际长度N非常接近。Halstead还给出了预测程序中包含错误的个数的公式如下:
有人曾对从300条到12000条语句范围内的程序核实了上述公式,发现预测的错误 数与实际错误数相比误差在8%之内。
6.6本章小结
1.结构程序设计技术是进行详细设计的逻辑基础。 (概念)
2.人机界面设计必须重视。
3.过程设计是详细设计阶段完成的主要工作。
4.在开发有清楚的层次结构时可采用面向数据结构的设计方法完成设计过程设计。
5.使用环形复杂度可以定量度量程序的复杂程度。