专栏名称: 京东成都研究院
京东商城成都研究院信息平台
目录
相关文章推荐
51好读  ›  专栏  ›  京东成都研究院

软件可靠性测试方法简介

京东成都研究院  · 公众号  · 成都  · 2018-04-09 17:42

正文

可靠性简介

可靠性定义

定义:在指定条件下使用时,软件产品维持规定的性能级别的能力。

注1:如下三个层层递进的句子可以帮助我们来理解用户可靠性方面的要求:

第一层:设备(软件)最好不要出故障;

第二层:设备(软件)出现故障了不要影响主要的功能和业务;

第三层:如果影响了主要功能和业务,系统可以尽快定位并恢复。


----参考GB/T 16260-2006


可靠性相关知识

1、有关术语

(1)软件可靠性: 在规定条件下,在规定时间内,软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在故障的函数,系统输入将确定是否会遇到存在的故障。

(2)软件可靠性估计: 应用统计技术处理在系统测试和运行期间采集、观察到的失效数据,以评估该软件的可靠性。

(3)软件可靠性测试:在有使用代表性的环境中,为进行软件可靠性估计对该软件进行的功能测试。需要说明的是,"使用代表性"指的是在统计意义下该环境能反映出软件的使用环境特性。

2、软件可靠性测试的目的

(1)有效地发现程序中影响软件可靠性的缺陷,从而实现可靠性增长:软件的“规定的条件”主要包括相对不变的条件和相对变化的条件,相对不变的条件如计算机及其操作系统;相对变化的条件是指输入的分布,用软件的运行剖面来描述。按照软件的运行剖面对软件进行测试一般先暴露在使用中发生概率高的缺陷,然后是发生概率低的缺陷。而发生概率高的缺陷是影响产品可靠性的主要缺陷,通过排除这些缺陷可以有效地实现软件可靠性的增长。

(2)验证软件可靠性满足一定的要求:通过对软可靠性测试中观测到的失效情况进行分析,可以验证软件可靠性的定量要求是否得到满足。

(3)估计、预计软件可靠性水平:通过对软件可靠性测试中观测到的失效数据进行分析,可以评估当前软件可靠性的水平,预测未来可能达到的水平,从而为开发管理提供决策依据。软件可靠性测试中暴露的缺陷既可以是影响功能需求的缺陷也可以是影响性能需求的缺陷。

3、软件可靠性测试的特点

软件可靠性测试不同于硬件可靠性测试,这主要是因为二者失效的原因不同。硬件失效一般是由于元器件的老化引起的,因此硬件可靠性测试强调随机选取多个相同的产品,统计它们的正常运行时间。正常运行的平均时间越长,则硬件就越可靠。

软件失效是由设计缺陷造成的,软件的输入决定是否会遇到软件内部存在的故障。因此,使用同样一组输入反复测试软件并记录其失效数据是没有意义的。在软件没有改动的情况下,这种数据只是首次记录的不断重复,不能用来估计软件可靠性。软件可靠性测试强调按实际使用的概率分布随机选择输入,并强调测试需求的覆盖面。软件可靠性测试也不同于一般的软件功能测试。相比之下,软件可靠性测试更强调测试输入与典型使用环境输入统计特性的一致,强调对功能、输入、数据域及其相关概率的先期识别。测试实例的采样策略也不同,软件可靠性测试必须按照使用的概率分布随机地选择测试实例,这样才能得到比较准确的可靠性估计,也有利于找出对软件可靠性影响较大的故障。

此外,软件可靠性测试过程中还要求比较准确地记录软件的运行时间,它的输入覆盖一般也要大于普通软件功能测试的要求。对一些特殊的软件,如容错软件、实时嵌入式软件等,进行软件可靠性测试时需要有多种测试环境。这是因为在使用环境下常常很难在软件中植入错误,以进行针对性的测试。

4、软件可靠性测试是软件可靠性保证过程中非常关键的一步

经过软件可靠性测试的软件并不能保证该软件中残存的错误数最小,但可以保证该软件的可靠性达到较高的要求。从工程的角度来看,一个软件的可靠性高不仅意味着该软件的失效率低,而且意味着一旦该软件失效,由此所造成的危害也小。一个大型的工程软件没有错误是不可能的,至少理论上还不能证明一个大型的工程软件能没有错误。因此,保证软件可靠性的关键不是确保软件没有错误,而是要确保软件的关键部分没有错误。更确切地说,是要确保软件中没有对可靠性影响较大的错误。这正是软件可靠性测试的目的之一。软件可靠性测试的侧重点不同于一般的软件功能测试,其测试实例设计的出发点是寻找对可靠性影响较大的故障。

因此,要达到同样的可靠性要求,可靠性测试比一般的功能测试更有效,所花的时间也更少。另外,软件可靠性测试的环境是具有使用代表性的环境,这样,所获得的测试数据与软件的实际运行数据比较接近,可用于软件可靠性估计。总之,软件可靠性测试比一般的功能测试更加经济和有效,它可以代替一般的功能测试,而一般的软件功能测试却不能代替软件可靠性测试,而且一般功能测试所得到的测试数据也不宜用于软件可靠性估计。


