串联信息系统规划、分析、设计、实施与运行维护阶段,梳理各阶段目标、关键产出物和常用分析设计方法。

# 总览:系统生命周期主线

本篇整合系统规划、系统分析、系统设计、系统编码、系统测试和系统运行维护。复习主线是:规划回答 “是否值得做”,分析回答 “做什么”,设计回答 “怎么做”,编码回答 “如何实现”,测试回答 “是否正确”,运维回答 “如何长期稳定运行”。

# 生命周期阶段定位

1
2
3
4
5
6
flowchart LR
A[系统规划<br/>是否值得做] --> B[系统分析<br/>系统要做什么]
B --> C[系统设计<br/>系统怎么做]
C --> D[系统编码<br/>如何用代码实现]
D --> E[系统测试<br/>是否满足需求]
E --> F[运行维护<br/>如何长期稳定运行]

阶段核心问题关注点典型输出
系统规划项目是否值得做?范围多大?问题、机会、范围、可行性、计划问题陈述、范围陈述、可行性报告、项目计划
系统分析系统要做什么?功能需求、非功能需求、业务流程、用户角色SRS、需求模型、用例描述、需求追溯矩阵
系统设计系统怎么做?架构、模块、接口、数据库、部署、界面SDD、设计类图、序列图、构件图、部署图
系统编码如何用代码实现设计?环境、规范、代码、审查、单元测试、构建源代码、单元测试、构建脚本、可部署制品
系统测试系统是否正确且满足需求?缺陷发现、功能验证、质量评估、验收决策测试计划、测试用例、缺陷报告、测试报告
运行维护系统如何持续稳定运行?监控、故障、备份、安全、变更、优化运维手册、维护记录、变更记录、知识库

# 系统规划

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

# 核心目标

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

# 项目启动的三类理由

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

# 系统规划五大任务

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

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

# 甘特图与 WBS

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

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

# 可行性分析

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

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

决策结果通常有三种:

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

# 项目成功与失败因素

常见失败原因:

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

成功关键因素:

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

# 系统分析

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

# 系统需求分类

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

# 好需求的准则

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

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

# 需求获取过程

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

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

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

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

输出:

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

# 阶段二:获取需求

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

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

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

常用工具:

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

常见问题:

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

# 阶段四:需求管理

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

重点:

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

# 七种调查研究技术

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

推荐策略:

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

# 系统分析阶段的 UML 使用

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

# 系统设计

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

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

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

# 系统设计的两级活动

# 架构设计 / 概要设计

主要任务:

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

常见架构模式:

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

# 详细设计

主要任务:

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

# 设计原则与常见反模式

# SOLID 原则

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

# 高内聚、低耦合

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

# 常见反模式

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

# 设计阶段工作流与输出

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

# 分析到设计的转化

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

# 设计阶段输出物

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

# 系统编码

系统编码又称实现阶段,依据详细设计文档编写、调试并集成程序代码,把设计模型转化为可运行的软件系统。

# 编码阶段核心目标

  • 忠实实现设计:把设计类图、序列图、状态图等模型落实为代码。
  • 保证代码质量:通过编码规范、代码审查、单元测试提升正确性、可读性和可维护性。
  • 持续集成验证:逐步集成模块,尽早发现接口和依赖问题。
  • 落实非功能需求:在实现中处理性能、安全、并发、异常和资源约束。
  • 产出可部署制品:形成可执行文件、库、镜像或发布包。

# 编码阶段核心活动

活动要点
编码准备搭建 IDE、编译器、调试器、构建工具,配置 Git 仓库和 CI 流水线
代码编写按设计文档逐模块实现,遵循命名、格式、异常处理和注释规范
代码审查检查正确性、可读性、安全性、性能隐患和边界条件
单元测试针对函数、方法、类验证正常路径、边界条件和异常路径
持续集成提交后自动编译、运行测试、做静态分析,提前暴露集成问题
缺陷修复定位缺陷、修复、回归验证,形成闭环

