news 2026/7/15 13:20:48

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【软件工程】结构化设计:结构化设计方法(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图 #结构化设计 #软件工程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 13:19:48

开关电源设计核心挑战与四大拓扑选型指南

1. 开关电源设计的核心挑战与避坑逻辑从事硬件设计这些年,我拆解过上百款开关电源,也踩过几乎所有能想到的坑。新手工程师最常犯的错误,就是直接照搬参考设计,却对背后的原理一知半解。当电路出现振荡、发热甚至炸机时&#xff0c…

作者头像 李华
网站建设 2026/7/15 13:19:46

Navicat密码解密:三分钟找回丢失的数据库连接密码

Navicat密码解密:三分钟找回丢失的数据库连接密码 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 你是否曾经因为忘记Navicat数据库连接密码而…

作者头像 李华
网站建设 2026/7/15 13:19:30

Navicat无限试用期重置:3种高效自动化解决方案

Navicat无限试用期重置:3种高效自动化解决方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat Pre…

作者头像 李华
网站建设 2026/7/15 13:19:23

家装电线选购指南:从BVR软线到阻燃等级ZC的实战解析

这类家装电线选购问题,最值得先看的不是品牌列表,而是你家具体用在什么位置、负载多大、以及施工时到底需要硬线还是软线。我一般会建议先把使用场景和电流需求算清楚,再去看线径和材质,最后才对比品牌和价格。 金环宇 ZC-BVR 4 …

作者头像 李华
网站建设 2026/7/15 13:19:08

企业微信二次开发:用 Python 跑通联系人管理核心业务流

在私域流量运营中,对加进来的好友进行标签细分和备注规范,是后续精准推送的前提。很多刚接触企业微信二次开发的同学,往往不知道如何把“查询”、“改名”、“打标”这几个动作有机地串联起来。 本文直接分享一段纯干货代码。我们只用一个脚…

作者头像 李华
网站建设 2026/7/15 13:18:57

QQ音乐格式解密终极指南:qmcdump让你的加密音频重获自由

QQ音乐格式解密终极指南:qmcdump让你的加密音频重获自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是…

作者头像 李华