软件工程笔记

第一章:软件工程概述

核心概念扩展:

  • 软件定义 :不仅仅是代码,还包括文档和数据。软件是逻辑产品,具有复杂性、不可见性、不断变化的特点。
  • 软件危机 :20世纪60年代出现,表现为成本超支、进度延误、质量低劣。软件工程正是为解决这一危机而诞生的。
  • 非功能性需求:这是第一章的重点。它定义了系统的"属性",如性能(响应时间)、安全性、可靠性、可维护性等。虽然不直接提供功能,但决定了系统的质量。
  • 职业道德:工程师不仅要对雇主负责,更要对公众安全和社会福祉负责。必须诚实守信,不隐瞒技术风险,尊重知识产权。

第二章:软件过程

核心概念扩展:

  • 软件过程:是为了获得高质量软件产品而进行的一系列活动、方法和实践的框架。
  • 4个基本活动(核心考点)
    1. 问题定义(或规格说明):明确"做什么"。
    2. 软件开发:将设计转化为代码。
    3. 软件确认:通过测试确保软件符合需求。
    4. 软件演化:软件投入使用后的修改和维护。
  • 过程模型对比
    • 瀑布模型 :严格线性,阶段间有里程碑。适用 :需求明确、技术成熟的项目。缺点:难以应对变更。
    • 原型模型 :快速构建一个简化版本。适用 :需求模糊、用户界面复杂的项目。好处:快速反馈,降低风险。
    • 增量模型 :分批次交付功能。适用:商业软件,用户急需核心功能。
  • 软件设计活动:包括体系结构设计(宏观结构)、接口设计(交互方式)、数据设计(数据库/数据结构)和过程设计(算法/逻辑)。

第三章:敏捷开发

核心概念扩展:

  • 敏捷方法 :应对快速变化的需求。与传统方法(重计划)不同,敏捷强调响应变化个体互动
  • 敏捷宣言4大价值观
    • 个体和交互 > 流程和工具(人最重要)。
    • 可工作的软件 > 面面俱到的文档(文档够用即可)。
    • 客户合作 > 合同谈判(紧密合作)。
    • 响应变化 > 遵循计划(拥抱变化)。
  • 敏捷原则 :业务人员和开发人员必须每日协作 ;围绕有动力 的个体构建项目;面对面沟通是最有效的;可持续的开发节奏。
  • 极限编程 :一种激进的敏捷实践,包括结对编程(两人共用一台电脑)、测试驱动开发(先写测试再写代码)、持续集成等。
  • Scrum框架
    • 产品待办列表:所有需求的清单。
    • 冲刺:固定时间(如2周)的迭代周期。
    • 每日站会:15分钟同步,回答"昨天做了什么"、"今天计划做什么"、"有什么阻碍"。

第四章:需求工程

核心概念扩展:

  • 需求工程定义:将杂乱的用户想法转化为精确的系统需求的过程。
  • 需求分类
    • 用户需求:用自然语言写的说明书,用户看得懂。
    • 系统需求:详细的技术规格,开发人员看得懂。
    • 功能性需求:系统必须提供的具体功能(如:用户登录、支付)。
    • 非功能性需求:系统的约束条件(如:支持1000人同时在线)。
  • 需求过程
    1. 获取:通过访谈、问卷、观察收集信息。
    2. 分析:建立模型(如数据流图),消除矛盾。
    3. 规格说明:编写正式文档。
    4. 确认:评审和测试,确保无误。
  • 需求变更管理 :变更是必然的。必须建立变更控制委员会,评估变更对成本和进度的影响,避免"范围蔓延"。

第五章:UML建模(画图)

核心概念扩展:

  • 用例图 :描述"谁"(参与者)用系统"做什么"(用例)。重点在于包含 关系和扩展关系。
  • 类图 :描述系统的静态结构。重点在于类之间的关系(继承、关联、聚合、组合)。
  • 时序图 :描述对象之间按时间顺序的消息传递。重点在于生命线和激活条。
  • 活动图 :描述业务流程或算法流程。重点在于泳道 (区分不同角色)和分叉/汇合(并行处理)。
  • 状态图 :描述一个对象的状态变迁。重点在于状态转换的触发事件。

