Appearance
考点清单
- [x] 软件开发生命周期(SDLC 三阶段)
- [x] 软件工程过程(PDCA)
- [x] 软件系统工具分类(开发/维护/管理支持)
- [x] CMM 能力成熟度模型(5 级)
- [x] CMMI(阶段式/连续式)
- [x] 软件过程模型对比(瀑布/原型/增量/螺旋/敏捷/RUP/喷泉/CBSD/形式化)
- [x] 瀑布模型(结构化开发/需求明确)
- [x] 原型模型(抛弃型/演化型)
- [x] 增量模型(核心模块优先)
- [x] 螺旋模型(风险驱动/大型高风险)
- [x] 敏捷方法(XP/水晶/Scrum/FDD)
- [x] 统一过程模型 RUP(4+1 视图/4 阶段/9 核心工作流)
- [x] 净室软件工程
笔记
一、软件开发生命周期(SDLC)
| 时期 | 内容 | 具体步骤 |
|---|---|---|
| 软件定义时期 | 确定总目标 | 问题定义、可行性研究、需求分析 |
| 软件开发时期 | 设计与实现 | 概要设计、详细设计、编码、测试 |
| 软件运行和维护 | 交付使用并持续维护 | 维护、更新 |
软件设计四大活动: 数据设计 → 架构设计 → 人机界面设计 → 过程设计。
二、软件工程过程(PDCA)
| 阶段 | 内容 |
|---|---|
| P(Plan)— 软件规格说明 | 规定软件功能及运行时限制 |
| D(Do)— 软件开发 | 开发满足规格说明的软件 |
| C(Check)— 软件确认 | 确认软件满足用户需求 |
| A(Action)— 软件演进 | 运行中不断改进满足新需求 |
三、软件系统工具分类
| 类别 | 包含工具 |
|---|---|
| 软件开发工具 | 需求分析工具、设计工具、编码与排错工具、测试工具 |
| 软件维护工具 | 版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具 |
| 软件管理和软件支持工具 | 项目管理工具、配置管理工具、软件评价工具 |
四、能力成熟度模型 CMM ★
| 级别 | 特点 | 关键过程区域数 |
|---|---|---|
| 1. 初始级 | 过程无明确定义,成败依赖个人 | 无 |
| 2. 可重复级 | 建立基本项目管理过程,能跟踪费用/进度/功能 | 6 个(配置管理、质量保证、子合同管理、项目跟踪监督、项目策划、需求管理) |
| 3. 已定义级 | 过程文档化/标准化,整合为组织标准软件过程 | 7 个(同行评审、组间协调、产品工程、集成管理、培训大纲、过程定义、过程焦点) |
| 4. 已管理级 | 制定详细度量标准,定量理解和控制 | 2 个(质量管理、定量过程管理) |
| 5. 优化级 | 定量分析+过程持续改进 | 3 个(过程更改管理、技术改革管理、缺陷预防) |
CMMI(能力成熟度模型集成)
CMMI 是 CMM 的升级版,支持多工程学科和领域。
两种表示方法:
| 模型 | 关注点 | 特点 |
|---|---|---|
| 阶段式模型 | 组织整体成熟度 | 5 级:初始级→已管理级→已定义级→定量管理级→优化级 |
| 连续式模型 | 每个过程域的能力 | 不同过程域可达不同能力等级 |
CMMI 阶段式 5 级:
| 级别 | 特点 |
|---|---|
| 1.初始级 | 过程不可预测且缺乏控制 |
| 2.已管理级 | 过程为项目服务(需求管理、项目计划、配置管理、度量和分析等) |
| 3.已定义级 | 过程为组织服务(需求开发、技术解决方案、验证、确认、风险管理等) |
| 4.定量管理级 | 过程已度量和控制(组织过程性能、定量项目管理) |
| 5.优化级 | 集中过程改进和优化(组织级改革与实施、因果分析和解决方案) |
五、软件过程模型 ★
核心模型对比
| 特性 | 瀑布模型 | 螺旋模型 | 原型化模型 | 增量模型 | 喷泉模型 | CBSD | 形式化方法 |
|---|---|---|---|---|---|---|---|
| 核心思想 | 线性顺序分阶段 | 迭代原型+风险分析 | 快速原型交互理解需求 | 逐步开发核心和非核心 | 迭代无间隙,面向对象 | 预包装构件构造系统 | 严格数学基础 |
| 适用 | 需求明确,结构化高 | 庞大复杂高风险 | 需求不明确需快速迭代 | 可逐步交付的复杂系统 | 面向对象开发 | 高复用性需求 | 高可靠性系统 |
| 用户参与 | 低 | 高 | 高 | 高 | 高 | 中 | 低 |
| 风险控制 | 中 | 高 | 中 | 中 | 中 | 中 | 高 |
| 复用性 | 低 | 中 | 中 | 中 | 中 | 高 | 低 |
各模型详解
1. 瀑布模型 ★
结构化开发方法的标准模型,前阶段输出 = 后阶段输入,每个阶段结束有里程碑。
阶段:可行性分析 → 需求分析 → 软件设计 → 编码(含单元测试)→ 测试 → 运行维护。
- 优点:概念清晰、易于理解、进度好控制
- 缺点:需求难一次确定、变更代价高、各阶段不能并行
- 关键记忆:功能清晰、需求明确 → 选瀑布模型
2. 原型模型
解决瀑布模型需求难以一次确定的缺点。
两个阶段:原型开发 → 目标软件开发。
| 类型 | 说明 |
|---|---|
| 抛弃型原型 | 原型仅用于需求确认,确认后抛弃,继续用瀑布模型 |
| 演化型原型 | 不断补充完善原型,直至形成完整产品 |
- 特点:对用户需求动态响应、逐步纳入,构造方便快速造价低
3. 增量模型
首先开发核心模块,优先级最高的服务最先交付。
- 优点:逐步确认降低风险
- 缺点:不利于模块划分(非整体规划)
- 与原型区别:增量模型每次版本都是独立可操作的作品,原型构造一般是为了演示
4. 螺旋模型 ★
演化软件过程模型,风险驱动,适用于庞大复杂高风险系统。
四个象限:制定计划 → 风险分析 → 实施工程 → 客户评估。
- 特点:原型迭代特征 + 瀑布模型系统性结合,强调其他模型忽视的风险分析
- 包含维护周期,维护和开发之间没有本质区别
5. 敏捷方法
开发宣言:个体和交互 > 过程和工具;可工作的软件 > 面面俱到的文档;客户合作 > 合同谈判;响应变化 > 遵循计划。
两个核心特点:"适应性" 而非预设性;"面向人" 而非面向过程。
| 方法 | 核心理念 | 关键实践 |
|---|---|---|
| 极限编程(XP) | 交流、朴素、反馈、勇气 | 测试先行,近螺旋式开发,小周期迭代 |
| 水晶系列 | 以人为中心 | 机动性方法,共性核心元素 |
| 并列争球法(Scrum) | 迭代增量化过程 | 冲刺(Sprint),约 30 天/次,自组织小组 |
| 特性驱动(FDD) | 人+过程+技术 | 5 核心过程:整体对象模型→特征列表→计划→设计→构建 |
6. 统一过程模型(RUP)
重量级过程模型,用例驱动、以架构为中心、迭代和增量。
4 个阶段: 初始 → 细化 → 构造 → 移交。
9 个核心工作流: 业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。
4+1 视图模型: 用例视图(场景)→ 逻辑视图(功能/类图)→ 实现视图(模块组织/包图组件图)→ 进程视图(并发性能/活动图)→ 部署视图(拓扑结构/部署图)。
7. 其他模型
| 模型 | 特点 |
|---|---|
| 喷泉模型 | 以用户需求为动力、对象为驱动,适合面向对象开发,迭代性和无间隙性 |
| CBSD(基于构件开发) | 利用预先包装构件构造系统,增强复用性,建立构件库 |
| 形式化方法模型 | 严格数学基础,生成形式化数学规格说明 |
六、净室软件工程
以数学和统计学为基础,强调从源头预防缺陷,而非先开发再测试修复。
核心理念: 预防胜于修复、统计质量控制、零缺陷开发。
应用技术: 统计过程控制(增量开发中监控质量)、基于函数的规范与设计、正确性验证(编码前验证)、统计测试和软件认证。
缺点: 理论化(需数学知识)、耗时(正确性验证困难)、不进行传统模块测试可能不现实。