System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于软件测试,尤其涉及一种基于神经机器翻译的测试用例版本自动迁移方法。
技术介绍
1、软件测试被广泛应用于软件质量保证过程中。在实践中,软件开发人员经常编写测试代码来验证生产代码的行为是否符合预期。软件产品经常演变,当生产代码发生重大变化(如添加或删除功能)时,测试代码应该与相应的生产代码共同演变,以保持对软件质量的有效评估,否则,过时的测试代码可能无法有效地揭示错误或导致测试失败,这可能会混淆开发人员并浪费质量管理的资源。尽管如此,维持这种协同演化可能会耗费时间和资源。
2、然而现有的工作已经揭示了,在实践中,测试代码常常无法与生产代码协同工作。主要有以下几个原因:1)缺乏测试维护的时间和qa资源;2)不知道特定功能的测试存在;3)没有时间运行所有测试(从而阻止发现过时的测试)。
3、给定一组生产代码更改,自动生成相应的测试代码更改是一项挑战。尽管现有的工作已经研究了生产代码和测试代码之间的关联,但很少有研究明确探索测试代码的自动生成的方案。
技术实现思路
1、本专利技术目的在于提供一种基于神经机器翻译的测试用例版本自动迁移方法,以解决上述的技术问题。
2、为解决上述技术问题,本专利技术的一种基于神经机器翻译的测试用例版本自动迁移方法的具体技术方案如下:
3、一种基于神经机器翻译的测试用例版本自动迁移方法,包括如下步骤:
4、s1:matcher匹配器通过匹配生产和测试代码的更改,在代码仓库中挖掘样本;
...【技术保护点】
1.一种基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S1:Matcher匹配器通过匹配生产代码更改和代码仓库历史中相应的测试代码更改,在代码仓库中挖掘样本:对于仓库主分支中的每一次提交Commiti,Matcher都会找到所有生产代码文件的更改,Matcher在每一次提交的后48小时内迭代所有提交,并根据标准目录布局收集测试代码的更改,生成一个生产代码更改的列表prod_list和测试代码更改的列表test_list,Matcher然后根据Java项目的生产代码文件和测试代码文件的命名约定对它们进行匹配,如果测试代码文件存在并且在更改列表中,则形成协同演化更改对ChangePairs=(changep,changet)并将其添加到样本集,其中changep,changet都是一个三元组(path,id,type),分别代表生产/测试代码文件的相对路径、提交的哈希ID、文件的修改类型;
3.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移
4.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S3:将生产代码的更改分为12种类型,它们属于两大类,分别是编程语言结构的修改和自然语言结构的修改,前者包括package-id、import-stmt、class-dec、method-sig、method-body、field、annotation的修改,后者包括copyright、javadoc、comment的修改,使用如下的正则表达式:
5.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S4:基于令牌的序列化表示来描述生产和测试代码的更改,将完整的代码源文件表示成令牌级别的编辑脚本,相应地神经网络最终的输出也只输出更改后的源代码令牌,而不是整个函数,基于令牌的表示允许表示对一个函数的多次更改,并且减少了输入以及输出序列的大小,更关注代码修改处及其周围上下文,使用的一个特殊的token:<ModStart>来标识一个更改,随后是n个上下文字符token(context),通过这些token来定位代码修改的位置;<ModEnd>在替换或删除程序中的token时使用,随后跟着n个上下文字符token(context),以指定修改的完成。
6.根据权利要求5所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S4:定义令牌token序列以及修改处的上下文context用来描述一个函数的更改,它在多行标识多个更改位置,使用两个特殊令牌<ModStart>和<ModEnd>标识修改位置的开始和结束的上下文,上下文context的大小进行自定义,将其大小定义为10,支持增加新的令牌,删除令牌,替换令牌。
7.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S5:使用交叉验证法和早停法,结合控制变量法微调几种参数,训练出最优的编码器-解码器结构的具有注意力机制的Seq2Seq模型,编码器和解码器分别对应输入序列和输出序列的两个循环神经网络,在输入序列和输出序列后面分别附上一个特殊字符'<eos>'(end of sequence)表示序列的终止,在测试模型时,一旦输出'<eos>'就终止当前的输出序列;
8.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述S6:使用波束搜索预测出最有可能的k个序列,在解码阶段的每一个step里,每次保留top K个最优序列。
...【技术特征摘要】
1.一种基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述s1:matcher匹配器通过匹配生产代码更改和代码仓库历史中相应的测试代码更改,在代码仓库中挖掘样本:对于仓库主分支中的每一次提交commiti,matcher都会找到所有生产代码文件的更改,matcher在每一次提交的后48小时内迭代所有提交,并根据标准目录布局收集测试代码的更改,生成一个生产代码更改的列表prod_list和测试代码更改的列表test_list,matcher然后根据java项目的生产代码文件和测试代码文件的命名约定对它们进行匹配,如果测试代码文件存在并且在更改列表中,则形成协同演化更改对changepairs=(changep,changet)并将其添加到样本集,其中changep,changet都是一个三元组(path,id,type),分别代表生产/测试代码文件的相对路径、提交的哈希id、文件的修改类型;
3.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述s2:对所有协同演化更改对changepairs样本进行筛选,使用gitpython获取所有changepairs和与之对应的上一次提交之间的差异文件diff,同时计算差异文件更改行数,筛选出更改行数小于等于3的diff文件。
4.根据权利要求1所述的基于神经机器翻译的测试用例版本自动迁移方法,其特征在于,所述s3:将生产代码的更改分为12种类型,它们属于两大类,分别是编程语言结构的修改和自然语言结构的修改,前者包括package-id、import-stmt、class-dec、method-sig、method-body、field、annotation的修改,后者包括copyright、javadoc、comment的修改,使用如下的正则表达式:
5.根据权利要求1所述的基...
【专利技术属性】
技术研发人员:孙建国,池剑磊,黄晏瑜,白胜刚,田野,冷雪,
申请(专利权)人:西安电子科技大学杭州研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。