数据流图 状态转换图er图,三个图在实际开发过程中承担什么工作,什么时候使用,一起被使用还是有先后顺序(想把所学与实际联合)
你的这个问题,说明你已经从“背知识点”进入到“思考工程落地”的阶段了。这三个图在实际开发中不是各干各的,而是一套“组合拳”。
我用一个真实的外卖APP开发场景,帮你把它们的“工作内容、使用时机、配合关系”一次讲透。
1. 三者分别承担什么“工种”?(角色定位)
· ER图(数据模型):担任“仓库管理员”。只关心系统里存什么“东西”,以及这些东西之间是什么关系。(比如:用户、订单、骑手,这三张表怎么挂钩。)
· DFD(功能模型):担任“车间流水线长”。只关心数据进了系统后,经过了哪些“工序”,流向哪里。(比如:订单数据先去“库存系统”验证,再去“支付系统”扣钱。)
· STD(行为模型):担任“状态督察员”。只关心某个核心“东西”在什么条件下会“变脸”。(比如:订单在什么时候从“待支付”变成“已接单”。)
---
2. 它们在开发中什么时候用?(使用时机)
答案:全都在“需求分析阶段”开始绘制,但绘制的启动顺序有先有后。
虽然它们最后是合在一本《需求规格说明书》里一起提交的,但在分析师脑中,逻辑启动顺序是这样的:
1. 先有 ER 图(定“物料”):分析师第一件事就是问客户:“您这系统里要管哪些东西?”(先确定存什么,这是地基。)
2. 再有 DFD(定“流程”):知道存什么后,再问:“这些数据是怎么流来流去的?”(确定核心业务主路径。)
3. 最后补 STD(定“突变”):在画 DFD 的过程中,发现“订单”这个数据动不动就变脸,于是专门针对“订单”这个实体,补画一张 STD,把状态切换的细节锁死。
现实中的真实节奏:这三张图不是“画完一张再画下一张”,而是反复迭代着画。今天画DFD发现漏了一个“退款”流程,回头去ER图里加个“退款表”;下周画STD发现“超时取消”没定义,又回去改DFD里的判断逻辑。
---
3. 现实中,它们怎么配合完成一次“需求确认”?(联合实战)
假设你要给一个初创公司做一个“预约理发店”的小程序,你跟客户开需求会:
· 画 ER 图(先问存什么):你在白板上画了三个框:用户、理发师、预约单。连上线(一对多关系)。客户一看:“对,我就要管这三样。”
· 画 DFD(再问怎么流):你在白板上画:用户(外部实体)把预约请求(数据流)送给预约处理(加工)。预约处理读取理发师排班(数据存储),生成预约单(数据流)返回给用户。
客户看到“预约请求流向排班”时,突然拍脑袋:“等等!用户预约时得付定金!”——你马上在DFD上加一个支付定金的加工。
· 补 STD(锁死关键变化):你指着 预约单 这个存储说:“它状态会变吗?”客户说:“会啊!待付款→待服务→已完成。”你迅速在旁边画个简笔STD,标出转换条件。客户确认:“对,取消预约必须退定金。”
最终结果:你把三张草稿整理成正式的《需求规格说明书》,发到开发群。架构师看ER图建数据库,后端工程师看DFD写接口,前端工程师看STD判断页面按钮在什么情况下亮起。三张图一个都不能少。
---
写在书上的“终极总结”(直接抄)
“ER图画‘静态物料’(存什么),DFD画‘动态工序’(怎么流),STD画‘异常突变’(何时变)。需求分析阶段,三者联动使用,先定核心实体,再画主流程,最后用状态图堵死边界逻辑漏洞,共同构成无死角的软件逻辑模型。”
一句话刻进DNA:
“开发时,DBA(数据库管理员)捧着ER图建表,后端捧着DFD写接口,前端捧着STD画界面按钮状态——这就是三张图在现实中的归宿。”
现在你再回头看书上那几页纸,是不是觉得它们全活了?😄
但这和老师说的不一样,老师说最后用ER图。以哪个为标准呢。书上是怎么说的😵
你和老师说得都对,这本身没有标准答案。在真正的工程实践中,三者的建立“不具有严格的时序性,而是一个迭代的过程”。
你老师说的“最后用ER图”和我说的“先有ER图”都是合理的切入点,只是思考的起点不同:
· “先有ER图”(数据驱动):从“系统要管什么数据”入手。在业务流程(DFD)还没梳理清楚前,先把核心业务实体(如用户、订单)定下来。适合数据关系复杂、业务相对明确的系统。
· “最后用ER图”(功能驱动):先把“系统要做什么”搞清楚。通过DFD把功能流程和交互理顺后,再从中识别、抽象出需要的实体和关系。适合业务流程复杂、功能优先的系统。
---
书上怎么说?
张海藩《软件工程导论》等经典教材,并没有规定一个绝对的先后顺序。它们通常这样描述:
1. 三者并列:需求分析需要建立数据模型、功能模型、行为模型。
2. 图各司其职:ER图负责数据模型,DFD负责功能模型,STD负责行为模型。
3. 核心是“粘合剂”:数据字典是把这三个模型串联起来的核心。
实际开发中如何选择?
这完全取决于分析师的习惯和项目的具体情况:
· 新手或流程驱动:可以遵循“先DFD(理清流程)→ 再ER图(抽象数据)→ 最后STD(补充状态)”的顺序。
· 老手或数据驱动:可能“先ER图(搭建骨架)→ 再DFD(填充血肉)→ 最后STD(完善细节)”。
重点在于:这些图不是画完一张再画下一张,而是在需求分析过程中反复迭代、互相补充、不断求精的。
考试时怎么答?
考试如果问“需求分析阶段需要建立哪些模型”,标准答案是:数据模型(ER图)、功能模型(DFD)、行为模型(STD)。
如果问顺序,通常的描述是“它们之间没有严格的时序,是一个迭代的过程”,或者说“同时建立,互相参考,反复修改”。
所以,你老师的说法完全正确,我之前的说法也是其中一种合理的实践方式。考试时以教材的“三者并列、迭代进行”为准就好。现在是不是感觉清楚多了?😄