第 3 周|主打科目:案例分析第 1 题(必做,必须稳拿)|对应知识域:系统分析与设计(SA/SD)、软件工程|主打基本问题:Q1(对需求做一致性检验)|本阶段产出:分层 DFD(上下文图 + 1 层图)+ 数据字典
项目宪法见 00-课程总纲.md;案例选做策略与”第 1 题必做”原则见 02-考点地图.md 第二节。
一、情境开场(Hook)
你把画好的第一版流程图摊在会议室桌上,准备讲半小时。结果三分钟就被打断了。
生产部长指着图上一个方框问:”这个’质量异常判定’是谁干的?是系统自动判,还是质检员判?”你说”系统”。他立刻摇头:”不可能。同样的参数,A 班判合格,B 班判不合格——这不是规则问题,是经验问题,机器判不了。”你忽然意识到,你画的那张图里,有一个加工既没有明确的输入,也没有明确的输出规则——你默认了”异常”是系统自己知道的东西。
质量部长接着指出第二处:”你的图上,检验结果从’质检员’直接进了’检验记录表’,中间没有加工。那谁来验证这个数据?没经过校验就入库的数据,追溯链条是不可信的。”
设备部长没看图,只问一句:”你这张图上,’设备状态’存在哪儿?我那 180 台设备里有 46 台夜里没有网络,采上来的数据是先落本地还是直接丢了?”——你在图上根本没画这个分支。
散会后你重新审视那张图,发现真正的问题不是画错了三条线,而是:你画的不是系统,是你脑子里想象的那个理想流程。 加工没有编号、数据流没有命名、存储与实体之间直接连线、有的加工只有输入没有输出——这些在纸面上看不出来,但落到代码里就是黑洞和奇迹。
于是本周的问题来了:在需求还没被写对的情况下,你凭什么保证你画出来的这张图,和用户心里的那件事是同一件? 数据流图就是回答这个问题的工具——它不画控制、不画实物、不画时序,只画数据在哪里被加工。
二、为什么学这一周(Where & Why)
- DFD 四元素与画图硬规则:综合知识 3–5 题,几乎每年必考”下列 DFD 中正确的是”或”图中有几处错误”。这是纯规则题,把 5 条硬规则背熟就是白送的分。
- 分层 DFD 与父子图平衡:综合知识 2–3 题,且是案例第 1 题”补充缺失数据流”的唯一解题方法。数据守恒是第 1 题的核心采分点,通常值 6–10 分。
- 数据字典的符号与条目类型:综合知识 2–3 题,案例常要求”用数据字典定义某条数据流”(约 5 分)。
=、+、[|]、{}、()五个符号必须会用会认。 - 加工逻辑的三种描述工具:综合知识 2–3 题,案例”某加工逻辑复杂,应选哪种工具”是固定问法。判定表与判定树的适用边界年年考。
- 耦合与内聚的七级排序:综合知识每年必考 1–2 题,是本章性价比最高的死记硬背点;案例”模块划分不合理”也要求用这两个术语说明。
- 第 1 题(必做)的建模套路:直接决定案例能否稳拿 20+ 分。按
02-考点地图.md,第 1 题是可以练到几乎不错的一题;放弃它,你就要在剩下 4 题里多拿一题的分,难度翻倍。
三、核心讲义(Equip)
3.1 DFD 的四种元素与两种符号体系
定义:数据流图(Data Flow Diagram, DFD)从数据传递与加工的角度,图形化刻画系统的逻辑功能、数据在系统内的逻辑流向与逻辑变换。它是逻辑模型——不描述物理实现、不描述控制流、不描述时序。
| 元素 | 含义 | Gane-Sarson 符号 | Yourdon 符号 | 命名规则 |
|---|---|---|---|---|
| 外部实体(External Entity / Source-Sink) | 系统之外的人、组织或其他系统,数据的源点或终点 | 矩形(带阴影) | 正方形 | 用名词:”质检员””MES 系统” |
| 加工 / 处理(Process) | 对数据进行的变换,即”做什么” | 圆角矩形 | 圆 / 椭圆 | 用动宾短语:”生成追溯报告”;禁止”处理数据”这类空词 |
| 数据流(Data Flow) | 一组成分固定的数据的流向 | 带箭头的直线 | 同 | 用名词:”报工单”;禁止无名数据流 |
| 数据存储(Data Store / File) | 暂存或持久保存的数据,”静止”的数据 | 开口矩形(右端开口) | 两条平行线 | 用名词(表名):”检验记录表” |
为什么需要它:四元素的形状与命名规则是考试第一道门槛。把”加工”画成矩形、把”外部实体”画成圆形——符号错了,整题采分点全部落空。
记忆口诀:实体是方框、加工是圆角、存储是开口、流是箭头线;命名上”加工动宾、其余名词“。
真题级短例子:题目给一张图问”共有几处错误”。四类名错:① 加工命名”数据处理”(空泛);② 数据流线上没写名字;③ 外部实体命名”录入”(动词);④ 数据存储命名”存储”(空泛)。凡命名空泛,一律算错。
3.2 画图硬规则:五条铁律 + 三条补充
| # | 规则 | 违反的症状 | 为什么 |
|---|---|---|---|
| 1 | 数据流的两个端点中,至少有一个必须是加工 | 实体↔实体、存储↔存储、实体↔存储 直接连线 | 数据只有经加工才会变化;不经加工的数据移动是货物搬运,不是信息处理 |
| 2 | 加工必须有输入,也必须有输出 | 只有输入 = 黑洞(Black Hole);只有输出 = 奇迹(Miracle) | 无输出的加工不产生价值;无输入的加工凭空造数据 |
| 3 | 父子图必须保持平衡(数据守恒) | 父图某加工有输入流 A,子图中找不到 A | 分解不改变接口,只展开内部 |
| 4 | 每个加工有唯一编号,子图编号继承父图 | 同一图上有两个”加工 2” | 编号是追溯与平衡校验的索引 |
| 5 | 数据流不表示控制流、不表示实物、不表示触发条件 | 画”当库存不足时触发采购” | 那是状态图与控制流的事;DFD 只答”数据去哪、被谁加工” |
三条补充规则:① 同一条数据流不能重复出现表示不同内容,同名数据流必须是同一数据;② 一条数据流可以流向多个加工(同一份数据被多方使用,合法的”分支”),但不能把一份数据拆成两条不同的数据流;③ 加工分解粒度以 3–7 个子加工为宜(7±2 原则),只分解出 1 个子加工等于没分解。
判定步骤(拿到 DFD 找错误的标准扫描顺序):① 扫元素——四元素符号与命名是否规范,外部实体是否与系统有交互;② 扫规则 1——有无实体↔实体、存储↔存储、实体↔存储 直连;③ 扫规则 2——逐个数加工的输入输出流,找黑洞与奇迹;④ 扫规则 3——父图与子图逐条比对,找不平衡;⑤ 扫规则 5——有无混入控制流、实物(物料)流。
真题级短例子:”某 DFD 中’客户’与’订单表’之间有一条从客户直接指向订单表的数据流。”——违反规则 1,必须在中间插入加工(如”登记订单”)。
3.3 分层 DFD:从上下文图到二级分解
定义:分层 DFD(Hierarchical DFD)自顶向下逐层分解,把复杂系统化为可理解的若干层。
| 层级 | 名称 | 内容 | 本项目示例 |
|---|---|---|---|
| 顶层 | 上下文图 / 语境图(Context Diagram) | 只有 1 个加工代表整个系统,周边是全部外部实体 | 加工”生产质量一体化系统”;实体:生产部/质检员/设备部/现有 MES/ERP |
| 第一层 | 1 层图(部分教材称 0 层图) | 把顶层加工分解为若干主要加工 | 1 采集报工数据 / 2 检验管理 / 3 追溯查询 / 4 设备状态监控 / 5 报表与预警 |
| 第二层 | 2 层图 | 对 1 层中的某个复杂加工再分解 | 加工 3 分解为 3.1 解析追溯请求 / 3.2 检索批次链条 / 3.3 组装追溯报告 |
术语说明:软考不同教材对”顶层图 / 0 层图 / 1 层图”叫法混用。考试时以图上编号和加工数量为准:只有一个加工的那层 = 上下文图 / 顶层图;其余按编号
1、1.1判断层级,不要在名词上纠结。
编号规则:顶层加工编号通常为 0;1 层为 1, 2, 3 …;2 层为 1.1, 1.2 …(子图编号 = 父加工编号 + “.” + 序号)。
父子图平衡(数据守恒)校验五步:① 取父图待分解的加工 P,列出其全部输入与输出数据流;② 打开 P 的子图,列出所有子加工与外部(外部实体、数据存储)之间的数据流;③ 逐个比对——子图对外的数据流集合应等于父图 P 的数据流集合(数量与名称都要对);④ 父图 P 有输入 A 而子图没有 → 子图缺失数据流 A;反之 → 子图多出无来源的流;⑤ 特例:若父图 P 与某数据存储之间有流,子图中该存储被多个子加工共享,仍按集合相等校验——共享存储不违反平衡。
本项目上下文图的外部实体清单(S03 交付物直接用):生产部(工段长)、操作工(报工)、质检员、设备部、ERP 系统、现有 MES 系统、质量监管平台。注意:现有 MES 与 ERP 是外部实体,不是本系统的加工。
3.4 数据字典:符号、条目与加工逻辑
定义:数据字典(Data Dictionary, DD)是关于 DFD 中所有元素的定义集合,与 DFD 配合构成结构化分析的核心模型——DFD 画结构,数据字典写语义。
五个符号(必背):
| 符号 | 含义 | 例子 | 说明 |
|---|---|---|---|
= |
定义为 / 由…组成 | 报工单 = 工单号 + 工位号 + 数量 |
左边条目名,右边组成 |
+ |
与(顺序连接) | 订单 = 客户信息 + 商品清单 + 金额 |
各成分按顺序出现 |
| `[ | ]` | 或(选择其一) | `检验结论 = [合格 |
{ } |
重复 | 订单明细 = {商品行}1-50 |
上下限写在右下 |
( ) |
可选 | 报工单 = 工单号 + (备注) |
可出现 0 或 1 次 |
@ |
基本数据元素(不可再分) | 工单号 = @ |
部分教材使用 |
条目类型(数据字典登记什么):① 数据元素(最小单位,定义名称、类型、长度、取值范围);② 数据结构(若干数据元素/结构的组合);③ 数据流(来源、去向、组成、流量,如”报工单:操作工 → 加工 1,峰值 300 条/分钟”);④ 数据存储(组成、关键字、存取频率、数据量);⑤ 加工逻辑(描述加工怎么做);⑥ 外部实体通常只登记名称与说明。
真题级短例子——用数据字典定义”追溯请求”:追溯请求 = 批次号 + 追溯方向 + (追溯深度);追溯方向 = [正向|反向|双向];追溯深度 = [1|2|3|全部];批次号 = 4{数字}4-12(4 到 12 位数字)。
3.5 加工逻辑的三种描述工具(年年考边界)
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 结构化语言(Structured Language) | 含顺序、选择、循环的一般处理逻辑 | 简洁、可嵌套、与代码接近,无组合爆炸 | 条件组合多时嵌套深、可读性差 |
| 判定表(Decision Table) | 条件多、条件组合多、动作复杂,需穷举验证有无遗漏 | 列出全部组合,易发现逻辑漏洞;可化简 | 条件超 4 个时表格膨胀 |
| 判定树(Decision Tree) | 条件较少(一般 ≤ 4)、每条件取值少、判断顺序清晰 | 直观、易读、易与业务方沟通 | 组合多时树枝爆炸;不易表达循环 |
判定表四区结构:条件桩(左上,列全部条件)、条件项(右上,各条件取值组合,每列一种组合)、动作桩(左下,列全部动作)、动作项(右下,每组合执行哪些动作,打 ×)。化简规则:动作项完全相同、且条件项中仅有一个条件取值不同的两列可合并,合并后该条件记为 —(无关)。
本项目判定表实例(质量异常等级判定,为便于演示化简,此处仅列”参数超差、客户等级”两个条件):
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| 参数超差 | Y | Y | N | N |
| 客户等级为战略客户 | Y | N | Y | N |
| 放行 | × | × | ||
| 冻结批次并通知质量部长 | × | × | ||
| 记录留痕待评审 | × |
化简演示:第 1、2 列动作项完全相同(都是”冻结批次并通知质量部长”),且条件项中仅”客户等级”一个条件取值不同 → 可合并为一列,合并后该条件记为 —:**”参数超差 = Y,客户等级 = — → 冻结批次并通知质量部长”。
反之,第 3、4 列虽然都有”放行”,但第 3 列还执行”记录留痕待评审”、第 4 列不执行,动作项并不完全相同,故不能合并**——化简必须以”动作项完全相同、且仅一个条件取值不同”为前提,缺一不可。
注意:问”某加工含 6 个条件、每条件 2 种取值,要求不遗漏任何组合”→ 选判定表(2⁶ = 64 种组合,结构化语言必然遗漏);问”条件仅 3 个且判断顺序明显,需与业务方快速确认”→ 选判定树。
3.6 状态图、E-R 基础与结构化设计的耦合内聚
状态转换图(State Transition Diagram, STD):描述对象或系统在事件驱动下状态的变化。四要素:状态(圆角矩形)、初态(实心圆 ●)、终态(同心圆 ◎)、迁移(箭头,标注 事件[监护条件]/动作)。与 DFD 的分工:DFD 是静态的功能分解,STD 是动态的行为模型;本项目中”工单状态 = 已下发 → 生产中 → 待检 → 已入库/已报废”必须用 STD 表达,画进 DFD 就是错误。E-R 图基础(S05 详讲,本周只求能认):实体(矩形)、属性(椭圆)、联系(菱形);三种基数 1:1(车间—车间主任)、1:n(批次—检验记录)、m:n(零件—供应商),判定方法是从两端各数一遍“这边 1 个对应那边几个”。结构化设计(Structured Design, SD)的两种数据流类型:变换型(Transform)——“输入通路 → 变换中心 → 输出通路”的线性结构,映射为”输入模块 + 中心变换模块 + 输出模块”;事务型(Transaction)——数据流到达事务中心后按类型选择若干活动通路之一,映射为”事务调度模块 + 若干活动模块”。实际系统常为混合型(上层事务型、分支内变换型)。
耦合七级(由低到高,高频必背):
| 级别 | 名称 | 含义 | 本项目例子 |
|---|---|---|---|
| 1 最低 | 非直接耦合 | 两模块无直接联系,仅由上级调用 | 追溯查询模块与设备台账模块 |
| 2 | 数据耦合 | 通过参数传递简单数据项 | 查询批次(批次号) |
| 3 | 标记耦合 | 传数据结构/记录但只用其中一部分 | 传入整个”工单对象”只用批次号 |
| 4 | 控制耦合 | 传控制信息(开关、标志)决定对方行为 | 传 flag=1 决定正向还是反向查询 |
| 5 | 外部耦合 | 通过外部环境联系(共享 I/O、通信协议、外部约束) | 多模块依赖同一套 OPC 通信约定 |
| 6 | 公共耦合 | 多模块访问同一公共数据区/全局变量 | 多模块读写同一张全局配置表 |
| 7 最高 | 内容耦合 | 直接进入另一模块内部(改代码、访内部数据、非正常入口) | 直接跳转进入另一模块内部语句 |
黄金原则:追求高内聚、低耦合。”某模块内各处理元素共同完成一个功能且缺一不可” → 功能内聚;”两模块通过参数表传递记录型数据” → 标记耦合。
内聚七级(由低到高,高频必背):
| 级别 | 名称 | 含义 | 反例 |
|---|---|---|---|
| 1 最低 | 偶然(巧合)内聚 | 成分毫无关系,只是碰巧放一起 | “工具类”里堆了日期、加密、日志 |
| 2 | 逻辑内聚 | 成分逻辑上同类,由参数决定执行哪一个 | 输出(type),type 决定报表还是图表 |
| 3 | 时间内聚 | 成分在同一时间执行 | 系统初始化(建连接、加载配置、清缓存) |
| 4 | 过程内聚 | 成分按特定次序执行,但操作的数据未必相关 | “读工单 → 打印工单 → 归档工单” |
| 5 | 通信内聚 | 成分操作同一数据集(同一输入或同一输出) | 都读写”检验记录表”的一组操作 |
| 6 | 顺序内聚 | 顺序执行,且上一步输出是下一步输入 | “解析请求 → 检索链条 → 组装报告” |
| 7 最高 | 功能内聚 | 所有成分共同完成单一功能,缺一不可 | “计算批次追溯链条” |
黄金原则:追求高内聚、低耦合。典型问法:”某模块内各处理元素共同完成一个功能且缺一不可,内聚类型是?” → 功能内聚;”两模块通过参数表传递记录型数据” → 标记耦合。
四、典型考法
4.1 综合知识怎么考
题 1:下列关于数据流图的说法,正确的是( )。 A. 数据流可以存在于两个外部实体之间 B. 数据存储之间可以直接存在数据流 C. 每条数据流至少有一端是加工 D. 加工可以只有输入数据流而没有输出数据流
答案:C。解析:这是铁律 1。A、B 违反”数据流至少有一端是加工”;D 是黑洞,加工必须既有输入又有输出。
题 2:关于父图与子图的平衡,正确的是( )。 A. 子图的加工数量必须与父图相同 B. 子图对外的数据流集合必须与父图对应加工的输入输出数据流一致 C. 子图必须画出父图中所有数据存储的内部结构 D. 父图与子图之间不需要保持编号的继承关系
答案:B。解析:数据守恒即”分解不改变接口”。A 错在加工数量必然增加;C 错在数据存储不必在每个子图都出现;D 错在编号必须继承(1 → 1.1)。
题 3:某加工的处理逻辑含 5 个判断条件,每条件 2 种取值,要求穷举所有组合并检查有无遗漏。最适宜的描述工具是( )。 A. 结构化语言 B. 判定表 C. 判定树 D. 程序流程图
答案:B。解析:条件多、组合多(2⁵ = 32 种)且要求穷举与查漏,正是判定表的适用场景。判定树在组合多时树枝爆炸;结构化语言嵌套过深易遗漏;程序流程图不属需求阶段的加工逻辑描述工具。
题 4:模块 A 调用模块 B 时,将”员工信息记录”整体作为参数传递给 B,而 B 只使用了其中”员工编号”字段。A 与 B 之间的耦合类型是( )。 A. 数据耦合 B. 标记耦合 C. 控制耦合 D. 公共耦合
答案:B。解析:传递数据结构(记录)但只用其中一部分 = 标记耦合;只传”员工编号”这一简单数据项才是数据耦合。看传的是”数据项”还是”数据结构”,这是本题最经典的陷阱。
题 5:下列模块内聚类型中,内聚程度最高的是( )。 A. 通信内聚 B. 顺序内聚 C. 逻辑内聚 D. 时间内聚
答案:B。解析:由低到高为 偶然 → 逻辑 → 时间 → 过程 → 通信 → 顺序 → 功能,选项中顺序内聚最高。
4.2 案例分析怎么考
【案例题】(共 25 分)
承接本项目。某系统分析师绘制了”生产质量一体化系统”的顶层(上下文)图与 1 层数据流图(以清单形式给出):
外部实体:操作工、质检员、生产部、设备部、ERP 系统、现有 MES 系统 | 1 层加工:1 报工数据采集、2 检验管理、3 追溯查询、4 设备状态监控 | 数据存储:D1 报工记录表、D2 检验记录表、D3 批次档案表、D4 设备台账
数据流清单:① 操作工 → 加工 1:报工数据;② 加工 1 → D1:报工记录;③ D1 → 加工 3:报工记录;④ 加工 2 → D2:检验结果;⑤ 质检员 → 加工 2:检验项录入;⑥ 生产部 → 加工 3:追溯请求;⑦ 加工 3 → 生产部:追溯报告;⑧ 现有 MES 系统 → D3:历史批次数据;⑨ 设备部 → 加工 4:设备台账维护请求;⑩ 加工 4 → D4:设备台账信息;⑪ D4 → 加工 3:设备状态;⑫ 加工 2 → 加工 4:检验异常通知
顶层图中,外部实体”生产部”与系统之间有两条数据流:向系统提交”追溯请求”,从系统接收”追溯报告”。
【问题 1】(9 分) 指出上述 1 层数据流图中存在的错误并说明理由(至少 4 处)。 【问题 2】(8 分) 指出图中可能缺失的数据流并说明理由(至少 3 条),同时说明你用什么方法发现的。 【问题 3】(8 分) 加工”2 检验管理”的检验结论判定涉及参数超差程度、客户等级、历史合格率、是否关键工序 4 个条件。请说明应采用哪种加工逻辑描述工具、说明理由,并给出该工具的组成结构。
采分点拆解:问题 1——每指出一处错误并说明理由得 2–3 分,至少 4 处给满 9 分,只写”错误”不写理由扣一半分,必须引用规则名称。问题 2——每指出一条缺失流并说明理由得 2 分(至少 3 条给 6 分),说明发现方法(父子图平衡 / 数据守恒)得 2 分。问题 3——工具选择 2 分,理由 3 分(条件多、组合多、需穷举查漏各 1 分),组成结构 4 分(条件桩、条件项、动作桩、动作项,缺一项扣 1 分)。理由与工具不匹配最多 2 分。
标准作答范例
【问题 1】(列出 5 处,答 4 处即可,每点 2 分,另 1 分条理性分)
- 数据流 ⑧ 错误:
现有 MES 系统 → D3是外部实体与数据存储直接相连,中间无加工,违反”数据流两个端点至少有一个必须是加工“。应插入加工”5 历史数据迁移”,由其读取现有 MES 数据经验证、清洗、映射后写入 D3。 - 加工 4 缺少对外部实体的输出:加工 4”设备状态监控”接收了设备部维护请求(⑨)与检验异常通知(⑫),向 D4 输出台账信息(⑩),但设备部发出请求后收不到任何响应,业务上不成立。应补充”加工 4 → 设备部:设备状态告警/监控结果”。
- 加工 3 缺少向数据存储的输出:追溯查询向生产部输出报告,却没有任何写入,导致”谁在何时查了什么”无法审计;质量追溯系统本身要求查询可审计,应补充”加工 3 → D5 查询审计日志:追溯查询记录”。
- 加工 2 缺少关键输入:加工 2”检验管理”只从质检员接收检验项录入,但检验判定必须依据工艺标准与检验规程,图中缺少”加工 2 ← D6 工艺标准表:检验规程”这一输入流。
- 顶层图与 1 层图需核对实体覆盖:顶层图中每个外部实体在 1 层图中都必须有对应数据流;若顶层图含”质量监管平台”,则 1 层图缺失相应流——这是父子图平衡检查的必查项。
【问题 2】缺失的数据流(每条 2 分)
| # | 缺失的数据流 | 理由 |
|---|---|---|
| 1 | 加工 1 → 生产部(或操作工):报工异常反馈 | 报工数据与工单不符(超产、重复报工)必须反馈,否则操作工不知道是否提交成功 |
| 2 | 加工 2 → D3 批次档案表:检验结论 | 检验结论是批次档案的核心组成;图中 D3 只有来自现有 MES 的历史数据(且该连线本身错误),本期检验结论无处写入,追溯链条在本期断裂 |
| 3 | 加工 3 → 质检员:追溯报告 | 质量部是追溯功能的核心用户,图中报告只流向生产部,与”质量部要求完整追溯”的业务目标矛盾 |
| 4 | D3 批次档案表 → 加工 3:批次档案数据 | 加工 3 要组装追溯链条必须读取批次档案;图中加工 3 只读 D1、D4,输入不足以产生其输出(数据守恒不成立) |
发现方法(2 分):采用数据守恒(父子图平衡)逐加工核对法——对每个加工列出全部输入数据流,判断”这些输入是否足以产生它的输出数据流”;再检查父图(顶层图)中每个外部实体的数据流是否都在子图被覆盖。二者结合即可系统性发现缺失,避免靠直觉找错。
【问题 3】
- 应采用判定表(Decision Table)。
- 理由:该加工涉及 4 个判断条件,条件多且存在组合,用结构化语言描述会产生多层嵌套、可读性差且极易遗漏分支;检验结论直接决定批次是否放行,是质量追溯的关键控制点,必须穷举所有条件组合以验证有无逻辑漏洞(这是判定表相对其他工具的核心优势);判定表可化简(动作项相同且仅一个条件取值不同的列可合并),得到的规则集可直接指导测试用例设计,保证判定逻辑可验证。不选判定树:4 个条件组合数较多,会出现树枝爆炸;不选结构化语言:无法保证组合穷举。
- 判定表四区结构:条件桩(左上)——列全部条件,如”参数超差程度””客户等级””历史合格率””是否关键工序”;条件项(右上)——各条件取值的全部组合,每列一种组合;动作桩(左下)——列全部可能动作,如”直接放行””记录留痕待评审””冻结批次并通知质量部长””触发不合格品处理流程”;动作项(右下)——标明每种组合下执行哪些动作(打
×)。编写完成后化简:动作项完全相同、且条件项中仅有一个条件取值不同的列合并,合并处记—。
五、易错点(Rethink)
| 错误认知 | 为什么错 | 正确理解 |
|---|---|---|
| “两个外部实体之间可以直接画数据流” | 数据不经加工不会变化 | 数据流至少有一端必须是加工;实体间、存储间、实体与存储间均不能直连(数据同步也必须经一个加工) |
| “加工只要连上线就说明有输入和输出” | 没看方向 | 必须逐个数:只有输入 = 黑洞,只有输出 = 奇迹,二者都是错误 |
| “父图和子图只要加工对得上就算平衡” | 平衡指数据流,不是加工数量 | 平衡 = 数据守恒:子图对外的数据流集合 = 父图该加工的数据流集合 |
| “DFD 里可以画’当库存不足时触发采购’” | 那是控制流 | DFD 不画控制、不画时序、不画触发条件、不画物料搬运;这些属状态转换图 |
| “数据流线上不写名字也能看懂” | 命名是硬性要求 | 禁止无名数据流;加工用动宾短语,其余用名词 |
| “判定树比判定表直观,所以优先用判定树” | 忽略组合爆炸 | 条件多、组合多 → 判定表;条件少(≤4)、顺序清晰 → 判定树 |
| “判定表不能化简” | 化简是标准步骤 | 动作相同且仅一个条件不同的两列可合并,合并处记 — |
| “传对象参数就是数据耦合” | 混淆数据项与数据结构 | 传简单数据项 = 数据耦合;传数据结构/记录只用一部分 = 标记耦合 |
| “内聚都要做到功能内聚” | 不切实际且成本高 | 目标是高内聚低耦合,通信/顺序内聚已可接受,偶然与逻辑内聚必须避免 |
六、GRASPS 推进(Experience)
本周五前,往交付物「业务需求规格说明书」里加三块内容,总计 1200–1600 字 + 两张图:
- 分层 DFD(两张):上下文图——1 个加工”生产质量一体化系统”+ 7 个外部实体(操作工、质检员、生产部、设备部、ERP、现有 MES、质量监管平台),每条流必须命名,不少于 10 条。1 层图——分解为 4–6 个加工(建议 1 报工数据采集、2 检验管理、3 追溯查询、4 设备状态监控、5 历史数据迁移),2–4 个数据存储,加工编号连续,数据流不少于 15 条。画完后自己跑一遍 3.2 五条铁律 + 3.3 平衡校验,把检查过程写成 200 字”自检记录”。
- 数据字典(约 600 字):定义不少于 8 个条目,必须含 2 个数据流(报工数据、追溯请求)、2 个数据存储(检验记录表、批次档案表,要写关键字)、2 个数据结构、2 个数据元素(要写类型、长度、取值范围);至少 1 个条目用
[|],至少 1 个条目用{}并标注上下限。 - 判定表一张(约 300 字):为”质量异常等级判定”写一张完整判定表(4 个条件),做一次化简并写出化简后的规则数。
验收标准:两张 DFD 零违反五条铁律——请同伴按 3.2 扫描顺序逐条检查找不到错;上下文图与 1 层图数据守恒(顶层图每条流都能在 1 层图找到对应,1 层图对外的流不比顶层图多一条);数据字典中没有未定义的基本元素(凡未再分解的都标 @ 并写明类型长度);判定表化简前后动作数一致(化简不能改变语义);把这两张图拿给”生产部长”看,他能指出至少一个业务问题——能被业务方挑出毛病的图,才是真在描述业务。
七、自测
- 数据流图中,表示”加工”的图形通常是( )。 A. 矩形 B. 圆角矩形(或圆) C. 开口矩形 D. 箭头线
- 符合 DFD 画图规则的是( )。 A. 外部实体之间可以有数据流 B. 数据存储之间可以有数据流 C. 加工与加工之间可以有数据流 D. 外部实体与数据存储之间可以有数据流
- 某加工只有输入数据流而没有输出数据流,该错误称为( )。 A. 奇迹 B. 黑洞 C. 数据不平衡 D. 标记耦合
- 父子图平衡指的是( )。 A. 子图加工数量与父图相同 B. 子图与父图的数据流保持一致(数据守恒) C. 子图必须包含父图所有数据存储 D. 子图编号必须与父图连续
- 数据字典中符号
{ }表示( )。 A. 可选 B. 重复 C. 选择 D. 定义为 - 数据字典的”加工逻辑”条目通常不包括( )。 A. 结构化语言 B. 判定表 C. 判定树 D. 程序流程图
- 下列耦合类型中,耦合度最低的是( )。 A. 数据耦合 B. 非直接耦合 C. 标记耦合 D. 公共耦合
- 模块内各成分”顺序执行,且前一个的输出是后一个的输入”,内聚类型为( )。 A. 过程内聚 B. 通信内聚 C. 顺序内聚 D. 功能内聚
- 状态转换图中,终态通常用( )表示。 A. 实心圆 B. 同心圆 C. 圆角矩形 D. 菱形
- 结构化设计中,”输入通路 → 变换中心 → 输出通路”的数据流结构属于( )。 A. 变换型 B. 事务型 C. 混合型 D. 层次型
| 题号 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 答案 | B | C | B | B | B |
| 一句话解析 | 加工 = 圆角矩形(Gane-Sarson)或圆(Yourdon) | 只有”至少一端是加工”合法;加工↔加工合法,其余三种直连均非法 | 只有输入 = 黑洞;只有输出 = 奇迹 | 平衡 = 数据守恒,指数据流名称与数量一致 | { } 重复;( ) 可选;`[ |
| 题号 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|
| 答案 | D | B | C | B | A |
| 一句话解析 | 加工逻辑三工具:结构化语言、判定表、判定树;流程图属设计/实现阶段 | 由低到高:非直接 → 数据 → 标记 → 控制 → 外部 → 公共 → 内容 | 顺序内聚强调输出作为下一步输入;过程内聚只强调次序 | 初态实心圆 ●,终态同心圆 ◎,标注”事件[条件]/动作” | 变换型 = 输入 → 变换中心 → 输出;事务型 = 事务中心选择通路 |
八、分档任务(Tailor)
- 保底 45:背熟 3.2 五条铁律、3.3 平衡校验五步、3.6 耦合内聚两张排序表(排序表必须能默写完整顺序);完成 4.1 五题与自测十题。
- 冲 60:完成 GRASPS 两张 DFD + 8 条数据字典 + 1 张判定表;案例 4.2 的【问题 1】【问题 2】手写完整作答,用 3.2 扫描顺序给自己打分;把”数据守恒逐加工核对法”练到 8 分钟内扫完一张 1 层图。
- 冲 70:把本项目换为政务审批场景重画上下文图与 1 层图;对 1 层图的”3 追溯查询”做二级分解,画出 2 层图并校验平衡;自命题一道”补充缺失数据流”的案例题(含 4 处错误设计)并写出采分点。
九、本阶段回答基本问题
Q1(续):你已经拿到一堆需求了,凭什么说它们是自洽的、完整的?
第一,DFD 的硬规则不是绘图规范,是”需求完整性”的检查清单。 一个只有输入没有输出的加工(黑洞),业务上等价于一件事——你说你要做这件事,却说不出它的产出是什么;外部实体与数据存储直连,等价于”数据不经校验就入库”,这正是质量部长当场指出的问题。每一条被违反的规则背后都对应一个真实的需求漏洞,这也是案例第 1 题能靠规则稳拿分的原因:它不是画图题,是逻辑检查题。
第二,数据守恒是唯一能证明”分解没丢东西”的方法。 需求可以被分解成一百个用例,但分解本身会引入丢失。父子图平衡要求子图对外的每条数据流都能在父图找到来源,其实质是:分解只展开内部,绝不改变接口。 你在 1 层图发现”追溯查询”缺少来自批次档案表的输入,这个发现不是偶然看出来的,是逐加工核对”输入是否足以产生输出”算出来的。可验证性在需求阶段的落地形式,就是这个核对过程。
第三,DFD + 数据字典 + 状态图必须成套使用,缺一不可。 DFD 说”数据去哪、被谁加工”,数据字典说”这个数据到底是什么”,状态图说”系统处在什么状态、被什么事件改变”。只画 DFD 不写数据字典,等于给了骨架不给语义——“追溯请求”里有没有”追溯深度”字段,图上永远看不出来。这也解释了加工逻辑必须有独立描述工具:当一条业务规则涉及 4 个条件的 16 种组合时,任何自然语言都会漏,只有判定表能穷举。
回到 Q1 的完整答案:需求”对不对”不靠业务方签字,靠三重检验——可验证性、可追溯性、一致性。 S02 解决前两重,S03 给你第三重的工具。至于这些模型在面向对象视角下长成什么样,是 S04 的事;模型最终落成什么表结构,是 S05 要正面回答的 Q3。