0%

第六章 详细设计

1. 详细设计的基本概念

  • 任务:详细设计的任务不是具体的编写代码。而是要设计出程序的蓝图。程序员将根据这个蓝图写出实际的代码。
    • 考试判断题高频考点:详细设计是编码的依据
  • 与总体设计关系:总体设计(结构设计)确定系统由哪些模块组成及关系;详细设计(过程设计)确定每个模块的处理过程。总体设计与详细设计是全局局部的关系。

2. 结构程序设计

  • 经典定义:如果一个程序的代码块仅仅通过顺序选择重复三种基本控制结构进行链接,并且每个代码块只有一个入口和一个出口,则称程序是结构化的。
  • 基本控制结构
    • 顺序 (A执行后执行B)
    • 选择/分支 (根据条件执行A或B)
    • 重复/循环 (根据条件重复执行A)
  • 考试重点:记住这三种基本结构。

3. 人机界面设计 (Human-Computer Interface Design)

  • 重要性:是接口设计的重要组成部分。对于交互式系统,人机界面设计、数据设计和体系结构设计与过程设计同等重要。用户能够直观感受到的就是界面。
  • 包含的四个方面:
    1. 系统响应时间:从用户完成某个控制动作到系统给出响应的时间。
      • 属性:长度(过长/过短都有弊端)、易变性(相对于平均响应时间的偏差,可能更重要)。
    2. 用户帮助设施:提供联机帮助使用户无需离开用户界面解决问题。
      • 类型:集成的(一开始设计,对用户工作敏感)、附加的(系统建成后添加,能力有限,对用户操作不敏感)。
    3. 出错信息处理:交互系统给出的一些坏消息。
      • 设计和编写时的注意事项 (属性):
        • 用用户可以理解的术语描述问题 (直白)。
        • 提供从错误中恢复的建设性意见 (帮助)。
        • 指出错误可能导致的负面后果 (提示检查/解决)。
        • 伴随听觉或视觉上的提示。
        • 不能带有指责色彩 (中性陈述)。
    4. 命令交互:用户和系统软件进行交互的方式 (如 CTRL+A/C/V)。
      • 理想情况:所有应用软件使用一致的命令方式。
  • 设计过程:是一个迭代的过程。用户评估和试用 -> 根据修改意见生成新版本 -> 循环直到用户满意。
  • 评估标准 (早期复审):
    • 规格说明书的长度/复杂程度 (预示用户学习工作量)。
    • 命令/动作数量、参数个数、单个操作个数 (预示交互时间/效率)。
    • 设计模型包含的动作/命令、系统状态数量 (预示用户需要记忆的内容)。
    • 界面风格、帮助设施、出错处理协议 (预示界面复杂程度/用户接受程度)。
  • 设计指南:
    • 一般交互指南 (全局性):
      • 保持一致性 (菜单、命令、显示等风格一致)。
      • 提供有意义的反馈 (视觉/听觉双向通信)。
      • 执行有较大破坏动作前要求用户确认
      • 允许取消绝大多数操作
      • 减少两次操作之间必须记忆的信息量 (如短验证码).
      • 提高对话/思考效率 (减少按键/鼠标移动)。
      • 允许犯错 (系统有容错能力,不是非常脆弱)。
      • 按功能对动作进行分类
      • 提供对用户工作内容敏感的帮助设施
      • 使用简单的动词或动词短语作为命令名。
    • 信息显示指南:
      • 只显示与当前工作内容相关的。
      • 不要用数据研磨用户 (用图形、表格、图表等易于吸收的方式表示)。
      • 使用一致的标记、标准缩写和可预知的颜色.
      • 允许用户保持可视化语境 (如图片放缩后仍能看到原始大小).
      • 产生有意义的出错信息.
      • 使用大小写、缩进、文本分组方式帮助理解。
      • 使用窗口分割不同类型的信息。
      • 模拟显示方式使信息易提取 (如电池颜色表示电量)。
      • 高效率使用显示屏。
    • 数据输入指南:
      • 尽量减少用户的输入动作 (减少点击次数,用划标尺等)。
      • 保持信息显示与数据输入的一致性
      • 允许用户自定义输入
      • 交互方式应灵活并可调节 (鼠标、键盘、语音等)。
      • 在当前动作中不适用的命令不起作用
      • 让用户控制交流流。
      • 对所有的输入动作都提供帮助
      • 消除冗余输入 (设置默认值)。

