基于SFTA和等价类的软件测试用例设计方法研究与应用

时间:2022-08-09 05:54:23

基于SFTA和等价类的软件测试用例设计方法研究与应用

摘 要: 为了解决软件测试时高可靠性安全性要求,测试用例设计的充分性和有效性不足的问题,软件故障树分析结合等价类原则解决了测试用例设计的充分性和有效性问题。通过对软件的故障模式进行分析,在建立软件故障树的基础上获得了软件故障树的最小割集。以最小割集为模型,结合等价类划分方法实现了测试用例设计,并根据该方法开发了测试用例自动生成工具。通过测试项目实际应用表明,采用该方法进行测试用例设计可以满足测试的充分性和有效性要求。

关键词: 软件测试; 测试用例; 故障树; 等价类

中图分类号: TN06?34; TP311.5 文献标识码: A 文章编号: 1004?373X(2013)21?0128?04

0 引 言

随着计算机科学技术的不断发展,软件在各个行业中发挥着越来越重要的作用,在许多领域中软件实现的功能已达到整个系统功能的80%。因此,软件系统的质量往往决定着系统的质量,有时由软件缺陷引发的故障造成的后果会非常严重。例如文献[1]中20世纪80年代美国发生的放射治疗机软件错误,导致五名患者受到超计量辐射死亡的严重事故。随着软件应用的深入和广泛,特别是,应用于高铁、银行、医疗、军事和航天航空领域的软件,其软件的质量更加需要关注,如果这些系统中发生由软件缺陷引发的事故,其后果将是无法预料的。

目前,软件测试仍是保证软件质量的重要手段之一,而软件测试最关键的环节之一就是测试用例设计,测试用例设计的充分性决定着测试的有效性。采用何种测试用例设计方法满足测试的有效性和充分性要求是软件测试领域不断深入探索研究的课题。

软件故障树分析[2](SFTA)是一种自顶向下的软件可靠性和安全性分析方法,即从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全产生重大影响的事件开始,向下逐步追查导致顶事件发生的原因,直至基本事件(底事件)。利用SFTA分析的结果可以确定软件测试的重点和内容。

等价类划分方法是一种黑盒测试方法[3],它将软件的输入划分为若干个数据类,从中得到测试用例的输入。等价类划分的测试用例设计是基于对输入条件的等价类进行评估,是软件黑盒测试中最常采用的方法之一。

本文将SFTA和等价类划分方法相结合提出了一种有效的测试用例设计方法,并实现了测试用例的自动生成。

1 软件故障树及最小割集

SFTA技术是应用较为广泛的软件安全性分析方法,将此方法用于软件测试时,主要应用于软件黑盒测试的测试用例设计。对于那些高可靠安全要求的软件应在进行安全性分析的基础上,进行测试用例的设计以便实现测试用例的有效覆盖。

1.1 建立软件故障树

软件故障树的建立是软件故障树分析中最基本同时也是最关键的一项工作。软件故障树简单地说是由一些逻辑和事件符号构建而成的。由于软件故障树的准确性直接影响到对软件的分析,因此,在建立软件故障树时需要开展必要的准备工作。软件故障树的建立通常包括:收集并分析有关技术资料,选择要分析的顶事件和构建故障树。

1.1.1 收集并分析有关技术资料

软件故障树建立的完善程度直接影响基于最小割集的测试用例集合的有效性,因而需要软件故障树的建立者广泛地掌握并使用有关方面的知识和经验。这些知识和经验获取主要依靠对相关资料的学习和对软件的熟悉,需要掌握的内容主要应包括:软件系统的体系结构设计、软件的功能、系统的范围、软件之间的接口关系和运行环境等;识别人为因素对软件系统的影响;识别软件在不同的运行模式下的状态,以及不同模式之间的相互转换关系。

另外,在建立故障树时应征求有经验的设计人员、用户等的意见,以便保证软件故障树的正确性。

对于软件关键等级较高的软件,一般情况下,软件研制人员已完成了软件安全性分析。测试人员可以在此基础上开展进一步的分析。

