# 专题 10-12:系统规划、分析与设计

本篇整合系统规划、系统分析和系统设计。复习主线是:规划回答 “是否值得做”,分析回答 “做什么”,设计回答 “怎么做”。

# 1. 三个阶段的定位

1
2
3
4
flowchart LR
A[系统规划<br/>是否值得做] --> B[系统分析<br/>系统要做什么]
B --> C[系统设计<br/>系统怎么做]
C --> D[系统实现与测试]

阶段核心问题关注点典型输出
系统规划项目是否值得做?范围多大?问题、机会、范围、可行性、计划问题陈述、范围陈述、可行性报告、项目计划
系统分析系统要做什么?功能需求、非功能需求、业务流程、用户角色SRS、需求模型、用例描述、需求追溯矩阵
系统设计系统怎么做?架构、模块、接口、数据库、部署、界面SDD、设计类图、序列图、构件图、部署图

# 2. 系统规划

系统规划是软件工程过程的起始阶段,用来定义项目范围、进度、预算和团队。它的关键任务是用较低成本判断项目是否值得继续。

# 核心目标

  • 明确业务问题、机会或上级指示。
  • 划定系统边界,避免范围蔓延。
  • 通过可行性分析回答 “是否值得做”。
  • 制定项目计划、预算、进度和团队安排。
  • 向指导委员会汇报并获得正式授权。

# 项目启动的三类理由

理由含义示例
应对机会新技术、新市场带来业务增长可能开发线上服务抢占市场
解决问题当前流程存在痛点、错误、延误或高成本替换低效人工审批流程
依照指示法规、战略或上级要求数据合规整改系统

# 3. 系统规划五大任务

1
2
3
4
5
flowchart LR
A[列出触发项目的问题] --> B[协商初步范围]
B --> C[评估项目价值]
C --> D[计划进度、预算和成员]
D --> E[汇报项目计划]

任务关键活动主要发布物
列出问题识别问题、机会或指示,评估优先级初始问题陈述
协商范围明确系统包含与不包含的业务功能项目范围陈述
评估价值从多维度判断项目是否值得做可行性报告
制定计划WBS、PERT/CPM、甘特图、预算和团队安排基线计划、进度表
汇报计划向指导委员会说明方案并争取批准项目计划书 / 项目方案

# 甘特图与 WBS

  • WBS:把项目分解成可管理的工作包。
  • 甘特图:用条状图表示任务、时间跨度和进度。
  • PERT/CPM:分析任务依赖和关键路径。

《人月神话》的核心提醒:增加人手不一定缩短工期,后期加人可能因沟通和培训成本让项目更慢。

# 4. 可行性分析

可行性分析是系统规划阶段的核心决策点,通常形成《可行性研究报告》。

维度核心问题
技术可行性现有技术、团队能力和系统环境能否实现需求?
经济可行性成本是否可接受?收益是否值得投入?
操作可行性用户是否能接受?是否会与组织流程冲突?
法律 / 合规可行性是否符合数据保护、行业监管、知识产权等要求?
进度可行性是否能在规定期限内完成?
资源可行性人员、设备、软件许可等资源是否可获得?
组织文化可行性是否会遭遇强烈组织阻力?

决策结果通常有三种:

  • 全部通过:立项。
  • 有条件通过:调整范围、资源或计划后继续。
  • 否决:终止或重新规划。

# 5. 项目成功与失败因素

常见失败原因:

  • 系统需求不完整或频繁变化。
  • 用户参与不足。
  • 缺少管理层支持。
  • 计划不充分,目标不清楚。
  • 缺少必要资源。

成功关键因素:

  • 清晰的需求定义。
  • 大量且有效的用户参与。
  • 上层管理支持。
  • 完整详细的项目计划。
  • 符合实际的进度和里程碑。

# 6. 系统分析

系统分析是软件生命周期第二阶段,核心任务是理解业务需求并转化为详细的系统需求规格。它承接系统规划,为系统设计提供需求基线。

# 系统需求分类

类别含义示例
功能需求系统必须实现的功能在线提交订单、自动发送确认邮件
非功能需求系统必须具备的质量属性或约束响应时间小于 2 秒、支持 5000 并发、加密传输

