考点频率★★★★☆选择题常考下午题偶尔结合DFD考查难度⭐⭐⭐建议重点掌握SC图与DFD的关系、模块划分原则以及两种映射方法1️⃣ 从DFD到SC图从“分析”到“设计”上一篇文章我们讲了结构化分析方法SA核心工具是DFD回答的是“系统做什么”——把用户需求画成数据流图。结构化设计方法SD则是回答“系统怎么做”——把DFD中的数据处理逻辑转化为程序模块结构。数据流图DFD是需求分析阶段的产物描述数据在系统中的流动和处理过程关注“系统要做什么”面向的是问题域。结构图SC图是概要设计阶段的产物描述程序模块的层次结构和调用关系关注“系统怎么做”面向的是解决方案域。打个比方DFD 厨房里菜从哪来、经过哪些步骤、最终变成什么菜数据流动SC图 厨房里谁负责洗菜、谁负责切菜、谁负责炒菜、谁向谁汇报人员分工需求阶段画DFD设计阶段画SC图——先搞清楚“要做哪些事”再决定“派谁去做、谁听谁的”。2️⃣ 结构图SC图的图形符号SC图主要描述模块之间的调用关系和数据传递图形符号含义说明矩形框模块框内写模块名称动词名词带箭头的线段调用关系上层调用下层箭头旁的标注数据传递用 ○ 标记数据/控制信息空心菱形选择调用根据条件决定是否调用带弧线的箭头循环调用重复调用若干次┌─────────────┐ │ 主控模块 │ └──────┬──────┘ │ ┌───────────┼───────────┐ ▼ ▼ ▼ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ 输入模块 │ │ 处理模块 │ │ 输出模块 │ └───────────┘ └───────────┘ └───────────┘考试提示SC图是树形结构没有交叉线。如果有交叉说明模块划分有问题。3️⃣ SC图的补充概念易混淆考点在软件设计师考试中SC图经常与模块的“扇入/扇出”“深度/宽度”等度量指标结合考查。3.1 扇入与扇出概念定义对设计质量的影响扇出Fan-out某模块直接调用的下层模块数量扇出过大7说明模块可能过于复杂承担了过多职责扇出过小可能意味着下层模块划分过细。建议控制在3~7之间。扇入Fan-in直接调用某模块的上层模块数量扇入越大越好说明该模块被多处复用抽象程度高。在图中表现为多个模块调用同一底层模块如公用工具函数扇入越大通常意味着模块的通用性越强。结合实例一个“数据校验”模块被登录、注册、下单三个模块调用则该校验模块的扇入为3。3.2 深度与宽度概念定义设计指导意义深度DepthSC图中从根节点到最远叶节点的层数深度过大可能说明控制链太长逻辑分散增加了理解难度和维护成本宽度WidthSC图中同一层级的最大模块数宽度受扇出控制宽度过大说明该层抽象层次可能不够一致4️⃣ 从DFD到SC图的两种映射方法这是软考下午题可能考查的难点如何把DFD的结构转化为SC图取决于DFD中数据流的特征有两种映射方式4.1 变换流映射处理事务流的数据适用场景DFD中的数据流是“输入 → 加工 → 输出”的线性流水线结构。即数据先经过一系列输入处理对输入数据进行清洗、转换、格式调整准备好供核心计算使用然后交给主加工对输入的数据进行核心业务计算和逻辑处理最后再经过一系列输出处理对结果进行格式化、汇总、展示给用户。映射步骤在DFD中找到主加工中心变换——数据真正发生“转化”的位置把主加工映射为SC图中的主模块输入流部分映射为输入模块负责接收和预处理数据输出流部分映射为输出模块负责结果处理和展示举例一个工资计算系统输入是“员工考勤数据”主加工是“计算工资”输出是“工资单”。映射为SC图就是三个模块输入模块、工资计算模块、输出模块。4.2 事务流映射根据类型分支处理适用场景DFD中有一个“事务中心”根据输入数据的类型或条件选择不同的处理路径。映射步骤在DFD中找到事务中心决定走哪条路的加工事务中心映射为SC图中的事务调度模块每条处理路径分别映射为一个动作模块一组完成特定功能的模块举例一个订单处理系统根据订单类型普通/加急/国际走不同的处理流程。映射为SC图就是事务调度模块 → 普通订单处理、加急订单处理、国际订单处理三个分支。5️⃣ 模块划分的基本原则高内聚低耦合SC图的设计核心是模块划分目标是高内聚、低耦合原则含义好坏判断高内聚High Cohesion一个模块内部各个元素之间关联紧密共同完成一个功能好设计模块职责单一明确坏设计一个模块既做计算又写日志低耦合Low Coupling模块之间的依赖关系尽量少修改一个模块不影响其他模块好设计模块通过参数传递数据坏设计模块直接修改全局变量模块规模一个模块的代码行数建议控制在50~200行以内。模块过大会导致内聚度降低、可读性变差、维护困难。如果模块代码量显著超出这个范围应考虑进一步拆分。耦合强弱排序由低到高数据耦合 ← 控制耦合 ← 公共耦合 ← 内容耦合数据耦合最理想内容耦合最差内聚强弱排序由高到低功能内聚 ← 顺序内聚 ← 通信内聚 ← 过程内聚 ← 逻辑内聚 ← 偶然内聚功能内聚最理想偶然内聚最差这部分内容将在下一篇文章中详细展开本篇仅作了解。6️⃣ 经典例题例题1以下关于SC图的叙述中正确的是 。A. SC图是面向数据流的设计工具用于描述数据在系统中的流动B. SC图反映的是模块之间的调用关系C. SC图主要用于详细设计阶段D. SC图可以包含循环结构但不能包含选择结构解析A错误——描述数据流动的是DFD不是SC图C错误——SC图用于概要设计阶段不是详细设计详细设计常用程序流程图、判定表等D错误——SC图可以包含选择结构和循环结构用空心菱形和带弧线的箭头表示。B正确。选B。例题2某DFD中有一个加工“计算工资”该加工接受“考勤数据”输入产生“工资明细”输出。在SC图中“计算工资”应该被映射为 。A. 输入模块B. 主模块C. 输出模块D. 事务调度模块解析这是一个典型的变换流结构“计算工资”是数据真正发生“转化”的加工应映射为主模块。选B。7️⃣ 记忆口诀SC图树形结构模块调用看箭头。扇出控制子模块数3~7扇入越大复用度越高。变换流映射线性路事务流映射分支走。高内聚低耦合模块设计好帮手。8️⃣ 小测验评论区对答案在SC图中如果某个模块被其他5个模块调用则该模块的扇入为 。在分层DFD中父图与子图的输入输出数据流必须在数量和名称上保持一致这种做法通常被称为 。A. 5平衡B. 4平衡C. 5一致性D. 4一致性本专栏日更点击头像 → 专栏《软考中级高频考点》订阅第一时间接收新内容#软考中级 #软件设计师 #结构图 #SC图 #结构化设计 #软件工程