软件工程复试——六、详细设计

六、详细设计

详细设计的根本目标是确定怎样具体地实现所要求的系统。

结构化设计

定义:结构程序设计是尽可能少用GO TO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GOTO语句。

如果只允许使用顺序、IF-THEN-ELSE型分支和DO_WHILE型循环这三种基本控制结构则成为经典结构程序设计。

如果除了这三种基本结构之外还允许使用DO_CASE型和DO_Until型循环结构,则成为扩展的结构程序设计。

如果在允许使用LEAVE(BREAK)结构,则成为是修正的结构程序设计。

软件工程复试——六、详细设计_第1张图片

人机界面设计

在设计人机界面时,几乎总会遇到下面四个问题

系统响应时间、用户帮助设置、出错信息处理和命令交互。

  • 系统响应时间:从用户完成摸个控制动作到软件给出预期的响应的这段时间,主要是由长度和易变性两个属性构成,易变性是指系统响应时间相对于平均响应时间的偏差。

  • 用户帮助设施:一般分为集成的(集成在系统里的,一开始设计就在系统里)和附加的(后期添加到软件中的,比如说说明书之类的)两类。

  • 出错信息处理

  • 命令交互

用户界面设计是一个迭代的过程,通常先创建设计模型,再用原型实现这个设计模型,并由用户使用评估然后根据用户意见进行修改。

可以用下述评估标准对设计进行早期复审:

  • 系统及其界面的规格说明书的长度和复杂程度,预示了用户学习使用该系统时需要的工作量
  • 命令或动作的数量、命令的平均参数个数或动作中单个操作的个数,预示了交互时间和总体效率
  • 设计模型中包含的动作、命令和系统状态的数量,预示了用户学习使用该系统时需要记忆的内容是多少
  • 界面风格、帮助措施和出错处理协议,预示了界面的复杂程度及用户接受该界面的程度

设计指南:一般设计指南,信息显示指南,数据输入指南

过程设计工具

程序流程图

软件工程复试——六、详细设计_第2张图片

优点:
对控制流程描绘直观,便于初学者掌握。
缺点:
(1)不是逐步求精好工具,过早考虑控制流程,非整体结构;
(2)用箭头代表控制流,程序员随意转移控制;
(3)不易表示数据结构和调用关系。

盒图(NS图)

他有以下特点

(1)功能域(一特定控制结构的作用域)明确;
(2)不可能任意转移控制;
(3)容易确定局部和全程数据的作用域;
(4)容易表现嵌套关系,也可表示模块的层次结构。

PAD图

PAD是问题分析图的英文缩写。

下面是PAD的图符。

软件工程复试——六、详细设计_第3张图片

优点:
(1)使用PAD图设计的程序必然是结构化程序;
(2)PAD图描绘的程序结构十分清晰;
(3)用PAD图表现程序逻辑,易读、易懂、易记;
(4)容易将PAD图转换成高级语言源程序;
(5)支持自顶向下逐步求精。

判定表

判定表能清晰表示复杂的条件组合与应做动作间对应关系。

  • 左上部列出所有条件;
  • 左下部所有可能做的动作;
  • 右上部表示各种条件组合的一矩阵;
  • 右下部是和每种条件组合相对应的动作

下图是一个例子

软件工程复试——六、详细设计_第4张图片

判定树

判定表变种,表示复杂条件组合与应做动作间对应关系。

软件工程复试——六、详细设计_第5张图片

过程设计语言(PDL)

PDL也称伪代码。

pdl具有以下特点:

PDL具有严格关键字外部语法,定义控制结构和数据结构;

PDL表示实际操作和条件的内部语法灵活自由,适应各种工程项目需要。

面向数据结构的设计方法

Jackson方法和Warnier方法是著名的面向数据结构的设计方法。

这里先介绍Jackson方法的工具—Jackson图

jackson图

软件工程复试——六、详细设计_第6张图片

改进后的Jackson图

软件工程复试——六、详细设计_第7张图片
软件工程复试——六、详细设计_第8张图片

在线上多了判断条件。

Jackson方法步骤:
1.确定输入数据和输出数据逻辑结构,用Jackson图表达;
2.确定输入结构和输出结构中有对应关系(因果)的单元;
3.描绘数据结构的Jackson图导出描绘程序结构Jackson图;
4.列出所有操作和条件,分配到Jackson图中;
5.用伪码表示。

大家可以结合133页例子更好的理解Jackson方法。

程序复杂程度的度量

现在使用比较广泛的是McCabe方法和Halstead方法

McCabe方法

1、画流图

流图描述程序控制流,基本图形符号如下图所示。
软件工程复试——六、详细设计_第9张图片

可以将之前的程序流程图映射为相应流图,下面举个例子!

软件工程复试——六、详细设计_第10张图片

2.计算流图的环形复杂度

三种方法:

  • V(G)=区域数
  • V(G)=E-N+2 (E为流图中边数,N为流图中节点数)
  • V(G)=P+1 ( P为判定点数)

上图的环形复杂度是4

程序的环形复杂度取决于程序控制流的复杂度,即取决于程序结构的复杂程度,当程序内分支数或循环个数增加时,环形复杂度也随之增加。

一般来说环形复杂度《=10.

halstead方法(了解就行了吧应该)

halstead度量方法不仅仅度量了程序长度,还描述了程序的最小实现和实际实现之间的关系,并据此阐释程序语言的等级高低。它以程序中出现的操作符和操作数为计数对象,以它们的出现次数作为计数目标来测算程序容量和工作量。

设 n1 表示程序中不同的操作符个数,n2 表示程序中不同的操作数个数,N1 表示程序中出现的操作符总数,N2表示程序中出现的操作数总数。

程序长度N=N1+N2

以 N^ 表示程序的预测长度 Calculated program length: N^ = n1 log2 n1 + n2 log2 n2

课后题

3、程序流程图
软件工程复试——六、详细设计_第11张图片

盒图
软件工程复试——六、详细设计_第12张图片

4、(1)因为程序的循环控制结构居然有两个出口?

​ (2)软件工程复试——六、详细设计_第13张图片

(3)

软件工程复试——六、详细设计_第14张图片

你可能感兴趣的:(考研复试)