1.1.2 选择要分析的顶事件

利用故障树进行软件分析常遇到的问题就是构建的故障树过于复杂,很难利用其进行有效的测试用例设计。为了避免这一难题,在构建故障树时可以将软件故障树分层构建,先按照软件单个功能项为单位进行构建,在逐渐延伸至顶事件。

这种顶事件确定方法也符合确认测试对所有功能进行测试的实际要求。顶事件的确定可以与确认测试的测试项的确定一起完成。当一个测试项有多个子测试项时,可以将子测试项做为顶事件。

采用这种方法不仅避免了软件故障树过于复杂的问题,也更符合测试工作的需要与流程。将软件故障树分析与测试项的分解、测试用例的设计紧密结合,更有利于测试用例的自动生成。

1.1.3 构建故障树

软件故障树中使用的符号包括事件符号和逻辑门符号两类。事件符号用以表示故障事件,逻辑门符号用以表示故障事件之间的逻辑关系。

建立软件故障树通常采用演绎法。所谓演绎法是指首先选择要分析的顶事件(即不希望发生的故障事件)作为故障树的“根”。然后分析导致顶事件发生的直接原因(包括所有事件或条件),并用适当的逻辑门与顶事件相连,作为故障树的“节”(中间事件)。按照这个方法逐步深入,一直追溯到导致顶事件发生的全部原因(底层的基本事件)为止。这些底层的基本事件称为底事件,构成故障树的“叶”。

在故障树最底层的底事件是导致顶事件发生的根本原因。有些底事件可以独立地引发顶事件,有些底事件按照一定的逻辑关系共同引发顶事件。在分析故障发生原因过程中,要充分发挥分析者、软件开发组以及软件测试机构的经验。

1.2 故障树的数学描述

有[n]个底事件构成的故障树,故障树的顶事件为[T,][xi]是底事件的状态变量,[xi]的值为1或0,[Φ]表示顶事件的状态,则有如下定义:

[xi=1,底事件i发生0,底事件i不发生]

[Φ=1,顶事件发生0,顶事件不发生]

由于[Φ]由底事件的状态确定,即[Φ=Φ(X),]其中[X={x1,x2,…,xi}。]因此,[Φ=Φ(X)]就是故障树数学表述的结构函数[4]。

对于顶事件和底事件之间全部为逻辑与门结构的故障树,结构函数可以表述为:

[Φx=i=1nxii=1,2,…,n]

对于顶事件和底事件之间全部为逻辑或门结构的故障树,结构函数可以表述为:

[Φx=i=1nxii=1,2,…,n]

根据上述定义就可以表示出任意一棵故障树的结构函数。图1所示的软件故障树的结构函数就可以表示为:

[Φ=x1x2x3x1x3x4]

1.3 最小割集的数学描述

割集为能引起顶事件发生的底事件集合。最小割集为不包含任何冗余因素的割集。如果去掉最小割集中的任何事件,它就不再成为割集。

根据上述的定义,在软件故障树中,由于最小割集发生时,顶事件必然发生,因此,一棵故障树的全部最小割集的完整集合代表了顶事件发生的所有可能性。因此,若软件故障树有[m]个最小割集[C=(C1,C2,…,Cm),]任意一个最小割集中的全部底事件发生时,故障树的顶事件必定发生,最小割集可以表示为:

[Cj=i=1xi]

在[m]个最小割集集合中只要有一个最小割集发生,顶事件就发生,所以软件故障树可以表示为:

[Φ=j=1mi=1nxi]

根据故障树最小割集的定义,利用Fuseell?Vesely算法,可以获得图1的最小割集为:[x1,][x2,x3,x4,]其软件故障树也可表示为:

[Φ=x1x2x3x4]

根据上述表达式,图1的等价软件故障树如图2所示。

2 生成测试用例集

利用软件故障树最小割集建立了进行测试用例设计模型,每个底事件就是测试用例的输入,而每个输入的取值应根据等价类划分的原则设置典型值。

2.1 确定输入条件的等价类

