【软件工程】结构化设计:结构化设计方法(SC图)

考点频率 :★★★★☆(选择题常考,下午题偶尔结合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 深度与宽度

概念 定义 设计指导意义
深度(Depth) SC图中从根节点到最远叶节点的层数 深度过大可能说明控制链太长,逻辑分散,增加了理解难度和维护成本
宽度(Width) SC图中同一层级的最大模块数 宽度受扇出控制,宽度过大说明该层抽象层次可能不够一致

4️⃣ 从DFD到SC图的两种映射方法

这是软考下午题可能考查的难点:如何把DFD的结构转化为SC图?

取决于DFD中数据流的特征,有两种映射方式:

4.1 变换流映射(处理事务流的数据)

适用场景 :DFD中的数据流是 "输入 → 加工 → 输出" 的线性流水线结构。即数据先经过一系列输入处理(对输入数据进行清洗、转换、格式调整,准备好供核心计算使用),然后交给主加工(对输入的数据进行核心业务计算和逻辑处理),最后再经过一系列输出处理(对结果进行格式化、汇总、展示给用户)。

映射步骤

  1. 在DFD中找到主加工(中心变换) ------数据真正发生"转化"的位置
  2. 把主加工映射为SC图中的主模块
  3. 输入流部分映射为输入模块(负责接收和预处理数据)
  4. 输出流部分映射为输出模块(负责结果处理和展示)

举例:一个工资计算系统,输入是"员工考勤数据",主加工是"计算工资",输出是"工资单"。映射为SC图就是三个模块:输入模块、工资计算模块、输出模块。

4.2 事务流映射(根据类型分支处理)

适用场景 :DFD中有一个 "事务中心" ,根据输入数据的类型或条件,选择不同的处理路径。

映射步骤

  1. 在DFD中找到事务中心(决定走哪条路的加工)
  2. 事务中心映射为SC图中的事务调度模块
  3. 每条处理路径分别映射为一个动作模块(一组完成特定功能的模块)

举例:一个订单处理系统,根据订单类型(普通/加急/国际)走不同的处理流程。映射为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图 #结构化设计 #软件工程

相关推荐
十月的皮皮1 小时前
C语言学习笔记20260716-编译与链接
c语言·笔记·学习
梁辰兴1 小时前
软件工程:软件工程的目标与原则
软件工程·目标·实践应用·梁辰兴·目标体系·原则·基本原则
影视飓风TIM2 小时前
Linux基础入门笔记:命令、内核架构与压缩传输全梳理
linux·笔记·架构
chouchuang14 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
lisw0518 小时前
【计算机科学技术】算力是什么?为何用小时计?怎么使用?
人工智能·机器学习·软件工程
岑梓铭18 小时前
《考研408数据结构》第六章(6.3 图的遍历)复习笔记
数据结构·笔记·考研··拓扑排序·408
Dola_Zou18 小时前
以CmASIC重塑AI+边缘设备的安全与商业复利
人工智能·安全·软件工程·软件加密
he_wen_jian18 小时前
【无标题】
笔记
灵性(๑>ڡ<)☆19 小时前
Java学习笔记--面向对象高级(多态)
笔记·学习