摘要
随着软件技术的快速发展,计算机软件在现实生活的作用越来越大,和生活的融入度也越来越高,然而随着博弈仿真问题的规模和复杂度的提升,软件的可靠性问题也越来越突出。深入研究软件可靠性模型对于预测评估软件的可靠性具有十分重要的意义。本文从软件可靠性模型的定义,几种可靠性模型以及常见的几种技术和测试等多个角度去介绍软件可靠性方面的知识,望能通过基本知识的梳理获得一些有益的启示。
关键词软件可靠性,测试,技术,模型
Abstract
with therapid development of software technology, computer software plays a more andmore important role in real life and has a higher integration degree with life.It is very important to study the software reliability model to predict andevaluate the software reliability. This paper introduces the knowledge ofsoftware reliability from the definition of software reliability model, severalreliability models, common techniques and tests. Hope that through the basicknowledge of the comb to get some useful inspiration.
Keywords:software reliability, testing, technology, model
第一章 引言
随着计算机和信息处理的广泛应用,计算机系统的可靠性问题越来越得到人们的关注。而软件体系规模的日益增大及其复杂性的日益增强,使软件的可靠性问题更为突出。据有关资料统计,软件故障约占整个计算机系统故障的 65%[1]。所谓软件可靠性是指软件系统在规定环境下、给定时间内无故障运行的概率,是软件质量的一个重要组成部分。软件可靠性与硬件可靠性相比体现出了不同的特点:1)软件错误主要是由设计错误造成的,使用和维护对软件可靠性的影响不大;2)软件错误不随使用时间的延长而增加[2];3)软件修理就是通过再设计排除原有错误;4)软件可靠性增长与软件使用的时间无关,与检测并改正错误的努力有关;5)软件寿命期内无老化与耗损现象;6)正确的软件不因使用环境的变化而改变其正确性;7)同一软件的冗余技术不能提高软件的可靠性;8)采用高可靠性的标准件-系统软件所提供的各种库函数,未必能提高整体软件的可靠性。软件可靠性模型是软件可靠性评估与预测的核心,目前,公开发表的软件可靠性模型已经有一百多种,但是,由于它们假设不同,性能各异,因此,即使用它们估测同一软件也可能得到存在巨大差异的预测结果,至今仍然没有一个既简单又广泛适用的软件可靠性模型。本文正是针对这一问题。望通过对软件可靠性模型等知识进行系统梳理得到一些有益的启示。
第二章 软件可靠性模型概述
建立软件可靠性模型旨在根据软件可靠性相关测试数据,运用统计方法得出软件可靠性的预测值或估计值[3]。软件可靠性模型对于预防软件故障,预估软件性能都有积极意义。软件失效总体来说随着故障的检出和排除而逐渐降低,在任意给定的时间,能够观测到软件失效的历史[4]。软件可靠性建模的目标如下:1)预测软件系统达到预期目标所还需要的资源开销及测试时间;2)预测测试结束后系统的期望可靠性。
2.1软件可靠性模型特点
软件可靠性模型主要有以下特点[5]。
1)与软件开发语言无关。软件可靠性模型的
应用与程序开发时选用的设计语言应该是没有关系的。按照同一规格说明开发的软件,对于不同的程序开发语言,相同模型应该给出同样的预测结果。
2)与软件开发方法无关。虽然一个好的程序设计方法开发出来的软件可靠性更高,但是这样的影响是很难描述的,因为软件开发过程十分复杂、涉及诸多人为因素,从而使得对软件可靠性的预测非常困难。在软件可靠性预测中,一般假设软件系统采用最坏的开发方法。
3)测试方法选择。理论上,通过完全充分的测试,软件可靠度能达到百分之百。但是,真实情况是人们只能实施有限的测试,使得在可靠性估计精度要求高的情况下,这些模型的可用性受到了限制。
4)错误排除过程。早期的许多软件可靠性模型都基于完全改错假设,但实际上,在排错的过程中,往往会引入新的错误。
5)模型表达内容。通常,模型应该指出软件已被测试的程度,测试数据和条件是否能准确地模拟软件运行环境,是否足以检测出类似的故障等。软件可靠性模型假设软件测试的数据和条件与操作环境有着相同的分布。
6)输入的分布情况。软件可靠性模型基于的输入分布是非常重要的,因为可靠性估计与其紧密相关。例如,考虑一种极端的情况,软件只用到一个输入为常数,软件将或者成功或者失败的执行,于是模型给出的可靠性估计相应的为1或0。
7)软件复杂性。原则上,复杂的软件比相对简单的软件要求更多的测试。但是,现有软件可靠性模型大多没有对此进行考虑。
8)对模型的验证。在整个软件生命周期内,软件规模几乎成倍的增长,软件可靠性必然发生相应的变化,加之缺乏实际可用的验证数据,使得对软件可靠性模型的验证非常复杂。
9)模型要求数据。模型进行估测所要求的数据应该是易于收集的,因为数据问题往往限制了软件可靠性模型的应用范围。
2.2软件可靠性模型分类
软件可靠性模型经过几十年的发展,已有将近二百多种可靠性模型发表。但是,并没有发现一种科学、系统的分类方法。为了更好地整理和研究这些模型,许多不同的分类方法被相继提出。现在常用的一些分类方法主要有随机性分类、按参数的估计方法分类、按系统出现的失效数分类、按修复过程分类、按时间的适用方式分类等等[6]。按照软件可靠性相关,将其分成四类,分别是可靠性模型、释放时间模型、可用性模型、硬件-软件混合模型[7]。根据 Ramamoorthy 和 Bastani 的观点,根据模型的应用阶段来分类[7]:软件开发阶段:JM 模型、Littlewood-Verral 模型、Shooman 模型、Musa 模型等。软件验证阶段:Nelson 模型等。软件操作运行阶段:马尔可夫过程模型等。软件测试阶段:Mills模型、Seeding模型等。
到目前为止,软件可靠性模型的研究还处于较为初级的阶段,尚未形成固定的分类方法。也有不少学者提出了他们的分类方法,诸如按照随机性分类、按照故障修复过程分类、按照软件中发现的故障数分类、按照模型参数估计方法分类、按照模型采用时间方式分类等[8]。综合模型假设、测试环境以及数理统计的方法,可以将模型大致分为随机过程类模型,如马尔
可夫过程模型、非齐次泊松过程模型等,及非随机过程类模型[9]。在软件测试过程中,一旦软件故障被发现,都要进行改正。因此,随着测试工作的进行,软件中的故障不断被排除减少,软件的可靠性就不断得到提高。所以说,现有的软件可靠性模型都是软件可靠性增长模型。综合模型假设、测试环境以及数理统计的方法,我们将模型大致分为随机过程类模型和非随机过程类模型。
第三章软件可靠性测试
3.1计算机安全可靠性测试的基本概况
进行计算机软件可靠性测试的主要目的是对计算机软件的某种功能或者整体运行过程进行测试,然后评估计算机软件的可靠性是否能够满足计算机用户的使用需求。可以说计算机软件的可靠性测试就是对计算机软件中存在的bug进行及时的发现,尽早解决, 提高计算机软件的经济效益和使用效益[10]。在进行计算机软件可靠性测试的过程中,要注意设定明确的可靠性测试目标,然后制定具体可行的测试方案,并对计算机软件可靠性测试进行科学的实施后对测试的结果进行分析,确定计算机软件的可靠性。进行计算机软件可靠性测试除了能够及时发现计算机软件的缺陷,还能够方便软件开发人员对计算机软件的缺陷进行有效的改进。
3.2 计算机软件安全可靠性评价和预测
对计算机可靠性测试的结果进行评价是计算机软件可靠性测试过程中的一个重要环节,是确定计算机软件缺陷以及故障率的重要步骤,通常情况下是通过建立可靠性模型的方式完成对计算机软件可靠性测试的评价和预测过程的。具体的实施流程是:(1)建立广义的可靠性指数模型,充分结合几种常见的软件可靠性分析模型,简化建立模型的过程和步骤,节约可靠性测试的评价时间[11]。(2)统计计算机软件故障运行的概率与计算机软件自身缺陷之间的函数关系,利用这两种数据的函数关系,确定计算机软件的失效率,然后实现对计算机可靠性测试的有效评价。(3)假设计算机软件失效率与故障次数之间存在一定的数据关系。那么每次计算机软件出现故障概率都应该是相同的,出现故障的严重程度也是相同的,还要注意每次软件故障运行都是独立的。基于这种假设条件对计算机软件的可靠性测试进行评价更加有效准确。总之,借助建立计算机软件可靠性模型完成对计算机软件可靠性测试的评价能够在一定程度上保证对计算机软件可靠性测试的数据进行准确有效研究,从而确保计算机软件可靠性测试评价的准确有效,借此保证相关的测试人员能够对计算机软件中的缺陷和故障及时发现并妥善解决,达到提高计算机软件可靠性的目的[12]。
3.3 计算机软件安全可靠性测试方法分析
3.3.1 可靠性评测技术
软件可靠性评测是指运用统计技术对软件可靠性测试和系统运行期间采集的软件失效数据进行处理并评估软件可靠性的过程。软件可靠性评测的主要目的是测量和验证软件的可靠性,当然实施软件可靠性评测也是对软件测试过程的一种完善,有助于软件产品本身的可靠性增长。
软件测试者可以使用很多方法进行软件测试,如按行为或结构来划分输入域的划分测试,纯粹随机选择输入的随机测试,基于功能、路径、数据流或控制流的覆盖测试,等等。对于给定的软件,每种测试方法都局限于暴露一定数量和一些类别的错误。通过这些测试能够查找、定位、改正和消除某些错误,实现一定意义上的软件可靠性增长。但是,由于它们都是面向错误的测试,测试所得到的结果数据不宜用于软件可靠性评估。
软件可靠性测试是指在软件的预期使用环境中,为进行软件可靠性评估而对软件实施的一种测试。软件可靠性测试应该是面向故障的测试,以用户将要使用的方式来测试软件,每一次测试代表用户将要完成的一组操作,使测试成为最终产品使用的预演。这就使得所获得的测试数据与软件的实际运行数据比较接近,可用于软件可靠性估计。
软件可靠性评测由可靠性目标的确定、运行剖面的开发、测试的计划与执行和测试结果的分析与反馈等四个主要的活动组成。
可靠性目标是指客户对软件性能满意程度的期望。通常用可靠度、故障强度、MTTF等指标来描述,根据不同项目的不同需要而定。建立定量的可靠性指标需要对可靠性、交付时间和成本进行平衡。为了定义系统的可靠性指标,必须确定系统的运行模式,定义故障的严重性等级,确定故障强度目标。
为了对软件可靠性进行良好的预计,必须在软件的运行域上对其进行测试,首先定义一个相应的剖面来镜像运行域,然后使用这个剖面驱动测试,这样可以使测试真实的反映软件的使用情况。由于可能的输入几乎是无限的,测试必须从中选择出一些样本,即测试用例,测试用例要能反映实际的使用情况,反映系统的运行剖面。将统计方法应用到运行剖面开发和测试用例生成,在运行剖面中的每个元素都被定量地赋予一个发生概率值和关键因子,然后根据这些因素分配测试资源、挑选和生成测试用例。在这种测试中, 优先测试那些最重要或最频繁使用的功能,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障,以保证软件的按期交付。一个产品有可能需要开发多个运行剖面,这取决于它所包含的运行模式和关键操作,通常需要为关键操作单独定义运行剖面。
3.3.2 计算机软件安全可靠性测试的基本原则
在制定计算机软件可靠性测试的基本原则的时候,要注意从计算机软件的整体和全局出发进行考虑,制定计算机软件可靠性测试的基本原则的主要要求有以下几点[13]:第一,制定的测试原则 必须科学有效,并且要根据专业的测试执行标准和实施流程进行 制定;第二,软件可靠性测试的基本原则必须对计算机软件可靠性测试方法进行有效的评价;第三,制定的计算机软件可靠性测试原则必须能够保证对计算机软件的可靠性测试长期有效,也就是说,这些原则标准是客观的、量化的,并且还要具有一定的预测性;第四,计算机软件可靠性测试只是计算机众多测试内容中的一项测试,所以,在制定计算机可靠性测试原则时,要注意从计算机整体的测试内容出发,保证计算机可靠性测试的原则标准能够独立实施的同时,还要注意与其他测试内容之间的和谐统一。
第四章 总结
产品的可靠性与外界环境的应力状态和对产品功能的需求密切相关。理解产品的可靠性需要从两个角度出发,其一是按照产品的层次结构理解可靠性,其二是按照产品的全寿命周期理解可靠性。按照产品的层次结构理解可靠性是指需要根据产品各层次特点开展相应的可靠性工作;按照产品的全寿命周期理解可靠性是指在需求分析、总体设计、分项设计和生产、试验、使用、维修维护等过程都需开展相应的可靠性工作。
软件可靠性测试是软件可靠性保证过程中非常关键的一步。经过软件可靠性测试的软件并不能保证该软件中残存的错误数最小,但可以保证该软件的可靠性达到较高的要求。从工程的角度来看,一个软件的可靠性高不仅意味着该软件的失效率低,而且意味着一旦该软件失效,由此所造成的危害也小。一个大型的工程软件没有错误是不可能的,至少理论上还不能证明一个大型的工程软件能没有错误。因此,保证软件可靠性的关键不是确保软件没有错误,而是要确保软件的关键部分没有错误。更确切地说,是要确保软件中没有对可靠性影响较大的错误。这正是软件可靠性测试的目的之一。软件可靠性测试的侧重点不同于一般的软件功能测试,其测试实例设计的出发点是寻找对可靠性影响较大的故障。因此,要达到同样的可靠性要求,可靠性测试比一般的功能测试更有效,所花的时间也更少。另外, 软件可靠性测试的环境是具有使用代表性的环境,这样,所获得的测试数据与软件的实际运行数据比较接近,可用于软件可靠性估计。
总之, 软件可靠性测试比一般的功能测试更加经济和有效,它可以代替一般的功能测试,而一般的软件功能测试却不能代替软件可靠性测试,而且一般功能测试所得到的测试数据也不宜用于软件可靠性估计。
参 考 文 献
[1]仝敏,卫一芃,张灯. 嵌入式分区操作系统可靠性技术的研究与应用[J]. 航空计算技术,2015(2):105-112.TONG Min,WEI Yipeng,ZHANG Deng. Research and Application of Reliability Technique of
Embedded Multi⁃ple Partition Operating System[J]. Aeronautical Comput⁃ing Technique,2015(2):105-112.
[2]刘云,赵玮. 软件可靠性研究与进展[J]. 微机发展,2003,13(2):12-15.
LIU Yun,ZHAO Wei. Research and Progress in Software Reliability[J]. Microcomputer Development, 2003,13(2):12-15.
[3]J.D.Musa 著. Software reliability engineering[M]. 韩柯译.北京:机械工业出版社,2003:78-79.J.D.Musa. Software reliability
engineering[M]. HAN Ke,Translate. Beijing:China Machine Press,2003:78-79.
[4]楼俊钢,江建慧,帅春. 软件可靠性模型研究进展[J].计算机科学,2010(9):13-19.LOU
Jungang,JIANG Jianhui,SHUAI
Chunyan. Software Reliability Models:A Survey[J]. Computer Science,2010(9):13-19.
[5]贾冀婷. 软件测试中可靠性模型的设计与研究[J]. 计算机技术与发展,2014,24(3):110-125.JIA Jiting. Design and Research
of Software Reliability Model in Software Testing[J]. Computer Technology and Development,2014,24(3):110-125.
[6]李邵明,郭平. 软件可靠性模型选择的理论研究[J].计算机工程与科学,2006,28(A2):59-62.LI Shaoming,GUO Ping. A Theoretical Study of Selecting Software Reliability
Growth Models[J]. Computer Engi⁃neering&Science,2006,28(A2):59-62.
[7]腾灵灵,邵栋,荣国平. 软件可靠性模型选择研究[J].计算机应用与软件,2010,27(6):128-131. TENG Lingling,SHAO Dong,RONG Guoping. On Soft⁃ware Reliability
Model Selection[J]. Computer
Applica⁃tions and Software,2010,27(6):128-131.
[8]孙勇. 软件可靠性模型应用研究[D]. 南京:东南大学,2014.SUN Yong. Application Research of software reliability model[D]. Nanjing:Southeast
University,2014.
[9]谈维新,沈元隆. 考虑测试效率的软件可靠性模型研究[J]. 计算机技术与发展,2011,21(8):67-70.TAN Weixin,SHEN
Yuanlong. Research 0f Software Re- liability Model with Test Efficiency[J]. Computer Tech⁃nology and Development,2011,21(8):67-70.
[10]蔡建平.软件可靠性测试方法新探[J].计算机工程与设计, 2009.
[11]何明利, 邵慧芳.软件可靠性测试方法研究[C]// International Conference
of China Communication and Technology,2010.
[12]覃文闯, 郑丽娜, 胡一鸣等.一种多维度的软件系统可 靠性测试方法研究[J].微型机与应用,2014.
[13]马海云,魏凯斌.一种新的软件测试方法的研究[J].自动 化与仪器仪表, 2010. [5]侯芸晳.探讨软件测试方法研究[J].科技展望,2016.
网友评论