分析代码质量:

  • 易读性:
    • 格式
    • 命名
    • 注释


  • 易维护性:

    • 提高内聚,降低耦合
    • 封装复杂决策


  • 可靠性:

    • 契约式编程和防御式编程
    • 语法

表驱动编程:

名词解释:

将复杂决策包装为决策表,通过查表获得表信息的方法来编程。

契约式编程(断言式设计):

名词解释:

如果一个函数或方法在前置条件满足的情况下开始执行,执行完成功后满足后置条件,那么这个函数或方法就是正确可靠的。

两种编程方式:
  • 异常:检查前置条件和后置条件,不满足则抛出异常。

    • 例:if(前置条件不满足){throw new Exception();}。


  • 断言:assert (Expression1) : (Expression2)。Expression1为布尔表达式,为true时不抛出异常,为false时抛出AssertionError异常。

    • 例:assert (前置条件) : ("异常的信息")。

防御式编程:

名词解释:

在与外界环境交互时,当外界发生错误时,保护方法内部不受损害。

契约式编程与防御式编程的异同:

相同点:
  • 都对输入参数进行有效性检查
不同点:
  • 防御式编程将一切与外界的交互都纳入防御范围
  • 防御式编程不检查输出和后置条件。

Mock Object:

本质上是一个简单的桩(类级别的桩,将需要测试的方法独立出来)

代码复杂度衡量的方法:

  • 建立程序流程图G,假设图的节点数为N,边数为E,那么复杂度V(G) = E - N + 2.

  • 直接计数程序中决策点的数量:

    • 从1开始,一直往下通过程序
    • 一旦遇到下列关键字,或同类的词,就加1:if 、while 、repeat 、for
    • 给case语句中的每一种情况加1

    10+个决策点:把子程序的某一个部分拆成另一个子程序并调用它)

    (注意:10个决策点的上限不是绝对的,应当把决策点的数量当作一个警示)

 

最后修改:2023 年 10 月 03 日
无需 money,加油,你一定会变得更好!