结构化详细设计

一、人机界面设计

1. 人机界面设计问题

  1. 系统响应时间
    从用户完成某控制动作,到软件给出预期响应。
    两个重要属性:长度易变性
    长度:
    过长,用户感到不安、沮丧。
    过短,迫使用户加快操作节奏,易导致出错。
    易变性:
    易变性指响应时间相对平均响应时间偏差,越低越好,否则会让用户误认为系统工作异常。
  2. 用户帮助措施
    手册联机帮助
    联机帮助:集成帮助和附加帮助。
    集成帮助设计在软件里面,附加帮助系统建成后加到软件中,前者可用性更强。
    请求帮助:帮助菜单,特殊功能键(F1),HELP命令。
    显示帮助信息:独立窗口、参考某个文档、屏幕固定位置作简短提示。
    组织帮助信息:
  • 平面结构,通过关键字访问
  • 层次结构,查更详细信息
  • 超文本结构
  1. 出错信息处理
  • 以用户可用理解术语;
  • 提供清楚、易理解报错信息(出错位置、原因);
  • 从错误中恢复的建设性意见;
  • 信息用颜色等在视觉上引人注目;
  • 可能造成负面后果。
  1. 命令交互
    建议保留命令交互方式:
  • 控制序列:ctrl + c (拷贝)、ctrl + h (帮助)、ctrl + p (打印)
  • 功能键:F1(帮助)
  • 键入命令
  • 命令宏机制:用户定义名字代表一个常用命令序列。

2. 人机界面设计指南

  1. 一般交互
  • 保持人机界面菜单选择、命令输入、数据显示风格一致;
  • 提供有意义信息反馈:双向通信;
  • 破坏性动作前要确认:删除、覆盖;
  • 允许取消大多数操作;
  • 减少两次操作之间必须的记忆量;
  • 提高对话、移动和思考的效率;
  • 允许犯错误:保护不受致命错误破坏;
  • 按功能对动作分类,设计屏幕布局;
  • 提供帮助措施;
  • 用简单的动词或动词短语作为命令名。
  1. 信息显示
  • 显示与当前工作有关信息;
  • 简单移动方式表示数据:图形、图表;
  • 使用一致标记、标准缩写和可预知颜色;
  • 产生有意义出错信息;
  • 使用模拟的方式显示信息等。
  1. 数据输入
  • 减少用户输入动作:鼠标选择、滑动标尺等;
  • 使当前不适用命令不起作用;
  • 交互灵活:保留各种输入方式;
  • 让用户控制交流;
  • 对所有输入都提供帮助;
  • 消除冗余输入:数据单位、整钱后键入.00、提供缺省值等。

二、过程设计

1. 过程设计任务

  • 确定模块算法
  • 确定模块使用数据结构
  • 确定模块接口(系统外部接口、用户界面、内部模块间接口细节、输入数据和输出数据)

2. 结构化程序设计

结构化程序设计技术是过程设计的关键技术

  • 经典定义:程序代码通过顺序、选择、循环三种控制结构连接,单入口单出口。
  • 扩展定义:可限制使用GOTO语句、DO_UNTIL和DO_CASE
  • 修正定义:LEAVE和BREAK,可从循环中转移出来。

3. 结构化程序设计工具

3.1 程序流程图

历史最悠久、使用最广泛的过程设计工具。

  1. 顺序型:几个连续的加工依次序排列
  2. 选择型:由某个判定的取值决定选择两个加工中一个。
  3. 当型循环型:当循环控制条件成立时,重复执行特定的加工。
  4. 直到型循环型:重复执行特定的加工,直到循环控制条件成立时。
  5. 多情况选择型:列出多种加工情况根据控制变量的取值,选择执行其一。

程序设计流图标准化图符

软件设计中逻辑架构如何设计_软件工程

软件设计中逻辑架构如何设计_数据_02

优点:

对控制流程描绘直观,便于初学者掌握。

缺点:

  1. 不是逐步求精的好工具,过早考虑控制流程,非整体结构;
  2. 用箭头代表控制流,程序员随意转移控制;
  3. 不易表示数据结构和调用关系。
3.2 N-S图

软件设计中逻辑架构如何设计_软件工程_03

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_04

特点:

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

软件设计中逻辑架构如何设计_数据_05

软件设计中逻辑架构如何设计_软件工程_06

优点:

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

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_07

3.4 判定表

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

四部分:

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

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_08

3.5 判定树

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

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_09

优点:形式简单,易看出含义,易于掌握和使用。

缺点:简洁性不如判定表,相同数据元素重复写多遍,越接近叶端重复次数越多。

3.6 过程设计语言

伪码,用正文形式表示数据和处理过程设计工具

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

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

4. 程序复杂度

McCabe方法

  1. 根据过程设计结果画出相应流图
    流图描述程序控制流,基本图形符号如下图所示。

流程图映射成流图

软件设计中逻辑架构如何设计_软件工程_10

符合条件下流图映射

软件设计中逻辑架构如何设计_控制流_11

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

软件设计中逻辑架构如何设计_控制流_12

软件设计中逻辑架构如何设计_数据_13

三、面向数据结构设计方法

数据结构既影响程序的结构也影响程序的处理过程,可从数据结构导出程序的处理过程,适合详细设计。

面向数据结构设计方法两种:Jacksom和Warnier方法。

1. Jackson图

描述数据结构:顺序、选择、重复。

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_14

改进:直线,选择和循环结束条件。

软件设计中逻辑架构如何设计_软件工程_15

软件设计中逻辑架构如何设计_软件设计中逻辑架构如何设计_16

2. Jackson方法步骤

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