ARTICLE · 1143290
第五章 软件工程基础知识
一、软件工程概述
软件工程怎么来的?20 世纪 60 年代末爆发"软件危机"(成本失控、进度拖延、质量差、维护困难),1968 年 NATO 会议首次提出"软件工程"概念——用工程化方法开发软件。
软件工程三要素:
要素 | 含义 |
方法 | 完成软件开发各项任务的技术方法(如结构化方法、面向对象方法) |
工具 | 支持方法的软件支撑环境(如 CASE 工具) |
过程 | 把方法与工具综合起来,规定了任务的工作步骤 |
💡 一句话:方法(怎么做)+ 工具(用什么做)+ 过程(按什么顺序做)。
Boehm 软件工程 7 条基本原理(低频,记前两条即可):分阶段的生命周期计划严格管理、坚持阶段评审、严格的产品控制、采用现代程序设计技术、结果能清楚地审查、开发小组少而精、承认不断改进的必要性。
二、软件开发模型
1、五大传统模型对比
模型 | 一句话定位 | 关键特征 | 适用场景 | 记忆钩子 |
瀑布模型 | 线性顺序、按阶段推进 | 文档驱动,上一阶段完成才进下一阶段 | 需求明确且稳定 | "瀑布不能倒流" |
原型模型 | 快速构造可运行原型 | 抛弃型(仅用于明确需求)/ 演化型 | 需求不明确、难事先定义 | "先做个样儿看看" |
增量模型 | 分批交付可运行产品 | 第一个增量即构成核心产品,可及早交付 | 需求可分块、需要快速见效 | "分期交房" |
螺旋模型 | 瀑布 + 原型 + 风险分析 | 每轮迭代都要做风险分析,风险驱动 | 大型、高风险复杂项目 | "螺旋绕着风险转" |
喷泉模型 | 面向对象的迭代模型 | 迭代无间隙、各阶段重叠 | 面向对象开发 | "喷泉分不出层" |
📌 高频陷阱:
1)四个阶段(顺序必背,各阶段结束有里程碑):
阶段 | 里程碑(结束标志) | 一句话 |
初始 | 生命周期目标 | 定范围、看可行性 |
细化 | 生命周期架构 | 核心架构成形,风险大幅消除 |
构造 | 初始运行能力 | 剩余构件开发、集成 |
移交 | 产品发布 | 交付给用户 |
RUP 三大特点(考过 N 次"不属于的是"):① 用例驱动 ② 以架构为中心 ③ 迭代和增量开发。
💡 记忆:"用例带着架构迭代跑"。
3、敏捷开发
敏捷宣言 4 组价值观(2001 年,"高于"前后的词别记反!):
Scrum 框架(3-3-5):
类别 | 内容 |
3 个角色 | 产品负责人 PO(定需求优先级)、Scrum Master(教练/服务者,不是项目经理!)、开发团队 |
3 个工件 | 产品待办列表、Sprint 待办列表、产品增量 |
5 个事件 | Sprint(迭代)、Sprint 计划会、每日站会、Sprint 评审会、Sprint 回顾会 |
XP 极限编程:结对编程、测试驱动开发(TDD)、持续集成、小版本发布、简单设计、重构。
CBSD(基于构件的软件开发):核心思路是"购买/复用优先于开发",通过组装现成构件构建系统。
📌 易混点:Scrum Master 是服务型领导,负责排除障碍、维护流程,不负责分配任务、不指挥开发。
三、软件开发方法
方法 | 核心思想 | 记忆钩子 |
结构化方法 | 自顶向下、逐步求精;DFD + 数据字典 | "从上往下拆" |
面向对象方法 | OOA→OOD→OOP,对象+类+封装+继承+多态 | "万物皆对象" |
原型化方法 | 快速构造样品澄清需求 | 与原型模型对应 |
净室软件工程 | 防止缺陷而非事后修复,强调统计质量控制和正确性验证,无"调试"环节 | "先证明对,再写代码" |
逆向工程 | 由现有代码反推设计与需求信息(恢复级别:实现级→结构级→功能级→领域级) | "从结果往回推" |
再工程 | 逆向工程 + 重新设计开发(重构),防系统老化 | "推回去再往前走" |
💡 逆向工程不等于"抄代码"——它是从程序抽象出更高层次的设计信息。
四、软件测试
1、测试的世界观(判断题套路)
六种逻辑覆盖,由弱到强(排序题!):
语句覆盖 < 判定覆盖 < 条件覆盖 / 判定-条件覆盖 < 条件组合覆盖 < 路径覆盖
其中最强的是路径覆盖(覆盖所有可执行路径),最弱的是语句覆盖(每条语句至少执行一次)。
McCabe 环路复杂度(必考计算!):
V(G) = E − N + 2(E=控制流图的边数,N=节点数)或 V(G) = P + 1(P=判定节点数)
3、黑盒测试(只看功能,不看内部)
三大经典方法(选择题直接问"属于黑盒测试的是"):
💡 白盒=结构测试,黑盒=功能测试,看到"逻辑覆盖/基本路径"→白盒,看到"等价类/边界值"→黑盒。
4、测试的四个阶段 + V 模型
阶段 | 测什么 | 辅助模块 |
单元测试 | 单个模块,以白盒为主 | 桩模块(代替被调用的下层)、驱动模块(模拟调用它的上层) |
集成测试 | 模块间接口;自顶向下集成需要桩模块,自底向上需要驱动模块 | — |
系统测试 | 整个系统(含性能、安全、压力等) | — |
验收测试 | 用户参与:α 测试=用户在开发场所测;β 测试=用户在实际环境测 | — |
5、V 模型对应关系(案例题考过画图/填空):
需求分析 ──────对应──────> 验收测试概要设计 ──────对应──────> 系统测试详细设计 ──────对应──────> 集成测试编 码 ──────对应──────> 单元测试
💡 陷阱:"集成测试对应详细设计"(不是概要设计)——很多人凭感觉选反。
五、软件维护
维护类型 | 触发原因 | 例子 | 记忆钩子 |
改正性维护 | 交付后发现错误 | 修 Bug | "改错" |
适应性维护 | 环境变了 | 适配新操作系统/新硬件/新法规 | "环境变了就适应" |
完善性维护 | 用户要求增加功能、改善性能 | 加报表、优化响应速度 | "锦上添花" |
预防性维护 | 为将来可维护性、可靠性 | 重构老化代码 | "治未病" |
📌完善性维护占比最大(约 50%~60%)——问"软件维护中工作量最大的是"→ 完善性维护。
六、CMM / CMMI
CMMI 五级(第 2 版教程新译法,级别+名称都要记):
级别 | 名称 | 一句话 |
1 | 初始级 | 无序、靠英雄 |
2 | 已管理级 | 项目级管理(老 CMM 叫"可重复级") |
3 | 已定义级 | 组织级标准过程 |
4 | 量化管理级 | 用统计和量化手段管理 |
5 | 优化级 | 持续改进 |
💡 场景判断口诀:"项目管住=2,组织定标=3,量化度量=4,持续改进=5"。题干出现"统计过程控制、量化指标"→ 4 级;出现"不断优化、持续改进"→ 5 级。
七、软件配置管理
1、三个核心概念(概念辨析题):
三类配置库:开发库(个人工作区)→受控库(基线放这里)→ 产品库(发布产品)。
📌 基线 ≠ 版本号:基线强调"正式评审通过的、只能通过正式程序变更"这个状态。
八、软件项目管理要点
九、自测题
【第 1 题】某大型航空航天软件项目技术复杂、风险高,最适合采用的软件开发模型是( )
A. 瀑布模型
B. 螺旋模型
C. 增量模型
D. 喷泉模型
✅答案:B 。螺旋模型的最大特色是每轮迭代都进行风险分析、以风险驱动,适合大型高风险复杂项目。A 瀑布适合需求明确的项目;C 增量强调分批交付;D 喷泉是面向对象的迭代模型。 📍 考点:开发模型选择(高频!)
【第 2 题】关于瀑布模型,下列说法错误的是( )
A. 各阶段按顺序推进,上一阶段完成后才进入下一阶段
B. 是一种文档驱动的模型
C. 适合需求不明确、经常变化的项目
D. 阶段间存在因果的衔接关系
✅答案:C 。瀑布模型的前提正是需求明确且稳定;需求不明确应该用原型模型。A/B/D 都是瀑布的正确描述,其中"文档驱动"是瀑布的经典标签。 📍 考点:瀑布 vs 原型的适用场景辨析
【第 3 题】统一过程(RUP)的三大特点不包括( )
A. 用例驱动
B. 以架构为中心
C. 迭代和增量开发
D. 数据流驱动
✅答案:D 。RUP 三大特点 = 用例驱动 + 以架构为中心 + 迭代和增量开发。"数据流"是结构化分析方法(DFD)的关键词,拿来当干扰项。顺带复习 RUP 四阶段:初始→细化→构造→移交。 📍 考点:RUP 特点(考过多次"不包括")
【第 4 题】关于 Scrum 框架,下列说法正确的是( )
A. Scrum Master 负责给开发团队分配开发任务
B. 产品负责人(PO)负责维护产品待办列表并确定优先级
C. 每日站会时长通常为 30~60 分钟
D. Sprint 回顾会用于向用户演示产品增量
✅答案:B 。PO 的核心职责就是管理产品待办列表、排列优先级,代表用户利益。A 错:Scrum Master 是服务型领导,负责排除障碍、维护流程,不分配任务;C 错:每日站会一般不超过 15 分钟;D 错:向用户演示增量的是 Sprint 评审会,回顾会是对流程本身的复盘改进。 📍 考点:Scrum 角色/事件职责(近年热考)
【第 5 题】在白盒测试的逻辑覆盖中,覆盖强度最弱的是( )
A. 语句覆盖
B. 判定覆盖
C. 条件组合覆盖
D. 路径覆盖
✅答案:A 。强度排序:语句覆盖 < 判定覆盖 < 判定-条件覆盖 < 条件组合覆盖 < 路径覆盖。语句覆盖只要求每条语句执行一次,最弱;路径覆盖要求覆盖所有可执行路径,最强。 📍 考点:逻辑覆盖强度排序(必考!)
【第 6 题】某程序控制流图共有 10 条边、8 个节点,其环路复杂度 V(G) 为( )
A. 2
B. 3
C. 4
D. 18
✅答案:C 。McCabe 环路复杂度公式:V(G) = E − N + 2 = 10 − 8 + 2 = 4。另一算法 V(G) = 判定节点数 P + 1:由 8 节点 10 边可推出 P = 3,同样得 4。两个公式互相验证,考试务必都记住。 📍 考点:McCabe 环路复杂度计算(计算题常客)
【第 7 题】某银行系统上线运行三年后,因国家出台新的个人信息保护法规,需要修改系统的数据加密与留存模块。这属于( )
A. 改正性维护
B. 适应性维护
C. 完善性维护
D. 预防性维护
✅答案:B 。触发原因是外部环境变化(新法规),属于适应性维护。辨析:改 Bug = 改正性;加功能/提性能 = 完善性(占比最大);为将来防老化 = 预防性。法规/操作系统/硬件变化 → 一律适应性。 📍 考点:维护类型场景判断(高频!)
【第 8 题】某软件组织使用统计过程控制技术,对软件过程和产品质量建立量化的度量指标并进行管理。按照 CMMI,该组织的过程能力至少达到( )
A. 已定义级(3 级)
B. 已管理级(2 级)
C. 量化管理级(4 级)
D. 优化级(5 级)
✅答案:C 。题干关键词"统计过程控制、量化度量"正是 4 级量化管理级的定义特征。口诀:项目管住=2,组织定标=3,量化度量=4,持续改进=5。若是"不断优化、持续改进"才选 5 级。 📍 考点:CMMI 等级场景判断
【第 9 题】在 V 模型中,与详细设计阶段相对应的测试阶段是( )
A. 单元测试
B. 集成测试
C. 系统测试
D. 验收测试
✅答案:B 。V 模型对应关系:需求分析↔验收测试,概要设计↔系统测试,详细设计↔集成测试,编码↔单元测试。最大陷阱是"详细设计对应单元测试"(那是编码的对应项)——集成测试测的是模块间接口,接口正是详细设计的产物。 📍 考点:V 模型左右对应关系(案例题也考过)
【第 10 题】关于软件配置管理中的基线,下列说法错误的是( )
A. 基线是已经通过正式评审和批准的配置项集合
B. 基线的变化必须通过正式的变更控制程序
C. 基线一旦建立就永远不能修改
D. 基线为后续开发工作提供了一个稳定的基础
✅答案:C 。基线是"冻结但可变更"——不是不能改,而是改必须走变更控制流程(CCB 审批)后形成新基线。A、B、D 都是基线的正确表述:"正式评审通过 + 受控变更 + 稳定基础"三个关键词。 📍 考点:基线概念辨析
📌 本章速记卡