当前位置:文档之家› 软件测试新技术的进展和应用

软件测试新技术的进展和应用

1 / 4 软件测试新技术的进展和应用 摘要:随着测试技术的发展和测试需求的扩大,自动化测试在软件测试中的优势越来越明显。本文通过对文献资料的阅读,介绍了自动化测试框架、自动化测试用例生成技术两种重要的自动化测试研究技术,对其目前的应用现状和实际使用情况进行了分析,提出了软件测试未来的发展趋势。 关键词:软件测试,自动化测试,测试框架,测试用例

1 引言

软件测试是软件质量保证的重要手段,通过软件测试可以发现软件缺陷,从而修改缺陷,提高软件的质量水平。软件产品的测试比硬件产品的检测要复杂得多,并且软件产品的测试不能充分利用检测工具,还需依赖测试人员的个人判断,对业务知识的掌握程度以及测试用例的设计能力,知识和经验。 随着计算机技术和软件技术的发展,近年来,软件测试在各个领域发挥着重要的作用。随着软件工程的发展,对系统化的软件测试技术和软件测试方法的研究也随之发展。软件测试从静态分析、动态测试等简单的查错行为发展成为系统化的工程行为。为了提高软件的测试效率,减少人员手工操作的次数,克服由于人员水平造成的测试差异,人们开始研究自动化测试技术。 本文通过对大量软件测试技术相关文献的阅读,分析了自动化测试框架、自动化测试用例生成技术两个软件自动化测试的热点问题,结合目前软件企业使用的测试工具,总结了软件自动化测试技术的应用现状和存在的问题,对未来软件测试技术的发展进行了展望。

2 自动化测试

随着软件系统规模的扩大和软件应用领域的不断扩展,软件系统的测试也变更越来越困难,传统的人工测试已无法满足人们的测试需要,虽然自动化测试不能从根本上解决问题,但其技术可以部分解决测试覆盖的问题和测试效率问题。 随着自动化测试技术的不断发展,自动化技术更加注重实用性、有效性和性能的不断提高,自动化软件测试技术同各种传统的人工测试技术相结合,大缩短了测试的时间和测试的开销,自动化测试已成为软件测试技术的重要研究方向。 目前,自动化测试技术的主要研究内容包括:测试自动化框架、测试自动化脚本技术、自动化测试用例生成技术、测试自动化的预测、自动测试与可靠性分析、自动化安全测试技术等。

3 自动化测试框架

自动化测试框架模型的研究是为了使整个测试过程可以建立在一个框架模型之上,这些过程包括编制测试计划、安排测试活动、实现测试及检查和评估测试结果等。 3.1 基于程序结构的自动化测试框架

在文献[1]中,作者提出了一种面向程序结构测试的一体化自动测试框架模型——C-ATFM模型。该模型是基于C语言的面向程序的测试框架,集成了自组织的环境,采用源码嵌入式的测试探针技术,模型包括5个模块。 1) 语法分析器:用于对源程序进行分析,使用了有限自动机对正则表达式所表示的规则进行识别。 2 / 4

2) 策略配置器:根据所要采用的测试方法来设计测试模型对测试活动的支持,使测试模型具有较好的适应性,对自动测试的有效性非常重要。 3) 指令生成器:自动采集和分析程序结构的控制流信息,在测试策略的控制下,针对不同测试策略,计算程序动态测试过程,生成测试处理模块并插入到程序中,构成包含测试信息的被测程序,提交给仿真执行模块运行测试。 4) 测试用例生成器:在自动测试过程中,为了尽量减少人工的介入,输入处理被实现为一个独立的模块,在需要时被调用,以模拟人工输入,为程序提供必要的输入数据。测试用例的自动生成技术也是自动化测试的一个重要的研究方向,将在后面的文章中进行介绍。 5) 指令仿真执行器:提供测试框架内部的仿真执行环境。 以上测试框架是基于程序结构的测试方法,即主要被用于白盒测试过程中。 3.2 基于类的测试模型

面向对象的软件程序开发方法的出现,使软件测试者从传统的基于过程的测试转向基于类的测试。类的封装机制限制了对象对外部的可见性和外部以其的操作权限,而类的继承机制增加了软件测试的复杂性,多态和动态绑定为程序的执行带来了不确定性。由于以上问题的出现,人们开始讨论面向对象的软件测试模型。 文献[2]中给出了一种基于EDPN的类测试模型,作者基于面向对象软件测试的层次划分、测试方法,讨论了从UML图到EDPN图的转换,提出了一种基于EDPN的有标记的唯一输入输出测试用例的生成方式,并设计了基于EDPN模型的类测试模型。该模型可以通过唯一输入输出测试类的状态及状态转移;通过优化正交阵列测试类的交互;还可以通过生成协同路径方法测试类的层次。

4 自动化测试用例生成技术

测试用例可以定义为:①为了特定目标而设计的一组测试输入,执行条件和期望的输出结果;②为某一测试项记录的特定的输入、预测结果和一组执行条件。 软件测试用例生成是软件测试的核心问题,如何选择较好的测试准则,对提高测试用例发现软件错误的效率具有重要意义。 4.1 测试用例生成技术