第六章:体系结构设计

核心概念扩展:

  • 体系结构设计:系统的高层设计,决定了系统的质量属性(如性能、可扩展性)。
  • 概念视图:从业务角度看到的系统结构,不涉及技术细节。
  • 5种架构模型
    1. 结构模型:模块的层次结构。
    2. 框架模型:复用已有的架构框架。
    3. 动态模型:系统运行时的控制流程。
    4. 过程模型:将系统分解为可执行的进程/线程。
    5. 功能模型:数据流视角。
  • 分层模式:经典的如三层架构(表现层、业务逻辑层、数据访问层)。优点是结构清晰,缺点是性能损耗。
  • 知识库模式:所有组件通过共享的中央数据存储库进行通信(如编译器、IDE)。

第七章:设计模式与开源

核心概念扩展:

  • 设计模式:解决常见设计问题的可复用方案(如单例模式、工厂模式)。
  • 设计步骤
    1. 识别设计元素
    2. 分配职责
    3. 描述对象交互
    4. 定义接口
    5. 优化设计(重构)。
  • 开源软件 :源代码公开。作用:降低开发成本、提高质量(众人审查)、避免重复造轮子。
  • 开源许可证
    • GPL:强传染性,衍生作品必须开源。
    • MIT:非常宽松,几乎无限制。
    • Apache:包含专利授权,保护用户免受专利诉讼。

第八章:软件测试

核心概念扩展:

  • 测试目的:发现错误,而不是证明程序没有错误。
  • 验证 vs 确认
    • 验证:检查是否正确地构建了产品(符合规格说明书)。
    • 确认:检查是否构建了正确的产品(符合用户真实需求)。
  • 审查 :一种静态测试技术,通过人工检查代码或文档。
    • 优势:比动态测试(运行程序)更早发现错误;成本更低;能发现文档和规范中的错误。
  • 测试级别
    • 单元测试:测函数/方法(开发人员做)。
    • 集成测试:测模块接口(开发/测试人员)。
    • 系统测试:测整个系统(测试人员)。
    • 验收测试:用户确认(用户/产品经理)。

第九章:软件演化

核心概念扩展:

  • 软件演化:软件交付后,为了适应环境变化或用户新需求而进行的修改过程。
  • 维护分类
    • 纠错性维护:修复测试未发现的Bug。
    • 适应性维护:适应软硬件环境的变化(如升级操作系统)。
    • 完善性维护:增加新功能或改进性能。
    • 预防性维护:为了未来的可维护性而进行的重构。
  • 遗留系统:仍在使用但技术过时、文档缺失、难以维护的系统。处理策略包括:彻底重写、封装接口、逐步替换。
相关推荐
九成宫4 小时前
计算机网络期末复习——第4章:网络层 Part Three
网络·笔记·计算机网络·软件工程
雾江流9 小时前
Github应用商店 1.4.2 | 自动发现并聚合github上可安装的项目
软件工程
Coder_Boy_11 小时前
基于SpringAI的在线考试系统软件系统验收案例
人工智能·spring boot·软件工程·devops
九成宫14 小时前
计算机网络期末复习——第4章:网络层 Part Two
网络·笔记·计算机网络·软件工程
红头辣椒14 小时前
AI赋能全流程,重塑需求管理新生态——Visual RM需求数智化平台核心能力解析
人工智能·设计模式·软件工程·需求分析·用户运营
浩子智控1 天前
AI与RPA协同完成复杂任务
软件工程·rpa
九成宫1 天前
计算机网络期末复习——第4章:网络层 Part One
网络·笔记·计算机网络·软件工程
Hash the Hacker1 天前
国际软件工程大会 ICSE 2026 部分已接收论文集
论文阅读·软件工程
simon_skywalker2 天前
软件工程(三) 软件开发环境、工具、重用、再工程、产品线
软件工程