几种常见软件可靠性测试方法综述及应用对比上海交通大学陈晓芳[摘要]软件可靠性测试是软件可靠性工程的一项重要工作内容,是满足软件可靠性要求、评价软件可靠性水平及验证软件产品是否达到可靠性要求的重要途径。本文探讨、研究了软件可靠性测试的基本概念,分析、对比了几种软件可靠性测试主要方法的优缺点。[关键词]软件可靠性软件可靠性测试软件测试方法引言软件可靠性工程是指为了满足软件的可靠性要求而进行的一系列设计、分析、测试等工作。其中确定软件可靠性要求是软件可靠性工程中要解决的首要问题,软件可靠性测试是在软件生存周期的系统测试阶段提高软件可靠性水平的有效途径。各种测试方法、测试技术都能发现导致软件失效的软件中残存的缺陷,排除这些缺陷后,一般来讲一定会实现软件可靠性的增长,但是排除这些缺陷对可靠性的提高的作用却是不一样的。其中,软件可靠性测试能最有效地发现对可靠性影响大的缺陷,因此可以有效地提高软件的可靠性水平。软件可靠性测试也是评估软件可靠性水平,验证软件产品是否达到软件可靠性要求的重要且有效的途径。一、软件可靠性测试概念“测试”一般是指“为了发现程序中的错误而执行程序的过程”。但是在不同的开发阶段、对于不同的人员,测试的意义、目的及其采用的方法是有差别的。在软件开发的测试阶段,测试的主要目的是开发人员通过运行程序来发现程序中存在的缺陷、错误。而在产品交付、验收阶段,测试主要用来验证软件产品是否达到用户的要求。或者说,对于开发人员,测试是发现缺陷的一种途径、手段,而对于用户,测试则是验收产品的一种手段。二、软件测试方法软件测试方法有以下几个主要概念:白盒测试、黑盒测试、灰盒测试。白盒测试(White-boxtesting或glass-boxtesting是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法,溢出,路径,条件等等中的缺点或者错误,进而加以修正。黑盒测试(Black-boxtesting是通过使用整个软件或某种软件功能来严格地测试,而并没有通过检查程序的源代码或者很清楚地了解该软件或某种软件功能的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。通常测试人员在进行测试时不仅使用肯定出正确结果的输入数据,而且还会使用有挑战性的输入数据以及可能结果会出错的输入数据以便了解软件怎样处理各种类型的数据。灰盒测试(Gray-boxtesting就像黑盒测试一样是通过用户界面测试,但是测试人员已经有所了解该软件或某种软件功能的源代码程序具体是怎样设计的,甚至于还读过部分源代码,因此测试人员可以有的放矢地进行某种确定的条件或功能的测试。这样做的意义在于:如果你知道产品内部的设计和透过用户界面对产品有深入了解,你就能够更有效和深入地从用户界面来测试它的各项性能。1、白盒测试白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。白盒的测试用例需要做到:(1保证一个模块中的所有独立路径至少被使用一次;(2对所有逻辑值均需测试true和false;(3在上下边界及可操作范围内运行所有循环;(4检查内部数据结构以确保其有效性。白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。白盒测试的实施步骤:(1测试计划阶段:根据需求说明书,制定测试进度。(2测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。(3测试执行阶段:输入测试用例,得到测试结果。(4测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。白盒测试的方法:总体上分为静态方法和动态方法两大类。静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。小结:白盒测试是一种被广泛使用的逻辑测试方法,是由程序内部逻辑驱动的一种单元测试方法。只有对程序内部十分了解才能进行适度有效的白盒测试。但是贯穿在程序内部的逻辑存在着不确定性和无穷性,尤其对于大规模复杂软件。因此我们不能穷举所有的逻辑路径,即使穷举也未必会带来好运(穷举不能查出程序逻辑规则错误,不能查出数据相关错误,不能查出程序遗漏的路径。要正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。2、黑盒测试黑盒测试(Black-boxTesting,又称为功能测试或数据驱—6—动测试是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。黑盒测试的目的是发现以下类型的错误:(1功能错误或遗漏;(2界面错误;(3数据结构或外部数据库访问错误;(4性能错误;(5初始化和终止错误。黑盒测试的实施步骤:(1测试计划,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。(2测试设计,将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性。(3测试开发,建立可重复使用的自动测试过程。(4测试执行,执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。(5测试评估,结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。小结:黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。3、灰盒测试灰盒测试是基于程序运行时刻的外部表现同时又结合程序内部逻辑结构来设计用例,执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。灰盒测试法的目的是验证软件满足外部指标要求以及软件的所有通道都进行了检验。通过该程序的所有路径都进行了检验和验证后,就得到了全面的验证。完成功能和结构验证后,就可随机地一次变化一行来验证软件测试用例在软件遇到违背原先验证的不利变化时软件的可靠性。灰盒测试需要的条件:(1需要在测试中,除了部署产品之外,还有就是程序源代码,不管外部是多少漂亮界面或易用的功能,最终都是由源代码来实现的。所以在部署时,要安装源代码。从源代码编译生成的目录中运行软件。(2需要代码覆盖率工具的配置;部署可以针对本软件开发语言的代码覆盖率工具;(3测试人员要具备阅读代码的能力,其对开发语言的熟悉程度和程序设计经验多少决定了采用灰盒测试能够取得多大的好处,所以配置这方面的测试人员或进行必要的培训是必要的。三、白盒、黑盒、灰盒测试方法的优缺点比较测试方法优点缺点白盒测试1、迫使测试人员去仔细思考软件的实现2、可以检测代码中的每条分支和路径3、揭示隐藏在代码中的错误4、对代码的测试比较彻底5、最优化1、昂贵2、无法检测代码中遗漏的路径和数据敏感性错误3、不验证规格的正确性黑盒测试1、基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了2、设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因1、结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴2、没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来做3、就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出灰盒测试1、能够进行基于需求的覆盖测试和基于程序路径覆盖的测试2、测试结果可以对应到程序内部路径,便于bug的定位、分析和解决3、能够保证设计的黑盒测试用例的完整性,防止遗漏软件的一些不常用的功能或功能组合4、能够需求或设计不详细或不完整对测试造成的影响1、投入的时间比黑盒测试大概多20-40%的时间2、对测试人员的技术要求更高四、总结软件可靠性是软件质量评估的最重要指标之一,本文阐述了软件可靠性测试的基本概念和主要方法,重点对常用方法的优缺点进行了比较;其实软件可靠性测试方法不下有20种之多,要根据不同的环境、软件类型选择不同的测试方法,才能确保软件的可靠。参考文献[1]马瑞芳,王会燃.《计算机软件测试方法的研究》.小型微型计算机系统,2003年12月期[2]徐明,杨文.《软件测试与软件可靠性的研究》.中国科技信息,2006年第11期[3]陆民燕,陈雪松.《软件可靠性测试及其实践》.测控技术,2000年19卷第5期—7—