4. 过程设计工具

  • 第六章考试考察最多的位置。重点掌握文字上的考点 (优缺点,特点)。
  • 程序流程图 (Program Flowchart):
    • 优点:很直观,便于初学者掌握。
    • 缺点 (高频考点)
      • 本质上不是逐步求精工具,诱使程序员过早考虑控制流程。
      • 用箭头代表控制流,程序员不受约束,可以随意转移控制 (违背结构程序设计精神)。
      • 不易表示数据结构
  • 盒图 (N-S Chart / NS图):
    • 特点
      • 功能块明确,一眼看出
      • 不可能任意转移控制。
      • 容易确定局部和全局数据的作用域。
      • 容易表示嵌套关系,也可表示模块的层次结构。
  • PAD图 (Problem Analysis Diagram):
    • 优点
      • 使用结构化程序设计符号,设计的程序必然是结构化的
      • 描绘的程序结构非常清晰
      • 表示程序逻辑易读易懂易记。
      • 容易转化为高级语言
      • 用于表示程序逻辑,也可表示数据结构
      • 支持自顶向下逐步求精
  • 判定表和判定树 (Decision Table & Decision Tree):
    • 共同点:都能表示复杂的条件组合与应做动作之间的对应关系。
    • 判定表优点:可以简洁又无歧义地描述处理规则。
    • 判定表缺点:很难作为通用设计工具,难以同时表示顺序和重复等处理特性。
    • 判定树优点:简单到不需要解释。
    • 判定树缺点:简洁性不如判定表,同一元素同一值在树的叶端可能重复次数多。
  • 过程设计语言 (PDL / 伪码):
    • 正文形式处理数据和处理过程的设计工具。常用在研究生论文中描述算法改进。
    • 特点:关键字固定语法、自然语言自由语法、数据说明手段。
    • 优点
      • 可作为注释直接插入到程序中。
      • 可以使用普通文本编辑器或文字处理系统编写 (方便)。
      • 已有自动处理PDL的程序,可转换为程序代码。
    • 缺点
      • 与图形工具相比欠缺直观性
      • 描述复杂条件组合不如判定表和判定树简洁。

5. 面向数据结构的设计方法

  • 通常也称作结构化设计方法,基于数据流设计软件结构。
  • JASON图 (JSON图):
    • 描绘的是数据元素彼此之间的逻辑关系 (第三章层次方框图和JASON图表示组成关系,与层次图/结构图表示调用关系不同)。
    • 表示的三种逻辑关系:顺序选择重复
    • 优点:便于表示层次结构,形象直观,可读性好。既能表示数据结构,也能表示程序结构
    • 缺点:表示选择或重复结构时,选择条件或循环条件不能直接在图上表示,影响表达能力且不易转换为程序。框间连线为斜线,不宜在行式打印机上输出。
  • JASON方法 (五步骤):
    1. 分析并确定输入/输出数据的逻辑关系,用JSON图描绘。
    2. 找出输入数据和输出数据之间的对应数据单元。
    3. 运用参数规则从描绘数据结构的JSON图导出描绘程序结构的JSON图。
    4. 列出所有条件,分配到程序结构图适当位置。
    5. 用伪码表示。

6. 程序复杂程度的定量度量

  • 价值/目的:
    • 估算软件中错误的数量以及软件开发所需的工作量
    • 用来比较两个设计或不同算法的优劣
    • 作为模块规模的精确限度
  • McCabe方法 (麦克笔方法):

    • 流图 (Flow Graph):退化的程序流程图,仅仅描绘程序的控制流程。不表现数据的具体操作以及分支/循环的具体条件。
    • 环形复杂度 (Cyclomatic Complexity) - V(G):

      • 标志程序逻辑复杂度的定量尺度 。
      • 计算方法 (三种):
        • V(G) = P + 1:P为判定节点的数目 (节点有 >1 个分支/路径)。
        • V(G) = 封闭区域 + 1 (自创方法)。
        • V(G) = E - N + 2
      • 示例:图B,判定节点为1, 3, 6 (都有两个分支),P=3。V(G) = 3 + 1 = 4。图中的封闭区域有3个 (绿色457A6,红色2457A7B3,1237B),V(G) = 3 + 1 = 4。两种方法结果一致。

      image-20250602000805460