软件工程技术对软件测试研究的影响表现在三个方面:软件开发过程模型决定了软件测试过程模型,软件体系结构决定了软件测试的层次划分,软件模型决定了软件测试用例生成方法。 文献[3]中提出了基于模型比较的测试方法,该方法将软件需求和软件实现转换为基准模型,通过比较得到需求模型和实现模型的差异,生成测试用例。文中采用了基于等价类的基于模型比较的测试方法和基于扩展有限状态机的基于模型比较的测试方法,并对两种方法进行了对比和分析。 文献[1]中针对不同的测试策略,设计了不同的测试用例自动生成的方法,其方法的设计和实现是基于程序规则说明的决策表技术。文中作者在其设计的自动化测试框架模型下,研究了基于程序规则说明的自动化测试技术,文中,作者采用了人工智能领域的问题求解方式,基于遗传算法的测试用例自动化生成技术和基于启发式学习的测试用例自动生成技术。 文献[2]的作者在给出基于EDPN的测试模型后,提出了一种基于带权EDPN迭代的面向对象系统的分割算法,以迭代的方法将面向对象系统分割成不同粒度而功能独立的测试子系统,并提出了基于组合EDPN模型的交互测试方法,解决了组合冲突和测试用例过多等问题。 4.2 测试用例集约简技术

测试用例集约简技术是生成最小测试用例集,最大限度地对软件进行高效率的测试,降低软件测试成本的关键技术之一。测试用例集约简技术也是今年来人们普遍重视和深入研究的话题。 早在1974年,文献[4]的作者就提出了用于简化测试用例集的贪心算法。随着测试用例集约简技 3 / 4

术的发展,文献[5]提出一种根据测试用例的重要性来选择测试用例的启发式算法(H算法)。文献[6]结合了贪心算法和启发式算法的借点为,提出了充分考虑剔除1-1冗余策略的简化方法。文献[7]提出的测试用例选择方法把测试用例选择问题转化为整数规划问题,利用整数规划方法求出最优解。 以上四种方法是测试用例集约简技术中的几种经典算法,目前,很多新的测试用例集约简算法都是对以上几种算法的改进和完善。如文献[8]通过对传统的测试用例集约简技术的分析对比,提出了一种可在测试用例集简化期间,通过有选择性地保留测试用例来生成测试用例集的最小测试用例集生成方法。 文献[8]的算法允许保留在某个测试标准下的冗余,但在其他测试标准下不冗余的测试用例。文献[9]则提出首先消除测试需求中存在的冗余,再对由该测试需求生成的测试用例集使用简化算法,得到无冗余的测试用例集。 文献[10]中,作者分别针对组合测试的最小测试集生成技术和基于测试需求集的测试用例集约简方法两个方面进行了系统深入的研究。文中,作者在系统地研究两两组合测试用例集的启发式生成方法基础上,对其进行有效改善和补充,提出了基于网络图模型和基于解空间树模型的两种新的测试用例集生成算法。另外,作者在系统研究多次单因素试验方法、均匀设计方法、正交试验设计方法等理论和应用的基础上,提出了软件测试的单因素覆盖方法、多因素覆盖方法等概念和相应测试用例生成方法。最后,作者给出了对软件系统进行全面测试的最小测试用例集生成框架,该框架可以有效地生成、管理、约简、分析和评估对软件系统进行全面测试的最小测试用例集。 在文献[11]中,所提出的软件测试用例生成技术也是运用正交试验设计法,应将其应用于一个简易的管理信息。

5 现状与展望

随着软件工程及软件测试行业的发展,软件测试更多的从手工测试转向自动化的机器测试,这样可以大大提高测试的效率,使人从反复枯燥的工作中解放出来。目前,大量测试工具的出现,使软件测试工作变得更加方便高效,但由于测试工具的使用对技术的要求不高,如自动化测试工具QTC已被测试人员广泛使用,LoadRunner更是压力测试离不开的工具,因此,对于这些工具内在所包含的技术却被测试人员忽视,测试人员更多的是根据测试需求去选择需要的工具,而对工具的具体实现方式知之甚少。 而对于测试工具的开发者来说,自动化测试框架和自动化测试用例生成技术已成为自动化测试技术的两大关键研究方向。在这些测试工具中,不乏上文中介绍的各种技术的应用。例如用于C\C++语言单元测试的C++ Test,利用源代码扫描技术来提高代码质量的Klocwork等工具都具有与文献[1]提出的测试框架类似的测试框架,这些工具直接访问被测试应用程序的代码,对其中的语句进行分析,输入各种测试数据,检查返回值,比较返回值与预期结果是否一致等。 当然,所有自动化测试工具执行测试的过程中都需要生成测试用例,本文引用的所有文献中都给出了测试用例的生成方法。在我们使用工具进行测试的时候,测试用例已经被淡化,自动的测试过程中集成了所使用的测试用例,而我们在对结果进行分析时,可以查看到被执行的测试用例和测试用例的覆盖情况。这些测试工具使用了各种各样的自动化测试用例生成算法,为了提高工具的执行效率,测试用例集约简技术在工具设计过程中也是必需要考虑的内容。 以我公司为例,公司没有专职的软件测试人员,软件测试工作由开发人员、事业部测试人员、公司测试人员三步完成。而事业部测试人员和公司测试人员大多是一人负责多个项目的测试,由于测试时间紧、任务重,而项目的复用情况也多,完全可以使用自动化测试技术进行测试。目前,我公司的测试用例是通过测试管理工具QC进行管理,其中存在大量冗余的测试用例,会造成重复测试,如果可以使用测试用例集约简技术对已有的测试用例集进行整理,可以大大提高测试效率,但由于现有的测试工具无法提供通用的自动化测试用例约简功能,或其功能不适用,迫使我们无法将这些技术直接应用于软件测试工作中。

相关主题