消息传递并行程序多路径覆盖测试数据协同进化生成方法与流程

文档序号:15462364发布日期:2018-09-18 18:28阅读:214来源:国知局

本专利属于软件测试领域,具体涉及一种消息传递并行程序多路径覆盖测试数据协同进化生成方法,可用于软件测试中生成覆盖多条目标路径的测试数据。



背景技术:

软件测试是软件工程领域的一个重要组成部分,选择一个优秀的测试方法能够有效保证软件质量。在众多软件测试方法中,一种常用的方法是生成高质量的测试数据,并使用测试数据执行程序,通过这样的方式发现程序运行过程中存在的缺陷或错误。但是,采用这样的方法存在两个困难:一是生成有效的测试数据花费的时间较多;二是测试数据的质量难以得到保证。如果能够采取合适的方法,以较小的代价生成高质量的测试数据,那么,能够显著提高测试效率,并降低软件测试的开销。

并行程序,即含有两个或两个以上并行执行进程的程序,由于简单的开发方式、实现的便捷性,以及优秀的兼容性能,越来越受到程序开发者的重视,已经成功应用于包括图像处理、海洋模拟、化学过程等众多领域。并行程序的测试问题也逐渐被人们重视。并行程序与串行程序的重要区别是具有众多调度序列,即程序执行过程中进程的调度顺序形成的序列。调度序列的存在,使得并行程序的执行具有不确定性,即相同程序输入执行的调度序列不同,就可能得到不同的运行结果,从而使得并行程序的测试更为复杂。

在多种并行程序设计方法中,采用消息传递环境扩展传统的编程语言最为常用,其中的消息传递接口也是目前最广泛的并行编程环境,已经成为并行程序的国际标准。因此,这种消息传递并行程序的测试数据生成问题十分值得研究。

这类程序的路径覆盖测试数据生成问题可以通过遗传算法进行求解,常用方法是使用路径相似度作为适应值函数,通过静态分析对调度序列约简,并选取性能最好的调度序列,根据该调度序列构建一个种群,再采用遗传算法进化生成测试数据。若存在多条目标路径时,常用方法是依次生成覆盖每条目标路径的测试数据,或是选择合适的个体适应值计算方式,以期望执行一次算法即可生成覆盖多条目标路径的测试数据。然而,这些方法没有充分利用并行程序调度序列提供的信息,没有考虑调度序列间性能的差异,导致算法效率不太令人满意。

协同进化是一种使用多个种群进行进化的遗传算法,能够有效利用多种群信息。在进化过程中,通过评价个体与种群的适应性,以及不同种群的性能,使个体向性能好的种群迁移,可以提高进化的方向性。针对并行程序测试数据生成问题,如果使用这种方法,将并行程序的调度序列对应为种群,将程序输入转化为种群中的个体,并在进化过程中评价调度序列的性能,使程序输入逐渐向性能好的调度序列对应的种群迁移,那么,能够合理利用调度序列信息,提高测试数据生成的效率。



技术实现要素:

本发明针对消息传递并行程序每一个调度序列下的每一条目标路径分别构建对应种群;接着,给出种群与个体的性能评价方法;然后,依据种群与个体性能,在遗传算法进化过程中合理执行个体迁移操作;最后,进化生成覆盖各目标路径的测试数据。

本发明所要解决的技术问题:克服现有方法的不足,提供一种测试数据生成方法,用以提高消息传递并行程序生成多路径覆盖测试数据的效率,降低测试成本。

本发明的技术方案:提出了一种消息传递并行程序多路径覆盖测试数据协同进化生成方法,其特征在于如下步骤:

步骤1:构建种群

针对被测消息传递并行程序每一个调度序列下的每一条目标路径分别构建对应种群,对种群进行正整数连续编号,以下使用参数j与k表示种群编号;种群中的个体均为编码后的程序输入,对各种群中的个体进行分别独立的正整数连续编号,以下使用参数i表示个体编号。

步骤2:种群与个体的性能评价

在使用遗传算法生成测试数据时需要通过适应值函数来指导进化过程,选择路径相似度作为适应值函数,计算得到的种群j中个体i的适应值记为Fj,i,Fj,i∈[0,1]。此外,本发明还需计算个体相对适应值和种群适应值来指导个体迁移。对于种群j的第i个个体,记该种群中个体的个体适应值的最小和最大值为Fj,min与Fj,max,Fj,min,Fj,max∈[0,1],那么,种群j中个体i的个体相对适应值,记为F′j,i,计算公式为:

其中,F′j,i∈[0,1]。该值越大,那么该个体在所属种群中的相对性能越好。

考虑种群中的所有个体,这些个体适应值的平均值,能够从一定程度上反映种群的性能,因此,将其作为评价种群性能的一个指标。对于种群j,如果该种群包含mj个个体,那么,该种群的适应值,记为Fj,Fj∈[0,1],计算公式为:

F′j,i与Fj分别反映了个体与种群生成覆盖对应目标路径测试数据的难易程度,其值越大,则越容易生成测试数据,其性能越好。

由于计算个体相对适应值和种群适应值是为了执行个体迁移操作,而个体迁移操作在种群每进化λ代时执行一次,因此,个体相对适应值和种群适应值的计算也只需在种群每进化λ代时进行一次,其中,λ为正整数参数。

步骤3:个体迁移操作

