CN110262957B - 一种相似程序间测试用例的重用方法及其实现系统 - Google Patents
一种相似程序间测试用例的重用方法及其实现系统 Download PDFInfo
- Publication number
- CN110262957B CN110262957B CN201910295180.3A CN201910295180A CN110262957B CN 110262957 B CN110262957 B CN 110262957B CN 201910295180 A CN201910295180 A CN 201910295180A CN 110262957 B CN110262957 B CN 110262957B
- Authority
- CN
- China
- Prior art keywords
- program
- flow graph
- keyword
- subgraph
- test cases
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种相似程序间测试用例的重用方法及其实现系统,该重用方法包括基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。
Description
技术领域
本发明涉及软件开发技术领域,具体涉及一种基于相似程序间测试用例的重用方法及其实现系统。
背景技术
软件测试是为了发现程序错误以提高程序质量的一个过程。软件测试贯穿软件开发的整个过程,是软件开发不可或缺的一个环节。研究表明,在软件测试中,毫无限制地对所有程序进行验证,将会花费维护费用的50%。而软件测试的重用在提高软件测试质量,缩短测试周期和改善测试人员的经验不足等方面,均起着十分重要的作用。
在将程序已有测试用例使用到相似程序测试用例的生成过程中,检测待测程序之间的相似度是研究用例重用的前提。程序相似性的制定标准是一项重要的工作,近年来不少学者从语义结构和图等不同方面探究程序的相似性。将程序的相似性应用在计算机教学和恶性程序检测等领域的研究比较多。最长公共子串算法比较字符串的相似性,字符串的相似性完全取决于最长字符串的长度,具有片面性。Levenshtein距离算法比较适用于规模较小的程序相似性的比较。基于程序依赖图的动态胎记技术来检测程序的相似性,需要公共子图的同构作为前提条件,局限性比较大。
发明内容
有鉴于此,有必要提供一种提高测试用例的生成效率、减少软件测试的工作量的相似程序间测试用例的重用方法及其实现系统。
一种相似程序间测试用例的重用方法,包括以下步骤:
步骤一,基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;
具体包括以下步骤:
步骤a,关键字流图最大公共子图的构建:
构建关键字流图,利用动态规划算法比较关键字流图中关键字的异同;若关键字相同,则该关键字所属的节点即属于公共流图子图,并对节点进行标记,构建待测程序的关键字流图最大公共子图;
步骤b,相似度判定前的预处理:
ⅰ)若待测程序的测试用例长度小于被比较程序测试用例的长度,减小被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同,根据关键字流图最大公共子图,删减不属于最大公共子图节点对应测试用例的部分;
ⅱ)若待测程序的测试用例长度大于被比较程序测试用例的长度,增加被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同;找出被比较程序关键字流图不存在关键字的节点所对应的位置,随机增添最大公共子图对应被比较程序的测试数据,至待测程序与被比较程序测试用例的长度相同;
步骤二,在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;
其中,相似度的判定包括以下步骤:
使用最大公共子图距离算法计算关键字流图子图距离,根据所述距离的大小确定程序的相似程度;
给定两个非空流图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;
输出:新种群;
将测试用例重用到待测程序的测试数据生成中,以检验测试用例的重用效果;在种群交叉进化的遗传操作过程中,引入相似程序的测试用例作为种群个体交叉的对象。
进一步地,待测试程序的源代码中,每行代码或者功能相近的若干行代码为一个基本块,每一个基本块构成一个节点;关键字存储于形成节点的基本块中;若基本块中无关键字,此节点存储字符串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所有前缀子串对的最长公共后缀中,长度最大的定义为字符串S和T的最长公共子串,即:
其中LCS(S,T)表示字符串S和T的最长公共子串;
关键字流图节点中的关键字作为由这些关键字组成的字符串中的一个字符,关键字流图节点中的关键字构成字符串,利用动态规划算法生成关键字流图最大公共子图,具体步骤如下:
①利用式(1)和式(2)求得最长公共子串;
②null字符代替两个关键字字符串中的最长公共子串(设定null字符串不参与公共子串的匹配);
③判断最长公共子串的长度是否大于0,若长度大于0,重复步骤①和②;否则,结束。
进一步地,在利用遗传算法生成测试用例的步骤中,通过适应度函数衡量种群个体优劣,淘汰生存能力低的个体,通过淘汰生存能力低的个体实现种群的选择、进化,提高种群个体的质量,并快速进化至最优解。
进一步地,使用分支距离法构造适应度函数,在程序的每个分支节点都插桩分支函数fi,记录当前的测试用例与分支的距离,当某分支被覆盖时,则将fi设为0,若目标路径共含有m个分支节点,其总的适应度函数值F的计算式为:
以及,一种相似程序间测试用例的重用的实现系统,其用于实现上述任一项所述的相似程序间测试用例的重用方法,该重用系统包括:
关键字流图构建单元,用于基于待测试程序的相似度判定流程,构建关键字流图;
关键字比较单元,用于比较关键字流图节点中的关键字是否相同;
公共关键字流图子图构建单元,用于将具有相同关键字的节点构建成公共关键字流图子图;
相似度比较单元,用于在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测试程序的相似度,相似度达到预设值的程序启用测试用例的重用;
相似性程序检测重用插件,用于将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。
本发明主要有以下几个方面的贡献:
1)提出一种基于关键字流图的程序相似性的比较方法。通过构建的关键字流图求关键字流图最大公共子图,利用最大公共子图距离算法计算程序的相似度。该方法兼顾比较程序的序列和功能结构的相似性。通过关键字流图判定相似的程序,程序规模相近,程序功能结构相似。
2)提出一种基于相似程序程度间测试用例重用的方法。将程序已经生成的测试用例重用到相似程序的测试用例生成中,在遗传算法进化时,引入相似程序适应度较高的测试用例,种群个体以一定概率与引入的测试用例进行交叉变异,有利于加快种群的进化速度,提高测试用例的生成效率。
3)开发了一个判定程序相似性的插件。该插件根据所提出的方法对程序相似性进行判定,用户选择放在两个待测程序的文件(每个文件内只放待测程序的代码),点击测试按钮运行插件。执行结束返回两个程序的相似度,并根据设定的阈值判定它们是否相似。
上述基于关键字流图程序间测试用例的重用方法及其实现系统中,兼顾了源代码序列和程序功能结构相似度的比较两个方面。另外,提出相似程序间测试数据的重用方法,通过相似程序间测试用例的共享实现用例重用。即,待测程序利用遗传算法生成测试用例,在种群进化阶段引入相似程序中已经生成的测试数据,在迭代过程以一定概率向这些个体学习。与传统遗传算法种群个体之间相互学习的进化方式作对比,测试用例生成效率较高,证明了测试用例重用的有效性,而相似程序间测试用例重用的效果证明了判断相似程序方法的可行性。
附图说明
图1是本发明实施例的相似程序间测试用例的重用方法的程序相似性的判定流程图。
图2是本发明实施例的相似程序间测试用例的重用方法的相似程序间测试用例的重用模型。
图3是本发明实施例的相似程序间测试用例的重用方法的检测程序相似度的软件运行界面。
具体实施方式
本实施例以相似程序间测试用例的重用方法为例,以下将结合具体实施例和附图对本发明进行详细说明。
请参阅图1和图2,示出本发明实施例提供的一种相似程序间测试用例的重用方法。
研究程序间相似性的目的是为了研究相似程序间测试用例重用的方法,以此提高测试用例的生成效率,减少软件测试的工作量。主要步骤包括:
S01:对于待比较相似性的程序,构建它们的关键字流图。比较流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图。
S02:程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似程度,相似程度较高的程序可用于测试用例的重用。
S03:测试用例的重用是将程序已有的测试用例共享于相似程序。采用遗传算法来完成测试用例的重用,将相似程序已经生成的测试用例引用到种群进化的过程中,种群的其他个体通过向这些测试用例学习加快进化速度,完成测试用例的重用。
程序相似性判定的流程如下:
1)关键字流图最大公共子图的构建
构建关键字流图,利用动态规划算法比较关键字流图中关键字的异同。若关键字相同,则该关键字所属的节点即属于公共流图子图,并对此节点进行标记,以此构建待测程序的关键字流图最大公共子图。
关键字是代码核心的标识符,能够代表代码的结构或者数据类型,某些代码中的关键字相同意味着它们的代码结构相同。源代码中,每行代码或者功能相近的若干行代码为一个基本块,每一个基本块构成一个节点。关键字流图的节点中存储了形成该节点基本块中的关键字,若基本块中无关键字,此节点存储字符串null,若该行代码存在两个及以上的关键字,记录第一个关键字即可。构建关键字流图的步骤类似于控制流图的构造过程。
节点集V中的每个节点均是关键字流图G1中的节点,同样又是关键字流图G2中的节点,那么节点集V在流图上构成的图即为流图G1和G2的公共子图。若存在节点集G,且G1和G2不存在其他的子图的节点数大于G,那么G是G1和G2的一个最大公共子图。
待测程序根据关键字流图的构造方法生成关键字流图,在关键字流图的基础上寻求它们的最大公共子图,最大公共子图的大小关系到待测程序的相似程度。动态规划算法寻找公共子字符串是解决公共子字符串的经典算法之一,该算法能得到全局最优解。这里利用该方法求得相似程序的关键字流图最大公共子图。
在利用动态规划算法求解两个长度分别为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所有前缀子串对的最长公共后缀中,长度最大的即为字符串S和T的最长公共子串,即:
其中LCS(S,T)表示字符串S和T的最长公共子串。
关键字流图节点中的关键字可以看作由这些关键字组成的字符串中的一个字符,关键字流图节点中的关键字构成字符串,利用动态规划算法生成关键字流图最大公共子图,步骤如下:
①利用式(1)和式(2)求得最长公共子串。
②null字符代替两个关键字字符串中的最长公共子串(设定null字符串不参与公共子串的匹配)。
③判断最长公共子串的长度是否大于0,若长度大于0,重复步骤①和②;否则,结束。
2)相似度判定前的预处理
ⅰ)若待测程序的测试用例长度小于被比较程序测试用例的长度,减小被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同,根据关键字流图最大公共子图,删减不属于最大公共子图节点对应测试用例的部分.
ⅱ)若待测程序的测试用例长度大于被比较程序测试用例的长度,增加被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同.找出被比较程序关键字流图不存在关键字的节点所对应的位置,随机增添最大公共子图对应被比较程序的测试数据,至待测程序与被比较程序测试用例的长度相同.
3)相似度的判定
使用最大公共子图距离算法计算关键字流图子图距离,该距离的大小决定了程序的相似程度。给定两个非空图G1和G2,以及它们的最大公共子图mcs(G1,G2),它们间的距离可表示为:
其中|G1|和|G2|分别表示G1,G2的节点数,mcs(G1,G2)表示最大公共子图的节点数。那么图G1与G2的相似度可以定义为:
我们利用遗传算法完成测试用例的生成,实现测试用例的重用。遗传算法作为一种基于自然选择原理和自然遗传机制的通用搜索算法,通过进化过程获得的信息自行组织搜索,适应度大的个体具有较高生存概率,并获得更适应环境的基因结构。在进化遗传操作中,适应度较高的个体以更大概率将更优秀的基因遗传给下一代。
遗传算法具有良好的可扩展性,容易与其他算法相结合,也可以调节遗传操作和适应度函数等方式提升算法的效率。在种群进化过程上引入适应度较高的个体来提高测试用例生成的效率。其基本思路如下:
1)假设一个程序适应度较高的测试用例已经生成,将这些测试用例应用到其相似程序的测试中。实验采用遗传算法来完成测试用例的重用。
2)利用遗传算法测试待测程序时,将重用的测试用例引用到遗传操作的种群进化中,种群的其他个体通过向这些测试用例学习,目的是加快种群进化速度,提高测试用例生成效率。
遗传算法具有种群初始化、个体评价、选择运算、交叉运算、变异运算、进化终止条件判断等步骤。遗传算法的初始种群通常采用随机的方式生成,个体评价通过相应的适应度函数计算种群中各个个体的适应度值,选择运算就是将适应度较高的个体进行交叉变异操作,产生的个体组成下一代种群,重复选择进化的过程,直至终止条件满足,算法结束。
适应度函数是衡量种群个体优劣的标准,根据优胜劣汰的生存法则,通过淘汰生存能力低的个体实现种群的选择、进化。因此,适应度函数决定了种群的进化速度,合理的适应度函数能够全面提高种群个体的质量,有利于快速进化至最优解。适应度函数的设置是算法操作重要的一环。
我们使用分支距离法构造适应度函数,在程序的每个分支节点都插桩分支函数fi,记录当前的测试用例与该分支的距离。当某分支被覆盖时,则将fi设为0,若该目标路径共含有m个分支节点,其总的适应度函数值F的计算如式(3)所示。
由适应函数的计算公式可以推算出,测试用例的适应度跟分支节点覆盖率成正比例关系。特别地,当程序的每个分支节点均被覆盖时,该测试用例的适应度为1。
测试用例生成算法采用java语言编写,并在MyEclipse 2010中运行。计算机配置为Windows(Intel(R)Core(TM)CPU i5-6500,3.20GHz,8.00GB RAM,64位操作系统。改进前算法的具体流程见算法1。
算法1是利用传统方法生成测试用例的遗传算法,采用随机方式初始化种群,轮盘赌法选择个体,以一定概率进行交叉与变异等操作,生成新的种群;判断新种群中是否有个体满足目标路径被覆盖,若其被覆盖,记录种群的进化代数;判断是否满足算法的终止条件,即种群是否达到最大进化代数,若满足,则终止算法,若不满足,则循环种群进化的过程。
改进后算法的具体流程见算法2。
算法2将测试用例重用到待测程序的测试数据生成中,并作为对比实验检验测试用例的重用效果。该算法的初始种群采用算法1中的初始种群,以避免初始种群不同对实验结果造成的影响。在种群交叉进化的遗传操作过程中,算法2引入相似程序的测试用例作为个体交叉的对象。
本发明实施例还包括一种相似程序间测试用例的重用的实现系统,其用于实现上述任一项所述的相似程序间测试用例的重用方法,该重用系统包括:
关键字流图构建单元,用于基于待测试程序的相似度判定流程,构建关键字流图;
关键字比较单元,用于比较关键字流图节点中的关键字是否相同;
公共关键字流图子图构建单元,用于将具有相同关键字的节点构建成公共关键字流图子图;
相似度比较单元,用于在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测试程序的相似度,相似度达到预设值的程序启用测试用例的重用;
相似性程序检测重用插件,用于将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。
请参阅图3,示出该系统的操作界面,该系统服务于测试重用的软件项目主体,有效地扩展和完善了寄主软件的功能。图中将programTested 1和programTested 2两个程序进行相似度比较,通过利用上述重用方法的步骤来实现,具体可以参照以上步骤流程的详细描述。该系统开发选用java作为编辑语言,开发环境为MyEclipse 2010。计算机配置为Windows(Intel(R)Core(TM)CPU i5-6500,3.20GHz,8.00GB RAM,64位操作系统。按钮“Select program1”和按钮“Select program 2”是两个选择待测程序的按钮,测试程序的相似度时,分别点击这两个按钮选择待测程序所在的文件。点击“Testing”按钮,将以百分数的形式显示两个待测程序的相似度。此插件的制作方便了程序相似性的比较。下一步探究相似程序间测试用例重用的问题,其前期工作就是需要判断程序之间的相似程度,此插件将减少了判断程序相似性的工作。
本发明主要有以下几个方面的贡献:
1)提出一种基于关键字流图的程序相似性的比较方法。通过构建的关键字流图求关键字流图最大公共子图,利用最大公共子图距离算法计算程序的相似度。该方法兼顾比较程序的序列和功能结构的相似性。通过关键字流图判定相似的程序,程序规模相近,程序功能结构相似。
2)提出一种基于相似程序程度间测试用例重用的方法。将程序已经生成的测试用例重用到相似程序的测试用例生成中,在遗传算法进化时,引入相似程序适应度较高的测试用例,种群个体以一定概率与引入的测试用例进行交叉变异,有利于加快种群的进化速度,提高测试用例的生成效率。
3)开发了一个判定程序相似性的插件。该插件根据所提出的方法对程序相似性进行判定,用户选择放在两个待测程序的文件(每个文件内只放待测程序的代码),点击测试按钮运行插件。执行结束返回两个程序的相似度,并根据设定的阈值判定它们是否相似。
上述基于关键字流图程序间测试用例的重用方法及其实现系统中,兼顾了源代码序列和程序功能结构相似度的比较两个方面。另外,提出相似程序间测试数据的重用方法,通过相似程序间测试用例的共享实现用例重用。即,待测程序利用遗传算法生成测试用例,在种群进化阶段引入相似程序中已经生成的测试数据,在迭代过程以一定概率向这些个体学习。与传统遗传算法种群个体之间相互学习的进化方式作对比,测试用例生成效率较高,证明了测试用例重用的有效性,而相似程序间测试用例重用的效果证明了判断相似程序方法的可行性。
需要说明的是,以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种相似程序间测试用例的重用方法,其特征在于,包括以下步骤:
步骤一,基于待测程序的相似度判定流程,构建关键字流图,比较关键字流图节点中的关键字是否相同,具有相同关键字的节点构成公共关键字流图子图;
具体包括以下步骤:
步骤a,关键字流图最大公共子图的构建:
构建关键字流图,利用动态规划算法比较关键字流图中关键字的异同;若关键字相同,则该关键字所属的节点即属于公共流图子图,并对节点进行标记,构建待测程序的关键字流图最大公共子图;
步骤b,相似度判定前的预处理:
ⅰ)若待测程序的测试用例长度小于被比较程序测试用例的长度,减小被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同,根据关键字流图最大公共子图,删减不属于最大公共子图节点对应测试用例的部分;
ⅱ)若待测程序的测试用例长度大于被比较程序测试用例的长度,增加被比较程序测试用例的长度,使待测程序与被比较程序的测试用例长度相同;找出被比较程序关键字流图不存在关键字的节点所对应的位置,随机增添最大公共子图对应被比较程序的测试数据,至待测程序与被比较程序测试用例的长度相同;
步骤二,在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测程序的相似度,相似程度达到预设值的程序用于测试用例的重用;
其中,相似度的判定包括以下步骤:
使用最大公共子图距离算法计算关键字流图子图距离,根据所述距离的大小确定程序的相似程度;
给定两个非空流图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;
输出:新种群;
将测试用例重用到待测程序的测试数据生成中,以检验测试用例的重用效果;在种群交叉进化的遗传操作过程中,引入相似程序的测试用例作为种群个体交叉的对象。
2.如权利要求1所述的相似程序间测试用例的重用方法,其特征在于,待测试程序的源代码中,每行代码或者功能相近的若干行代码为一个基本块,每一个基本块构成一个节点;关键字存储于形成节点的基本块中;若基本块中无关键字,此节点存储字符串null,若该行代码存在两个及以上的关键字,记录第一个关键字。
3.如权利要求2所述的相似程序间测试用例的重用方法,其特征在于,关键字流图中的所有节点组成节点集V,若节点集V中的每个节点既是第一关键字流图G1中的节点,又是第二关键字流图G2中的节点,则节点集V在流图上构成的图定义为流图G1和G2的公共子图;其中流图G1和G2的公共子图中,公共节点数最多节点集G是G1和G2的一个最大公共子图。
4.如权利要求3所述的相似程序间测试用例的重用方法,其特征在于,步骤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,1≤j≤q (1)
在字符串S和T所有前缀子串对的最长公共后缀中,长度最大的定义为字符串S和T的最长公共子串,即:
其中LCS(S,T)表示字符串S和T的最长公共子串;
关键字流图节点中的关键字作为由这些关键字组成的字符串中的一个字符,关键字流图节点中的关键字构成字符串,利用动态规划算法生成关键字流图最大公共子图,具体步骤如下:
①利用式(1)和式(2)求得最长公共子串;
②null字符代替两个关键字字符串中的最长公共子串(设定null字符串不参与公共子串的匹配);
③判断最长公共子串的长度是否大于0,若长度大于0,重复步骤①和②;否则,结束。
5.如权利要求1所述的相似程序间测试用例的重用方法,其特征在于,在利用遗传算法生成测试用例的步骤中,通过适应度函数衡量种群个体优劣,淘汰生存能力低的个体,通过淘汰生存能力低的个体实现种群的选择、进化,提高种群个体的质量,并快速进化至最优解。
7.一种相似程序间测试用例的重用的实现系统,其用于实现如权利要求1-6任一项所述的相似程序间测试用例的重用方法,其特征在于,该重用系统包括:
关键字流图构建单元,用于基于待测试程序的相似度判定流程,构建关键字流图;
关键字比较单元,用于比较关键字流图节点中的关键字是否相同;
公共关键字流图子图构建单元,用于将有相同关键字的节点构建成公共关键字流图子图;
相似度比较单元,用于在程序的关键字流图和关键字流图最大公共子图构建完成后,利用最大公共子图距离方法比较待测试程序的相似度,相似度达到预设值的程序启用测试用例的重用;
相似性程序检测重用插件,用于将已有的测试用例共享于相似程序,采用遗传算法生成重用的测试用例,将相似程序已经生成的测试用例引用到种群进化的过程中,新生成的种群个体通过向测试用例学习,以加快进化速度,完成测试用例的重用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910295180.3A CN110262957B (zh) | 2019-04-12 | 2019-04-12 | 一种相似程序间测试用例的重用方法及其实现系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910295180.3A CN110262957B (zh) | 2019-04-12 | 2019-04-12 | 一种相似程序间测试用例的重用方法及其实现系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110262957A CN110262957A (zh) | 2019-09-20 |
CN110262957B true CN110262957B (zh) | 2022-12-27 |
Family
ID=67913544
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910295180.3A Active CN110262957B (zh) | 2019-04-12 | 2019-04-12 | 一种相似程序间测试用例的重用方法及其实现系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110262957B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780439B (zh) * | 2022-06-13 | 2022-09-27 | 江西财经大学 | 一种面向参数路径流图的相似程序间测试用例的重用方法 |
CN115145633A (zh) * | 2022-07-25 | 2022-10-04 | 杭州师范大学 | 一种基于控制流图的代码错误自动检出方法 |
CN116775499A (zh) * | 2023-08-21 | 2023-09-19 | 中国电信股份有限公司 | 测试数据生成方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103413215A (zh) * | 2013-07-12 | 2013-11-27 | 广州银联网络支付有限公司 | 一种基于矩阵相似度算法的电子联行号匹配方法 |
CA2932865A1 (en) * | 2016-06-10 | 2017-12-10 | Sysomos U.S. Inc. | Pipeline computing architecture and methods for improving data relevance |
CN109408114A (zh) * | 2018-08-20 | 2019-03-01 | 哈尔滨工业大学 | 一种程序错误自动修正方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5729676A (en) * | 1993-12-10 | 1998-03-17 | Nec Corporation | Method of generating data for evaluating programs |
WO2007147150A2 (en) * | 2006-06-15 | 2007-12-21 | Lightspeed Logic, Inc. | Simultaneous dynamical integration applied to detailed placement |
CN105808438B (zh) * | 2016-03-11 | 2018-07-10 | 北京信息科技大学 | 一种基于函数调用路径的测试用例复用方法 |
-
2019
- 2019-04-12 CN CN201910295180.3A patent/CN110262957B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103413215A (zh) * | 2013-07-12 | 2013-11-27 | 广州银联网络支付有限公司 | 一种基于矩阵相似度算法的电子联行号匹配方法 |
CA2932865A1 (en) * | 2016-06-10 | 2017-12-10 | Sysomos U.S. Inc. | Pipeline computing architecture and methods for improving data relevance |
CN109408114A (zh) * | 2018-08-20 | 2019-03-01 | 哈尔滨工业大学 | 一种程序错误自动修正方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110262957A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110262957B (zh) | 一种相似程序间测试用例的重用方法及其实现系统 | |
Lu et al. | An efficient combined deep neural network based malware detection framework in 5G environment | |
Liu et al. | RNN-VirSeeker: a deep learning method for identification of short viral sequences from metagenomes | |
TWI740262B (zh) | 一種基因變異識別方法、裝置和儲存介質 | |
CN109462578B (zh) | 基于统计学习的威胁情报利用与繁殖方法 | |
Wilburn et al. | Remote homology search with hidden Potts models | |
Huo et al. | Optimizing genetic algorithm for motif discovery | |
Arendsee et al. | Fagin: synteny-based phylostratigraphy and finer classification of young genes | |
CN116432184A (zh) | 基于语义分析和双向编码表征的恶意软件检测方法 | |
Tran et al. | An extensive examination of discovering 5-Methylcytosine Sites in Genome-Wide DNA Promoters using machine learning based approaches | |
CN114897085A (zh) | 一种基于封闭子图链路预测的聚类方法及计算机设备 | |
US20200082910A1 (en) | Systems and Methods for Determining Effects of Genetic Variation of Splice Site Selection | |
Raju et al. | VirusTaxo: Taxonomic classification of viruses from the genome sequence using k-mer enrichment | |
Pittman et al. | Bayesian analysis of binary prediction tree models for retrospectively sampled outcomes | |
Wang et al. | m6AGE: a predictor for n6-methyladenosine sites identification utilizing sequence characteristics and graph embedding-based geometrical information | |
Comin et al. | Beyond fixed-resolution alignment-free measures for mammalian enhancers sequence comparison | |
Sahraeian et al. | PicXAA-R: efficient structural alignment of multiple RNA sequences using a greedy approach | |
Ye et al. | RapidFuzz: Accelerating fuzzing via generative adversarial networks | |
Dotan et al. | Effect of tokenization on transformers for biological sequences | |
CN111737694B (zh) | 一种基于行为树的恶意软件同源性分析方法 | |
Chan et al. | Evaluation of dynamic time warp barycenter averaging (DBA) for its potential in generating a consensus nanopore signal for genetic and epigenetic sequences | |
Zare-Mirakabad et al. | Genetic algorithm for dyad pattern finding in DNA sequences | |
Dewey | Whole-genome alignments and polytopes for comparative genomics | |
Zhang et al. | A heuristic cluster-based em algorithm for the planted (l, d) problem | |
Böer | Multiple alignment using hidden Markov models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |