一种相似程序间测试用例的重用方法及其实现系统技术方案

技术编号:22166487 阅读:21 留言:0更新日期:2019-09-21 10:23
本发明专利技术公开了一种相似程序间测试用例的重用方法及其实现系统,该重用方法包括基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。

A Reuse Method of Test Cases between Similar Programs and Its Implementation System

【技术实现步骤摘要】
一种相似程序间测试用例的重用方法及其实现系统
本专利技术涉及软件开发
,具体涉及一种基于相似程序间测试用例的重用方法及其实现系统。
技术介绍
软件测试是为了发现程序错误以提高程序质量的一个过程。软件测试贯穿软件开发的整个过程,是软件开发不可或缺的一个环节。研究表明,在软件测试中,毫无限制地对所有程序进行验证,将会花费维护费用的50%。而软件测试的重用在提高软件测试质量,缩短测试周期和改善测试人员的经验不足等方面,均起着十分重要的作用。在将程序已有测试用例使用到相似程序测试用例的生成过程中,检测待测程序之间的相似度是研究用例重用的前提。程序相似性的制定标准是一项重要的工作,近年来不少学者从语义结构和图等不同方面探究程序的相似性。将程序的相似性应用在计算机教学和恶性程序检测等领域的研究比较多。最长公共子串算法比较字符串的相似性,字符串的相似性完全取决于最长字符串的长度,具有片面性。Levenshtein距离算法比较适用于规模较小的程序相似性的比较。基于程序依赖图的动态胎记技术来检测程序的相似性,需要公共子图的同构作为前提条件,局限性比较大。
技术实现思路
有鉴于此,有必要提供一种提高测试用例的生成效率、减少软件测试的工作量的相似程序间测试用例的重用方法及其实现系统。一种相似程序间测试用例的重用方法,包括以下步骤:步骤一,基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;步骤二,在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;步骤三,将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。进一步地,步骤一中的所述待测程序的相似度的判定流程包括:步骤a,关键字流图最大公共子图的构建:构建关键字流图,利用动态规划算法比较关键字流图中关键字的异同;若关键字相同,则该关键字所属的节点即属于公共流图子图,并对节点进行标记,构建待测程序的关键字流图最大公共子图;步骤b,相似度判定前的预处理:ⅰ)若待测程序的测试用例长度小于被比较程序测试用例的长度,减小被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同,根据关键字流图最大公共子图,删减不属于最大公共子图节点对应测试用例的部分;ⅱ)若待测程序的测试用例长度大于被比较程序测试用例的长度,增加被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同;找出被比较程序关键字流图不存在关键字的节点所对应的位置,随机增添最大公共子图对应被比较程序的测试数据,至待测程序与被比较程序测试用例的长度相同;步骤c,相似度的判定:使用最大公共子图距离算法计算关键字流图子图距离,根据所述距离的大小确定程序的相似程度。进一步地,待测试程序的源代码中,每行代码或者功能相近的若干行代码为一个基本块,每一个基本块构成一个节点;关键字存储于形成节点的基本块中;若基本块中无关键字,此节点存储字符串null,若该行代码存在两个及以上的关键字,记录第一个关键字。进一步地,关键字流图中的所有节点组成节点集V,若节点集V中的每个节点既是第一关键字流图G1中的节点,又是第二关键字流图G2中的节点,则节点集V在流图上构成的图定义为流图G1和G2的公共子图;其中流图G1和G2的公共子图中,公共节点数最多节点集G是G1和G2的一个最大公共子图。进一步地,步骤b包括如下具体步骤:给定两个长度分别为p,q的字符串S,T,利用动态规划算法求解两个长度分别为p,q的字符串S,T的最长公共子串之前,先给出求它们任意前缀子串对S[1,i],T[1,j]的最长公共后缀的算法;该问题的递推关系如式(1),其中,LCSuffix(S[1,i],T[1,j])表示前缀子串对S[1,i],T[1,j]的最长公共后缀;s.t.i≤p,1≤j≤q(1)在字符串S和T所有前缀子串对的最长公共后缀中,长度最大的定义为字符串S和T的最长公共子串,即:其中LCS(S,T)表示字符串S和T的最长公共子串;关键字流图节点中的关键字作为由这些关键字组成的字符串中的一个字符,关键字流图节点中的关键字构成字符串,利用动态规划算法生成关键字流图最大公共子图,具体步骤如下:①利用式(1)和式(2)求得最长公共子串;②null字符代替两个关键字字符串中的最长公共子串(设定null字符串不参与公共子串的匹配);③判断最长公共子串的长度是否大于0,若长度大于0,重复步骤①和②;否则,结束。进一步地,步骤c中相似度的判定包括如下具体步骤:给定两个非空流图G1和G2,以及它们的最大公共子图mcs(G1,G2),它们间的距离表示为:其中|G1|和|G2|分别表示G1、G2的节点数,mcs(G1,G2)表示最大公共子图的节点数;则图G1与G2的相似度定义为:进一步地,步骤三中测试用例的生成包括如下具体步骤:输入:种群大小pop_size,个体individual,染色体长度chro_size,进化代数gen_size,交叉概率pc,变异概率pm,引入的新个体shared_pop;输出:新种群;将测试用例重用到待测程序的测试数据生成中,以检验测试用例的重用效果;在种群交叉进化的遗传操作过程中,引入相似程序的测试用例作为种群个体交叉的对象。进一步地,在利用遗传算法生成测试用例的步骤中,通过适应度函数衡量种群个体优劣,淘汰生存能力低的个体,通过淘汰生存能力低的个体实现种群的选择、进化,提高种群个体的质量,并快速进化至最优解。进一步地,使用分支距离法构造适应度函数,在程序的每个分支节点都插桩分支函数fi,记录当前的测试用例与分支的距离,当某分支被覆盖时,则将fi设为0,若该目标路径共含有m个分支节点,其总的适应度函数值F的计算式为:以及,一种相似程序间测试用例的重用的实现系统,其用于实现上述任一项所述的相似程序间测试用例的重用方法,该重用系统包括:关键字流图构建单元,用于基于待测试程序的相似度判定流程,构建关键字流图;关键字比较单元,用于比较关键字流图节点中的关键字是否相同;公共关键字流图子图构建单元,用于将具有相同关键字的节点构建成公共关键字流图子图;相似度比较单元,用于在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测试程序的相似度,相似度达到预设值的程序启用测试用例的重用;相似性程序检测重用插件,用于将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。本专利技术主要有以下几个方面的贡献:1)提出一种基于关键字流图的程序相似性的比较方法。通过构建的关键字流图求关键字流图最大公共子图,利用最大公共子图距离算法计算程序的相似度。该方法兼顾比较程序的序列和功能结构的相似性。通过关键字流图判定相似的程序,程序规模相近,程序功能结构相似。2)提出一种基于相似程序程度间测试用例重用的方法。将程序已本文档来自技高网...

