论文部分内容阅读
当前,计算机的应用范围及规模不断扩大,软件复杂度也不断提高,对软件质量的要求也越来越高,高质量的软件开发正面临着极大的挑战。提高软件质量的重要手段之一是高质量的软件测试。由于软件开发技术在不断地推陈出新,相比起来,软件测试技术的发展就要相对地滞后,面临着很多棘手的问题。在软件测试中,一个很重要的问题就是如何生成高质量的测试数据。高质量的测试用例集可用较少的测试用例发现较多的错误和缺陷,可节省测试费用,提高测试效率和质量。面对众多的有关测试数据的生成及测试方法问题,我们选择性地研究了其中的几个主要方面,包括:(1)组合测试用例集的生成和精简;(2)结构化测试中,对大程序的测试相关问题;(3)基于Anti-model的测试技术的研究。就组合测试用例生成来说,已经有了不少的研究成果。R. Mandl在1985年为了测试Ada编译器首先提出了组合测试的概念。此后,组合测试就成为了研究焦点之一,D. Cohen等很多的国内外学者提出了各种方法来生成组合覆盖测试用例集。就结构测试来说,选择路径和按照选定路径生成测试用例是其中重要的两个方面。1982年,Thomas McCabe在其提出的软件复杂性度量的理论基础之上,提出了基本路径覆盖测试的概念;随后B. Beizer等提出了各种覆盖准则等。那么基于给定的测试路径,可以用静态法、动态法以及试探法等生成面向路径的测试用例。不管怎样,对于组合测试来说,被测软件往往输入参数多,并且参数取值也多;对于结构测试来说,往往需要覆盖的测试路径数目很大,因此都会导致测试用例集的庞大,给测试工作带来困难。然而,组合测试用例集中常存在着冗余和无效的用例,从而影响测试的效率和效果,那么怎样精简冗余和无效的用例呢?结构测试也存在不能完全覆盖所有路径的问题,那么如何选择覆盖的标准呢?还有,当被测软件只有一个总的系统架构和系统总体需求,没有其它相关的的详细信息(如源代码等),或者在实际的系统实现过程中设计模型常需要多次被修改等情况时,又该怎样来测试这样的系统呢?针对上述的这些测试中的问题,本文研究的主要内容和成果如下:(1)提出了一种基于树模型和输入参数关系的全组合测试用例集的精简和生成方法。这种方法首先是用解空间树来表示多输入参数的组合测试用例,并且给出了解空间树和输入参数之间的关系;然后分析了输入参数之间的依赖关系,总结了依赖关系的几种分类,说明了如何利用依赖关系来剪裁解空间树的冗余无效的枝叶;最后给出了生成解空间树、裁剪冗余无效枝叶和生成组合测试用例集的算法。实验表明该方法在一定的范围中具有较好的性能和实际的应用性。(2)讨论了利用输入关系精简成对组合用例集的方法。为了剔除组合测试用例集中的无效用例,提高用例集的生成效率,系统地分析了成对组合测试用例集中的无效用例存在情况,研究了成对输入关系集的获取,提出了成对组合测试用例集的精简方法,并给出了判断用例是否为无效用例的具体算法。(3)提出了几种利用LP来求解小的组合测试用例集的方法。首先建立了组合测试LP优化模型,其主要的目标是提高获取用例集时LP的求解效率;然后给出化解大LP为小LP求解测试集、0/1整型LP来求解非最小测试集和非0/1整型规划求解测试集的三种直接获得用例集的方法;最后提出和利用了三个精简输入输出关系规则来精简LP求解用例集的约束数和变量数。在实验分析中,我们在耗时、用例集的大小和方法可用性这三个方面比较了这些方法,并得出了中断0/1-ILP程序来求得替代的用例集是可行且综合性能比较好的结论。(4)提出了基于圈复杂度的大程序分割测试方法。文中分析了难以对圈复杂度大的程序进行测试的原因,给出了基于程序分割的变量影响度和圈复杂度的算法,讨论了程序分割的方式和原则,也讨论了分割对几种测试数据生成算法性能的影响以及分割对程序元素的覆盖率影响。通过分割程序可以降低每个程序片段的圈复杂度,从而降低测试的难度,而且从每个片段来说,分割会使得测试效率提高。(5)基于Anti-model的测试是在没有源代码或者只有较少的系统信息情况下的一种测试技术,它和基于模型的测试技术相对应。文中以基于组件的测试为具体的叙述对象,提出了基于组件的系统测试框架及过程,并将测试数据分为测试用例运行时的I/O信息、测试用例运行时的组件之间的动态的行为交互信息和系统运行时的动态行为交互信息等三类,讨论了AspectJ面向方面的编程方法和JVMTI接口等两种动态数据的获取技术,给出了动态数据信息的形式化描述,探讨了获取动态行为模型的具体的算法过程等,并且初步实现了测试框架的部分功能。本文对软件测试中的几个关键问题进行了一些有益的研究和探索,从理论上给出了一些分析,提出了一些新的解决方法,实验的结果可以验证本文的方法在某种程度上能够较好地解决问题,并且我们的研究工作对于测试数据生成以及Anti-model测试方法的研究具有一定的理论和实用价值。