课程设计交上去被打回,评语是数据流图画成了流程图。图上把判断分支、循环都画了,箭头还带着顺序。老师只回了一句:重画,先把数据流图描述什么想清楚。

数据流图描述的是数据在系统里怎么流动、被谁处理、存到哪里,不描述控制顺序,也不描述先做哪步后做哪步。它的四要素是外部实体、处理过程、数据流、数据存储。

四个符号各自的边界

  • 外部实体:系统之外的人或系统,比如客户、银行、仓库管理员。它只负责给数据或收数据,内部怎么算不画
  • 处理过程:把输入数据变成输出数据的动作,命名用动词加名词,比如计算运费、校验订单
  • 数据流:有名字的箭头,表示一组数据在流动。名字写成名词,比如订单明细,不要写成发送订单
  • 数据存储:数据停下来的地方,比如订单表、客户档案,用两条横线或者开口矩形表示

画的时候最容易犯的错

第一,外部实体之间不能直接连数据流,中间必须有处理。第二,数据流不能双向,一来一回要画两条。第三,处理过程不能只有输入没有输出,也不能凭空产生数据,这两种情况分别叫黑洞和奇迹。第四,父子图要平衡,父图里某个处理的输入输出,在子图里得对得上。

客户 --订单--> 处理1 校验订单 --合法订单--> 处理2 计算金额 --应收金额--> 财务

分层画的时候,顶层图只有一个处理,代表整个系统,外面挂几个外部实体。第二层把系统拆成四到七个主要处理,再往下按需细化。每层别超过九个处理,多了谁都看不懂,评审也过不去。

命名上有个小技巧:处理过程的名字里带上对象,比如生成对账单,比笼统的统计更容易检查。数据存储写名词,别写成保存订单,那是动作,放在处理里更合适。数据流也写名词,一眼能看出流的是什么东西。

工具上,Visio、draw.io 都能画,考试手绘也行。真正决定分数的是命名和平衡,不是框画得多好看。先把数据字典列出来,让每个数据流和处理都能在里面找到定义,图自然就站得住,别人接手也能照着往下画。