第10章 软件架构的演化和维护

核心知识点

1. 软件维护类型

  • 四种维护
    1. 排错性维护(纠错性):修复已发现的错误
    2. 适应性维护:适应外部环境变化(OS升级、数据库迁移等)
    3. 完善性维护:扩充功能、改善性能(占比最大,约60-80%)
    4. 预防性维护:为将来改进而做的预先工作
  • 考试角度:常考完善性维护占比最大

2. 软件可维护性

  • 决定因素
    • 可理解性:代码和文档容易理解
    • 可测试性:方便测试
    • 可修改性:方便修改
    • 可移植性:方便移植到其他环境
    • 可重用性:代码可被复用
  • 度量方法
    • 质量检查表
    • 质量测试
    • 质量配置文件

3. 软件架构演化

  • 演化原因
    • 需求变更
    • 技术更新
    • 性能优化
    • 安全加固
  • 演化策略
    • 渐进式演化:逐步修改
    • 激进式演化:大规模重构
  • 架构重构
    • 保持功能不变,改善内部结构
    • 目的:降低复杂度、提高可维护性

4. 技术债务

  • 定义:为快速交付而采取的短期技术决策所积累的额外成本
  • 类型
    • 刻意债务:有意为之,计划偿还
    • 无意债务:经验不足导致
  • 管理策略:定期偿还、控制新增

5. 遗留系统演化策略

  • 四种策略

| 策略 | 适用条件 | 特点 | |------|---------|------| | 包装(封装) | 系统功能基本可用 | 外部包装新接口 | | 迁移 | 系统部分可用 | 逐步迁移到新平台 | | 替换 | 系统无法维护 | 全部替换 | | 共存 | 新旧系统需并行 | 数据同步 |

6. 架构恢复与重建

  • 逆向工程:从现有代码恢复设计
  • 再工程:改造现有系统
  • 前向工程:按新需求重新设计

7. 软件重构

  • 定义:在不改变软件可观察行为的前提下,改善内部结构
  • 原则
    • 小步重构、频繁测试
    • 保持功能不变
    • 代码坏味道驱动
  • 常见重构
    • 提取方法
    • 重命名
    • 消除重复代码
    • 简化条件表达式

8. 架构级维护

  • 维护与架构的关系:架构质量直接影响维护成本
  • 好的架构特征:高内聚低耦合、模块化、可扩展
  • 架构腐化原因:缺乏文档、需求变更无控制、短期决策积累

真题考点映射

| 真题 | 考点 | 章节 | |------|------|------| | 2024下论文 | 软件维护 | 10-架构演化 | | 2023上论文 | 软件架构演进 | 10-架构演化 | | 2023下综合知识 | 维护类型 | 10-架构演化 |

易错点/陷阱

  • 完善性维护占比最大(60-80%)——不是排错性
  • 重构不改变可观察行为——如果改了就不是重构而是修改
  • 技术债务不一定是坏事,刻意债务是合理的短期策略
  • 逆向工程是从代码→设计,前向工程是从需求→设计,不要混淆

记忆口诀

  • 四种维护:排适完预(排错、适应、完善、预防)——完善占比最大
  • 遗留系统四策略:包迁替共(包装、迁移、替换、共存)
  • 重构三原则:小步测试、功能不变、坏味道驱动