软件可靠性与测试方法探析|软件的可靠性

  摘 要:介绍了软件可靠性的概念,从分析影响软件可靠性的因素开始,提出了提高软件可靠性的方法,进而引出了软件可靠性测试的定义以及进行软件可靠性测试的目的,阐述了进行软件可靠性测试的方法。
  关键词:可靠性;软件可靠性;软件测试;可靠性测试
  中图分类号:TP302 文献标识码:A 文章编号:16727800(2012)011003002
  作者简介:戴艳芳(1982-),女,中国空空导弹研究院工程师,研究方向为软件测试、软件工程。
  1 软件可靠性工程概述
  随着计算机技术的飞速发展,软件的规模越来越大,复杂性越来越高,软件可靠性的有效控制变得越来越复杂,研究和分析软件可靠性要求的特点,建立和完善软件可靠性设计技术和测试技术成为提高软件产品质量非常迫切而重要的课题。
  1.1 可靠性的定义
  长期以来,学术界对软件可靠性的确切含义一直存在争议。争论的焦点主要集中在硬件可靠性的定义是否能够直接引申到软件领域,软件的正确性是否能等同于可靠性。经过长期的争论和研究,1983年美国IEEE计算机学会对“软件可靠性”做出了如下两点定义:
  (1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的错误的函数;系统输入将确定是否遇到已存在的错误。
  (2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。
  1.2 影响软件可靠性的因素
  软件可靠性表明了一个软件按照客户的需求和设计的目标,执行其功能的正确程度。这要求一个可靠的软件应该具有正确性、健壮性、完备性以及一致性的特点。正是因为软件中的缺陷引起了软件故障,使软件不能满足需求。软件缺陷的形成如表1所示。
  通过对这些软件缺陷形成原因的分析可以看出,为了保证软件的可靠性,必须对软件开发过程采取措施,消除各阶段活动中各有关因素存在的问题(即要实施软件工程化)才能使软件可靠性得到提高。
  1.3 提高软件可靠性的方法
  在软件结构的可靠性设计中,软件可靠性的基础是软
  件工程化技术,它提出了一些软件开发的基本原则和要求。软件设计采用自顶而下和模块化设计的方法,建立一套结构良好的程序系统,将软件设计成由相对独立、功能单一的模块组成的系统,使软件的耦合度最弱、内聚度最高且能使软件便于测试与维护。软件规模与复杂度是影响软件可靠性的一个主要因素。把一个大的系统划分成相对独立的模块,降低了系统实现难度,从而降低了软件在实现过程中出错的可能性,有利于提高软件可靠性。
  上述方法都是在软件的设计阶段,为了进一步提高可靠性,必须进行有针对性的软件测试,即软件可靠性测试。
  2 软件可靠性测试
  2.1 软件可靠性测试的定义
  测试是指为了发现软件中的错误而采用人工或自动的手段来运行某个程序的过程。但是在不同的开发阶段、对于不同的人员,测试的任务是不同的。软件可靠性测试是指为了保证和验证软件的可靠性要求而对软件进行的测试。其采用的是按照软件运行剖面对软件进行随机测试的测试方法。
  2.2 软件可靠性测试目的
  软件可靠性测试是指为了保证和验证软件的可靠性要求而对软件进行的测试。其采用的是按照软件运行剖面(对软件实际使用情况的统计规律的描述)对软件进行随机测试的测试方法。通过软件可靠性测试可以达到以下目的:
  (1)有效地发现程序中影响软件可靠性的缺陷,从而实现可靠性增长:软件可靠性是指“在规定的时间内,规定的条件下,软件不引起系统失效的能力,其概率度量称为软件可靠度。”软件的“规定的条件”主要包括相对不变的条件和相对变化的条件,相对不变的条件如计算机及其操作系统;相对变化的条件是指输入的分布,用软件的运行剖面来描述。按照软件的运行剖面对软件进行测试一般先暴露在使用中发生概率高的缺陷,然后是发生概率低的缺陷。而高发生概率的缺陷是影响产品可靠性的主要缺陷,通过排除这些缺陷可以有效地实现软件可靠性的增长。
  (2)验证软件可靠性满足一定的要求:通过对软件可靠性测试中观测到的失效情况进行分析,可以验证软件可靠性的定量要求是否得到满足。
  (3)估计、预计软件可靠性水平:通过对软件可靠性测试中观测到的失效数据进行分析,可以评估当前软件可靠性的水平,预测未来可能达到的水平,从而为开发管理提供决策依据。软件可靠性测试中暴露的缺陷既可以是影响功能需求的缺陷也可以是影响性能需求的缺陷。
  2.3 软件可靠性测试方法
  2.3.1 可靠性测试策略选择
  从测试的策略来讲,可靠性测试的方法可分为两种:白盒测试和黑盒测试。
  白盒测试是一种按照程序内部的逻辑结构和编码结构设计并执行测试用例的测试方法,又称为基于代码的测试,采用这种测试方法,测试人员必须看到被测的源程序,分析程序的内部结构,从检查程序的逻辑着手设计测试用例。一般来说,白盒测试根据覆盖要求设计测试用例,设计的测试用例要完成语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖,并达到一定的覆盖比例要求。白盒测试需要将被测程序在测试环境下运行,并能在运行过程中跟踪程序的执行路径。
  黑盒测试又称功能测试。在进行黑盒测试时,将软件看作一个黑盒,不考虑程序的内部结构,只需知道软件的输入、输出对应关系或者软件的功能,因此,黑盒测试是从客户角度出发的测试。它根据开发方提供的软件需求规格说明书来设计测试用例,按照测试用例的要求运行被测程序。黑盒测试着重于验证软件功能和性能的正确性,常见的测试项目包括功能测试、性能测试、边界测试、余量测试以及强度测试等。显然,如果软件的外部特性本身存在问题,仅仅通过黑盒测试是无法发现的。
  软件可靠性测试从理论上讲是一种黑盒测试,因为它不需要了解程序的内部结构以及如何实现等问题,它是面向需求、面向使用的测试,但从验证编码的正确性方面来讲,白盒测试又是可靠性测试中不可或缺的一部分,因此,要提高软件可靠性,最好采用以黑盒测试为主,结合白盒测试的方法进行互补测试。
  2.3.2 基于功能剖面的可靠性测试方法
  软件的可靠性是视使用者如何对软件进行操作而定的,同一个软件,使用者的操作方式不同,软件的可靠性也会随之产生变化。因此,用户使用软件的方式对于软件可靠性测试十分重要。而用户使用软件的方式就是所谓的软件功能剖面。任何一个软件系统在使用过程中,各个软件功能剖面的使用概率是不同的,因此,在进行可靠性测试时,首先要确定软件的功能剖面,由软件功能剖面来指导可靠性测试工作。
  测试方案的确定首先需要确定软件的功能剖面。通过对使用者使用软件的实际情况以及使用者给出的经验数据进行分析,随后确定每条功能路径在系统中的使用概率,并以此为依据随机选取一定数量的测试用例,最终确定测试方案。
  使用基于功能剖面的方法选取测试用例,依据不同功能路径的使用频率来进行测试工作分配,可使测试工作量分配的更为均匀。在软件可靠性测试中,均匀的测试工作量能够更真实地反映软件系统在实际使用中的情况,使软件中的每个功能都能得到充分的测试。
  3 结语
  软件可靠性对现代高可靠性软件产品的设计和生产有着巨大的影响,尽管目前软件可靠性设计和测试的方法存在着一定的不足和缺陷,但是随着软件可靠性相关技术的进一步发展,提高软件可靠性这一重要课题必将取得更大的突破。
  参考文献:
  [1]黄锡滋.软件可靠性、安全性及质量保证[M].北京:电子工业出版社,2002.
  [2]龚庆祥.型号可靠性工程手册[M].北京:国防工业出版社,2007.
  [3]孙志安.软件可靠性工程[M].北京:北京航空航天大学出版社,2009.
  (责任编辑:杜能钢)