APP下载

基于体系结构的软件可靠性测评研究

2012-09-18覃志东

关键词:软件可靠性测试用例体系结构

齐 蓓,覃志东

(东华大学计算机科学与技术学院,上海 201620)

基于体系结构的软件可靠性测评研究

齐 蓓,覃志东

(东华大学计算机科学与技术学院,上海 201620)

针对传统高可靠性软件测评方法存在的问题,在分析基于体系结构测评重要性的基础上提出了基于软件体系结构的可靠性测评方法.将软件可靠性增长测试和软件可靠性验证测试有机统一起来,从模块级对可靠性进行控制,并提供可靠性先验信息.该方法有利于实现软件可靠性快速增长,有效减少测试用例量.

软件可靠性;可靠性测评;软件体系结构;软件测试

0 引 言

软件可靠性测评是保障其可靠性的重要方法之一,对软件可靠性测评的研究有着积极的现实意义[1-3].目前,科研人员对软件可靠性测评的技术与方法已展开了广泛而深入的研究,并取得了丰硕的理论成果和工程实践经验.例如,为在软件测试过程中及早暴露软件缺陷以达到尽快提高软件可靠性的目的,以Musa为代表的软件可靠性工程学派[4-5]和以Poore、Whittake为代表的净室软件工程学派[6]分别提出了基于软件运行剖面和基于马尔科夫链使用模型的软件可靠性测试用例产生方法,以统计实验的思想对软件测试的输入选择进行研究,从而更快地促进软件可靠性的增长;而就软件可靠性的验证测试,Laplace、Thayer等[7-9]提出连续性规则、生命期测试、概率率序惯测试的方法,这些方法能够实现对软件可靠性的验证,但由于测试用例量过大,并不适用于高可靠性软件的可靠性验证;此外,Tal[10]提出的单风险序惯测试方法对概率率序惯测试方法有一定改进,但成效并不显著.针对以上可靠性验证测试方法在工程实践中暴露出的测试用例开销过大、测试持续期过长等问题,覃志东等[11]提出了基于经验贝叶斯统计推断的软件可靠性验证测试方法,通过对先验信息的利用,在保证测评结果可信的前提下有效降低了测试用例量.

目前,随着软件规模的不断扩大和复用技术的广泛应用,为便于系统的开发、集成和扩展,现代高可信软件正在向多任务、多模块化的方向发展.然而,传统的软件可靠性测评的方法把软件系统看成一个整体,不能通过对软件模块级可靠性的控制达到对整个软件系统可靠性的把握.仅依靠系统级的软件可靠性增长及验证测试,将无法确保软件可靠性的快速增长以及用少量测试代价对系统当前可靠性达到高可信的验证[12].

基于此,本研究从软件结构特点和开发的现状着手,提出一种软件可靠性测评方法,将软件可靠性增长与验证测试形成一个有机整体.该方法从软件的模块级实施有效的可靠性跟踪与控制并实现可靠性快速增长,同时通过测试所得数据估计出软件可靠性先验信息值,从而有效减少测试用例量.最后,本研究以一个多模块软件系统为例,对此测评方法中的主要程序进行了说明.

1 基于体系结构测评思路

上世纪70年代末,Littlewood提出了按结构化、模块化的方式进行软件可靠性建模的思想.若将此思想融入于软件可靠性测评中,通过分析软件系统可靠性对模块可靠性的敏感性来识别出对系统可靠性影响较大的软件模块,并采取相应优化措施以确保系统的可靠性.本研究以图1所示多模快的软件系统进一步展开说明,其中,S表示软件执行成功的状态.

图1 软件系统结构示意图

1.1 模块软件对系统可靠性的影响

通过对图1所示软件系统的结构和模块间控制传递概率的分析,由Cheung软件可靠性模型[13]可得出软件系统可靠性与各模块可靠性的关系为,

rs=0.4r1r3+0.06r1r2r4+0.54r1r2r3r4(1)式中,rs表示软件系统的可靠性,ri(i=1,2,3,4)表示各软件模块的可靠性.

对软件系统中模块可靠性敏感性分析时,可用软件模块的BM(Birnbaum Measure)值进行判断,

式中,BM值越大,表示该模块可靠性很小的增长会引起软件系统可靠性相对较大的变化.

若模块可靠性已知,则由式(1)、(2)可得到各模块敏感性指标和对软件系统可靠性影响的排序,结果如表1所示.

表1 软件模块敏感度表

根据表1中数据,模块3的BM值最大,表明加强对模块3的测试可为系统带来快速的可靠性增长,其他模块依此类推.

由此可见,根据具体软件体系结构,识别出对系统可靠性影响较大的模块,按敏感度的排序分配可靠性测试资源,有利于实现软件系统可靠性的快速增长.

1.2 有效减少测试代价

为更好地说明问题,在图1所示软件系统基础上新加入软件模块5.假设软件模块1,2,3,4已达到很高可靠性,软件系统的失效主要由模块5引起,且某一模块的错误会引起整个软件系统的失效.新的软件系统结构如图2所示.

图2 新增模块后的软件系统结构示意图

假设软件系统对应的输入域为D,能够触发相应软件模块i运行的输入域为Di,且允许Di∩Dj≠Φ(i,j=1,2,3,4,5,且 i≠j).将 D 划分为多个输入子域,Di包含其中一个或几个输入子域,软件模块与其输入域对应关系如图3所示.

图3 输入域和软件模块对应图

在进行可靠性测试时,从系统输入域D选取测试用例量为n,其中属于Di的测试用例量为di.令,ki=di/n,表示所选取测试用例中能够触发模块i运行的测试用例比例.由G-O模型[15],软件系统累积发现错误个数的期望值为,

式中,a表示软件系统中潜在的错误总数,b表示单位时间错误被发现的概率.

对于图2所示软件系统,设模块i(i=1,2,3,4,5)中潜在错误数量为ai,单位时间错误被发现的概率为bi.由于任一模块中的错误会引起系统的失效,且各软件模块错误被发现的概率与其被触发运行的概率成正比,所以有,

又由对系统的假设,可得到,a1=a2=a3=a4=0,b1=b2=b3=b4=0.将其代入式(4),得到a=a5,b=k5b5,代入式(3)便得到图2所示软件系统的累积发现错误个数的期望值,

由此,软件系统的可靠性可表示为,

式中,q表示激活某一错误所对应的平均输入量,N表示系统输入空间D所对应总的输入量.

假设测试用例n=500,平均运行时间为1 h/个,则可靠性增长测试总时间为500 h.令a5=20,b5=0.01,q=1,N=1 000,则当 k 分别为 0.05、0.1、0.5、1时,软件系统可靠度随测试时间的增长曲线如图4所示.

图4 系统可靠性增长曲线

由图4可见,当k=0.05时,只有5%的测试用例触发了模块5的执行,这使得软件中的错误发现率很低,导致系统可靠性增长十分缓慢;随着k值的增大,当 k=0.1,0.5时,模块5被触发执行的概率变高,软件错误发现率也随之增长,因此,软件系统的可靠性增长速度加快;当k=1时,n个测试用例全都能够触发模块5的运行,这使得软件系统中的错误更快地被发现并更正,相比前3条曲线,软件系统可靠性增长最快.

以上结果表明,在软件可靠性增长测试过程中,通过对重点模块有针对性的选取测试用例进行可靠性增长测试,可实现软件系统可靠性的快速增长,缩短测试持续期,从而有效减少测试代价.

2 基于体系结构的软件可靠性测评方法

本研究提出的基于体系结构的软件可靠性测评方法如图5所示.基于此方法开展软件可靠性测评工作的具体步骤为:

1)将系统可靠性验证指标转化为可靠性设计指标,作为系统设计和增长测试的指标要求.

2)将可靠性设计指标分配于各软件模块,作为模块级设计和可靠性增长测试指标.

3)模块集成后,若系统的可靠性尚未达到要求,则需对软件开展系统级的可靠性增长测试.

4)当软件达到可靠性设计指标后,进行系统级的可靠性验证测试.

3 测评实例

图5 软件可靠性测评方法流程图

本研究以一个简单的多模块软件的可靠性测评为例说明基于体系结构的软件可靠性测评方法的应用.某系统要求实现数字筛选功能,其程序流程如图6所示,对此系统进行测评,要求其可靠性验证指标达到(p0,c)=(0.001,0.99),即失效率不高于0.001的置信度达到0.99.

图6 程序流程图

该示例的软件系统体系结构及模块间控制传递概率如图7所示.

图7 示例软件系统体系结构示意图

3.1 软件可靠性指标转换

