7.1 Robustness & Correctness
(1)健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度。
面向健壮性编程:
a.处理未期望的行为和错误终止
b.终止执行,向用户展示全面的错误信息
c.错误信息有助于进行debug
健壮性原则:Paranoia:总是假定用户恶意、假定自己的代码可能失败
面向健壮性编程的原则:
a.封闭实现细节,限定用户的恶意行为
b.考虑极端情况。
(2)正确性
含义:程序按照spec加以执行的能力,是最重要的质量指标
永不给用户错误的结果;用户输入错误,直接结束。
健壮性:尽可能保持软件运行而不是总是退出; 让用户变得更容易:出错也可以容忍,程序内部已有容错机制。
可靠性=健壮性+正确性
7.2 Error and Exception Handling
(1)Error的类型:用户输入错误、设备错误、物理限制
(2)异常(Exception):程序执行中的异常事件,程序无法按照设定程序执行。
异常处理:将错误信息传递给上层调用,并传递信息。若找不到异常处理程序,系统完全退出。
(3)checked异常的处理机制:异常中的LSP原则、利用throws进行声明、try-catch语句、finally语句
7.3 Assertions and Defensive Programming
(1)断言
作用:允许程序在运行时检查自己,测试有关程序逻辑的假设,如前置条件、后置条件、内部不变量、表示不变量、控制流不变量等。
目的: 在开发阶段调试程序、尽快避免错误。
(2)防御性编程
防御式编程的主要思想就是,子程序不应该因为传入错误数据而被破坏。其核心想法就是要承认程序都会有问题,都需要被修改。
防御式编码的最佳方式就是一开始代码中引入错误,使用迭代式设计、编码前先写伪代码、写代码前先写测试用例、底层设计检查等活动都可以防止。
7.4 Debugging
当程序中出现bug时,我们需要debug。
(1)bug产生原因
代码错误
未完成的要求或不够详细
误解用户需求
设计文档中的逻辑错误
缺乏文件
没有足够的测试
(2)debug
7.5 Testing and Test-First Programming
我们应该养成好习惯,为我们的代码写测试用例,目的是为了检测和提高我们代码的正确性,增强代码能力。
测试有手写测试策略和利用JUNIT测试,此外,还需要测试代码覆盖度。