个体迁移是指一个种群中的一个个体转移到另一个种群中进行后续进化,个体原先所属的种群称为源种群,个体将要转移到的种群称为目标种群。对于多路径覆盖问题,个体迁移可以分为两种:对调度序列迁移和对目标路径迁移,分别指个体迁移至表示不同调度序列相同目标路径的种群以及个体迁移至表示相同调度序列不同目标路径的种群。为了降低迁移风险,种群每进化λ代,对所有个体判断是否进行个体迁移,另外,设定种群性能差异度Δj,k表示种群j与种群k的差异度,Δj,k∈[0,1],计算公式为:

规定当Δj,k≥β时,种群j与种群k存在显著差异,其中β为大于0的参数。在实施对调度序列迁移时,只有种群性能存在显著差异时才进行迁移;实施对目标路径迁移时,只有个体相对性能较差时才进行迁移。

记个体相对性能参数α1,α2,迁移概率参数θ,α1,α2,θ∈[0,1],对于种群j的第i个个体,提出的个体迁移策略如下:

如果F′j,i<α1,那么,随机选择一个与种群j表示相同调度系列不同目标路径的种群为目标种群,个体以概率θ进行个体迁移;

如果个体未迁移,且F′j,i<α2,那么,随机选择一个与种群j表示不同调度系列相同目标路径的种群为目标种群并比较二者种群适应值,如果目标种群的种群适应值高于源种群且存在显著差异,则进行个体迁移,否则不进行个体迁移;

如果个体仍未迁移,则本次该个体不进行迁移。

步骤4:生成测试数据

由于对不同目标路径生成测试数据不一定在同一代中生成,因此当已经成功生成覆盖某个目标路径的测试数据后,对应该目标路径的种群应当停止进化,以免浪费测试资源。在接下来的进化过程中,停止进化的种群不再参与后续进化。

当覆盖所有目标路径的测试数据均已生成或是达到设定的最大进化代数时,算法终止,输出结果。

与现有技术相比,本发明的有益效果是:

1、合理利用并行程序信息,尽可能地在性能好的调度序列中生成测试数据,提高了测试数据生成效率;

2、调度序列性能由算法自行评判而不需人工分析,便于测试的自动化进行;

3、执行一次算法即可生成覆盖多条目标路径的测试数据,提高了测试数据生成效。

附图说明

图1是本发明的总流程图;

图2是定义个体集合的程序代码;

图3是定义种群集合的程序代码;

图4是实现个体迁移操作的程序代码;

具体实施方式

该部分使用C语言编写程序,实现了本发明提出的方法,并结合具体附图和实例对其进行详细说明。

图1为本发明提出的一种消息传递并行程序多路径覆盖测试数据协同进化生成方法的流程图,该方法包括:

步骤1:构建种群

对于含有x个调度序列y个目标路径的消息传递并行程序,构建x·y个种群,分别表示每一个调度序列下的每一条目标路径,种群中的个体为编码后的程序输入。针对所有个体分别构建个体集合,集合中的元素为对应个体的具体信息;针对所有种群分别构建种群集合,集合中的元素为对应种群的具体信息。

在C语言中,使用结构体struct定义个体集合individual,如图2所示,结构体中各变量含义如下表:

使用结构体struct定义种群集合pop,如图3所示,结构体中各变量含义如下表:

其中,变量px、siz0与mx在种群初始化时赋值,之后不再变化。特别地,变量stx初始值为0,表示种群正在进行进化,当其值为1时该种群停止进化。

步骤2:种群与个体的性能评价

在对测试数据使用遗传算法进化每λ后,遍历个体集合individual的所有个体,通过变量fitness与gro计算并更新对应种群集合pop中的变量minfit、maxfit与avf的值;接着再次遍历个体集合individual的所有个体,使用个体相对适应值计算公式计算并更新变量fij的值。这些变量全部更新完成后,即完成了一次种群与个体的性能评价。

步骤3:个体迁移操作

在对测试数据使用遗传算法进化每λ后,执行一次个体迁移操作,遍历个体集合中的每一个元素,分别执行个体迁移操作。执行个体迁移操作的C语言程序代码如图4所示。其中,全局变量f表示未覆盖的目标路径数量,常量MQ表示调度序列数,常量MN表示目标路径数,常量SIZE表示个体总数,常量A1表示α1,常量AX表示θ,常量A2表示α2,常量B1表示β。

在函数调用完成后,遍历个体集合individual的所有个体,依据变量gro的值计算并更新对应种群集合pop中的变量pno与siz的值,全部更新完毕后即完成了一次个体迁移操作。

步骤4:生成测试数据

当已经成功生成覆盖某个目标路径的测试数据后,在种群集合pop中,将所有对应该目标路径的种群的stx值设置为1,并将全局变量f的值减1,接着继续进化,直到覆盖所有目标路径的测试数据均已生成或是达到设定的最大进化代数时,算法终止,输出生成的测试数据。

接下来以一个消息传递并行程序为例,说明本发明所提方法的有效性。

所选程序包含6个输入,5个进程,14个通信语句,6个调度序列,输入范围[0,64]。分别选择2、3、4、5条目标路径进行测试数据生成。遗传算法采用二进制编码,单点交叉,交叉概率0.8,单点变异,变异概率0.4,轮盘赌选择,最大进化2000代。依据调度序列与目标路径生成对应数量的种群,每一个种群规模均为20。其余参数设置如下表所示。

对比方法选择不进行个体迁移,其他步骤与本发明所提方法相同的方法。在相同环境下分别执行10次本发明所提方法与对比方法计算生成测试数据的成功率以及平均时间。其中,成功率是指测试数据成功覆盖目标路径的数量占总目标路径数量的百分比,平均时间是指生成一组成功覆盖所有目标路径测试数据所需的平均时间。实验结果如下表所示。

由表可知,本发明所提方法能够高效生成覆盖消息传递并行程序多目标路径的测试数据。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1