# 好需求的准则

  • 一致:不相互冲突。
  • 完整:覆盖所有必要输入、输出和响应。
  • 可行:在资源和约束下能实现。
  • 需要:确实支持系统目标。
  • 正确:准确表达用户真实需求。
  • 可追踪:能映射到设计、代码和测试。
  • 可验证:能通过测试或评审证明是否满足。

需求错误越晚发现,修复成本越高。需求阶段修正成本最低,到了设计、实现、测试和上线后会成倍放大。

# 7. 需求获取过程

需求获取不是一次性访谈,而是结构化过程。

1
2
3
4
flowchart LR
A[发现和分析问题] --> B[获取需求]
B --> C[归档和分析需求]
C --> D[需求管理]

# 阶段一:发现和分析问题

核心是区分表面症状和根本问题,明确范围、目标和利益相关者。

输出:

  • 问题陈述草案。
  • 利益相关者清单。
  • 初步系统改进目标。

# 阶段二:获取需求

系统分析员通常需要收集三类信息:

问题类型核心关注
现有业务过程是什么用户现在怎么工作
业务过程应该怎样完成新系统应如何支持工作
需要什么信息报表、字段、查询、决策信息

# 阶段三:归档和分析需求

常用工具:

  • 用例:描述参与者与系统交互。
  • 决策表:描述复杂业务规则。
  • 需求表:结构化管理需求属性。
  • SRS:正式记录功能需求、非功能需求、接口、约束。

常见问题:

  • 遗漏、矛盾、不可行、重叠、二义性。

# 阶段四:需求管理

需求管理用于控制需求变化。项目中 50% 以上需求在上线前发生变化并不罕见。

重点:

  • 建立正式变更流程。
  • 每项变更评估影响并获得批准。
  • 维护需求基线。
  • 建立需求追溯矩阵。

# 8. 七种调查研究技术

技术类型主要优点主要缺点
面谈交互式深入、灵活、可观察身体语言耗时费钱,依赖沟通能力
问卷调查表交互式快速低廉覆盖大量人群,便于统计难设计,回答率不稳定,无法追问
JRP交互式促进共识,减少矛盾,缩短需求获取时间依赖主持人能力和会议准备
获取原型交互式直观验证需求和可用性用户可能误以为原型就是最终系统
文档采样非交互式成本低,能了解现有流程和表单依赖样本代表性和分析判断
实地调查非交互式借鉴行业经验和类似项目外部经验可能不完全匹配
观察非交互式数据可靠,适合复杂任务用户可能不自然,时机影响结果

推荐策略:

  1. 先看现有文档、表格、报告。
  2. 合适时观察现有系统。
  3. 用问卷澄清大范围问题。
  4. 再做面谈或 JRP。
  5. 对难以理解的功能构造获取原型。
  6. 对不确定信息追查到底。

# 9. 系统分析阶段的 UML 使用

UML 图分析阶段用法
用例图定义系统边界、参与者和功能范围
用例描述记录基本流、备选流和异常流
活动图用业务语言描述业务流程,泳道按角色划分
领域类图描述业务概念和关联,不强调技术实现
状态图描述关键业务对象生命周期
高层序列图可选,用业务语义描述交互场景

# 10. 系统设计

系统设计基于系统分析输出的 SRS,制定技术解决方案。它把业务语言转化为开发人员可实现的架构、组件、接口、数据模型和部署方案。

# 系统分析与系统设计对比

维度系统分析系统设计
核心问题系统要做什么?系统怎么做?
关注点业务需求、业务规则技术架构、实现方案
输出物需求规格说明书系统设计说明书
UML 重点用例图、活动图、领域类图设计类图、序列图、构件图、部署图
面向角色用户、业务分析师架构师、开发人员

# 11. 系统设计的两级活动

# 架构设计 / 概要设计

主要任务:

  • 确定分层架构、微服务、事件驱动等总体结构。
  • 选择编程语言、框架、中间件和数据库。
  • 划分模块、包、子系统和构件。
  • 定义构件提供接口和需求接口。
  • 规划部署节点和网络通信。
  • 落实安全、性能、可扩展性等非功能需求。

