异常测试是指测试系统对异常情况的处理,异常测试覆盖软件和硬件异常时的处理。在测试过程中,可以人为地制造一些错误条件(如错误的操作、错误的报文等),检查屏幕或布局是否给出清晰且充分的提示或约束信息。测试在出现错误的情况下系统的反应(如系统是否正确报告、是否给出友好的提示信息)。异常测试可以帮助我们改善以后的设计方案,提高系统的性能。
衡量系统异常有两个指标:MTBF 和MTTR。
·MTBF(Mean Time Between Failure,平均无故障时间):是指相邻两次故障之间的平均工作时间,也称为平均故障间隔。
·MTTR(Mean Time To Restoration,平均恢复时间):是指可修复产品的平均修复时间,就是从出现故障到修复中间的这段时间,MTTR 越小表示易恢复性越好。
引起系统异常不仅仅是软件,硬件也可以。硬件的电路和IC 元器件可以导致系统失效,不管是软件还是硬件的容错和恢复,都是依据可靠性理论来支持,并且主要是靠设计来保证,测试仅仅是起到验证的作用。系统容错的处理方式一般包括两种:自动处理和人工干预。自动处理是指系统的自我恢复能力,人工干预是指通过人工方法强制进行恢复。
异常测试最相关的质量特性是可靠性,它包含四个子特性:成熟性、容错性、易恢复性和有效性。
(1)成熟性是指软件产品为避免由软件错误而导致失效的能力。
(2)容错性是指在软件失效或者违反规定的接口的情况下,软件产品维持规定的性能级别的能力。
(3)易恢复性是指在发生故障的情况下,软件重建规定的性能级别并恢复受直接影响的数据的能力。
(4)有效性是指在给定的时间内完成所需功能状态的能力,用在全部时间中处于正常工作状态的百分比进行评估。
从业务需求的角度来看,在进行异常测试时必须要熟悉所测软件的业务流程、相关业务领域知识等信息,只有这样才能知道系统在什么情况下可能发生异常,什么情况下容易发生人为错误。在设计测试方案时,测试工程师需要与开发工程师或系统分析工程师一起讨论,这样才能尽可能地模拟系统异常的情况。
从业务需求的角度来看,异常测试一般包括以下几个方面:
(1)压力测试。压力测试又称为强度测试,主要是检查系统的关键业务在极限情况下运行的能力,测试这种情况下系统的运行、资源使用状态。
(2)业务模块添加、删除测试。根据实际情况,测试系统在增加或删除一些模块的情况下运行的状态。
(3)修改配置文件测试。对一个配置文件(如初始设置文件)的信息进行修改或者删除操作,观察系统的响应情况,系统应该给出友好的提示或重新生成配置文件。
(4)数据库损坏测试。模拟测试数据库被损坏时系统的处理情况,系统应该提供用户自动修复的功能。
从操作的角度来看,在异常测试过程中,正常的操作一般不会引起系统异常,只有在异常输入的情况下才可能导致系统异常,故应该尽可能地设计一些异常的数据进行测试。
从操作的角度来看,异常测试一般包括以下四个方面:
(1)特殊字符测试。大多数基于SQL 的数据库存储信息时容易出现问题,所以在测试过程中可以对文本框输入一些特殊字符,测试系统的反应。
(2)必填输入项测试。在保存一些信息时(如注册),一般会要求填写一些必填项,测试过程中可以测试不填写必填项时系统的反应。
(3)字段长度测试。对每个字段允许的最大长度进行测试,假如界面上提示允许输入最长字符长度为30 个字符,但数据库在设置该字段时只允许最长输入20 个字符,如果程序并未对错误输入进行处理,此时系统就会报错。
(4)字符类型测试。输入不同的字符类型(如数字、字符等)进行测试,观察系统的反应。
系统容错技术分为两类:一类是避开错误(fault-avoidance)技术,即在开发过程中不让差错潜入软件的技术;另一类是容错(fault-tolerance)技术,即对某些无法避开的差错,使其影响减少至最小的技术。
容错的一般方法如下:
(1)结构冗余。
1)静态冗余:常用的有三模冗余(Triple Moduler Redundancy,TMR)和多模冗余。
2)动态冗余:主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来代替它并重新运行。
3)混合冗余:兼有静态冗余和动态冗余的长处。
(2)信息冗余。为检测或纠正信息,运算或传输中的错误需另加一部分信息,这种现象称为信息冗余。如数据库备份、磁盘阵列RAID 技术。
(3)时间冗余。时间冗余是指以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。例如当对方处于关机状态时发送短信给对方,这种情况信息不能被丢失。
(4)硬件冗余。硬件容错方法之一是硬件堆积冗余,在物理级可通过元件的重复而获得(如相同元件的串、并联等)。另一硬件容错的方法叫待命储备冗余。该系统中共有M+1 个模块,其中只有一块处于工作状态,其余M 块都处于待命接替状态。一旦工作模块出了故障,立刻切换到一个待命模块,当换上的储备模块发生故障时,又切换到另一储备模块,直到资源枯竭。
混合冗余系统是堆积冗余和待命储备冗余的结合应用。当堆积冗余中有一个模块发生故障时,立刻将其切除,并代之以无故障待命模块,这种方法可达到较高的可靠性。
(5)附加冗余。冗余附加技术是指实现上述冗余技术所需的资源和技术。