分析代码质量:
易读性:
- 格式
- 命名
- 注释
易维护性:
- 提高内聚,降低耦合
- 封装复杂决策
可靠性:
- 契约式编程和防御式编程
- 语法
表驱动编程:
名词解释:
将复杂决策包装为决策表,通过查表获得表信息的方法来编程。
契约式编程(断言式设计):
名词解释:
如果一个函数或方法在前置条件满足的情况下开始执行,执行完成功后满足后置条件,那么这个函数或方法就是正确可靠的。
两种编程方式:
异常:检查前置条件和后置条件,不满足则抛出异常。
- 例: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个决策点的上限不是绝对的,应当把决策点的数量当作一个警示)