第十章 面向可维护性的构造技术

第十章 面向可维护性的构造技术

  • 第十章 面向可维护性的构造技术
    • 软件维护与演进
      • 面向可维护性的构建
    • 可维护性指标
      • 可维护性的许多名称
      • 一些常用的可维护性指标
    • 模块化设计和模块化原则
      • 评估模块化的五个标准
      • 模块化设计的五个规则
      • 耦合
      • 内聚
    • OO Design Principles: SOLID
      • SOLID:5类设计原则
    • 语法驱动的构造
      • 语法的组成部分
      • 正则语言和正则表达式
      • Java中的正则表达式

第十章 面向可维护性的构造技术

软件维护与演进

  • 软件维护:修复错误、改善性能

  • 运维是软件开发中最困难的工作之一

    • 处理来自用户 告的故障 / 问题

    • 需要代码后

      • 测试所做的修改
      • 回归测试
      • 记录变化
  • 软件演化:对软件进行持续的更新

  • 软件的大部分成本来自于维护阶段

面向可维护性的构建

  • 模块化
  • OO 设计原则
  • OO 设计模式
  • 基于状态的构造技术
  • 表驱动的构造技术
  • 基于语法的构造技术

可维护性指标

可维护性的许多名称

  • Maintainability 可维护性
  • Extensibility 可扩展性
  • Flexibility 灵活性
  • Adaptability 可适应性
  • Manageability 可管理性
  • Supportability 支持性

一些常用的可维护性指标

  • Depth of Inheritance 继承的层次数

    • 层越多越难维护
  • Class Coupling 类之间的耦合度

    • 好的软件设计要求类型和方法应该具有高内聚和低耦合
    • 高耦合表示设计难以重用和维护,因为它与其他类型有许多相互依赖性
  • Unit test coverage 单元测试的覆盖度

  • Cyclomatic Complexity 圈复杂度

    • 圈太复杂不容易被测试
  • Lines of Code 代码行数

    • 行数长的应该被拆分
  • Maintainability Index (MI) 可维护性指数

    • 计算一个介于 0 和 100 之间的索引值,该值表示维护代码的相对容易程度。

模块化设计和模块化原则

评估模块化的五个标准

  • Decomposability (可分解性)

  • Composability (可组合性)

  • Understandability (可理解性)

  • Continuity (可持续性)

    • 发生变化时受影响范围最小
  • Protection (出现异常之后的保护)

    • 出现异常后受影响范围最小

模块化设计的五个规则

  • Direct Mapping (直接映射)
  • Few Interfaces (尽可能少的接口)
  • Small Interfaces (尽可能小的接口)
  • Explicit Interfaces (显式接口)
  • Information Hiding (信息隐藏)

耦合

  • 耦合性是衡量模块之间的依赖性

  • 耦合程度决定因素

    • 模块之间接口的数量
    • 每个接口的复杂性

内聚

  • 内聚是衡量一个模块的功能或责任有多强的关联

    • 如果一个模块的所有元素都在为同一个目标工作,那么这个模块就有很好的内聚

OO Design Principles: SOLID

SOLID:5类设计原则

  • (SRP) The Single Responsibility Principle 单一责任原则

    • 不应有多于1个的原因使得一个类发生变化,否则就拆分开
    • 一个类,一个责任
  • (LSP) The Liskov Substitution Principle Liskov替换原则

    • 子类型必须能够替换其基类型
    • 派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异
  • (ISP) The Interface Segregation Principle 接口隔离原则

    • 不能强迫客户端依赖于它们不需要的接口:只提供必需的接口

    • 不要强迫类来实现他们不能实现的方法

    • 避免“胖”接口

      • 不够聚合
      • 胖接口可分解为多个小的接口
      • 不同的接口向不同的客户端提供服务
      • 客户端只访问自己所需要的接口

      文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92701 人正在系统学习中

      声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月5日
下一篇 2021年6月5日

相关推荐