【软考高级·系统分析师全链路通关实战】第 38 篇:系统设计(一)——概要设计与模块设计
本系列定位:面向有开发经验、从零备考软考高级「系统分析师」的工程师,以《系统分析师教程(第 2 版)》为主线,按「综合知识 → 案例分析 → 论文」三科组织,需求工程与 UML 建模深拆,60 篇带你从考试小白到三科同过。
本篇你将学到
- 概要设计与详细设计的任务边界与各自产出物(谁在什么阶段画什么图)
- 模块设计四原则:信息隐蔽、高内聚低耦合、模块大小适度、扇入扇出合理
- 内聚七级与耦合七级的排序(综合知识必考排序题,必须秒排)
- 人机界面设计三原则与系统设计说明书的内容框架
- 云诊通实战:处方审方模块的结构图与扇入扇出分析(大纲指定示范)
学完本篇,你将拿下综合知识中「内聚耦合排序」这一固定送分题,并具备案例题「评价模块划分质量」的答题框架。
考点热力表
| 知识点 | 综合知识 | 案例分析 | 论文 |
|---|---|---|---|
| 概要设计 vs 详细设计边界 | ★★ | ★ | ★★ |
| 内聚七级排序 | ★★★ | ★★ | — |
| 耦合七级排序 | ★★★ | ★★ | — |
| 模块设计四原则 | ★★ | ★★ | ★★ |
| 扇入扇出与结构图 | ★★ | ★★ | ★ |
| 人机界面设计三原则 | ★★ | ★ | ★★ |
| 系统设计说明书 | ★ | ★ | ★ |
一、概要设计与详细设计:边界在哪
1.1 两阶段的任务分工
系统设计分两个阶段,边界一句话:概要设计定「怎么分」,详细设计定「怎么做」。
| 维度 | 概要设计(总体设计) | 详细设计 |
|---|---|---|
| 任务 | 将需求转化为总体结构与模块划分:架构、模块、接口、数据总体结构 | 为每个模块设计内部实现方案:算法、数据结构、输入输出细节 |
| 核心产出 | 结构图(模块层次图)、模块间接口定义、数据总体设计 | 模块详细流程(流程图/PAD/伪代码)、代码设计、输入输出设计 |
| 对应视图 | 第 34 篇开发视图(模块组织)的落地 | 进程/逻辑视图的细化 |
| 完成标志 | 系统设计说明书(总体部分)评审通过 | 详细设计说明书评审通过 |
第 34 篇架构设计把 SRS 翻译成结构决策,概要设计把这些决策细化为可指派给开发人员的模块清单与接口契约——云诊通 7 名开发人员的分工依据正是概要设计产物。OO 路线下概要设计对应「类与包的组织」(第 17 篇分包即概要设计产物),结构化路线对应「结构图」(本篇主角)。
1.2 系统设计说明书
最小完备内容:①总体结构(模块划分与层次);②每个模块的功能、接口(输入/输出/调用关系);③数据设计(与第 10-11 篇数据库设计衔接的映射说明);④运行设计(模块执行控制);⑤出错处理设计;⑥界面与安全设计要点。论文写设计过程时,列产出物清单是低成本高可信的「真实感」素材。
二、模块设计四原则
2.1 信息隐蔽与抽象
信息隐蔽(information hiding):模块内部的数据与实现细节对其他模块不可见,只暴露必要的接口——第 17 篇构件「封装实现、接口契约」的模块版。收益:内部修改不波及外部(可修改性的根)。抽象:分层定义接口时先约定「做什么」再实现「怎么做」,与信息隐蔽互为表里。
2.2 高内聚低耦合
内聚(cohesion)衡量模块内部元素的关联紧密程度(越高越好);耦合(coupling)衡量模块之间的依赖强度(越低越好)。两者是一体两面:内部紧密了,对外暴露的必然少。
内聚七级(由低到高)——记忆链:偶然→逻辑→时间→过程→通信→顺序→功能:
| 级别 | 含义 | 例子 |
|---|---|---|
| 偶然内聚 | 元素只是碰巧放在一起,无实质关联 | 「公共工具箱」把不相干函数塞一个模块 |
| 逻辑内聚 | 一组功能相似的功能由开关参数选择执行 | 一个模块靠 flag 既做新增又做删除 |
| 时间内聚 | 因同一时刻执行而聚在一起 | 系统初始化模块(各类初始化一起跑) |
| 过程内聚 | 按预定流程顺序执行 | 一段按业务顺序串起来的处理 |
| 通信内聚 | 操作同一数据集的各功能 | 对「处方单」的读、改、校验 |
| 顺序内聚 | 上一步输出是下一步输入,同一数据流 | 解析→校验→格式化报告数据 |
| 功能内聚 | 全部元素共同完成单一明确功能 | 「计算处方金额」 |
耦合七级(由低到高)——记忆链:非直接→数据→标记→控制→公共→内容(部分教材含外部耦合,共七类,核心五级排序必背):
| 级别 | 含义 | 判定特征 |
|---|---|---|
| 非直接耦合 | 无直接联系,仅经主控协调 | 独立模块各干各的 |
| 数据耦合 | 只传简单数据参数 | 传 int/string 调用 |
| 标记耦合 | 传数据结构(记录)整体 | 传整个「处方对象」但只用少数字段 |
| 控制耦合 | 传控制变量影响对方逻辑 | 传 flag 决定对方执行哪段 |
| 公共耦合 | 共享全局数据区 | 多模块读写同一全局变量 |
| 内容耦合 | 直接访问对方内部数据/代码 | 改对方内部变量、跳进对方代码段 |
考试判定技巧:题面出现「传开关/标志决定执行分支」→控制耦合(既答耦合也常与逻辑内聚成对出现);「共用全局变量」→公共耦合;「一个模块完成一个明确功能」→功能内聚。排序题直接背两条链。
2.3 模块大小与扇入扇出
- 模块大小适度:过大→内聚可能不足,应拆;过小→调用开销与理解成本占比过高,不必硬拆。经验区间 50-100 行量级,以「单一功能讲得清」为准
- 扇入(fan-in):调用本模块的上游模块数——扇入越高越好(被复用充分,抽象到位)
- 扇出(fan-out):本模块调用的下游模块数——扇出不宜过大(经验值 ≤7),扇出大说明它成了「调度杂烩」,应增加中间层
- 健康形态:顶层扇出大(调度)、中层扇入高(复用)、底层原子模块——枣核形结构
三、人机界面设计三原则
| 原则 | 含义 | 云诊通落地 |
|---|---|---|
| 置于用户控制之下 | 用户发起与中止动作,不强迫用户按系统节奏操作 | 问诊会话可暂停续答;不弹强制阻断式广告窗 |
| 减少用户记忆负担 | 提供可见选项与提示,不让用户背规则 | 处方页面显示历史过敏药警示,不靠医生记忆 |
| 保持界面一致性 | 同一系统内术语、布局、操作方式统一 | 七业务域统一「列表-详情-操作」模式与色彩语义 |
医生端是三原则的极端检验场景:医生在门诊间隙碎片化操作,界面必须「抬手就会」——第 27 篇需求获取时医生「操作极简」的诉求在此兑现。界面设计在论文「论人机界面设计」类题目中展开,三原则就是骨架段。
四、云诊通实战:处方审方模块的结构图与扇入扇出
4.1 结构图
处方审方链路的模块结构(结构化设计路线的标准画法,方框为模块、连线为调用):
4.2 扇入扇出分析(案例答题示范)
逐点分析,每点都是可写的采分点:
- M5 处方合规性检查扇入为 3(被接收校验、状态管理、打印归档三处调用)——高扇入说明它是抽取到位的公共功能,符合「公共校验逻辑单点实现」的复用要求,是好设计
- M0 顶层调度扇出为 4(≤7 经验值)——职责边界清晰;若继续把审方细节也挂到 M0(扇出到 8),它将退化为「调度杂烩」,正确做法是保留 M2 作为中间编排层——这正是「增加中间层降扇出」的标准手法
- M9 审方记录留存扇入为 2 且位于底层——底层原子模块、高扇入,枣核形健康形态
- 发现的问题与改进:若初版设计中「自动审方规则」与「药师人工审方」被塞进一个模块靠 flag 切换(逻辑内聚+控制耦合),改进方案是拆为 M6/M7 两个功能内聚模块,由 M2 编排——「拆开关为两模块」是评价模块质量题的万能改进句式
这个示范把四原则全部用上:信息隐蔽(规则引擎内部规则不外露)、内聚耦合(拆逻辑内聚为功能内聚)、扇入扇出(M5 高扇入、M0 扇出受控)、模块大小(M2 只做编排不做事,规则细节在 M7)。
真题风格自测题
1. 下列任务中属于概要设计而非详细设计的是( )。
A. 确定模块划分与模块间接口 B. 设计某模块内部算法 C. 编写某模块伪代码 D. 设计输入界面字段校验规则
2. 内聚级别由高到低排序正确的是( )。
A. 功能>顺序>通信>过程>时间>逻辑>偶然 B. 偶然>逻辑>时间>过程>通信>顺序>功能 C. 通信>顺序>功能>过程>时间>逻辑>偶然 D. 功能>通信>顺序>时间>过程>逻辑>偶然
3. 耦合级别由低到高排序正确的是( )。
A. 非直接>数据>标记>控制>公共>内容 B. 内容>公共>控制>标记>数据>非直接 C. 数据>非直接>控制>标记>公共>内容 D. 非直接>标记>数据>公共>控制>内容
4. 模块 A 调用模块 B 时传入一个标志变量,B 根据该标志决定执行哪段逻辑,这属于( )。
A. 数据耦合 B. 控制耦合 C. 公共耦合 D. 内容耦合
5. 多个模块共同读写同一全局数据结构,属于( )。
A. 标记耦合 B. 数据耦合 C. 公共耦合 D. 非直接耦合
6. 一个模块内的处理元素在同一数据集上操作(读、改、校验同一处方单),该内聚类型是( )。
A. 时间内聚 B. 通信内聚 C. 顺序内聚 D. 功能内聚
7. 系统初始化模块把各类不相关数据的初始化放在一起执行,属于( )。
A. 偶然内聚 B. 逻辑内聚 C. 时间内聚 D. 过程内聚
8. 关于扇入扇出,正确的说法是( )。
A. 扇入越高越差 B. 扇出越大越好 C. 扇入高表示复用充分,扇出不宜过大(经验上≤7) D. 扇出必须为 1
9. 降低顶层模块扇出过大的常用手法是( )。
A. 增加中间层承接部分调度 B. 删除功能 C. 合并所有模块为一个 D. 改用全局变量通信
10. 模块内部数据与实现细节对其他模块不可见,只暴露必要接口,这体现的原则是( )。
A. 信息隐蔽 B. 公共耦合 C. 偶然内聚 D. 扇入最大化
11. 人机界面设计三原则不包括( )。
A. 置于用户控制之下 B. 减少用户记忆负担 C. 保持界面一致性 D. 界面元素越多越好
12. 「自动审方」与「药师人工审方」若被塞进同一模块靠开关参数切换,其设计问题是( )。
A. 功能内聚+数据耦合 B. 逻辑内聚+控制耦合,应拆为两个功能内聚模块 C. 顺序内聚,无需修改 D. 完全合规
13. 概要设计阶段最核心的图示产出物是( )。
A. 结构图(模块层次与调用关系) B. 数据库物理存储图 C. 界面配色方案 D. 单元测试用例
参考答案:1.A 2.A 3.A 4.B 5.C 6.B 7.C 8.C 9.A 10.A 11.D 12.B 13.A(第 2/3 题的两条链必须背到「闭眼秒排」:内聚偶然最低功能最高,耦合非直接最低内容最高)
本篇小结
| 知识点 | 核心内容 |
|---|---|
| 两设计边界 | 概要定「怎么分」(结构图+接口),详细定「怎么做」(算法+数据结构) |
| 四原则 | 信息隐蔽、高内聚低耦合、模块大小适度、扇入扇出合理 |
| 内聚七级 | 偶然<逻辑<时间<过程<通信<顺序<功能(高好) |
| 耦合七级 | 非直接<数据<标记<控制<公共<内容(低好) |
| 判定技巧 | flag 选分支→控制耦合;全局共享→公共耦合;单一明确功能→功能内聚 |
| 扇入扇出 | 扇入高=复用好;扇出≤7;枣核形结构(顶层调度/中层复用/底层原子) |
| 界面三原则 | 用户控制、减少记忆负担、一致性 |
| 云诊通示范 | 合规检查高扇入是好设计;拆「开关式」审方为两模块;降扇出加中间层 |
下篇预告
第 39 篇:系统设计(二)——详细设计、输入输出与数据设计
处理过程设计四工具(流程图/NS 盒图/PAD/判定表)、输入校验方法全集、代码设计与校验位、以及云诊通监管上报接口的完整设计示范。
如果本篇内容对你有帮助,欢迎点赞收藏!有任何疑问,欢迎在评论区交流。