CN114661616A - 目标代码的生成方法及装置 - Google Patents
目标代码的生成方法及装置 Download PDFInfo
- Publication number
- CN114661616A CN114661616A CN202210397342.6A CN202210397342A CN114661616A CN 114661616 A CN114661616 A CN 114661616A CN 202210397342 A CN202210397342 A CN 202210397342A CN 114661616 A CN114661616 A CN 114661616A
- Authority
- CN
- China
- Prior art keywords
- code
- information
- data set
- module
- training
- 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.)
- Pending
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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Abstract
本申请公开了一种目标代码的生成方法及装置。涉及人工智能领域,该方法包括:确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试。通过本申请,解决了相关技术中测试用例代码需要由人工编写,效率低的问题。
Description
技术领域
本申请涉及人工智能领域,具体而言,涉及一种目标代码的生成方法及装置。
背景技术
单元测试驱动开发是敏捷开发中的一项核心实践和技术,其原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写的产品代码。目前单元测试代码主要依赖于开发人员手工编写,但单元测试代码在分支覆盖、错误覆盖这种最常见的场景下代码拓扑通常比较简单,而开发人员仍然需要把过多的实践和精力浪费在冗余代码的编写上,导致专注于业务代码编写和投入产品创新研发、探索上的时间被严重挤压,不利于业务推进和产品的创新创造。
针对相关技术中测试用例代码需要由人工编写,效率低的问题,目前尚未提出有效的解决方案。
发明内容
本申请提供一种目标代码的生成方法及装置,以解决相关技术中测试用例代码需要由人工编写,效率低的问题。
根据本申请的一个方面,提供了一种目标代码的生成方法。该方法包括:确定被测对象的代码标注信息;将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息,其中,所述生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,所述第一数据集包括部分代码和对应的完整代码,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据所述输出代码信息确定所述被测对象的目标代码,其中,所述目标代码用于对所述被测对象进行测试。
可选的,将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息包括:将所述代码标注信息输入所述生成模型的目标网络,由所述目标网络输出所述输出代码信息,其中,所述目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
可选的,将所述代码标注信息输入所述生成模型的目标网络,由所述目标网络输出所述输出代码信息包括:将所述代码标注信息输入第一层的第一密集解码模块,由所述第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,所述第一密集解码模块与所述第二密集解码模块之间直接连接;通过所述第二密集解码模块将所述第一处理结果继续进行处理,得到第二处理结果,并将所述第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由所述第一连接模块将所述第二处理结果处理后发送给第三层的第三密集解码模块;通过所述第三密集解码模块将所述第二处理结果继续进行处理,得到第三处理结果,并将所述第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出所述输出代码信息。
可选的,将所述代码标注信息输入第一层的第一密集解码模块,由所述第一密集解码模块进行处理得到第一处理结果包括:将所述代码标注信息输入到所述第一密集解码模块的自注意力模块,由所述自注意力模块处理后得到第一解码信息;将所述第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,所述自注意力模块与所述第一切换正则化模块之间为残差连接,所述第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;将所述第二解码信息发送给前馈模块,得到第三解码信息;将所述第一解码信息,所述第二解码信息和所述第三解码信息输入第二切换正则化模块,由所述第二切换正则化模块输出所述第一处理结果。
可选的,确定被测对象的代码标注信息包括:确定所述被测对象的类文件;提取所述类文件中的代码标注信息。
可选的,将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息之前,所述方法还包括:根据所述代码标注信息,生成预设数据格式的输入信息,其中,所述预设数据格式包括开始标志,结束标志以及所述代码标注信息;根据所述输出代码信息确定所述被测对象的目标代码包括:从所述预设数据格式的输出代码信息提取所述目标代码。
根据本申请的另一方面,提供了一种目标代码的生成模型的训练方法,包括:获取第一数据集和第二数据集,其中,所述第一数据集和所述第二数据集的来源不同;根据所述第一数据集对生成模型进行预训练,其中,所述第一数据集包括部分代码和对应的完整代码;在预训练完成的情况下,根据所述第二数据集对所述生成模型进行调整训练,其中,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;在所述调整训练验证通过的情况下,训练完成。
可选的,获取第一数据集和第二数据集包括:在不同来源采集第一数据和第二数据;分别对所述第一数据和第二数据进行清洗处理,得到所述第一数据集和第二数据集,其中,所述第一数据集划分为第一训练集和第一测试集,所述第二数据集划分为第二训练集和第二测试集。
根据本申请的另一方面,提供了一种目标代码的生成装置。该装置包括:第一确定模块,用于确定被测对象的代码标注信息;生成模块,用于将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息,其中,所述生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,所述第一数据集包括部分代码和对应的完整代码,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;第二确定模块,用于根据所述输出代码信息确定所述被测对象的目标代码,其中,所述目标代码用于对所述被测对象进行测试。
根据本发明实施例的另一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一种目标代码的生成方法。
根据本发明实施例的另一方面,还提供了一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述任一种目标代码的生成方法。
通过本申请,采用以下步骤:确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试,解决了相关技术中测试用例代码需要由人工编写,效率低的问题。进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的一种目标代码的生成方法的流程图;
图2是根据本申请实施例提供的一种目标代码的生成模型的训练的流程图;
图3是根据本申请实施方式提供的生成模型的示意图;
图4是根据本申请实施例提供的一种目标代码的生成装置的示意图;
图5是根据本申请实施例提供的电子设备的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了解决相关技术测试用例代码需要由人工编写,效率低的问题,相关技术中出现了以下方法:CodeProAnalytix单元测试代码生成框架:依托于Eclipse集成开发环境构建,能够针对单个函数生成单元测试代码,但其主要通过事先设置的规则生成单元测试代码,无法应对某些常见的无返回值、无全局变量修改的测试场景,仅支持简单测试用例的自动化生成,主要基于JUint框架手工编写测试用例。
JUnitGenerator单元测试自动代码生成:基于Junit单元测试框架开发,根据事先设置的模板来生成单元测试代码,仅能够生成简单得外围代码,需要开发人员手工编写核心测试代码。
但是仍然存在:基于手工编写的方案耗时长,由于编程人员代码风格的问题可能还存在测试用例不符合规范的问题;语言平台固定,不能快速适用于多种语言平台;生成代码的语法结构固定,不能快速适应单元测试案例规范的更新;后期维护成本较高;需要手工定义相应的代码模板;基于事先约定的规则生成测试案例,缺乏主动在大量代码中学习和持续学习的能力;对于封闭性的测试场景(无返回值、无全局变量),成功率较低;代码可读性较差等问题。
基于此,本申请希望提供一种能够解决上述技术问题的方案,其详细内容将在后续实施例中得以阐述。
需要说明的是,本公开所涉及的相关信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。例如,本系统和相关用户或机构间设置有接口,在获取相关信息之前,需要通过接口向前述的用户或机构发送获取请求,并在接收到前述的用户或机构反馈的同意信息后,获取相关信息。
为了便于描述,以下对本申请实施例涉及的部分名词或术语进行说明:
单元测试驱动开发(UnitTest Driven-Development,UTDD):开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写的产品代码;敏捷开发模式中最常用的开发方式。
根据本申请的实施例,提供了一种目标代码的生成方法。
图1是根据本申请实施例的一种目标代码的生成方法的流程图。如图1所示,该方法包括以下步骤:
步骤S102,确定被测对象的代码标注信息;
步骤S104,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;
步骤S106,根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试。
通过上述步骤,确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试,解决了相关技术中测试用例代码需要由人工编写,效率低的问题。进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果。
上述被测对象为需要创建测试用例的对象,可以为一段开发代码,或者功能代码,其被测对象可以为上述被测代码的载体文件的任意一种。通过对被测对象进行关键字提取,可以获得被测对象中代码标注信息,代码标注信息也即是代码的注释,或者代码的规则,代码的功能或者任务等信息,通常由以中文的形式出现。
上述生成模型是先后由第一数据集进行预训练,然后由第二数据集进行调整训练得到的,上述第一数据集可以从互联网上公开的代码来源进行获取,包括公开的代码库,代码行业论坛,或者互联网上公开的语料库或者预料检索系统等,第一数据集主要是语料数据,第一数据集中的每条数据通常是由一条代码的部分字段和完整的代码组成,通过第一数据集对生成模型进行预训练,可以使生成模型在部分语料字段还原整个语料的能力上具有较大提升,从而使得模型可以根据部分语料字段生成完整的所需语料,上述语料可以理解为代码的具体段落。
在预训练完成后,可以通过第二数据集来进行调整训练,调整训练需要预训练模型能够在单元测试代码生成任务上具有更出色的表现,同时需要满足实际生产场景中相关的代码实现规范,因此第二数据集将从被测对象的所属业务系统的服务器的现存代码库中采集。第二数据集的每条数据通常是由输入的代码表标注信息和代码标注信息对应的代码组成,通过第二数据集对预训练后的生成模型进行调整训练,可以使得生成模型在满足被测对象所属得实际场景中,具有更准确的能力。
通过第一数据集和第二数据集先后对生成模型进行预训练和调整训练,使得生成模型在根据代码标注信息生成对应的测试用例代码具有更准确,更高效的性能。通过将被测对象的代码标注信息输入生成模型,由生成模型输出对应的输出代码信息,根据输出代码信息确定被测对象对应的测试用例的目标代码。
需要说明的是,生成模型在输入数据的格式和输出数据的格式上存在一定的需求,也即是输入数据需要按照模型所需的输入格式,模型输出的数据也是模型对应的输出格式,也即是上述输出代码信息通常不是所需的目标代码,可以通过格式转换或者数据提取的方式,从输出代码信息中获取对应的目标代码。
本实施例,可以利用第一数据集和第二数据集通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果,进而解决了相关技术中测试用例代码需要由人工编写,效率低的问题。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息包括:将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息,其中,目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
上述生成模型包括目标网络,上述生成模型可以为Transformer模型,该目标网络可以为Transformer模型的解码器Decoder网络。如图3所示,总的解码器网络包括多个先后连接的密集解码模块,该密集解码模块于标准的解码器网络中的解码模块不同,具体的,为了增强网络的特征表达,对标准解码器Decoder网络的Decoder Block(解码器块)进行了改进,通过增加残差连接得到Dense Decoder Block(密集解码模块)。同时采用层正则化LayerNorm和实例正则化InstanceNorm组合的切换正则化SwitchNorm替换原来的解码器Decoder中的层LayerNorm,加入实例正则化InstanceNorm的目的是增强网络对于单个样本的正则化,提高网络对于某类样本的特异性特征的关注度,从而提升整体的判别力。
由于生成模型的主要部分就是目标网络,在将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息时,可以将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息。
可选的,将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息包括:将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,第一密集解码模块与第二密集解码模块之间直接连接;通过第二密集解码模块将第一处理结果继续进行处理,得到第二处理结果,并将第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由第一连接模块将第二处理结果处理后发送给第三层的第三密集解码模块;通过第三密集解码模块将第二处理结果继续进行处理,得到第三处理结果,并将第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出该输出代码信息。
在目标网络中,多层的密集解码模块通过多个连接模块进行连接,除了第一层的密集解码模块,每一层的密集解码模块后面都设置有一个连接模块,该连接模块包括下采样可以解决特征衰减问题,另外,每一层密集解码模块得到处理结果后,都会向后续的密集解码模块的连接模块进行发送,以便连接模块中的下采样模块进行处理,形成了解码捷径Dense shortcut机制,得到一个密集连接网络。与原网络相比,该网络能够较好地减轻特征衰减的问题,模式表达能力更强。
可选的,将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果包括:将代码标注信息输入到第一密集解码模块的自注意力模块,由自注意力模块处理后得到第一解码信息;将第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,自注意力模块与第一切换正则化模块之间为残差连接,第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;将第二解码信息发送给前馈模块,得到第三解码信息;将第一解码信息,第二解码信息和第三解码信息输入第二切换正则化模块,由第二切换正则化模块输出第一处理结果。
上述切换正则化模块由层正则化函数和实例正则化函数组合而成,两者的组合方式形式化如下:SwitchNorm(x)=α·LayerNorm(x)+β·InstanceNorm(x),其中α和β分别层正则化函数和实例正则化函数的网络可学习参数,其中LayerNorm和InstanceNorm分别是层正则化函数和实例正则化函数,SwitchNorm是本实施例提出的切换正则化方式。
如图3所示,在图3的a部分中,密集解码模块包括自注意力模块(Masked MultiSelf-attention),两个切换正则化模块(Switch Norm),其中,与自注意力模块直接连接的为第一正则化模块,另一个为第二正则化模块,第一正则化模块与第二正则化模块之间设置有前馈模块,第一正则化模块的输入为自注意力模块的输入以及子注意力模块的输出,第二正则化模块的输入为前边三个模块的输出,通过这种连接方式,实现密集解码模块中的残差连接,提高网络对于某类样本的特异性特征的关注度,从而提升整体的判别力。
可选的,确定被测对象的代码标注信息包括:确定被测对象的类文件;提取类文件中的代码标注信息。
上述被测对象为需要创建测试用例的对象,可以为一段开发代码,或者功能代码,其被测对象可以为上述被测代码的载体文件的任意一种。通过对被测对象进行关键字提取,可以获得被测对象中代码标注信息,代码标注信息也即是代码的注释,或者代码的规则,代码的功能或者任务等信息,通常由以中文的形式出现。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息之前,方法还包括:根据代码标注信息,生成预设数据格式的输入信息,其中,预设数据格式包括开始标志,结束标志以及代码标注信息;根据输出代码信息确定被测对象的目标代码包括:从预设数据格式的输出代码信息提取目标代码。
例如,输入信息包括开始标志beg,输入数据,结束标志eof,在获取到代码标注信息之后,需要在代码标注信息的字段的最前方加入一个开始标志,在代码标注信息的字段的最后放加入一个结束标志,才能输入生成模型并被生成模型所识别。而模型输出的输出代码信息也是带有开始标志和结束标志的,需要将其去除才能得到目标代码。
图2是根据本申请实施例提供的一种目标代码的生成模型的训练的流程图,如图2所示,根据本申请的另一方面,提供了一种目标代码的生成模型的训练方法,包括:
步骤S202,获取第一数据集和第二数据集,其中,第一数据集和第二数据集的来源不同;
步骤S204,根据第一数据集对生成模型进行预训练,其中,第一数据集包括部分代码和对应的完整代码;
步骤S206,在预训练完成的情况下,根据第二数据集对生成模型进行调整训练,其中,第二数据集包括输入的代码标注信息以及对应的输出代码信息;
步骤S208,在调整训练验证通过的情况下,训练完成。
通过上述步骤,通过获取第一数据集和第二数据集,其中,第一数据集和第二数据集的来源不同;根据第一数据集对生成模型进行预训练,其中,第一数据集包括部分代码和对应的完整代码;在预训练完成的情况下,根据第二数据集对生成模型进行调整训练,其中,第二数据集包括输入的代码标注信息以及对应的输出代码信息;在调整训练验证通过的情况下,训练完成,解决了相关技术中测试用例代码生成模型存在准确率较低的问题。进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果,来解决相关技术中测试用例代码需要由人工编写,效率低的问题。
上述生成模型是先后由第一数据集进行预训练,然后由第二数据集进行调整训练得到的,上述第一数据集可以从互联网上公开的代码来源进行获取,包括公开的代码库,代码行业论坛,或者互联网上公开的语料库或者预料检索系统等,第一数据集主要是语料数据,第一数据集中的每条数据通常是由一条代码的部分字段和完整的代码组成,通过第一数据集对生成模型进行预训练,可以使生成模型在部分语料字段还原整个语料的能力上具有较大提升,从而使得模型可以根据部分语料字段生成完整的所需语料,上述语料可以理解为代码的具体段落。
在预训练完成后,可以通过第二数据集来进行调整训练,调整训练需要预训练模型能够在单元测试代码生成任务上具有更出色的表现,同时需要满足实际生产场景中相关的代码实现规范,因此第二数据集将从被测对象的所属业务系统的服务器的现存代码库中采集。第二数据集的每条数据通常是由输入的代码表标注信息和代码标注信息对应的代码组成,通过第二数据集对预训练后的生成模型进行调整训练,可以使得生成模型在满足被测对象所属得实际场景中,具有更准确的能力。
通过第一数据集和第二数据集先后对生成模型进行预训练和调整训练,使得生成模型在根据代码标注信息生成对应的测试用例代码具有更准确,更高效的性能。通过将被测对象的代码标注信息输入生成模型,由生成模型输出对应的输出代码信息,根据输出代码信息确定被测对象对应的测试用例的目标代码。
在通过第一数据集和第二数据集对生成模型进行训练之前还可以先对第一数据集和第二数据集进行处理,可选的,获取第一数据集和第二数据集包括:在不同来源采集第一数据和第二数据;分别对第一数据和第二数据进行清洗处理,得到第一数据集和第二数据集,其中,第一数据集划分为第一训练集和第一测试集,第二数据集划分为第二训练集和第二测试集。
对采集到的第一数据或者第二数据进行清理,去除其中冗余、不完整、语法逻辑有误的语料记录,查找和替换关键字的表达,保证数据的一致性。特别是对应用于模型预训练阶段的第一数据集,由于是来源与网络公开,需要仔细地进行跨数据集地降重处理,以避免模型在某些常见语料上过拟合。为了保证关键字表达的一致性(如Java和java均统一为Java),可以采用FlashText文本查找替换工具对关键字进行处理。
对于模型微调阶段的第二数据集,在采集阶段默认已经严格按照当前最新的单元测试规范对代码进行提取,因此不再过多在语法规范上对语料进行清洗。对该阶段数据集处理工作主要在永真断言、无效断言和废弃代码的清理上,同时出于对当前算法容量的考量,同时需要剔除数据集中复杂处理逻辑的单元测试案例,如采用javaassist动态映射技术进行测试代码插入的测试场景。
需要说明的是,本实施例还提供了一种可选的实施方式,下面对该实施方式进行详细说明。
本实施方式致力于减少研发人员在简单测试用例编写上的时间损耗,提高工作效率,释放研发人员在产品创新和业务专注上的潜力。同时,采用智能化代码生成,单元测试脚本的编写也会更为规范,利于维护。
本实施方式包含数据处理、模型构建、训练配置、验证指标和插件编写等部分,下面将依次详细介绍各个部分的实现方案和方法细节。
数据处理:数据处理可分为数据采集、数据清洗、数据集划分和数据标注等四个部分。
数据采集:代码生成本质上仍然是语言生成任务,LM(Language Model)模型的训练方法同样适用于本实施方式,即模型训练分为预训练和微调两个部分。预训练阶段应尽量训练一个足够通用的语言生成模型,然后再微调阶段再针对单元测试代码生成任务进行细致地微调。因此,预训练阶段的数据集采集应尽可能适用于通用语言生成模型的训练,本实施方式采用Common Crawl dataset、WebText、BookCorpus、English-languageWikipedia、CCL语料库检索系统、Pre-Modern Chinese Language Corpus、LAMBADAdataset、WebQuestion dataset以及XNLI等互联网上公开的语料数据集资源。微调阶段需要预训练模型能够在单元测试代码生成任务上具有更出色的表现,同时需要满足实际生产场景中相关的代码实现规范,因此数据集将从本中心现存代码库中采集。
数据清洗:对数据集进行预处理之前,需要对采集到的数据进行清理,去除其中冗余、不完整、语法逻辑有误的语料记录,查找和替换关键字的表达,保证数据的一致性。特别是对应用于模型预训练阶段的数据集,需要仔细地进行跨数据集地降重处理,以避免模型在某些常见语料上过拟合。为了保证关键字表达的一致性(如Java和java均统一为Java),采用FlashText文本查找替换工具对关键字进行处理。对于模型微调阶段的数据集,在采集阶段默认已经严格按照本中心当前最新的单元测试规范对代码进行提取,因此不再过多在语法规范上对语料进行清洗。对该阶段数据集处理工作主要在永真断言、无效断言和废弃代码的清理上,同时出于对当前算法容量的考量,同时需要剔除数据集中复杂处理逻辑的单元测试案例,如采用javaassist动态映射技术进行测试代码插入的测试场景。
数据集划分:预训练阶段的训练集为Common Crawl dataset、WebText、BookCorpus、English-language Wikipedia、CCL语料库检索系统和Pre-Modern ChineseLanguage Corpus组成的联合数据集,测试集为LAMBADA dataset、WebQuestion dataset以及XNLI等。微调阶段的数据集,本实施方式采用留出法进行划分,其中80%的样本用于训练,20%的样本用于测试。
数据标注:预训练阶段,本实施方式采用无监督训练,因此不需要额外的数据标注;微调阶段,采用监督训练算法,标注信息为标准单元测试案例。
模型构建:本实施方式以Transformer的Decoder网络为基准网络,提出一种新的密集连接网络,网络如下图所示,网络的层数和详细结构参数配置如表1所示,表1是密集连接网络的参数配置表:
表1密集连接网络的参数配置表
n_layers | d_model | n_heads | d_head |
80 | 10240 | 80 | 128 |
图3是根据本申请实施方式提供的生成模型的示意图,如图3所示,为了增强网络的特征表达,本实施方式对标准Decoder Block(解码器块)进行了改进,通过增加残差连接得到Dense Decoder Block(密集解码模块)(也即是图3中a部分的Dense Block)。同时采用LayerNorm和InstanceNorm组合的SwitchNorm替换原来的Decoder中的LayerNorm,加入InstanceNorm的目的是增强网络对于单个样本的正则化,提高网络对于某类样本的特异性特征的关注度,从而提升整体的判别力。两者的组合方式形式化如下:
SwitchNorm(x)=α·LayerNorm(x)+β·InstanceNorm(x)
其中α和β是网络可学习参数,其中LayerNorm和InstanceNorm是层正则化和实例正则化,SwitchNorm是本实施方式提出的切换正则化方式。
更进一步,为了缓解深层网络的特征传递衰减的问题,对Dense Decoder Block之间的连接提出Dense shortcut机制,得到一个密集连接网络。与原网络相比,该网络能够较好地减轻特征衰减的问题,模式表达能力更强。
训练配置:
预热策略:余弦预热策略
优化器:Adam,β1=0.9,β2=0.95,ε=10-8
权重衰减系数:0.1
学习率:预训练0.7×10-4,微调0.07×10-4
梯度截断:全局梯度截断,截断间距1.0
目标函数:
预训练:
微调:
数据输入:预训练的数据格式如表2,表2为预训练的第一数据集的数据结构表:
表2预训练的第一数据集的数据结构表
beg | content | eof | <toPred> | content |
微调的数据格式如表3,表3为微调的第二数据集的数据结构表:
表3微调的第二数据集的数据结构表
beg | content | eof | <toCode> | code |
其中,<beg>是输入的开始标志;content是训练样本,预训练阶段是语料样本,微调阶段是单元测试代码的类docstring;<eof>为输入结束标志符;<toPred>和<toCode>均为训练样本和标注信息的分隔标志;content和code为标注信息,预训练阶段content的内容与训练样本的content内容一致,微调阶段的code内容是单个类的所有单元测试案例。
由于本实施方式的核心算法采用自回归模型构建,即模型的预测基于模型的上一个预测,因此模型的输入和标签几乎是相同的,区别仅在于标签需要在输入的基础上右移一位。
数据形式:
预处理阶段:不做额外处理。
微调阶段:
docstring的标准格式如下:
…
功能描述:
given:给定参数;
when:函数调用;
then:断言处理;
…
类docstring即整个被测类所有函数的docstring的组合,每个docstring之间使用<de>标志符号分隔。
对于标签数据,具体为被测类的所有单元测试案例代码文件流,该文件流会压缩为单行代码格式,两条语句之间的空格将全部替换为一个空格。同理,docstring功能描述字符串也做相同处理。
为了避免大量可能带来训练偏差,空格会被采用<sp>标志符号替换,<sp>在预测和损失计算时会被忽略。
验证指标:预训练模型的验证指标:
其中,TP是预测正确的正样本,TN为预测正确的负样本,FP为预测错误的负样本,FN为预测错误的正样本。
PPL(Perplexity):根据每个词来估计一句话出现的概率,并用句子的长度进行正则化。PPL越小,期望句子出现的概率越大,因此PPL越小越好,计算公式如下:
微调模型的验证指标:
插件编写:根据微调阶段的数据集提供的代码语言,针对该语言平台常见的集成开发环境开发对应的插件接口。比如针对Java语言最流行的开发环境Idea开发相应的插件,将对应的单元测试代码生成功能集成在功能右键中,实现如下功能:
用户对被测类右键唤起单元测试代码生成功能;
插件前端读入对应的被测类文件,预处理后转换为模型的输入格式,其格式如表4,表4为输入模型的输入数据格式表:
表4输入模型的输入数据格式表
beg | content | eof |
插件前端得到模型输出后,对结果进行反预处理,在对应测试路径下创建相应的测试类,写入生成的代码;
提示dialog,提醒用户生成单元测试用例是否完成;
提供反馈接口以及代码文件上传接口,接受热心用户的反馈,特别是代码文件,用于后续模型的增量学习。
本实施方式将深度LM模型引入到单元测试代码生成任务中;提出一种新的密集连接的LM模型,通过Decoder Block内和Decoder Block间的密集连接方式,减轻了深层网络带来的特征衰减问题,提升模型的表达能力;提出用于评估单元测试代码生成任务的模型评估指标。
本实施方式单元测试用例的生成过程完全自动化,不需要额外的参数设置以及规则模板的编写;假设网络能够很好收敛的前提下,通过对海量单元测试训练数据的学习,网络能够达到手工编写单元测试用例的效果,更具可读性;通过对大量单元测试场景的学习,网络就像一个经验丰富的资深语言专家,能够更好地针对极端封闭性场景给出合适的单元测试代码;能够通过增量学习不断地泛化到新的单元测试场景中,避免人工修改规则和模板等繁冗工作;通过微调能够应用到不同语言平台中,维护成本更低。
本申请实施例提供的目标代码的生成方法,通过确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试,解决了相关技术中测试用例代码需要由人工编写,效率低的问题。进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例还提供了一种目标代码的生成装置,需要说明的是,本申请实施例的目标代码的生成装置可以用于执行本申请实施例所提供的用于目标代码的生成方法。以下对本申请实施例提供的目标代码的生成装置进行介绍。
图4是根据本申请实施例的一种目标代码的生成装置的示意图。如图4所示,该装置包括:第一确定模块42,生成模块44和第二确定模块46,下面对该装置进行详细说明。
第一确定模块42,用于确定被测对象的代码标注信息;生成模块44,与上述第一确定模块42相连,用于将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;第二确定模块46,与上述生成模块44相连,用于根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试。
通过上述装置,第一确定模块42确定被测对象的代码标注信息;生成模块44将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;第二确定模块46根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试,解决了相关技术中测试用例代码需要由人工编写,效率低的问题。进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果。
可选地,在本申请实施例提供的目标代码的生成装置中,生成模块包括:生成单元,也有将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息,其中,目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
可选的,生成单元包括:第一处理子单元,用于将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,第一密集解码模块与第二密集解码模块之间直接连接;第二处理子单元,用于通过第二密集解码模块将第一处理结果继续进行处理,得到第二处理结果,并将第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由第一连接模块将第二处理结果处理后发送给第三层的第三密集解码模块;第三处理子单元,用于通过第三密集解码模块将第二处理结果继续进行处理,得到第三处理结果,并将第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;第四处理子单元,用于通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出该输出代码信息。
可选的,第一处理子单元包括:第一解码二级子单元,用于将代码标注信息输入到第一密集解码模块的自注意力模块,由自注意力模块处理后得到第一解码信息;第二解码二级子单元,用于将第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,自注意力模块与第一切换正则化模块之间为残差连接,第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;第三解码二级子单元,用于将第二解码信息发送给前馈模块,得到第三解码信息;第四解码二级子单元,用于将第一解码信息,第二解码信息和第三解码信息输入第二切换正则化模块,由第二切换正则化模块输出第一处理结果。
可选的,第一确定模块包括:确定单元,用于确定被测对象的类文件;提取单元,用于提取类文件中的代码标注信息。
可选的,该装置还包括:第一格式转换模块,用于根据代码标注信息,生成预设数据格式的输入信息,其中,预设数据格式包括开始标志,结束标志以及代码标注信息;第二格式转换模块,用于根据输出代码信息确定被测对象的目标代码包括:从预设数据格式的输出代码信息提取目标代码。
本申请实施例提供的目标代码的生成装置,通过第一确定模块42,生成模块44和第二确定模块46,解决了相关技术中测试用例代码需要由人工编写,效率低的问题,进而达到了通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率的效果。
上述目标代码的生成装置包括处理器和存储器,上述通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来通过预训练和调整训练来提高生成模型生成代码的准确率,代替人工编写测试用例代码,进而提高测试用例代码编写效率。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现所述目标代码的生成方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述目标代码的生成方法。
图5是根据本申请实施例提供的电子设备的示意图,如图5所示,本发明实施例提供了一种电子设备50,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息包括:将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息,其中,目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
可选的,将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息包括:将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,第一密集解码模块与第二密集解码模块之间直接连接;通过第二密集解码模块将第一处理结果继续进行处理,得到第二处理结果,并将第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由第一连接模块将第二处理结果处理后发送给第三层的第三密集解码模块;通过第三密集解码模块将第二处理结果继续进行处理,得到第三处理结果,并将第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出该输出代码信息。
可选的,将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果包括:将代码标注信息输入到第一密集解码模块的自注意力模块,由自注意力模块处理后得到第一解码信息;将第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,自注意力模块与第一切换正则化模块之间为残差连接,第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;将第二解码信息发送给前馈模块,得到第三解码信息;将第一解码信息,第二解码信息和第三解码信息输入第二切换正则化模块,由第二切换正则化模块输出第一处理结果。
可选的,确定被测对象的代码标注信息包括:确定被测对象的类文件;提取类文件中的代码标注信息。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息之前,方法还包括:根据代码标注信息,生成预设数据格式的输入信息,其中,预设数据格式包括开始标志,结束标志以及代码标注信息;根据输出代码信息确定被测对象的目标代码包括:从预设数据格式的输出代码信息提取目标代码。
处理器执行程序时还可以实现以下步骤:获取第一数据集和第二数据集,其中,第一数据集和第二数据集的来源不同;根据第一数据集对生成模型进行预训练,其中,第一数据集包括部分代码和对应的完整代码;在预训练完成的情况下,根据第二数据集对生成模型进行调整训练,其中,第二数据集包括输入的代码标注信息以及对应的输出代码信息;在调整训练验证通过的情况下,训练完成。
可选的,获取第一数据集和第二数据集包括:在不同来源采集第一数据和第二数据;分别对第一数据和第二数据进行清洗处理,得到第一数据集和第二数据集,其中,第一数据集划分为第一训练集和第一测试集,第二数据集划分为第二训练集和第二测试集。
本文中的设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:确定被测对象的代码标注信息;将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息,其中,生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,第一数据集包括部分代码和对应的完整代码,第二数据集包括输入的代码标注信息以及对应的输出代码信息;根据输出代码信息确定被测对象的目标代码,其中,目标代码用于对被测对象进行测试。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息包括:将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息,其中,目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
可选的,将代码标注信息输入生成模型的目标网络,由目标网络输出该输出代码信息包括:将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,第一密集解码模块与第二密集解码模块之间直接连接;通过第二密集解码模块将第一处理结果继续进行处理,得到第二处理结果,并将第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由第一连接模块将第二处理结果处理后发送给第三层的第三密集解码模块;通过第三密集解码模块将第二处理结果继续进行处理,得到第三处理结果,并将第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出该输出代码信息。
可选的,将代码标注信息输入第一层的第一密集解码模块,由第一密集解码模块进行处理得到第一处理结果包括:将代码标注信息输入到第一密集解码模块的自注意力模块,由自注意力模块处理后得到第一解码信息;将第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,自注意力模块与第一切换正则化模块之间为残差连接,第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;将第二解码信息发送给前馈模块,得到第三解码信息;将第一解码信息,第二解码信息和第三解码信息输入第二切换正则化模块,由第二切换正则化模块输出第一处理结果。
可选的,确定被测对象的代码标注信息包括:确定被测对象的类文件;提取类文件中的代码标注信息。
可选的,将代码标注信息输入训练完成的生成模型,由生成模型输出对应的输出代码信息之前,方法还包括:根据代码标注信息,生成预设数据格式的输入信息,其中,预设数据格式包括开始标志,结束标志以及代码标注信息;根据输出代码信息确定被测对象的目标代码包括:从预设数据格式的输出代码信息提取目标代码。
还可以执行如下方法步骤的程序:获取第一数据集和第二数据集,其中,第一数据集和第二数据集的来源不同;根据第一数据集对生成模型进行预训练,其中,第一数据集包括部分代码和对应的完整代码;在预训练完成的情况下,根据第二数据集对生成模型进行调整训练,其中,第二数据集包括输入的代码标注信息以及对应的输出代码信息;在调整训练验证通过的情况下,训练完成。
可选的,获取第一数据集和第二数据集包括:在不同来源采集第一数据和第二数据;分别对第一数据和第二数据进行清洗处理,得到第一数据集和第二数据集,其中,第一数据集划分为第一训练集和第一测试集,第二数据集划分为第二训练集和第二测试集。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (11)
1.一种目标代码的生成方法,其特征在于,包括:
确定被测对象的代码标注信息;
将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息,其中,所述生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,所述第一数据集包括部分代码和对应的完整代码,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;
根据所述输出代码信息确定所述被测对象的目标代码,其中,所述目标代码用于对所述被测对象进行测试。
2.根据权利要求1所述的方法,其特征在于,将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息包括:
将所述代码标注信息输入所述生成模型的目标网络,由所述目标网络输出所述输出代码信息,其中,所述目标网络有多层,每层都设置有密集解码模块,相邻的密集解码模块之间设置有连接模块,多层密集解码模块按照解码捷径机制进行连接。
3.根据权利要求2所述的方法,其特征在于,将所述代码标注信息输入所述生成模型的目标网络,由所述目标网络输出所述输出代码信息包括:
将所述代码标注信息输入第一层的第一密集解码模块,由所述第一密集解码模块进行处理得到第一处理结果,并将处理结果发送给第二层的第二密集解码模块,以及后续的多个连接模块,其中,所述第一密集解码模块与所述第二密集解码模块之间直接连接;
通过所述第二密集解码模块将所述第一处理结果继续进行处理,得到第二处理结果,并将所述第二处理结果发送给第二层与第三层之间的第一连接模块,以及后续的其他连接模块,由所述第一连接模块将所述第二处理结果处理后发送给第三层的第三密集解码模块;
通过所述第三密集解码模块将所述第二处理结果继续进行处理,得到第三处理结果,并将所述第二处理结果发送给第三层与第四层之间的第二连接模块,以及后续的其他连接模块;
通过后续的密集解码模块进行处理,由最后一层的密集解码模块和最后一个连接模块输出所述输出代码信息。
4.根据权利要求3所述的方法,其特征在于,将所述代码标注信息输入第一层的第一密集解码模块,由所述第一密集解码模块进行处理得到第一处理结果包括:
将所述代码标注信息输入到所述第一密集解码模块的自注意力模块,由所述自注意力模块处理后得到第一解码信息;
将所述第一解码信息发送给第一切换正则化模块,得到第二解码信息,其中,所述自注意力模块与所述第一切换正则化模块之间为残差连接,所述第一切换正则化模块为层正则化函数和实例正则化函数组合确定的;
将所述第二解码信息发送给前馈模块,得到第三解码信息;
将所述第一解码信息,所述第二解码信息和所述第三解码信息输入第二切换正则化模块,由所述第二切换正则化模块输出所述第一处理结果。
5.根据权利要求1所述的方法,其特征在于,确定被测对象的代码标注信息包括:
确定所述被测对象的类文件;
提取所述类文件中的代码标注信息。
6.根据权利要求5所述的方法,其特征在于,将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息之前,所述方法还包括:
根据所述代码标注信息,生成预设数据格式的输入信息,其中,所述预设数据格式包括开始标志,结束标志以及所述代码标注信息;
根据所述输出代码信息确定所述被测对象的目标代码包括:
从所述预设数据格式的输出代码信息提取所述目标代码。
7.一种目标代码的生成模型的训练方法,其特征在于,包括:
获取第一数据集和第二数据集,其中,所述第一数据集和所述第二数据集的来源不同;
根据所述第一数据集对生成模型进行预训练,其中,所述第一数据集包括部分代码和对应的完整代码;
在预训练完成的情况下,根据所述第二数据集对所述生成模型进行调整训练,其中,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;
在所述调整训练验证通过的情况下,训练完成。
8.根据权利要求7所述的方法,其特征在于,获取第一数据集和第二数据集包括:
在不同来源采集第一数据和第二数据;
分别对所述第一数据和第二数据进行清洗处理,得到所述第一数据集和第二数据集,其中,所述第一数据集划分为第一训练集和第一测试集,所述第二数据集划分为第二训练集和第二测试集。
9.一种目标代码的生成装置,其特征在于,包括:
第一确定模块,用于确定被测对象的代码标注信息;
生成模块,用于将所述代码标注信息输入训练完成的生成模型,由所述生成模型输出对应的输出代码信息,其中,所述生成模型是先后通过第一数据集进行预训练,以及通过第二数据集进行调整训练得到的,所述第一数据集包括部分代码和对应的完整代码,所述第二数据集包括输入的代码标注信息以及对应的输出代码信息;
第二确定模块,用于根据所述输出代码信息确定所述被测对象的目标代码,其中,所述目标代码用于对所述被测对象进行测试。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至8中任意一项所述的方法。
11.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至8中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210397342.6A CN114661616A (zh) | 2022-04-15 | 2022-04-15 | 目标代码的生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210397342.6A CN114661616A (zh) | 2022-04-15 | 2022-04-15 | 目标代码的生成方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114661616A true CN114661616A (zh) | 2022-06-24 |
Family
ID=82035677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210397342.6A Pending CN114661616A (zh) | 2022-04-15 | 2022-04-15 | 目标代码的生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114661616A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149258A (zh) * | 2023-03-24 | 2023-05-23 | 中科航迈数控软件(深圳)有限公司 | 基于多模态信息的数控机床代码生成方法及相关设备 |
-
2022
- 2022-04-15 CN CN202210397342.6A patent/CN114661616A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149258A (zh) * | 2023-03-24 | 2023-05-23 | 中科航迈数控软件(深圳)有限公司 | 基于多模态信息的数控机床代码生成方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107229610B (zh) | 一种情感数据的分析方法及装置 | |
Umer et al. | CNN-based automatic prioritization of bug reports | |
CN113806482B (zh) | 视频文本跨模态检索方法、装置、存储介质和设备 | |
CN112541337B (zh) | 一种基于递归神经网络语言模型的文档模板自动生成方法及系统 | |
US11170169B2 (en) | System and method for language-independent contextual embedding | |
CN115357719B (zh) | 基于改进bert模型的电力审计文本分类方法及装置 | |
CN117076653B (zh) | 基于思维链及可视化提升上下文学习知识库问答方法 | |
US20220414463A1 (en) | Automated troubleshooter | |
US11403304B2 (en) | Automatically curating existing machine learning projects into a corpus adaptable for use in new machine learning projects | |
CN108491381B (zh) | 一种汉语二分结构的句法分析方法 | |
Abbas et al. | A review of nlidb with deep learning: findings, challenges and open issues | |
Cui et al. | Simple question answering over knowledge graph enhanced by question pattern classification | |
CN114661616A (zh) | 目标代码的生成方法及装置 | |
Krithika et al. | Learning to grade short answers using machine learning techniques | |
JP2022082524A (ja) | 機械学習を通じての学習モデルを使った情報提供方法および装置 | |
JP2013250926A (ja) | 質問応答装置、方法、及びプログラム | |
CN111563381B (zh) | 文本处理方法和装置 | |
CN109902162B (zh) | 基于数字指纹的文本相似性的识别方法、存储介质及装置 | |
CN112651226A (zh) | 基于依存句法树的知识解析系统及方法 | |
CN116861269A (zh) | 工程领域的多源异构数据融合及分析方法 | |
CN116974554A (zh) | 代码数据处理方法、装置、计算机设备和存储介质 | |
Andrés et al. | Search for Hyphenated Words in Probabilistic Indices: A Machine Learning Approach | |
CN115629800A (zh) | 一种基于多模态的代码摘要生成方法与系统 | |
Adewoyin et al. | RSTGen: imbuing fine-grained interpretable control into long-FormText generators | |
US20220067576A1 (en) | Automatically labeling functional blocks in pipelines of existing machine learning projects in a corpus adaptable for use in new machine learning projects |
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 |