# 现代实现方式

方式核心特征适用边界
AI 辅助编程用自然语言描述需求,由 AI 生成代码,人负责验证和审查适合提升效率,但不能替代需求澄清、架构判断和质量把关
低代码开发通过图形化配置、拖拽组件、自动代码生成快速构建应用适合内部管理工具、简单流程、原型和 MVP;不适合高并发核心系统和复杂算法系统
版本管理记录变更历史,支持多人协作、回退和分支开发Git 是主流基础设施,代码、配置、脚本都应纳入管理

编码不是 “把设计翻译成代码” 这么简单。实现阶段如果缺少规范、审查、测试和版本管理,设计质量很快会在代码层面退化。

# 系统测试

系统测试是验证与确认的核心活动,用执行程序的方式发现缺陷,验证系统是否符合需求规格,并评估性能、安全、可靠性等质量属性。

# 测试基本原则

  • 测试只能显示缺陷存在,不能证明系统没有缺陷。
  • 穷尽测试不现实,应按风险和优先级选择测试重点。
  • 测试越早开始,缺陷修复成本越低。
  • 缺陷有群集效应,少数模块常包含多数缺陷。
  • 测试用例需要持续更新,避免 “杀虫剂悖论”。
  • 测试策略依赖项目上下文,安全关键系统和普通业务系统的侧重点不同。

# 测试层次

层次测试对象目标主要执行者
单元测试函数、方法、类验证最小可测单元的正常、边界和异常行为开发人员
集成测试模块、组件、服务接口验证数据传递、协议一致性、事务完整性和协作关系开发人员 / 测试人员
系统测试完整系统验证端到端业务流程、功能需求和非功能需求专业测试团队
验收测试待交付系统由用户或业务代表确认是否满足业务预期用户 / 业务代表
回归测试已通过功能集合变更后确认旧功能未被破坏开发 / 测试团队

集成测试常见策略:

  • 自顶向下集成:先测上层控制逻辑,再逐步加入底层模块,需要桩程序。
  • 自底向上集成:先测底层模块,再逐步组装上层逻辑,需要驱动程序。
  • 三明治集成:结合自顶向下和自底向上。
  • 持续集成增量测试:每次提交后自动运行相关测试。

# 测试类型

类型关注点典型依据或场景
功能测试系统是否按需求实现功能需求文档、用例图、用例描述、业务规则
性能测试响应时间、吞吐量、资源利用率高并发访问、页面加载时间
压力测试极端负载下的极限和恢复能力逐步加压直到系统失效
容量测试海量数据处理能力大表查询、历史数据增长
安全测试未授权访问、注入、越权、身份伪造SQL 注入、XSS、权限绕过
兼容性测试不同硬件、系统、浏览器、设备表现多浏览器、多终端适配
可用性测试易用性、学习成本、任务完成效率用户完成关键任务的时间和错误率
可靠性测试长时间运行稳定性与故障恢复能力7x24 运行、MTBF
可维护性测试修改和扩展难度新增功能所需改动范围

# 重要测试概念

  • Alpha 测试:开发组织内部,由最终用户或模拟用户在受控环境中进行。
  • Beta 测试:真实用户环境中由最终用户进行,开发组织通常不在现场。
  • UAT:用户验收测试,按验收标准和业务场景正式确认系统是否可接收。
  • 冒烟测试:正式测试前快速验证核心功能,判断版本是否 “可测”。
  • 健全性测试:局部修复或小改动后,快速验证相关功能是否正常。
  • 探索性测试:测试人员凭经验自由探索系统,发现预设脚本外的问题。
  • 黑盒测试:基于规格说明设计输入输出,不关心内部结构。
  • 白盒测试:基于程序内部逻辑结构设计用例,关注路径和覆盖。

# 系统运行维护

系统运行维护是系统交付并投入使用后的持续保障活动,目标是让系统稳定运行,并在业务、法规、技术环境变化时不断修正和演化。