设软件系统的可靠性验证指标为(p0,c),软件系统的可靠性设计指标为pp.其中,p0、pp表示软件系统的可靠性验证失效率和可靠性设计失效率,c为软件可靠性置信度,0<c<1,且有,r0=1-p0,rp=1-pp.

从软件可靠性验证指标的定义出发[5],允许软件至多失效一次所需运行的软件测试用例个数应满足下式n的最小值,

式中,f(p|1,n,a,b)表示失效概率 p的共轭先验分布.设软件在整个运行过程中平均的失效个数符合贝努力分布,在没有先验的情况下,a=b=1,则有,

将式(8)代入式(7)中,可得到,

由此,软件可靠性设计失效率为,

利用式(10),可将软件可靠性验证指标转化为软件可靠性设计指标.对于图7所示系统,将(p0,c)=(0.001,0.99)代入式(10),得到此软件系统的设计指标,pp=0.00022.

3.2 软件可靠性指标分配

软件可靠性指标分配是在权衡软件开发成本、现有开发技术等限制条件下,对软件各模块进行合理的可靠性指标分配,即通过分析各模块可靠性对软件系统可靠性的敏感性的不同,识别出对系统可靠性影响较大的模块,并在模块间合理分配可靠性设计指标.

在对可靠性敏感性分析时,可利用式(2)结论.本研究从各模块在软件系统运行中所占的时间比例着手,进行可靠性指标的分配.设πi为系统运行时间内模块i所占的运行时间比例.πi有如下约束,

式中,ti表示模块单独运行一次的时间,可由软件编译工具直接获得,Xi表示运行过程中模块执行的平均次数,可由软件系统的DTMC模型求得[14];t表示系统运行一次各模块运行的时间总和,若模块间的控制传递时间忽略不计,则 t=∑ni=1ti×Xi.对于图7所示软件系统,由式(11)可计算得到各模块的πi值如表2所示.

表2 模块 πi值

根据软件可靠性定义[5],可将软件可靠性指标转化为软件失效密度指标,

其中x为常数.在任一时刻,软件系统的失效密度又可表示为各模块失效密度的线性和,

由式(13)便可得到软件系统可靠性对于软件模块i的可靠性的敏感度,

对软件系统进行可靠性指标分配时,可按式(14)所示可靠性敏感度,将软件系统的失效密度值按比例分配到各软件模块中.将pp=0.00022代入式(12)得到系统失效密度指标,λp=4.345×10-6(设x=50),再按式(14)可靠性敏感度将软件系统的失效密度值按比例分配到各软件模块中,则由表2中πi值得到各模块可靠性设计指标为,

在模块可靠性设计指标指导下,合理调配测试资源,对软件模块级进行可靠性增长测试,直到其达到可靠性设计指标.

3.3 软件可靠性增长及验证

软件模块集成后,利用已有失效数据可获得系统当前可靠性值,并由最大熵原则获得先验参数值a、b.根据基于贝叶斯的可靠性评价方法[16],系统执行n个测试用例,其中有r个用例运行失败,则系统失效概率的先验分布为,

如果当前可靠性尚未达到指标要求,则需进行系统级的可靠性增长测试,测试后的软件系统失效概率的后验期望值为,

软件测试达到指标要求后,就可对软件开展验证测试.若想系统满足可靠性验证指标(p0,c),则系统的失效概率p需满足,

将式(15)代入式(17),便得到验证测试时,失效测试用例个数r和总共需要运行的测试用例个数n的函数关系,

若由软件失效数的经验样本值求得的先验参数为,a=1,b=1 067,再将可靠性验证指标,(p0,c)=(0.001,0.99),代入式(18),可得到 r和n的关系如表3所示.

表3 验证测试用例表

根据表3可知,若软件无失效的执行3536个测试用例,则说明软件达到可靠性验证指标;但如果在执行过程中出现一次失效,如在运行到第3021个测试用例时失败,则还需运行5 573-3 021=2 552个测试用例,且其中不能有失效,才能证明软件达到验证指标;若已发现一个运行失效的测试用例,在运行到第5500个测试用例时又失败,则还需无失效的运行6 269-5 500=869个测试用例,才能达到可靠性验证指标.依此类推.

4 结 语

本研究在分析基于体系结构测评重要性的基础上提出了基于软件系统体系结构的可靠性测评方法,本方法将软件可靠性增长测试和软件可靠性验证测试有机统一起来,并对此方法中的主要工作展开分析.这种方法可以更好地适应现有多模块、多任务软件的可靠性测评工作,有利于可靠性快速增长,并通过利用先验信息有效减少测试用例量.需要说明的是,本研究仅为软件系统可靠性测评提出了一种解决方案,相关研究还需进一步展开.

