软件可靠性测试及评估平台的设计与实现

2014-07-25 07:43李建军邵培南段晓峰晏新晃
网络安全与数据管理 2014年15期
关键词:软件可靠性测试用例可靠性

李建军 ,邵培南 ,段晓峰 ,晏新晃 ,赵 辉

(1.华东计算技术研究所,上海 200233;2.国家工程软件产品质量监督检验中心,上海 200233)

随着软件核心地位日益突出,软件越来越影响着整个系统装备的可用性,软件失效造成的故障已成为新的焦点,软件的质量和可靠性已成为制约装备质量和性能的瓶颈。软件可靠性是指软件在规定的条件和时间内正确完成规定功能的能力。开展软件可靠性的测试和评估工作对于提高武器装备的软件质量具有重大意义。软件可靠性的度量和预测一般是通过软件可靠性模型来进行的,软件可靠性模型的应用又是一个很复杂的过程,如果完全用手工来实现这一过程要花费大量的人力物力,还不能保证准确性。我国软件可靠性测试和评价工作仍处于起步阶段,参考文献[1]、[2]主要分析了关于软件可靠性测试的研究,大多数还停留在理论上,与国际先进水平相比,还存在很大的差距,因此,迫切需要一个集成的工具来辅助软件可靠性测试和可靠性模型的应用。

为此,本文分析了软件可靠性测试技术,设计并实现了软件可靠性测试和评估平台,通过基于UML顺序图的软件可靠性测试用例生成技术生成测试用例,在执行过程中自动收集软件可靠性数据,结合软件可靠性模型进行评估,并通过将评估结果与SMERFS工具相对照,证明了该平台的有效性,最终为软件可靠性测试、评价提供了相应的手段。

1 总体架构

建立软件可靠性测试与评估平台,首先要了解软件可靠性测试的涵义、测试方法和测试过程等,而进行软件可靠性评估则需选取合适的可靠性指标体系和评估模型。

软件可靠性测试是指在软件的预期使用环境中,为进行软件可靠性评价而对软件实施的一种测试。参考文献[3]指出:为了满足用户对软件的可靠性要求、评价软件可靠性水平及验证软件产品是否达到可靠性要求,开展软件可靠性测试是一个比较有效的方法。

当前软件可靠性测试方法主要有两种。(1)基于应用场景模型的统计测试方法,其通过定义系统所有的典型应用场景及其发生的概率,然后由该模型生成测试用例;(2)基于操作剖面的可靠性测试方法,其建立由操作集合和所对应的概率组成的操作剖面。由于在目前装备软件开发过程中大量使用Rational Rhapsody进行软件需求建模和软件设计建模,而且使用UML模型比采用软件运行剖面更容易获得。Musa指出,开发一个由任务操作集合和任务操作所对应的概率组成的运行剖面在实际测试工作中不现实。而使用软件应用场景模型来建立系统的测试模型,可较容易确定软件所处的状态和该状态可能出现的输入,通过提取等价的输入序列,可容易归纳出系统中有限的输入组合[4]。统计测试被称为最成功的基于模型的软件测试[5]。本文采用了基于扩展的UML顺序图的应用场景模型测试方法进行可靠性测试。

软件可靠性测试与评估的一般过程主要包括:构造测试模型、选取测试用例、测试运行、可靠性测试执行、可靠性故障数据收集、软件可靠性评估与可靠性增长测试等。

软件可靠性测试和评价工作需要根据可靠性指标体系选取合适的软件可靠性参数,业界提出的较常用的软件可靠性参数主要包括:估计潜在的缺陷密度、已发现的失效密度、已发现的缺陷密度、平均失效时间(MTBF)、测试覆盖率、防止失效能力、防止不正确操作能力、特定时间可用性、平均恢复时间及可恢复能力等。

软件可靠性测试和评估平台由软件可靠性测试控制台和软件可靠性测试运行支撑环境组成[6],如图1所示。

