健壮性和正确性
健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度,处理未期望的行为和错误终止。即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
正确性:按照spec加以执行的能力。用户输入错误时,直接结束
测量健壮性和正确性的方法:
- 外部观察角度:Mean time between failures (MTBF,平均失效间隔时间):描述了可修复系统的两次故障之间的预期时间,而平均故障时间(MTTF)表示不可修复系统的预期故障时间。
- 内部观察角度:残余缺陷率:每千行代码中遗留的bug的数量
Throwable
Throwable是所有异常和错误的父类
异常(Exception):你自己程序导致的问题,可以捕获、可以处理。使我们可以处理的东西,可以有异常处理程序,若找不到异常处理程序那么整个系统就完全退出
Runtime异常,其他的异常都是checked
Ckecked异常和unchecked的异常
checked异常的处理机制:
——抛出:声明是throws,抛出时throw
——捕获(try/catch):try出现异常,忽略后面代码直接进入catch;无异常不进入catch;若catch中没有匹配的异常处理,程序退出;若子类重写了父类方法,父类方法没有抛出异常,子类应自己处理全部异常而不再传播;子类从父类继承的方法不能增加或更改异常
——处理:不能代替简单的测试,尽量苛刻、不过分细化、将正常处理与异常处理分开、利用好层次结构、早抛出晚捕获、避免不必要的检查
——清理现场、释放资源(finally):finally中语句不论有无异常都执行,一定会执行除了finally语句块中有异常、或者程序所在线程死亡、或者程序提前exit结束。
unchecked异常:不需要try-catch,因为无法解决
断言的作用,应用场合
断言:在开发阶段的代码中嵌入,检验某些“假设”是否成立。若成立,表明程序运行正常,否则表明存在错误(在实际运行时不会影响性能)
断言的作用:断言主要用来处理绝对不可能发生的情况,比如指针为空 、子程序开始执行(结束)时,文件或流处于打开(关闭)状态、子程序开始执行(结束)时,文件或流的读写位置处于开头(结尾)
测试:
白盒测试:对程序内部代码的测试
黑盒测试:对程序外部表现出来行为的测试
——等价划分 :将程序可能的输入进行分类划分为不同集合包括不合法数据,基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例。(比如正数,0,负数)
等价类划分可有两种不同的情况:有效等价类和无效等价类。
若一组对象自反、对称、传递,则为等价类
可产生相似结果的输入集合中的一个可代替整个集合
同理,对输出也可以划分等价类
极端:每个分区只有一个测试用例,覆盖所有分区
——边界值分析方法 :边界值分析法是对输入输出的边界值进行测试一种黑盒测试方法,是对等价类分析法的补充。
错误通常隐藏在边界中,如一位偏移、边界值需单独处理等
找到有效数据和无效数据的分界点(最大值、最小值),对该分界点以及两边的值分别单独进行测试。
等价类划分法可以挑选等价类范围内任意一个数据作为代表,而边界值分析法要求每个边界值都要作为测试条件。
代码测试覆盖度
类型:函数覆盖,分支覆盖,路径覆盖,语句覆盖,条件覆盖
测试效果./难度:路径覆盖>分支覆盖>语句覆盖