1. 详细设计的基本概念
- 任务:详细设计的任务不是具体的编写代码。而是要设计出程序的蓝图。程序员将根据这个蓝图写出实际的代码。
- 考试判断题高频考点:详细设计是编码的依据。
- 与总体设计关系:总体设计(结构设计)确定系统由哪些模块组成及关系;详细设计(过程设计)确定每个模块的处理过程。总体设计与详细设计是全局和局部的关系。
2. 结构程序设计
- 经典定义:如果一个程序的代码块仅仅通过顺序、选择和重复三种基本控制结构进行链接,并且每个代码块只有一个入口和一个出口,则称程序是结构化的。
- 基本控制结构:
- 顺序 (A执行后执行B)
- 选择/分支 (根据条件执行A或B)
- 重复/循环 (根据条件重复执行A)
- 考试重点:记住这三种基本结构。
3. 人机界面设计 (Human-Computer Interface Design)
- 重要性:是接口设计的重要组成部分。对于交互式系统,人机界面设计、数据设计和体系结构设计与过程设计同等重要。用户能够直观感受到的就是界面。
- 包含的四个方面:
- 系统响应时间:从用户完成某个控制动作到系统给出响应的时间。
- 属性:长度(过长/过短都有弊端)、易变性(相对于平均响应时间的偏差,可能更重要)。
- 用户帮助设施:提供联机帮助使用户无需离开用户界面解决问题。
- 类型:集成的(一开始设计,对用户工作敏感)、附加的(系统建成后添加,能力有限,对用户操作不敏感)。
- 出错信息处理:交互系统给出的一些坏消息。
- 设计和编写时的注意事项 (属性):
- 用用户可以理解的术语描述问题 (直白)。
- 提供从错误中恢复的建设性意见 (帮助)。
- 指出错误可能导致的负面后果 (提示检查/解决)。
- 伴随听觉或视觉上的提示。
- 不能带有指责色彩 (中性陈述)。
- 设计和编写时的注意事项 (属性):
- 命令交互:用户和系统软件进行交互的方式 (如 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方法 (五步骤):
- 分析并确定输入/输出数据的逻辑关系,用JSON图描绘。
- 找出输入数据和输出数据之间的对应数据单元。
- 运用参数规则从描绘数据结构的JSON图导出描绘程序结构的JSON图。
- 列出所有条件,分配到程序结构图适当位置。
- 用伪码表示。
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。两种方法结果一致。