【技术保护点】
1.一种相似程序间测试用例的重用方法,其特征在于,包括以下步骤:步骤一,基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;步骤二,在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;步骤三,将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。

【技术特征摘要】
1.一种相似程序间测试用例的重用方法,其特征在于,包括以下步骤:步骤一,基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;步骤二,在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;步骤三,将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。2.如权利要求1所述的相似程序间测试用例的重用方法,其特征在于,步骤一中的所述待测程序的相似度的判定流程包括:步骤a,关键字流图最大公共子图的构建:构建关键字流图,利用动态规划算法比较关键字流图中关键字的异同;若关键字相同,则该关键字所属的节点即属于公共流图子图,并对节点进行标记,构建待测程序的关键字流图最大公共子图;步骤b,相似度判定前的预处理:ⅰ)若待测程序的测试用例长度小于被比较程序测试用例的长度,减小被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同,根据关键字流图最大公共子图,删减不属于最大公共子图节点对应测试用例的部分;ⅱ)若待测程序的测试用例长度大于被比较程序测试用例的长度,增加被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同;找出被比较程序关键字流图不存在关键字的节点所对应的位置,随机增添最大公共子图对应被比较程序的测试数据,至待测程序与被比较程序测试用例的长度相同;步骤c,相似度的判定:使用最大公共子图距离算法计算关键字流图子图距离,根据所述距离的大小确定程序的相似程度。3.如权利要求2所述的相似程序间测试用例的重用方法,其特征在于,待测试程序的源代码中,每行代码或者功能相近的若干行代码为一个基本块,每一个基本块构成一个节点;关键字存储于形成节点的基本块中;若基本块中无关键字,此节点存储字符串null,若该行代码存在两个及以上的关键字,记录第一个关键字。4.如权利要求3所述的相似程序间测试用例的重用方法,其特征在于,关键字流图中的所有节点组成节点集V,若节点集V中的每个节点既是第一关键字流图G1中的节点,又是第二关键字流图G2中的节点,则节点集V在流图上构成的图定义为流图G1和G2的公共子图;其中流图G1和G2的公共子图中,公共节点数最多节点集G是G1和G2的一个最大公共子图。5.如权利要求4所述的相似程序间测试用例的重用方法,其特征在于,步骤a包括如下具体步骤:给定两个长度分别为p,q的字符串S,T,利用动态规划算法求解两个长度分别为p,q的字符串S,T的最长公共子串之前,先给出求它们任意前缀子串对S[1,i],T[1,j]的最长公共后缀的算法;该问题的递推关系如式(1),其中,LCSuffix(S[1,i],T[1,j])表示前缀子串对S[1,i],T[1,j]的最长公共后缀;S.t.i≤p,...

【专利技术属性】
技术研发人员:钱忠胜宋涛
申请(专利权)人:江西财经大学
类型:发明
国别省市:江西,36

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1