来源:2019年11月第2题
阅读下列说明,回答问题1至问题3 ,将解答填入答题纸的对应栏内。
【说明】
某软件企业为快餐店开发一套在线订餐管理系统,主要功能包括:
(1)在线订餐:已注册客户通过网络在线选择快餐店所提供的餐品种类和数量后提交订单,系统显示订单费用供客户确认,客户确认后支付订单所列各项费用。
(2)厨房备餐:厨房接收到客户已付款订单后按照订单餐品列表选择各类食材进行餐品加工。
(3)食材采购:当快餐店某类食材低于特定数量时自动向供应商发起采购信息,包括食材类型和数量。供应商接收到采购信息后按照要求将食材送至快餐店并提交已采购的食材信息。系统自动更新食材库存 。
(4)生成报表:每个周末和月末,快餐店经理会自动收到系统生成的统计报表,报表中详细列出了本周或本月订单的统计信息以及库存食材的统计信息。现采用数据流图对上述订餐管理系统进行分析与设计,系统未完成的0层数据流图。如图2-1 所示。

问题一
(8分)根据订餐管理系统功能说明,请在图2-1所示数据流图中给出外部实体E1E4和加工P1 P4的具体名称。
参考答案
E1:客户
E2:厨房
E3:经理
E4:供应商
P1:在线订餐
P2:厨房备餐
P3:生成报表
P4:食材采购
答案解析:
判定外部实体与处理过程的关键,是紧扣题干对业务边界与职责的描述,并遵循数据流图(DFD)关于实体(External Entity)、加工/处理(Process)、数据存储(Data Store)、**数据流(Data Flow)**的语义。
题干中的四类对外参与者明确为:客户(发起下单与支付、接收订单确认)、厨房(依据已付款订单进行备餐)、供应商(按系统自动发起的需求补货并上报采购明细)、经理(按周末/月末接收系统统计报表)。这四者都位于系统边界之外,承担输入或接收输出的角色,因此应标注为 E1~E4。四个核心业务活动恰对应四个加工(P):在线订餐(订单创建、费用计算与确认支付)、厨房备餐(根据订单清单组织生产)、食材采购(库存阈值触发、发送采购信息、供应商回填与库存更新)、生成报表(定时汇总订单与库存信息并通知经理)。
总体来看就是,客户提交“餐品订单”→系统确认费用与支付→“已付款订单”触发厨房备餐;库存监测触发“采购信息”→供应商送货并反馈“已采购食材信息”→系统更新库存;到期定时任务触发“生成报表”→经理接收“统计报表”。
这些触发和输出与四个加工的职责一一对应,不存在跨层代办或职责重叠,符合单一职责与层次清晰的 DFD 规范。此外,注意不要把仓储/库存、订单库等数据持久化对象误标为外部实体,它们是系统内部的数据存储(D),通常在 0 层 DFD 中以 D1、D2 等表示。综上,E/P 的命名与归属与题干描述严格吻合,既能支撑后续数据流补全,又能保证 0 层图的语义一致性与可读性。
问题二
(8 分)根据数据流图规范和订餐管理系统功能说明,请说明在图2-1中需要补充哪些数据流可以构造出完整的0层数据流图。
参考答案
(1)增加E1到P1数据流"餐品订单";
(2)增加P1到P2数据流"餐品订单";
(3)增加D1到P3数据流"订单汇总";
(4)增加P3到E3数据流"统计报表"。
参考答案解析
补流的逻辑依据主要有三点:(A) 黑洞/灰洞/无输入错误检查,(B) 平衡性(Balancing),© 业务时序与触发机制。
第一,自检“无输入/无输出”。若某处理只有输出无输入(或反之),就是黑洞/白洞错误。题干提示 P1“在线订餐”只有输出(例如生成订单确认或已付款订单),但未见客户输入数据,违反“加工必须由输入驱动”的规则,因此需要补充 E1→P1 的“餐品订单”数据流,以表达“客户选择餐品并提交订单”的初始输入。同理,P2“厨房备餐”应由已付款订单触发。如果 0 层不细分支付环节,可将“已付款订单”抽象为“餐品订单”(含“已支付”状态)从 P1→P2 直接传递,体现事件驱动的实时性与可追溯性,这也优于“P2 主动去 D1 检索”的轮询式触发。
第二,校验 P3“生成报表”的输入与输出平衡。根据题干,报表至少包含订单统计与库存统计两部分。0 层可将订单侧的输入抽象为 D1→P3 的“订单汇总”,库存侧若已在图中体现为另一数据存储(如 D2 库存),还应并行输入“库存汇总”;若题面仅要求最小必要补流,至少需要“订单汇总”。另一方面,P3 不能是“黑洞”,应有输出流指向经理(E3),即 P3→E3 的“统计报表”。
第三,事件驱动优于轮询驱动。为何不是 D1→P2 而是 P1→P2?如果用 D1→P2 表达“厨房从数据库主动拉单”,则备餐触发依赖人工/定时轮询,实时性与业务一致性较弱;P1→P2 则在订单确认后即时推送,满足“支付即出单”的餐饮场景,更贴近真实业务。此处体现 DFD 设计中对触发条件与时效性的把握:尽量让上游加工的确定性输出成为下游加工的直接输入,减少不必要的数据库轮询。
问题三
分值(9分)根据数据流图的含义,请说明数据流图和系统流程图之间有哪些方面的区别。
参考答案
(1)数据流图中的处理过程可并行;系统流程图在某个时间点只能处于一个处理过程。
(2)数据流图展现系统的数据流;系统流程图展现系统的控制流。
(3)数据流图展现全局的处理过程,过程之间遵循不同的计时标准;系统流程图中处理过程遵循一致的计时标准。
答案解析
数据流图(DFD)与系统流程图(Flowchart)都是结构化分析/设计阶段的常用图法,但二者的关注点与抽象层次不同。
其一,在并行性与执行观念上不同。 DFD 描述的是系统在逻辑层的“数据如何在系统内外与各处理之间流动”以及“被何种加工转换”,不等价于单线程的执行轨迹;不同处理可以由不同事件/定时/条件触发,天然支持并行/并发表达(例如“在线订餐”与“食材采购”的事件驱动可并行发生)。而系统流程图更多是沿着一条控制流路径,自上而下刻画“此刻先做什么,再做什么”,默认单条控制线推进,强调时序步骤与分支/循环。
其二,在描述对象上不同。 DFD 的核心元素是外部实体、加工、数据存储、数据流,突出数据的产生、汇聚、分发与落库,回答“数据从哪里来、到哪里去、被怎样变换”。系统流程图的元素是处理框、判断框、连接/流程线等,突出控制条件与执行路径,回答“在什么条件下走哪条路、下一步是什么”。因此,DFD 更适合需求分析阶段的逻辑建模与跨域数据依赖阐明;流程图更适合设计/实现阶段的过程控制与算法/业务步骤表达。
其三,在“计时标准/触发节拍”的表达上不同。 DFD 中的各处理可由异步事件、定时任务、外部输入等多源触发,不要求整体服从统一时钟;同一 0 层图内,不同加工可有不同的采样周期、批处理窗口或实时推送机制。而流程图常假定同一条控制流在统一“执行时序”下推进(尽管可含子流程/并发分支,但在表达上仍以控制先后为主)。
在本题场景中,用 DFD 搭建 0 层图能够清晰地把“客户下单”“厨房备餐”“供应商补货”“经理收报表”等数据关系与系统边界讲明白;若需要描述“下单后如何进行支付校验、失败重试、超时回滚”等控制细节,再用系统流程图或活动图/时序图表达,会更贴切开发实现需要。
补充知识



