详细设计的根本目标是确定怎样具体地实现所要求的系统。
定义:结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GOTO语句。
如果只允许使用顺序、IF-THEN-ELSE型分支和DO_WHILE型循环这三种基本控制结构则成为经典结构程序设计。
如果除了这三种基本结构之外还允许使用DO_CASE型和DO_Until型循环结构,则成为扩展的结构程序设计。
如果在允许使用LEAVE(BREAK)结构,则成为是修正的结构程序设计。
在设计人机界面时,几乎总会遇到下面四个问题
系统响应时间、用户帮助设置、出错信息处理和命令交互。
系统响应时间:从用户完成摸个控制动作到软件给出预期的响应的这段时间,主要是由长度和易变性两个属性构成,易变性是指系统响应时间相对于平均响应时间的偏差。
用户帮助设施:一般分为集成的(集成在系统里的,一开始设计就在系统里)和附加的(后期添加到软件中的,比如说说明书之类的)两类。
出错信息处理
命令交互
用户界面设计是一个迭代的过程,通常先创建设计模型,再用原型实现这个设计模型,并由用户使用评估然后根据用户意见进行修改。
可以用下述评估标准对设计进行早期复审:
设计指南:一般设计指南,信息显示指南,数据输入指南
优点:
对控制流程描绘直观,便于初学者掌握。
缺点:
(1)不是逐步求精好工具,过早考虑控制流程,非整体结构;
(2)用箭头代表控制流,程序员随意转移控制;
(3)不易表示数据结构和调用关系。
他有以下特点
(1)功能域(一特定控制结构的作用域)明确;
(2)不可能任意转移控制;
(3)容易确定局部和全程数据的作用域;
(4)容易表现嵌套关系,也可表示模块的层次结构。
PAD是问题分析图的英文缩写。
下面是PAD的图符。
优点:
(1)使用PAD图设计的程序必然是结构化程序;
(2)PAD图描绘的程序结构十分清晰;
(3)用PAD图表现程序逻辑,易读、易懂、易记;
(4)容易将PAD图转换成高级语言源程序;
(5)支持自顶向下逐步求精。
判定表能清晰表示复杂的条件组合与应做动作间对应关系。
下图是一个例子
判定表变种,表示复杂条件组合与应做动作间对应关系。
PDL也称伪代码。
pdl具有以下特点:
PDL具有严格关键字外部语法,定义控制结构和数据结构;
PDL表示实际操作和条件的内部语法灵活自由,适应各种工程项目需要。
Jackson方法和Warnier方法是著名的面向数据结构的设计方法。
这里先介绍Jackson方法的工具—Jackson图
jackson图
改进后的Jackson图
在线上多了判断条件。
Jackson方法步骤:
1.确定输入数据和输出数据逻辑结构,用Jackson图表达;
2.确定输入结构和输出结构中有对应关系(因果)的单元;
3.描绘数据结构的Jackson图导出描绘程序结构Jackson图;
4.列出所有操作和条件,分配到Jackson图中;
5.用伪码表示。
大家可以结合133页例子更好的理解Jackson方法。
现在使用比较广泛的是McCabe方法和Halstead方法
1、画流图
可以将之前的程序流程图映射为相应流图,下面举个例子!
2.计算流图的环形复杂度
三种方法:
上图的环形复杂度是4
程序的环形复杂度取决于程序控制流的复杂度,即取决于程序结构的复杂程度,当程序内分支数或循环个数增加时,环形复杂度也随之增加。
一般来说环形复杂度《=10.
halstead度量方法不仅仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐释程序语言的等级高低。它以程序中出现的操作符和操作数为计数对象,以它们的出现次数作为计数目标来测算程序容量和工作量。
设 n1 表示程序中不同的操作符个数,n2 表示程序中不同的操作数个数,N1 表示程序中出现的操作符总数,N2表示程序中出现的操作数总数。
程序长度N=N1+N2
以 N^ 表示程序的预测长度 Calculated program length: N^ = n1 log2 n1 + n2 log2 n2
4、(1)因为程序的循环控制结构居然有两个出口?
(3)