# 运行维护的核心目标

  • 保障可用性:按 SLA 提供稳定服务。
  • 快速响应故障:发现、诊断、恢复异常,降低业务中断时间。
  • 适应业务变化:持续修改功能和规则。
  • 优化性能:通过监控和调优提升响应速度、吞吐量和资源利用率。
  • 管理技术债务:重构老旧代码、升级平台,避免系统腐化。
  • 保障安全合规:修补漏洞,满足安全标准和法规要求。

# 系统运行活动

活动要点
日常监控与巡检监控服务器、网络、数据库、应用状态,设置告警阈值
事件与故障管理对告警和报修进行响应、分级、排查、处理和复盘
备份与恢复执行备份策略,定期演练恢复,保证灾难情况下数据可恢复
用户支持受理咨询、权限申请、数据修正等工单,维护知识库
性能与容量管理跟踪资源趋势,规划扩容或优化
安全管理管理账号权限,监控异常访问,安装补丁,进行安全审计

# 软件维护四种类型

类型含义示例
纠错性维护修复交付后发现的缺陷修复金额计算错误
适应性维护适应外部环境变化适配新操作系统、数据库升级、新法规
完善性维护增强已有功能或新增功能新增报表导出、优化查询、改进界面
预防性维护提前修改以避免未来问题重构高耦合模块、消除硬编码配置

维护阶段通常占软件生命周期成本的大头。完善性维护占比最高,因为用户会在长期使用中不断提出新的业务期望。

# 考点提炼与快速自测

# 本专题考点提炼

  1. 系统规划回答 “是否值得做”,系统分析回答 “做什么”,系统设计回答 “怎么做”。
  2. 系统规划五大任务:列问题、协商范围、评估价值、制定计划、汇报计划。
  3. 可行性分析至少包括技术、经济、操作、法律 / 合规、进度、资源等维度。
  4. 功能需求描述系统做什么,非功能需求描述质量属性和约束。
  5. 好需求应一致、完整、可行、必要、正确、可追踪、可验证。
  6. 七种调查研究技术要组合使用,不要只靠面谈或个人假设。
  7. 系统设计分为架构设计和详细设计。
  8. 分析模型偏业务,设计模型偏技术实现。
  9. 高内聚、低耦合和 SOLID 是设计阶段的核心质量原则。
  10. 系统编码阶段要同时关注代码实现、规范、审查、单元测试、持续集成和版本管理。
  11. AI 辅助编程和低代码能提高实现效率,但不能替代质量控制和技术边界判断。
  12. 测试层次包括单元、集成、系统、验收和回归测试。
  13. 黑盒测试看规格和输入输出,白盒测试看内部结构和路径覆盖。
  14. 测试只能发现缺陷存在,不能证明系统绝对无缺陷。
  15. 系统运行侧重稳定服务,系统维护侧重修改和演化。
  16. 四类维护:纠错性、适应性、完善性、预防性,其中完善性维护通常工作量最大。

# 快速自测

  • 系统规划阶段为什么通常不大量引入普通用户?
  • 项目范围陈述为什么重要?
  • 可行性分析中经济可行性和操作可行性分别关注什么?
  • 面谈、问卷、JRP、观察分别适合什么场景?
  • SRS 应解决哪些问题?
  • 架构设计和详细设计的区别是什么?
  • 为什么设计类图不能简单照搬分析类图?
  • 编码阶段为什么必须配合代码审查、单元测试和持续集成?
  • 低代码平台适合哪些场景?为什么不适合高并发核心系统?
  • 单元测试、集成测试、系统测试和验收测试的对象分别是什么?
  • 黑盒测试和白盒测试的主要区别是什么?
  • 回归测试为什么适合自动化?
  • 纠错性、适应性、完善性、预防性维护分别解决什么问题?
更新于 阅读次数

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

梦前辈 微信支付

微信支付

梦前辈 支付宝

支付宝