:

[1]Knight J C.Safety Critical System:Challenges and Directions[C]//Proceedings of the24th International Conference on Software Engineering.Orlando:IEEE Xplore,2002:547-550.

[2]Cukic B.Combining Testing and Correctness Verification in Software Reliability Assessment[C]//High-Assurance Systems Engineering Workshop.Washington:High-Assurance Systems Engineering Workshop,1997.

[3]Lyu M R.Software Reliability Engineering:A Roadm ap[C]//Future ofSoftware Engineering.Washington:IEEEComputer Society,2007.

[4]Musa J D,Okumoto K.Software Reliability:Measurement,Prediction,and application[M].New York:McGraw-Hill,1987.

[5]Lyu M R.Handbook on Software Reliability Engineering[M].New York:McGraw-Hill,1996.

[6]Prowell J S ,Trammell J C ,Linger R.et al.Cleanroom Softw are Engineering:Technology and Process[M].New York:Addison-Wesley Professional,1999.

[7]Bastani F B,Pasquini A.Assessment of a Sampling Method for Measuring Safety-critical Software Reliability[C]//Proc ISSRE94.Monterey:IEEE Xplore,1994.

[8]Thayer T A,Lipow M,Nelson E C.Software Reliability[M].North Holland:Holanda Publisher,1978.

[9]Pstein B,Sobel M.Sequential Life Tests in the Exponential Case[J].Annals of Mathematical Statistics,1953,26(3):82-95.

[10]Tal O ,MoCollin C ,Bendell A.Reliability Demonstration for Safety-c ritical Systems[J].IEEE Transactions on Reliability Engineering,2001,50(2):194-203.

[11]覃志东,雷航,桑楠,等.安全关键软件可靠性验证测试方法研究[J].航空学报,2005,26(3):334-339.

[12]Butler R W,Finelli G B.The Infeasibility of Quantifying the Reliability of Life-critical Real-time Software[J].IEEE Transactions on Software Enginneering,1993,19(1):3-12.

[13]Cheung R C.A User-oriented Software Reliability Model[J].Software Engineering,1980 ,SE-6(2):118-125.

[14]Sharma V S,Trivedi K S.Quantifying Software Performance,Reliability and Security:An Architecture-based Approach[J].Journal of Systems and Software,2006,80(4):493-509.

[15]Goel A L,Okumoto K.Time-dependent Error-detection Rate Model for Software Reliability and Other Performance Measures[J].IEEE Transactions on Reliability Engineering,1979 ,R-28(3):206-211.

[16]Littlewood B,Wright D.Some Conservative Stopping Rules for the Operational Testing of Safety Critical Software[J].IEEE Transactionson Reliability Engineering ,1997,43(11):673-683.

Reliability Evaluation Research and Practice of Architecture-based Software

QI Bei,QIN Zhidong

(School of Computer Science and Technology,Donghua University,Shanghai 201620,China)

Abstract:As to the problems that the traditional high reliability evaluation methods exposed,an architec ture-based software reliability evaluation methodwas proposed,based on the analysis of importance of archi tecture-based software reliability testing.This method consolidates software growth testing with software demonstration testing,monitoring reliability from the modules'level and it can serve priori information of software reliability,which can realize the rapid growth of software reliability and effectively reduce the amount of test cases.

Key words:software reliability;reliability evaluation;software architecture;software testing

TP311.52

A

1004-5422(2012)04-0336-06

2012-10-16.

国家自然科学基金(50973014)、中央高校基本科研业务费专项基金(11D11209)资助项目.

齐 蓓(1987—),女,硕士研究生,从事软件可靠性测评技术研究.

猜你喜欢

软件可靠性测试用例体系结构
基于SmartUnit的安全通信系统单元测试用例自动生成
软件可靠性工程综合应用建模技术研究
基于混合遗传算法的回归测试用例集最小化研究
基于粒计算的武器装备体系结构超网络模型
作战体系结构稳定性突变分析
数控系统软件可靠性设计与故障分析技术
基于DODAF的装备体系结构设计
基于云计算的航天器控制系统自组织体系结构
基于依赖结构的测试用例优先级技术
简谈使用BoundsChecker进行计算机联锁系统人机界面软件可靠性测试