图1 软件可靠性测试与评估平台

其中,软件可靠性测试控制台主要提供软件可靠性使用模型建模,基于UML顺序图的可靠性测试用例生成,在根据测试用例生成测试脚本后,由集成的可靠性测试流程协同服务驱动下发给框架代理执行引擎执行,在可靠性测试用例执行过程中,部署在可靠性测试支撑环境中的代理会自动对测试执行结果进行数据收集工作。测试用例执行完毕后对所收集的软件可靠性数据进行可靠性评估,目前该框架支撑5种类型的软件可靠性评估模型。另外,测试控制台提供了软件失效数据库和可靠性模型参数库的功能。

软件可靠性测试运行支撑环境主要通过代理(Agent)集合实现在不同的运行平台(Windows、UNIX和Linux)对可靠性测试用例脚本的执行。

下面针对主要功能模块进行说明。

(1)软件使用模型建模

本文平台采用基于UML2.0规范扩展的UML顺序图结合OCL语言来描述软件应用场景模型,使用警戒条件表示发生的概率。

(2)可靠性测试用例生成模块

软件可靠性测试用例生成模块实现从使用模型自动或人工生成测试用例,其主要功能如下。

①可靠性测试用例自动化生成。其主要根据基于UML顺序图的测试用例生成技术[7],由软件使用场景模型自动生成可靠性测试用例。

②人工生成测试用例。在根据软件使用模型自动化生成的测试用例不足时,作为一种补充手段,提供用例设计界面辅助测试人员人工设计测试用例。

(3)可靠性测试执行引擎

可靠性测试执行引擎主要包括一系列服务。其中,脚本服务主要基于测试工具对脚本的录制和回放。时统服务主要是为确保在可靠性测试活动中,各节点所获取、记录的测量数据和事件都有严格统一的时间标准,这样采集的数据才具有使用价值;框架代理执行引擎服务根据测试场景动态部署相应的代理(Agent),针对已有的测试运行环境启动代理的执行。测试流程协同服务根据可靠性测试流程,在分布式环境中协调和同步各个测试用例脚本的执行。

(4)软件可靠性数据采集

对于基于失效时间间隔可靠性评估模型数据收集主要包括:故障发生时刻、故障间隔时间、各间隔时间内程序中的残留错误数及故障等级。

对于基于缺陷计数可靠性评估模型需要收集:在每一测试区间的故障统计数、每个测试区间的完成时间及故障等级。

基于输入域评估模型需要收集如下数据:每个输入被选取的概率,输入集中被随机选中的输入总数,所有被选中的输入导致程序失效的个数及故障等级。

(5)软件可靠性评估

软件可靠性评估模块主要完成软件可靠性数据选择、数据变换、模型选择与应用、模型结果的图形显示和模型评估等功能。

2 软件可靠性评估和预测模块的设计

软件可靠性模型的应用涉及到模型选择、参数估计、可靠性评估及预测和模型评价。实现时首先采用MATLAB根据软件可靠性模型算法进行相关方程的求解,封装成相关的API接口,再编译成DLL文件供调用。

该模块主要包括以下部分。

(1)模型选择。可对当前故障数据选择应用一个或多个可靠性模型。

(2)参数估计。提供最大似然估计方法(默认参数估计)或最小二乘法两种参数估计方法。

(3)可靠性评估及预测。利用所选择的模型和故障数据对软件未来的可靠性进行预测。软件可靠性模型评估采用了5类模型,其中,基于失效时间间隔可靠性评估模型采用 Jelinski-Moranda、Schick-Wolverton和 L-V的贝叶斯模型;基于缺陷计数的软件可靠性评估模型采用 Goel-Okumoto的 NHPP模型、Schneidewind模型和 FC型J-M模型;基于输入域可靠性评估模型采用Nelson模型和Brown-Lipow模型;基于错误植入可靠性评估采用Mills-Basin模型;基于测试覆盖软件可靠性评估模型采用NHPP模型[8]。预测指标如下。