在进行输入的典型值选取时,应根据等价类划分的方法进行确定。等价类的确定应遵循如下原则[3]:

(1)若输入条件指定一个范围,则可以定义一个有效等价类和两个无效等价类;

(2)若输入条件需要特定的值,则可以定义一个有效等价类和两个无效等价类;

(3)若输入条件指定集合的某个元素,则可以定义一个有效等价类和一个无效等价类;

(4)若输入条件为布尔值,则可以定义一个有效等价类和一个无效等价类。

以最小割集[{x2,x3,x4}]为例,其典型取值分别为下[x2:a1,a2,a3;x3:b1,b2,b3;x4:c1,c2。]

2.2 生成测试用例集

在进行测试用例设计时,以每一个最小割集为一组测试用例。以最小割集[{x2,x3,x4}]为例,根据在2.1节中确定的[x2,x3,x4]各自的等价类取值,可得到测试用例为:[{a1,b1,c1},][{a1,b1,c2},][{a1,b2,c1},][{a1,b2,c2},][{a1,b3,c1},][{a1,b3,c2},][{a2,b1,c1},][{a2,b1,c2},][{a2,b2,c1},][{a2,b2,c2},][{a2,b3,c1},][{a2,b3,c2},][{a3,b1,c1},][{a3,b1,c2},][{a3,b2,c1},][{a3,b2,c2},][{a3,b3,c1},][{a3,b3,c2}。]这样就得到[C13×C13×C12=3×3×2=18]个测试用例。

软件的算法流程图如图3所示。

3 应用实例

(1)获取软件故障树

在实际应用中获得了如图4所示的软件故障树,其中中间事件“游机未关机”的发生是由Ggjx1,Ggjx2,Ggjx3中的任意两个以上发生时导致的。根据这种情况,可将图4改造为如图5所示的等效故障树。

(2)求出割集

{T2fc1,T2fc2,T2fc3},{Ggjx1,Ggjx2},{Ggjx1,Ggjx3},{Ggjx2,Ggjx3},{Luwo},{Ggjx1,Ggjx2,Ggjx3},{Luwo,T2fc1 },{Luwo,T2fc2},{Luwo,T2fc3}。

(3)求出最小割集

{Ggjx1,Ggjx2},{Ggjx1,Ggjx3},{Ggjx2,Ggjx3},{Luwo},{T2fc1,T2fc2,T2fc3}。

(4)设置典型值

根据输入条件的等价类原则设置的典型值见表1。

(5)生成测试用例

基于割集生成的测试用例有63个,而基于最小割集生成的测试用例只有25个。基于最小割集{T2fc1,T2fc2,T2fc3}生成的一个测试用例集合如图6所示。

4 结 语

本文利用故障树的原理和方法,将故障树的最小割集作为生成测试用例的模型,测试用例的输入采用等价类划分的方法选取,提出了基于故障树最小割集和等价类划分的测试用例生成方法,并开发了测试用例自动生成工具。该方法在逃逸软件测试项目中得到了应用,实际结果表明它有效地提高了测试测试用例设计的充分性和高可靠软件测试的自动化程度。

参考文献

[1] 黄锡滋.软件可靠性、安全性与质量保证[M].北京:电子工业出版社,2002.

[2] 陆廷孝,郑鹏洲,何国伟,等.可靠性设计与分析[M].北京:国防工业出版社,1995.

[3] PRESSMAN R S. Software engineering: a practitioner′s approach [M]. 7th ed. [S.l.]. McGraw?Hill Companies,Inc, 2009.

[4] 孙志安,裴晓黎,宋昕,等.软件可靠性工程[M].北京:北京航空航天大学出版社,2009.

[5] 练峰海,石启亮,陈方涛.基于GUI方法的故障树运算软件实现[J].现代电子技术,2012,35(18):83?85.

[6] 姜兴杰,杨峰辉.软件可靠性分析与设计[J].现代电子技术,2011,34(7):135?137.

上一篇:基于多处理器实时调度策略的研究 下一篇:无线传感器网络动态混合密钥管理方案研究