第一章:软件工程概述
核心概念扩展:
- 软件定义 :不仅仅是代码,还包括文档和数据。软件是逻辑产品,具有复杂性、不可见性、不断变化的特点。
- 软件危机 :20世纪60年代出现,表现为成本超支、进度延误、质量低劣。软件工程正是为解决这一危机而诞生的。
- 非功能性需求:这是第一章的重点。它定义了系统的"属性",如性能(响应时间)、安全性、可靠性、可维护性等。虽然不直接提供功能,但决定了系统的质量。
- 职业道德:工程师不仅要对雇主负责,更要对公众安全和社会福祉负责。必须诚实守信,不隐瞒技术风险,尊重知识产权。
第二章:软件过程
核心概念扩展:
- 软件过程:是为了获得高质量软件产品而进行的一系列活动、方法和实践的框架。
- 4个基本活动(核心考点) :
- 问题定义(或规格说明):明确"做什么"。
- 软件开发:将设计转化为代码。
- 软件确认:通过测试确保软件符合需求。
- 软件演化:软件投入使用后的修改和维护。
- 过程模型对比 :
- 瀑布模型 :严格线性,阶段间有里程碑。适用 :需求明确、技术成熟的项目。缺点:难以应对变更。
- 原型模型 :快速构建一个简化版本。适用 :需求模糊、用户界面复杂的项目。好处:快速反馈,降低风险。
- 增量模型 :分批次交付功能。适用:商业软件,用户急需核心功能。
- 软件设计活动:包括体系结构设计(宏观结构)、接口设计(交互方式)、数据设计(数据库/数据结构)和过程设计(算法/逻辑)。
第三章:敏捷开发
核心概念扩展:
- 敏捷方法 :应对快速变化的需求。与传统方法(重计划)不同,敏捷强调响应变化 和个体互动。
- 敏捷宣言4大价值观 :
- 个体和交互 > 流程和工具(人最重要)。
- 可工作的软件 > 面面俱到的文档(文档够用即可)。
- 客户合作 > 合同谈判(紧密合作)。
- 响应变化 > 遵循计划(拥抱变化)。
- 敏捷原则 :业务人员和开发人员必须每日协作 ;围绕有动力 的个体构建项目;面对面沟通是最有效的;可持续的开发节奏。
- 极限编程 :一种激进的敏捷实践,包括结对编程(两人共用一台电脑)、测试驱动开发(先写测试再写代码)、持续集成等。
- Scrum框架 :
- 产品待办列表:所有需求的清单。
- 冲刺:固定时间(如2周)的迭代周期。
- 每日站会:15分钟同步,回答"昨天做了什么"、"今天计划做什么"、"有什么阻碍"。
第四章:需求工程
核心概念扩展:
- 需求工程定义:将杂乱的用户想法转化为精确的系统需求的过程。
- 需求分类 :
- 用户需求:用自然语言写的说明书,用户看得懂。
- 系统需求:详细的技术规格,开发人员看得懂。
- 功能性需求:系统必须提供的具体功能(如:用户登录、支付)。
- 非功能性需求:系统的约束条件(如:支持1000人同时在线)。
- 需求过程 :
- 获取:通过访谈、问卷、观察收集信息。
- 分析:建立模型(如数据流图),消除矛盾。
- 规格说明:编写正式文档。
- 确认:评审和测试,确保无误。
- 需求变更管理 :变更是必然的。必须建立变更控制委员会,评估变更对成本和进度的影响,避免"范围蔓延"。
第五章:UML建模(画图)
核心概念扩展:
- 用例图 :描述"谁"(参与者)用系统"做什么"(用例)。重点在于包含 关系和扩展关系。
- 类图 :描述系统的静态结构。重点在于类之间的关系(继承、关联、聚合、组合)。
- 时序图 :描述对象之间按时间顺序的消息传递。重点在于生命线和激活条。
- 活动图 :描述业务流程或算法流程。重点在于泳道 (区分不同角色)和分叉/汇合(并行处理)。
- 状态图 :描述一个对象的状态变迁。重点在于状态转换的触发事件。
第六章:体系结构设计
核心概念扩展:
- 体系结构设计:系统的高层设计,决定了系统的质量属性(如性能、可扩展性)。
- 概念视图:从业务角度看到的系统结构,不涉及技术细节。
- 5种架构模型 :
- 结构模型:模块的层次结构。
- 框架模型:复用已有的架构框架。
- 动态模型:系统运行时的控制流程。
- 过程模型:将系统分解为可执行的进程/线程。
- 功能模型:数据流视角。
- 分层模式:经典的如三层架构(表现层、业务逻辑层、数据访问层)。优点是结构清晰,缺点是性能损耗。
- 知识库模式:所有组件通过共享的中央数据存储库进行通信(如编译器、IDE)。
第七章:设计模式与开源
核心概念扩展:
- 设计模式:解决常见设计问题的可复用方案(如单例模式、工厂模式)。
- 设计步骤 :
- 识别设计元素。
- 分配职责。
- 描述对象交互。
- 定义接口。
- 优化设计(重构)。
- 开源软件 :源代码公开。作用:降低开发成本、提高质量(众人审查)、避免重复造轮子。
- 开源许可证 :
- GPL:强传染性,衍生作品必须开源。
- MIT:非常宽松,几乎无限制。
- Apache:包含专利授权,保护用户免受专利诉讼。
第八章:软件测试
核心概念扩展:
- 测试目的:发现错误,而不是证明程序没有错误。
- 验证 vs 确认 :
- 验证:检查是否正确地构建了产品(符合规格说明书)。
- 确认:检查是否构建了正确的产品(符合用户真实需求)。
- 审查 :一种静态测试技术,通过人工检查代码或文档。
- 优势:比动态测试(运行程序)更早发现错误;成本更低;能发现文档和规范中的错误。
- 测试级别 :
- 单元测试:测函数/方法(开发人员做)。
- 集成测试:测模块接口(开发/测试人员)。
- 系统测试:测整个系统(测试人员)。
- 验收测试:用户确认(用户/产品经理)。
第九章:软件演化
核心概念扩展:
- 软件演化:软件交付后,为了适应环境变化或用户新需求而进行的修改过程。
- 维护分类 :
- 纠错性维护:修复测试未发现的Bug。
- 适应性维护:适应软硬件环境的变化(如升级操作系统)。
- 完善性维护:增加新功能或改进性能。
- 预防性维护:为了未来的可维护性而进行的重构。
- 遗留系统:仍在使用但技术过时、文档缺失、难以维护的系统。处理策略包括:彻底重写、封装接口、逐步替换。