本专利属于软件测试领域,具体涉及一种并行程序多路径覆盖测试套件进化生成方法,用于提高并行程序路径覆盖的测试效率。
背景技术:
1、并行程序拥有一或多个进程,并具有非确定性、通信和同步特征。在具有非确定性特征的并行程序执行过程中,多次运行相同的测试输入可能运行不同的通信边,导致并行程序中不同的代码片段会被遍历,意味着难以生成覆盖并行程序目标路径的测试用例。通信特征表示接收和发送消息,同步特征为通过阻塞快速进程,等待慢速进程,通信和同步特征不会导致同一测试输入遍历不同的代码片段。
2、已有研究表明,针对不同通信序列导致的相同测试输入执行不同路径的问题,设计一个通信序列性能评价指标,用于选择一个最优通信序列,能够降低目标路径的覆盖难度。选择最优通信序列后,使用进化优化算法来生成覆盖多条目标路径的测试套件。目前,生成测试套件的主要方法有两种:(1)单路径覆盖测试,即逐一生成覆盖每个目标路径的测试用例;(2)多路径覆盖测试,即同时生成覆盖多条目标路径的测试套件。考虑到多路径覆盖测试通常比单路径覆盖测试具有更高的效率,因此,本发明研究具有非确定性特征的并行程序多径覆盖测试问题。
3、为测试具有非确定性和大量目标路径的并行程序,本发明提出一种并行程序多路径覆盖测试套件进化生成方法,并通过基于路径与通信序列关系矩阵的目标路径分组策略制定、与每组目标路径相对应的测试套件生成优化模型建立,以及基于拓展智能优化算法的优化模型求解方法设计,提高并行程序路径覆盖的测试套件生成效率。
技术实现思路
1、本发明首先设计一个用于评估所有由不确定性导致的通信序列性能的指标,形成每条目标路径和每个通信序列之间的关系矩阵,用于分组所有目标路径;然后,建立用于引导覆盖每组目标路径测试套件生成的优化模型;最后,拓展粒子群优化算法,用于求解建立的优化模型,生成覆盖每一目标路径分组的测试套件。
2、本发明所要解决的技术问题:克服现有方法中逐一生成覆盖每条目标路径测试用例效率低、同一测试输入多次执行具有非确定性并行程序时遍历不同路径等2个问题,提供一种并行程序路径覆盖测试方法,用于提高测试套件生成效率。
3、本发明的技术方案:提出了一种并行程序多路径覆盖测试套件进化生成方法,其特征在于如下步骤:
4、步骤一:并行程序目标路径分组
5、在并行程序每一通信序列下,采样一个包含k个程序输入的集合,用于执行并行程序,获得每一程序输入遍历的路径,并分别计算遍历路径与一条目标路径的相似度,得到一个k行和m列的路径相似度矩阵;按照由大到小的顺序,排序每一通信序列下的k个路径相似度,并计算排序靠前的路径相似度的平均值,作为该通信序列的性能指标值;构建一个包含n行和m列的关系矩阵,其中,关系矩阵中第n行和第m列的元素为第m个通信序列影响第n条目标路径覆盖程度的性能指标值;针对关系矩阵内第n行通信序列性能指标值,选取具有最大指标值的通信序列,作为覆盖第n条目标路径的最优通信序列,并将具有相同最优通信序列的目标路径划分至同一组中。
6、步骤二:测试套件生成优化模型建立
7、将第i组目标路径表示为其中,i=1,2,...,g,g表示目标路径分组个数,sizei为groupi中含有的目标路径条数。为生成覆盖groupi的测试套件,需要建立如公式(1)所示的优化模型opti:
8、
9、式(1)中,为优化模型的约束,表示在输入域d内生成测试输入其中,为决策变量,用于表示覆盖第i组目标路径groupi的测试套件,为决策变量ti中第j个测试输入,用于覆盖groupi中第j条目标路径为目标优化函数,其中,为目标路径与遍历路径之间的相似度;面向g个目标路径分组{groupi|i=1,2,...,g},可得到g个优化模型{opti|i=1,2,...g}。
10、步骤三:测试套件生成优化模型求解
11、集合化粒子群优化算法中粒子的速度、位置、个体最优位置、全局最优位置,并用于求解优化模型opti,生成覆盖每一目标路径分组的测试套件。注意,集合化后的粒子速度由sizei个速度来构成,集合化后的粒子位置由sizei个测试输入来组成;关于集合化后粒子的个体最优位置,由sizei个局部最优测试输入组成,需要从进化到目前为止集合化后粒子的历史位置中选择,选择遍历路径最接近目标路径的测试输入,作为集合化后粒子的个体最优位置的组成元素;针对集合化后粒子的全局最优位置,由sizei个全局最优测试输入组成,需要从进化到目前为止种群内所有集合化后粒子的历史位置中选择,选择遍历路径最接近目标路径的测试输入,作为全局最优位置的组成元素。
12、与现有技术相比,本发明的有益效果是:
13、1、制定了基于路径与通信序列关系矩阵的目标路径精确分组策略;
14、2、建立了有效引导每一目标路径分组测试套件生成的优化模型;
15、3、设计了基于拓展粒子群优化算法的优化模型高效率求解方法。
1.本发明提出了一种并行程序多路径覆盖测试套件进化生成方法,用于提高并行程序路径覆盖的测试效率,其特征在于如下步骤: