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