软件工程——核心概念终极整理版
一、软件工程基础概念
1.1 软件与软件危机
- 软件定义:软件 = 程序 + 数据 + 文档
- 程序:可执行指令序列
- 数据:程序处理的信息结构
- 文档:开发、使用和维护的图文资料
- 软件特点:逻辑实体、开发复杂、需长期维护、成本高、可复制
- 软件危机:
- 表现:成本失控、质量低、维护困难、需求不明确
- 原因:需求模糊、缺乏理论指导、复杂度高
- 解决途径:引入工程化方法学(结构化/面向对象)
1.2 软件工程定义与三要素
- 定义:采用工程化方法(系统化、规范化、可量化)开发维护软件,目标为低成本、高质量、易维护
- 三要素:
- 方法:技术手段(如结构化/面向对象方法)
- 工具:开发环境支持(IDE、测试工具等)
- 过程:任务框架(如瀑布模型、敏捷开发)
二、软件生命周期与开发模型
2.1 软件生命周期阶段
- 定义阶段:可行性研究、需求分析
- 开发阶段:设计、编码、测试
- 维护阶段:运行维护(改正性/适应性/完善性/预防性)
2.2 典型开发模型对比
| 模型 |
核心特点 |
适用场景 |
| 瀑布模型 |
阶段严格、文档驱动,灵活性差 |
需求明确且稳定的项目 |
| 原型模型 |
快速构建原型获取用户反馈,迭代开发 |
需求模糊或快速验证 |
| 螺旋模型 |
结合瀑布与原型,强调风险分析 |
高风险、复杂项目 |
| 敏捷模型 |
快速响应变化,强调团队协作(如Scrum、极限编程) |
需求频繁变化的项目 |
| 喷泉模型 |
面向对象,各阶段可交叉 |
面向对象开发 |
三、关键过程与设计原则
3.1 需求分析与设计
- 需求分析任务:
- 确定功能/性能需求、数据需求、导出逻辑模型(数据流图、E-R图)
- 结构化设计方法:
- 变换流:输入→处理→输出(顺序结构)
- 事务流:根据输入选择处理路径(多分支结构)
3.2 模块化与独立性
- 模块化原则:高内聚、低耦合
- 耦合类型(从低到高):数据耦合、控制耦合、公共耦合、内容耦合
- 内聚类型(从低到高):偶然内聚、逻辑内聚、时间内聚、功能内聚(最优)
- 设计启发原则:
四、软件测试与维护
4.1 测试分类与方法
| 测试类型 |
目标 |
方法 |
| 单元测试 |
验证模块功能 |
白盒测试(语句/路径覆盖) |
| 集成测试 |
验证模块接口 |
自顶向下/自底向上集成 |
| 系统测试 |
验证整体系统 |
黑盒测试(等价类/边界值) |
| 验收测试 |
用户验证需求符合性 |
α测试(内部)、β测试(外部) |
- 黑盒测试:关注输入输出(等价类划分、边界值分析)
- 白盒测试:覆盖代码逻辑(条件覆盖、路径覆盖)
4.2 软件维护类型
- 改正性维护:修复缺陷
- 适应性维护:适应环境变化
- 完善性维护:新增功能或优化性能
- 预防性维护:提高可维护性
五、进阶考点与答题策略
5.1 高频理论考点
| 级别 | 特点 |
| -------- | ------------------------ |
| 初始级 | 过程无序,依赖个人能力 |
| 可重复级 | 基本项目管理,可复现经验 |
| 已定义级 | 过程标准化、文档化 |
| 优化级 | 持续改进技术流程 |
UML图分类:
- 结构图:类图、组件图
- 行为图:用例图、状态图、活动图
5.2 复试答题技巧
- 概念题:结合实例(如用瀑布模型解释阶段划分)
- 设计题:优先使用图形工具(如数据流图描述系统流程)
- 开放题:联系项目经验(如敏捷开发应用)
- 高频问题示例:
- 比较瀑布模型与敏捷模型的优缺点
- 解释耦合与内聚对软件质量的影响