常见架构模式:

架构模式特点典型场景
分层架构表示层、业务层、持久层单向依赖Web 应用、企业系统
微服务架构按业务能力拆分为可独立部署服务大型分布式系统
事件驱动架构组件通过事件松耦合通信实时处理、IoT
管道 - 过滤器数据依次经过处理组件编译器、ETL
客户端 - 服务器客户端请求,服务器响应Web、App 后端

# 详细设计

主要任务:

  • 类设计:属性、方法、类型、可见性。
  • 交互设计:用序列图描述关键用例实现。
  • 状态设计:为复杂对象设计状态机。
  • 数据库物理设计:表结构、字段、索引、约束。
  • 界面设计:导航、布局、校验规则。
  • 算法设计:复杂逻辑用活动图或伪代码表达。

# 12. 设计原则与常见反模式

# SOLID 原则

原则含义
单一职责原则一个类只应有一个引起它变化的原因
开闭原则对扩展开放,对修改关闭
里氏替换原则子类必须能够替换父类
接口隔离原则不强迫客户依赖不用的方法
依赖倒转原则依赖抽象,而不是具体实现

# 高内聚、低耦合

  • 内聚:模块内部元素相关程度,越高越好。
  • 耦合:模块之间相互依赖程度,越低越好。

# 常见反模式

  • 上帝类:一个类承担过多职责。
  • 瑞士军刀接口:接口过大,客户被迫依赖不需要的方法。
  • 循环依赖:模块互相依赖,难以维护和测试。
  • 功能依恋:一个类过度使用另一个类的数据。
  • 过度设计:为不存在的未来需求设计复杂结构。

# 13. 设计阶段工作流与输出

1
2
3
4
5
6
flowchart LR
A[审查需求模型] --> B[确定设计策略]
B --> C[架构设计]
C --> D[详细设计]
D --> E[应用设计原则与模式]
E --> F[评审与基线化]

# 分析到设计的转化

转化含义
领域类图 → 设计类图添加方法、可见性、技术类、数据类型
用例描述 → 序列图把业务事件流细化为对象调用
业务活动图 → 算法活动图把业务流程转为技术控制流
需求模型 → 构件图 / 部署图把需求约束转化为架构模块和运行拓扑

# 设计阶段输出物

  • 系统设计说明书(SDD)。
  • 系统架构图:包图、构件图。
  • 设计类图。
  • 数据库设计文档:ER 图、表结构。
  • 接口协议文档:API 定义。
  • 非功能需求实现策略。
  • 详细设计文档:序列图、状态图、算法活动图、界面原型。
  • 部署架构图。
  • 设计评审记录。

# 14. 本专题考点提炼

  1. 系统规划回答 “是否值得做”,系统分析回答 “做什么”,系统设计回答 “怎么做”。
  2. 系统规划五大任务:列问题、协商范围、评估价值、制定计划、汇报计划。
  3. 可行性分析至少包括技术、经济、操作、法律 / 合规、进度、资源等维度。
  4. 功能需求描述系统做什么,非功能需求描述质量属性和约束。
  5. 好需求应一致、完整、可行、必要、正确、可追踪、可验证。
  6. 七种调查研究技术要组合使用,不要只靠面谈或个人假设。
  7. 系统设计分为架构设计和详细设计。
  8. 分析模型偏业务,设计模型偏技术实现。
  9. 高内聚、低耦合和 SOLID 是设计阶段的核心质量原则。

# 15. 快速自测

  • 系统规划阶段为什么通常不大量引入普通用户?
  • 项目范围陈述为什么重要?
  • 可行性分析中经济可行性和操作可行性分别关注什么?
  • 面谈、问卷、JRP、观察分别适合什么场景?
  • SRS 应解决哪些问题?
  • 架构设计和详细设计的区别是什么?
  • 为什么设计类图不能简单照搬分析类图?
更新于

请我喝[茶]~( ̄▽ ̄)~*

梦前辈 微信支付

微信支付

梦前辈 支付宝

支付宝