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

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

  4.1 测试用例生成技术

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

  4.2 测试用例集约简技术

  测试用例集约简技术是生成小测试用例集,大限度地对软件进行高效率的测试,降低软件测试成本的关键技术之一。测试用例集约简技术也是今年来人们普遍重视和深入研究的话题。

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

  5、现状与展望

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

  软件质量越来越被人们重视,测试驱动的开发技术被人们所接受,软件测试已不再简单的是软件生命周期中的一部分。随着技术的发展,测试技术将被更多的应用于项目开发之中,而未来的软件开发更多的是以测试为目的的开发,通过工具的自动化测试功能,保证开发人员的代码质量和整个系统的质量。当然,自动化测试无法替代人工测试,但自动化测试可以帮助测试人员更快更好的完成工作,而对于测试人员,可能更多的是需要考虑如何持续改进,这也是进行质量管理的目标所在。