5、软件故障暴露率与测试次数的关系

P=1-(1-K)T

其中,K 为经过 T 次测试后故障的平均检测率;T 为故障暴 露前的连续测试次数。

(1)随着测试次数 T 的逐渐增加,故障暴露的概率 P 逐渐 增大,当测试次数达到一定数值后,P 将趋近于 1。

(2)随着测试次数 T 的不断增加,曲线斜率不断减小,因 此,当测试次数 T 的增量 ΔT 相同时,故障暴露概率 P 的增 量 ΔP 会逐渐变小。

6、串联系统的失效率

对于由 n 个相互独立的子系统组成的串联系统, 任何一个子系统(或配置项)失效意味着整个系统失效,因此, 在 t 时刻整个系统尚未发生失效的条件下,在 t 时刻后发生失 效的概率 Z(t)满足以下关系式:

Z(t ) =max{ Zi( t) | i ∈[1, n]}

其中,Zi (t)表示第 i 个子系统在 t 时刻后发生失效的概率。


7、并联系统的失效率

对于由 n 个相互独立的子系统组成的并联系统, 所有子系统(或配置项)全部失效时,系统才失效,因此,整 个系统在 t 时刻尚未发生失效的条件下,在 t 时刻后发生失效 的概率 Z(t)满足以下关系式:

Z(t )=Z 1(t )× Z 2 (t) ×…× Zn(t )  , i=1,2,…,n

其中,Zi (t)表示第 i 个子系统在 t 刻后发生失效的概率。


可靠性度量

1、成熟性

2、容错性

3、易恢复性

4、依从性

----参考GB/T 16260-2006


异常值输入法


定义:异常值输入法是一种使用系统不允许用户输入的数值(即异常值)作为测试输入的一种可靠性测试方法。主要体现容错性子特性。

例1:对用户发送电子邮件来说,收件人地址在正确的情况下会使用@来作为邮箱地址和用户名的分割符,如[email protected]。使用异常值输入法,我们可以使用“#”或“%”等非@符号来作为分割符,如wangxiaoming#123.com。

例2:边界值输入法中边界值的非法输入值(如[1,10]中,输入值为0、11),也可以归入异常值输入法中,当然还可以归入功能测试法中。

例3:我们常见的输入框对字符类型有限制、对字符长度有限制,那么按照异常值输入法的思路就要专门构造非限制内的字符类型、超过限制长度的字符来开展测试,观察系统是否正常处理(包括是否会导致系统崩溃及告警或提示是否异常)。上传文件或上传图片也一样,一般都有文件/图片类型限制和大小限制,需要从可靠性角度专门模拟异常值是否有问题。

例4:有时一个功能会要求输入一组数值或者多个参数,对这个功能进行不完整的输入测试,也属 于异常值输入法。例如,一个功能包括IP地址、掩码、模式选择和是否启用4个参数(图1-1),其中IP地址由4个0~255的数字组成的,掩码是1~32之间的数字。

(1)先分别考虑各参数分别异常

a)IP地址的输入异常有:数字输入小于0和大于255;4个空格不填全;如图1-2所示输入IP地址时只输入3个数字。如果为了测试的完备性,在时间允许情况下可以分别验证一下输入0个数字、1个数字、2个数字、3个数字的异常情况,理论上错误处理是等价的,但是不排除开发人员处理错误。

b)掩码的输入异常有:数字输入小于1和大于32;掩码不填;

c)模式选择的输入异常有:不选择;同时选择三个;同时选择三个中的两个;

d)是否启用的输入异常有:因为是可选,理论上不选和选哪一个是一个效果,故无异常。

(2)再考虑各组参数异常之间组合

多个参数异常任意组合:IP地址正常/异常+掩码正常/异常+模式选择正常/异常+启用正常。如图1-3所示只覆盖了两种异常的组合: IP地址异常+掩码正常+模式选择异常+启用正常。



故障注入法


定义:故障注入法是把系统放在有问题的环境中进行测试,观察是否异常,然后再恢复到正常状态看是否恢复正常的一种可靠性测试法。主要体现成熟性、容错性、易恢复子特性。

和异常值输入法不同,异常值输入法是直接输入一个系统认为是错误的、不支持的值;而故障注入法是把系统放在有问题的环境中,但是输入依然是正常值;同时故障注入法还要关注故障恢复正常后观察系统是否正常。

我们可以从以下几个方面来分析,进行故障注入及恢复的介绍。


故障注入及恢复

(1)故障来源1:用户的业务环境中故障。把系统放到这些业务场景中,运行正常的业务,分析此时系统的反应是否合理;然后撤销故障,观察系统是否可以自动恢复正常。







请到「今天看啥」查看全文