①TBF预测。横座标:故障号(Failure Number),纵座标:TBF 值(Time Between Failures-时间单位)。

②累计故障数预测。横座标:累计故障间隔时间(Cumulative Time Between Failures-时间单位),纵座标:总的故障数(Total Failures)。

③故障强度预测。横座标:累计故障间隔时间(Cumulative Time Between Failures-时间单位),纵座标:每时间单位故障数(Failures Per TimeUnit)。

④可靠性预测。横座标:累计故障间隔时间(Cumulative Time Between Failures-时间单位),纵座标:可靠性(Reliability)。

(4)模型评价。模型评价为故障数据选择最合适的可靠性模型,主要通过模型排名(Ranking)方式,即根据模型的匹配程度,选择匹配程度最高的模型进行可靠性评估和预测。排名指标包括:预测准确性(基于PLR),偏移程度(Biasedness,基于 U-Plot),走向(Trend,基于 YPlot),预测噪声(Noisiness of Prediction)[9]。

3 试验及验证

在某型号软件测评中,通过使用本平台进行测试,自动生成可靠性测试用例,并通过测试运行平台驱动执行后采集到一组软件故障数据,数据为TBF类型的,如表1所示。

使用Jelinski-Moranda模型的最小二乘法进行计算,与美军可靠性评估软件SMERFS的计算结果进行对比的具体情况如表2所示。

图2是采用本平台与SMERFS预测平均失效前时间间隔的曲线图,可看到两条预测曲线非常接近(标准偏差为0.138 9),图中离散点为原始数据。

本文实现了软件可靠性测试和评估平台,并结合一个实例与美国SMERFS工具预测结果相对照,证明本平台对开展软件可靠性测试和评估工作的有效性和实用性。本研究成果已被用于某国家级软件质量监督检验中心的可靠性测试工作中,取得了良好的效果。

表1 故障数据

表2 平均失效前时间间隔预测值对比

图2 MTTF预测曲线对比

[1]陈春秀,马力.软件可靠性测试技术研究[J].计算机工程与设计,2010,31(21):4628-4631.

[2]刘志方,钟德明,曾福萍,等.软件可靠性测试的理论分析[J].测控技术,2008,27(10):62-64.

[3]LYU MICHAELR.软件可靠性工程手册[M].刘喜成,译.北京:电子工业出版社,1996.

[4]MUSA J D.Software reliability engineering:more reliable software, faster development and testing[M].New York:The McGraw-Hill,1999.

[5]颜炯,王戟,陈火旺.基于模型的软件测试综述[J].计算机科学,2004,31(2):184-186.

[6]朱敏,李建军,王莉华,等.分布式系统综合集成测试技术[J].计算机工程,2008,34(S1):57-59.

[7]李建军,朱敏,刘晓娟,等.基于 UML顺序图测试用例的生成[J].计算机工程,2008,34(21):73-75.

[8]袁春如,廖泰安,贺红卫.基于测试覆盖的嵌入式软件可靠性评估[J].计算机工程与设计,2009,30(9):2198-2200.

[9]腾灵灵,邵栋,荣国平.软件可靠性模型选择研究[J].计算机应用与软件,2010,27(6):128-130.

猜你喜欢
软件可靠性测试用例可靠性
可靠性管理体系创建与实践
合理使用及正确测试以提升DC/DC变换器可靠性
软件可靠性工程综合应用建模技术研究
GO-FLOW法在飞机EHA可靠性分析中的应用
5G通信中数据传输的可靠性分析
基于需求模型的航天软件测试用例生成方法
数控系统软件可靠性设计与故障分析技术
基于依赖结构的测试用例优先级技术
简谈使用BoundsChecker进行计算机联锁系统人机界面软件可靠性测试
IEEE软件可靠性系列标准分析*