数据字典是对数据流图中涉及的所有数据流、数据存储、数据项等进行精确定义的工具,它类似于一份系统数据的“说明书”。在需求分析阶段,数据字典为每个数据元素提供统一的命名、格式和含义,从而消除了不同开发人员和用户之间对数据理解的偏差。在设计阶段,数据字典则作为系统实现的基础,保证数据在不同模块之间传递时的完整性与一致性。同时,它还能支持一致性检查和完整性检查,防止因数据定义不清或使用不当导致系统逻辑错误。
数据字典

来源:2022年11月第2题
问题三 分值(7分)
在结构化分析和设计过程中,数据流图和数据字典是常用的技术手段,请用200字以内的文字简要说明它们在软件需求分析和设计阶段的作用。
参考答案
在软件需求分析阶段: 数据流图主要用于建立软件的需求模型,以图形化方式呈现业务数据的流动和处理过程。数据字典则是关于数据的信息集合,用于对数据流图中每个组成部分加以定义和说明。
在软件设计阶段: 数据流图主要用于经过一系列设计转换后,产生由模块图表示的软件设计模型;详细设计阶段数据流图可进行模块内部的数据流设计。数据字典用于描述系统中各类数据,为数据库概要设计、逻辑设计提供支持。
答案解析
在软件工程的结构化分析与设计过程中,数据流图(DFD)和数据字典(DD) 是两个相辅相成的重要工具。
首先,数据流图以图形化方式展示了系统中数据的流动与加工过程,它从功能角度刻画了系统如何接收输入、进行处理并生成输出。相比自然语言描述,数据流图能够清晰揭示业务活动之间的关系,避免需求表述的模糊和歧义。
在需求分析阶段,数据流图的作用主要体现在帮助分析人员与用户进行沟通,建立系统的功能模型,从而明确用户需求,形成一致的功能认知;在设计阶段,数据流图进一步细化为分层模型,既可以作为模块划分的依据,又能用于接口数据的定义,保证后续设计的合理性和可实现性。同时,在分层细化过程中,数据流图还必须遵循数据平衡原则,即父图与子图的输入输出保持一致,每个加工必须有对应的输入和输出,避免出现“黑洞”“奇迹”或“灰洞”等问题,这样才能确保功能模型的正确性和完整性。
其次,数据字典是对数据流图中涉及的所有数据流、数据存储、数据项等进行精确定义的工具,它类似于一份系统数据的“说明书”。在需求分析阶段,**数据字典为每个数据元素提供统一的命名、格式和含义,从而消除了不同开发人员和用户之间对数据理解的偏差。在设计阶段,数据字典则作为系统实现的基础,保证数据在不同模块之间传递时的完整性与一致性。**同时,它还能支持一致性检查和完整性检查,防止因数据定义不清或使用不当导致系统逻辑错误。
9489

被折叠的 条评论
为什么被折叠?



