系统设计
1 系统设计概述
1.1 系统设计定义
系统设计的目标是根据系统分析的结果,完成系统的构建过程。其主要目的是绘制系统的蓝图,权衡和比较各种技术和实施方法的利弊,合理分配各种资源,构建新系统的详细设计方案和相关模型,指导系统实施工作的顺利开展。
系统设计的主要内容包括概要设计和详细设计:
- 概要设计(又称系统总体结构设计):将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。
- 详细设计:将系统开发的总任务分解成许多个基本的、具体的任务,为每个具体任务选择适当的技术手段和处理方法。
1.2 详细设计分类
| 序号 | 设计类型 | 说明 |
|---|---|---|
| 1 | 网络设计 | 根据系统要求选择网络结构,安排网络和设备的分布,考虑网络布线和设备部署 |
| 2 | 代码设计 | 考虑系统编码问题,关键在于分类。常用线分类法(层级关系)和面分类法(多维度分类) |
| 3 | 输入/输出设计 | 确保数据完整性、正确性和一致性 |
| 4 | 处理流程设计 | 确定各模块内部结构(局部数据组织、控制流、加工过程和实施细节) |
| 5 | 数据存储设计 | 选择存储方式、介质、组织方式和记录格式,估算数据容量 |
| 6 | 用户界面设计 | 三大黄金原则:置于用户控制之下、减轻用户记忆负担、保持界面一致性 |
| 7 | 安全性和可靠性设计 | 确保系统运行环境安全和数据处理控制 |
1.3 输入设计原则
- 输入数据最少原则:尽量减少输入数据量
- 简单性原则:输入操作应简单易行
- 尽早验证原则:尽早对输入数据进行校验
- 少转换原则:尽量减少数据格式转换
2 处理流程设计
2.1 业务流程基本概念
业务流程:一组将输入转化为输出的相互关联或相互作用的活动。
流程包含 6 个基本要素:
| 要素 | 说明 |
|---|---|
| 输入资源 | 流程的输入 |
| 活动 | 流程中的操作步骤 |
| 活动的相互作用(结构) | 活动之间的关系 |
| 输出结果 | 流程的产出 |
| 用户 | 流程的服务对象 |
| 价值 | 流程创造的价值 |
流程定义 vs 流程实例:流程定义是对业务过程的形式化表示;流程实例是流程定义的运行实例(即一次具体的流程操作)。
2.2 流程设计工具
流程设计工具分为三类:图形工具、表格工具和语言工具。
2.2.1 程序流程图(PFD)
- 用图框表示各种操作,独立于程序设计语言
- 包含 5 种基本控制结构:顺序型、选择型、多分支选择型、当型循环(WHILE)、直到型循环(UNTIL)
2.2.2 IPO 图
- 描述构成软件系统的每个模块的输入、输出和数据加工
2.2.3 N-S 图(盒图)
- 容易表示嵌套和层次关系,具有强烈的结构化特征
- 同样包含 5 种基本控制结构
- 缺点:问题复杂时 N-S 图可能很大,不适合复杂程序设计
2.2.4 问题分析图(PAD)
- 支持结构化程序设计的图形工具
- 包含 5 种基本控制结构
- 优点:清晰的逻辑结构、标准化的图形,引导设计人员使用结构化方法
2.2.5 过程设计语言(PDL)
- 也称为结构化语言或伪代码
- 采用自然语言的词汇和结构化程序设计语言的语法
- 外层语法:描述结构;内层语法:描述操作
2.2.6 判定表
- 用表格形式表达逻辑判断问题
- 分为 4 个部分:
| 部分 | 位置 | 内容 |
|---|---|---|
| 条件说明 | 左上 | 列出所有条件 |
| 条件组合 | 右上 | 各种条件的组合 |
| 行动说明 | 左下 | 列出所有行动 |
| 行动分配 | 右下 | 各条件组合下对应的行动 |
示例(折扣率判定表):
| 条件和行动 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| C1: 交易额≥50000 | T | T | T | T | F | F | F | F |
| C2: 近3月无欠款 | T | T | F | F | T | T | F | F |
| C3: 交易≥20年 | T | F | T | F | T | F | T | F |
| A1: 折扣15% | Y | Y | ||||||
| A2: 折扣10% | Y | |||||||
| A3: 折扣5% | Y | |||||||
| A4: 无折扣 | Y | Y | Y | Y |
2.2.7 判定树
- 用树形结构表达不同条件下的不同处理流程
- 比语言、表格方式更直观
- 左侧为加工名(树根),中间为各种条件,右侧为所有行动
2.3 业务流程重组(BPR)
BPR:对企业的业务流程进行根本性的再思考和彻底性的再设计,从而在成本、质量、服务和速度等方面获得显著性的成就。
业务流程分类:
| 类型 | 说明 |
|---|---|
| 操作流程 | 直接与满足外部顾客需求相关的活动 |
| 支持流程 | 保证操作流程顺利执行的支撑活动(资金、人力、设备、信息系统) |
| 管理流程 | 指导企业整体运营方向,确定价值取向 |
BPR 实施方法:
- 在研究和描述企业现有业务流程的基础上进行重新设计
- 从一张白纸开始构建企业理想的业务流程(可参考相关企业管理水准)
BPR 设计原则:
- 以流程为中心的原则
- 团队式管理原则(以人为本)
- 以顾客为导向的原则
BPR 与信息系统规划的关系:相辅相成
- 信息系统规划要以 BPR 为前提,以业务流程为主线
- 面向流程的信息系统规划驱动企业的 BPR
基于 BPR 的信息系统规划步骤:
| 步骤 | 内容 |
|---|---|
| 1. 战略规划 | 明确企业战略目标,使信息系统战略目标与企业一致 |
| 2. 流程规划 | 分析业务流程,选出关键流程进行改进 |
| 3. 数据规划 | 对业务流程所需数据分类(类似 BSP 法),产生不同数据类 |
| 4. 功能规划 | 建立 CU 矩阵,划分功能模块 |
| 5. 实施规划 | 制定开发目的和项目开发计划 |
3 结构化设计
3.1 系统设计基本原理
| 原理 | 说明 |
|---|---|
| 抽象化 | 隐藏实现细节,关注本质特征 |
| 自顶而下,逐步求精 | 从高层到低层逐步细化 |
| 信息隐蔽 | 模块内部信息对外不可见 |
| 模块独立 | 高内聚,低耦合 |
3.2 系统设计原则
- 保持模块的大小适中
- 尽可能减少调用的深度
- 多扇入,少扇出
- 单入口,单出口
- 模块的作用域应该在模块之内
- 功能应该是可预测的
扇入大 → 模块复用程度高;扇出大 → 需要把下级模块进一步分解
3.3 内聚类型(从低到高)
| 内聚类型 | 定义 | 记忆关键字 |
|---|---|---|
| 偶然内聚 | 模块内各处理元素之间没有任何联系 | 无直接关系 |
| 逻辑内聚 | 模块内执行若干个逻辑上相似的功能,通过参数确定完成哪一个 | 逻辑相似、参数决定 |
| 时间内聚 | 把需要同时执行的动作组合在一起 | 同时执行 |
| 过程内聚 | 一个模块完成多个任务,必须按指定过程执行 | 指定的过程顺序 |
| 通信内聚 | 所有处理元素在同一数据结构上操作,或使用相同输入/输出数据 | 相同数据结构、相同输入输出 |
| 顺序内聚 | 各处理元素密切相关于同一功能且必须顺序执行,前一元素输出为后一元素输入 | 顺序执行、输入为输出 |
| 功能内聚 | 最强内聚,所有元素共同完成一个功能,缺一不可 | 共同作用、缺一不可 |
3.4 耦合类型(从低到高)
| 耦合类型 | 定义 | 记忆关键字 |
|---|---|---|
| 无直接耦合 | 两个模块没有直接关系,分别从属于不同模块的控制与调用 | 无直接关系 |
| 数据耦合 | 传递的是简单的数据值(值传递) | 传递数据值调用 |
| 标记耦合 | 传递的是数据结构 | 传递数据结构 |
| 控制耦合 | 传递控制变量,被调用模块选择性执行某一功能 | 控制变量、选择执行 |
| 外部耦合 | 通过软件之外的环境联合(如 I/O 设备、格式、通信协议) | 软件外部环境 |
| 公共耦合 | 通过公共数据环境相互作用 | 公共数据结构 |
| 内容耦合 | 直接使用另一个模块的内部数据,或非正常入口转入 | 模块内部关联 |
考试重点:传递”数据结构”→ 标记耦合;传递”数据值”→ 数据耦合
3.5 系统结构图(SC)
系统结构图(又称模块结构图)是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信。
SC 的组成:模块、模块之间的调用关系、模块之间的通信、辅助控制符号。
4 种模块类型:
| 模块类型 | 说明 |
|---|---|
| 传入模块 | 从下属获取数据送给上级 |
| 传出模块 | 从上级获取数据送给下属 |
| 变换模块 | 从上级获取数据处理后返回上级 |
| 协调模块 | 对所有下属模块进行协调 |
完全因子分解:全部实际加工由底层原子模块完成,其他非原子模块仅执行控制或协调功能,这是最好的系统。
3.6 系统结构图类型
| 类型 | 说明 |
|---|---|
| 变换型 SC | 信息沿输入通道进入→变换中心(主加工)处理→沿输出通道离开(变换流) |
| 事务型 SC | 信息沿输入通道到达事务中心→根据类型选择动作序列执行(事务流),由事务层、操作层、细节层三层组成 |
| 混合型 SC | 大规模系统中变换型和事务型的混合结构 |
4 面向对象设计
4.1 面向对象设计基本思想
OOD 是 OOA 方法的延续,基本思想包括抽象、封装和可扩展性(主要通过继承和多态实现)。
在 OOD 中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。
4.2 面向对象设计原则
| 原则 | 说明 | 记忆要点 |
|---|---|---|
| 开闭原则 | 软件实体可以扩展(开放),但不可修改(封闭) | 对扩展开放,对修改关闭 |
| 里氏替换原则 | 子类型必须能够替换掉它们的基类型 | 子类可替换父类 |
| 依赖倒置原则 | 抽象不应依赖细节,细节应依赖抽象;针对接口编程 | 针对接口编程 |
| 组合/聚合复用原则 | 尽量使用组合/聚合关系,少用继承;Has-A 用组合,Is-A 用继承 | Has-A 组合,Is-A 继承 |
| 接口隔离原则 | 使用多个专门的接口,不使用单一的总接口 | 多个专用接口 |
| 最少知识原则(迪米特法则) | 一个软件实体应尽可能少地与其他实体发生相互作用 | 少交互,通过第三者转发 |
4.3 对象持久化与 ORM
对象持久化:把内存中的对象保存到数据库或可永久保存的存储设备中。将对象持久化到关系数据库中,需要进行对象/关系映射(ORM)。
持久化技术的优点:
- 减少访问数据库次数,增加执行速度
- 代码重用性高,能完成大部分数据库操作
- 松散耦合,更换数据库只需修改配置文件
主流持久化技术框架:
| 框架 | 说明 |
|---|---|
| CMP(EJB 容器管理持久化) | 基于 EJB 技术,封装 ORM 和数据访问细节。缺点:须遵守复杂 J2EE 规范,灵活性受限,只能运行在 EJB 容器中 |
| Hibernate | 开源 ORM 框架,提供完整的对象/关系映射 |
| iBatis | 半自动 ORM,SQL 由开发者编写,灵活度高于 Hibernate |
| JDO | SUN 制定的 Java 数据对象新规范,提供透明的对象存储 |
5 设计模式
5.1 模式层次
| 层次 | 说明 | 示例 |
|---|---|---|
| 架构模式 | 软件设计中的高层决策 | C/S 结构 |
| 设计模式 | 描述不断重复发生的问题及其解决方案的核心 | 23 种 GoF 模式 |
| 惯用法 | 最低层模式,通过特定编程语言描述 | C++ 引用计数 |
设计模式四要素:模式名称、问题(何时使用)、解决方案(设计内容)、效果(应用效果)。
5.2 创建型模式
| 模式 | 定义 | 记忆关键字 |
|---|---|---|
| 抽象工厂模式 | 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定具体类 | 抽象接口 |
| 构建器模式 | 将一个复杂类的表示与其构造相分离,使得相同构建过程能得出不同表示 | 类和构造分离 |
| 工厂方法模式 | 定义一个创建对象的接口,但由子类决定需要实例化哪一个类 | 子类决定实例化 |
| 原型模式 | 用原型实例指定创建对象的类型,通过拷贝原型来创建新对象 | 原型实例、拷贝 |
| 单例模式 | 保证一个类只有一个实例,并提供一个访问它的全局访问点 | 唯一实例 |
5.3 结构型模式
| 模式 | 定义 | 记忆关键字 |
|---|---|---|
| 适配器模式 | 将一个类的接口转换成用户希望得到的另一种接口,使原本不相容的接口得以协同工作 | 转换、兼容接口 |
| 桥接模式 | 将类的抽象部分和它的实现部分分离开来,使它们可以独立变化 | 抽象和实现分离 |
| 组合模式 | 将对象组合成树型结构以表示”整体-部分”的层次结构,使单个对象和组合对象使用具有一致性 | 整体-部分、树形结构 |
| 装饰模式 | 动态地给一个对象添加一些额外的职责,比派生子类更灵活 | 附加职责 |
| 外观模式 | 定义一个高层接口,为子系统中的一组接口提供一致的外观,简化子系统使用 | 对外统一接口 |
| 享元模式 | 提供支持大量细粒度对象共享的有效方法 | 细粒度、共享 |
| 代理模式 | 为其他对象提供一种代理以控制这个对象的访问 | 代理控制 |
5.4 行为型模式
| 模式 | 定义 | 记忆关键字 |
|---|---|---|
| 职责链模式 | 通过给多个对象处理请求的机会,减少发送者与接收者之间的耦合,在链中传递请求直到有对象处理 | 传递请求、职责链 |
| 命令模式 | 将一个请求封装为一个对象,可用不同请求对客户参数化,支持排队、日志记录、可撤销操作 | 日志记录、可撤销 |
| 解释器模式 | 给定一种语言,定义其文法表示,并定义一个解释器来解释语言中的句子 | 解释器、虚拟机器 |
| 迭代器模式 | 提供一种方法顺序访问聚合对象中的各个元素,而不需要暴露该对象的内部表示 | 顺序访问、不暴露内部 |
| 中介者模式 | 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互调用 | 不直接引用 |
| 备忘录模式 | 在不破坏封装性的前提下,捕获对象的内部状态并保存,以便以后恢复 | 保存、恢复 |
| 观察者模式 | 定义对象间一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都得到通知并自动更新 | 通知、自动更新 |
| 状态模式 | 允许一个对象在其内部状态改变时改变它的行为 | 状态变成类 |
| 策略模式 | 定义一系列算法,把它们封装起来,使它们之间可互相替换 | 算法替换 |
| 模板方法模式 | 定义一个操作中的算法骨架,将一些步骤延迟到子类中 | 算法骨架、延迟到子类 |
| 访问者模式 | 表示一个作用于某对象结构中各元素的操作,在不改变各元素类的前提下定义新操作 | 数据和操作分离 |
6 输入/输出原型设计
6.1 输入设计
系统输入设计的关键考虑因素:用户需求、输入方式、输入格式、输入验证、输入反馈、输入历史、输入安全、输入效率。
输入设计 7 原则:
- 确定输入数据的类型和格式:文本数据、数字数据、图像数据;整数、浮点数、JPEG 等
- 确定输入数据的来源
- 设计良好的输入界面:考虑界面布局、控件选择、输入提示、错误提示
- 设计系统输入验证机制:考虑验证规则、错误提示、安全性
- 设计输入处理流程:考虑处理流程、数据清洗、数据转换
- 设计输入存储方案:考虑存储方式、存储结构、存储安全
- 设计输入安全机制:考虑访问控制、数据加密、防止 SQL 注入
6.2 输出设计
输出设计 3 方面内容:
| 方面 | 说明 |
|---|---|
| 确定输出内容 | 确定用户信息需求,设计输出信息内容、形式、项目及数据结构、数据类型、位数及取值范围、生成途径、完整性及一致性 |
| 选择输出设备与介质 | 设备:显示终端、打印机、绘图仪、磁带机、多媒体设备;介质:纸张、磁带、磁盘、胶卷、光盘 |
| 确定输出格式 | 报表输出、图形输出等,根据系统分析和管理业务需求决定 |
输出设计 7 原则:
- 简洁性原则:避免过多冗余信息和复杂设计
- 一致性原则:保持一致的设计风格和交互方式
- 可用性原则:注重用户体验和需求,方便、易用、可靠
- 可访问性原则:考虑不同用户的需求和能力
- 可维护性原则:注重系统的可维护性和可扩展性
- 安全性原则:注重系统的安全性和保密性
- 可扩展性原则:注重系统的可扩展性和灵活性
7 人机交互设计
7.1 设计目标
- 切实满足用户需求,功能有用、内容齐全
- 产品容易上手和使用,易操作、易理解、易学习
- 降低用户的错误率和学习成本
7.2 用户体验五层模型
| 层次 | 核心内容 | 说明 |
|---|---|---|
| 战略层 | 用户需求 + 产品目标 | 确定目标用户:用户细分 → 可用性研究 → 人物角色 |
| 范围层 | 功能规格 + 内容需求 | 将战略转化为应提供的内容和功能(工具型 vs 内容型) |
| 结构层 | 交互设计 + 信息架构 | 创建功能和内容之间的关系;信息架构有从上到下和从下到上两种分类体系 |
| 框架层 | 界面设计 + 导航设计 + 信息设计 | 决定交互元素放置位置;遵循用户习惯和使用生活比喻 |
| 表现层 | 视觉设计 | 用户所见的一切:字体、颜色、整体感觉 |
结构层信息架构的分类体系:
- 从上到下:从战略层向下推导内容和功能组织
- 从下到上:从已有内容向上归纳组织结构
信息架构的结构类型:层级结构、矩阵结构、自然结构、线性结构
7.3 如何设计良好的人机交互
- 了解用户:用户群体划分、需求调研、使用场景分析、竞品分析
- 设计交互界面:采用简单、自然、统一的操作方式
- 提供即时反馈机制:用户操作时系统提供对应反馈
- 辅助功能:为视觉、听觉、肢体障碍的用户提供额外功能
- 用户测试
- 迭代优化设计
- 多语言支持
- 与实际应用场景相结合
- 适当使用动画效果
- 适当使用新理念和新技术
参考资源
- 系统分析师教材(第二版)第13章
- 文老师软考教育