一、 概述
在现代军事和商用系统中,以软件为核心的产品得到了广泛的应用。随着系统中软件成分的不断增加,使得系统对于软件的依赖性越来越强,对软件质量尤其是可靠性的要求也越来越高。
软件可靠性是指在规定的条件下和规定的时间内,软件不引起系统故障的能力。软件可靠性不但与软件中存在的缺陷有关,而且与系统输入和系统使用有关。软件可靠性是软件质量特性中重要的固有特性和关键因素。软件可靠性反映了用户的质量观点。
软件可靠性评价是软件可靠性工作的重要组成部分。软件可靠性评测是主要的软件可靠性评价技术,它包括测试与评价两个方面的内容,既适用于软件开发过程,也可针对最终软件产品。在软件开发过程中使用软件可靠性评测技术,除了可以更快速地找出对可靠性影响最大的错误,还可以结合软件可靠性增长模型,估计软件当前的可靠性,以确认是否可以终止测试和发布软件,同时还可以预计软件要达到相应的可靠性水平所需要的时间和测试量,论证在给定日期提交软件可能给可靠性带来的影响。对于最终软件产品,软件可靠性评测是一种可行的评价技术,可以对最终产品进行可靠性验证测试,确认软件的执行与需求的一致性,确定最终软件产品所达到的可靠性水平。
二、软件可靠性评测技术
本文所述的软件可靠性评测是指运用统计技术对软件可靠性测试和系统运行期间采集的软件失效数据进行处理并评估软件可靠性的过程。软件可靠性评测的主要目的是测量和验证软件的可靠性,当然实施软件可靠性评测也是对软件测试过程的一种完善,有助于软件产品本身的可靠性增长。
软件测试者可以使用很多方法进行软件测试,如按行为或结构来划分输入域的划分测试,纯粹随机选择输入的随机测试,基于功能、路径、数据流或控制流的覆盖测试,等等。对于给定的软件,每种测试方法都局限于暴露一定数量和一些类别的错误。通过这些测试能够查找、定位、改正和消除某些错误,实现一定意义上的软件可靠性增长。但是,由于它们都是面向错误的测试,测试所得到的结果数据不宜用于软件可靠性评估。
软件可靠性测试是指在软件的预期使用环境中,为进行软件可靠性评估而对软件实施的一种测试。软件可靠性测试应该是面向故障的测试,以用户将要使用的方式来测试软件,每一次测试代表用户将要完成的一组操作,使测试成为最终产品使用的预演。这就使得所获得的测试数据与软件的实际运行数据比较接近,可用于软件可靠性估计。
软件可靠性评测由可靠性目标的确定、运行剖面的开发、测试的计划与执行和测试结果的分析与反馈等四个主要的活动组成。
可靠性目标是指客户对软件性能满意程度的期望。通常用可靠度、故障强度、MTTF等指标来描述,根据不同项目的不同需要而定。建立定量的可靠性指标需要对可靠性、交付时间和成本进行平衡。为了定义系统的可靠性指标,必须确定系统的运行模式,定义故障的严重性等级,确定故障强度目标。
为了对软件可靠性进行良好的预计,必须在软件的运行域上对其进行测试,首先定义一个相应的剖面来镜像运行域,然后使用这个剖面驱动测试,这样可以使测试真实的反映软件的使用情况。由于可能的输入几乎是无限的,测试必须从中选择出一些样本,即测试用例,测试用例要能反映实际的使用情况,反映系统的运行剖面。将统计方法应用到运行剖面开发和测试用例生成,在运行剖面中的每个元素都被定量地赋予一个发生概率值和关键因子,然后根据这些因素分配测试资源、挑选和生成测试用例。在这种测试中, 优先测试那些最重要或最频繁使用的功能,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障,以保证软件的按期交付。一个产品有可能需要开发多个运行剖面,这取决于它所包含的运行模式和关键操作,通常需要为关键操作单独定义运行剖面。
在软件的开发过程中使用软件可靠性测试和利用软件可靠性测试对最终产品进行评价,在测试计划的制定上有所不同。用于设计过程的可靠性测试称为可靠性增长测试,测试与故障的排除联系在一起,一般安排在开发过程的系统测试阶段执行,将测试所确定的故障提交给开发者进行修改,建立软件的一个新的版本,再进行下一次测试。在这种“测试—排错—新版本”的迭代过程中,跟踪故障强度的变化,确认测试是否可以终止及软件是否可以发布。可靠性增长测试的测试脚本将执行多次。针对最终产品的可靠性测试称为可靠性验证测试,通过验证测试可确定软件产品当前的可靠性水平。就单个软件版本而言,可靠性验证测试的测试脚本将仅执行一次。软件可靠性故障数据的收集是测试活动的一部分,在测试周期内,纪录每个故障的资料,如与时间相关的故障频度、类型、严重性和故障的根源等,并且应区分设计阶段和最终产品的故障。