Skip to content
难度基础(★)
建议时长45分钟

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 分:画子图时,子图输入输出数据流必须与父图中被分解加工的输入输出保持一致;可以原样保留,也可以在数据项等价的前提下拆分或合并。

子图内部平衡

除了父子图之间要平衡,一张数据流图内部也不能出现明显不合理的数据流。课程里总结了三类典型错误:

错误类型表现判断
黑洞加工只有输入,没有输出数据流入后消失
奇迹加工只有输出,没有输入没有来源却产生数据
灰洞输入不足以产生输出输入和输出语义不匹配

另一个基础规则也要记住:数据流至少一端应连接加工。外部实体不能直接连外部实体,外部实体也不应直接访问数据存储,数据存储之间也不应直接交换数据;数据必须通过加工被处理。

黑洞加工输入只有输入
<text x="380" y="30" font-weight="700">奇迹</text> <rect x="345" y="80" width="70" height="42" rx="6" fill="#fef3c7" stroke="#d97706"/> <text x="380" y="106">加工</text> <line x1="417" y1="101" x2="485" y2="101" stroke="#374151" stroke-width="2" marker-end="url(#dfdArrow)"/> <text x="455" y="90">输出</text> <text x="380" y="160" fill="#92400e">只有输出</text> <text x="635" y="30" font-weight="700">灰洞</text> <rect x="600" y="80" width="70" height="42" rx="6" fill="#e0e7ff" stroke="#4f46e5"/> <text x="635" y="106">加工</text> <line x1="535" y1="101" x2="598" y2="101" stroke="#374151" stroke-width="2" marker-end="url(#dfdArrow)"/> <line x1="672" y1="101" x2="735" y2="101" stroke="#374151" stroke-width="2" marker-end="url(#dfdArrow)"/> <text x="565" y="90">输入A</text> <text x="705" y="90">输出B</text> <text x="635" y="160" fill="#3730a3">输入不足以产生输出</text> 

解题时间策略

数据流图在下午题第一题,题量稳定但阅读量大。推荐策略:

  1. 先快速看问题,知道要补实体、存储、加工还是数据流。
  2. 再读题干,用不同标记圈人/组织/系统、动词功能、表文件库、数据名词。
  3. 对照顶层图和 0 层图,先用父子图平衡找缺失数据流。
  4. 再用题干语义确认数据流的名称、起点和终点。
  5. 卡住时不要无限纠缠,先拿能确定的分。

例题

单选
在数据流图中,系统之外与系统交互的用户、组织或第三方系统通常属于:
单选
关于父子图平衡原则,正确的是:

本节小结

数据流图题固定 15 分,核心是读题干、补图、找错。父子图平衡用于检查边界输入输出,子图内部平衡用于发现黑洞、奇迹、灰洞等错误。所有答案最终都要回到题干说明确认。