9.4.1 数据流图解题总览与平衡原则
这一章对应软件设计师下午题的试题一。数据流图是结构化分析工具,用来把需求说明转化为“外部实体、加工、数据流、数据存储”之间的数据处理关系。它固定考 15 分,课程建议控制在 20 到 30 分钟内完成,目标是稳定拿到大部分分数,而不是为最后 1 到 2 分过度消耗时间。
数据流图题考什么
数据流图题的答案大多来自题干。它不是让你按自己的经验重新设计系统,而是让你读懂出题人给出的需求说明,再补齐图上的缺失或错误。
| 常见问题 | 要填写什么 | 解题依据 |
|---|---|---|
| 补充外部实体名 | 人、组织、外部系统 | 题干中的系统外交互对象 |
| 补充数据存储名 | 表、文件、库、清单、档案 | 题干中需要长期保存的数据集合 |
| 补充加工名 | 动宾结构或名动结构 | 题干中分段功能的总起句 |
| 补充缺失数据流 | 数据流名称、起点、终点 | 父子图平衡 + 题干说明 |
| 改正错误数据流 | 错误数据流名称及正确起止点 | 数据流方向、平衡原则、题干语义 |
数据流图题最忌“凭常识想当然”。同样叫信用卡系统、交易平台,不同题干的业务边界可能不同,答案必须回到题干。
顶层图、0 层图与逐步分解
数据流图符合“自顶向下、逐步求精”的思想。顶层图把整个目标系统画成一个加工,0 层图再把这个大加工分解为若干子加工。
mermaid
flowchart TD
A["顶层图<br/>整个系统是一个加工"] --> B["0层图<br/>把系统拆成多个加工"]
B --> C["子图<br/>继续细化某个加工"]
A -.保持边界输入输出.-> B
B -.继续保持平衡.-> C分解不是重新画一个新系统。父图和子图之间的边界输入输出要保持一致,这就是父子图平衡原则。
父子图平衡原则
父图中的某个加工被分解成子图后,子图边界上的输入和输出应与父图中该加工的输入和输出保持平衡。
这里的“平衡”不一定要求名称一字不差:
| 情况 | 是否平衡 | 说明 |
|---|---|---|
| 父图一条数据流在子图中原样保留 | 平衡 | 直接继承 |
| 父图一条复合数据流在子图中拆成多条数据流 | 平衡 | 子图多条数据流的数据项合起来等于父图数据流 |
| 父图有输入,子图边界完全没有对应输入 | 不平衡 | 数据被分解时丢失 |
| 子图多出父图没有的外部边界输出,且无法由父图数据流拆分解释 | 不平衡 | 子图凭空增加边界数据 |
考试可能把这条原则作为简答题考 3 分:画子图时,子图输入输出数据流必须与父图中被分解加工的输入输出保持一致;可以原样保留,也可以在数据项等价的前提下拆分或合并。
子图内部平衡
除了父子图之间要平衡,一张数据流图内部也不能出现明显不合理的数据流。课程里总结了三类典型错误:
| 错误类型 | 表现 | 判断 |
|---|---|---|
| 黑洞 | 加工只有输入,没有输出 | 数据流入后消失 |
| 奇迹 | 加工只有输出,没有输入 | 没有来源却产生数据 |
| 灰洞 | 输入不足以产生输出 | 输入和输出语义不匹配 |
另一个基础规则也要记住:数据流至少一端应连接加工。外部实体不能直接连外部实体,外部实体也不应直接访问数据存储,数据存储之间也不应直接交换数据;数据必须通过加工被处理。
解题时间策略
数据流图在下午题第一题,题量稳定但阅读量大。推荐策略:
- 先快速看问题,知道要补实体、存储、加工还是数据流。
- 再读题干,用不同标记圈人/组织/系统、动词功能、表文件库、数据名词。
- 对照顶层图和 0 层图,先用父子图平衡找缺失数据流。
- 再用题干语义确认数据流的名称、起点和终点。
- 卡住时不要无限纠缠,先拿能确定的分。
例题
在数据流图中,系统之外与系统交互的用户、组织或第三方系统通常属于:
关于父子图平衡原则,正确的是:
本节小结
数据流图题固定 15 分,核心是读题干、补图、找错。父子图平衡用于检查边界输入输出,子图内部平衡用于发现黑洞、奇迹、灰洞等错误。所有答案最终都要回到题干说明确认。