一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

自动生成用于对源代码进行操作的软件工具的机器学习模型的制作方法

2022-06-12 04:40:16 来源:中国专利 TAG:


1.本公开涉及生成用于对源代码进行操作的软件工具的机器学习模型。


背景技术:

2.编程工具或软件开发工具是软件开发者用来创建、调试、维护或以其它方式支持其它程序和应用程序的计算机程序。该术语通常指可以组合在一起以完成任务的相对简单的程序,就像人们可能使用多个手工工具来修复物理对象一样。最基本的工具是源代码编辑器和编译器或解释器。其它工具或多或少地取决于语言、开发方法和个别工程师而使用,并且通常用于分立任务,例如调试器、分析工具或静态程序分析器。静态程序分析是对在没有实际执行程序的情况下执行的计算机软件的分析。在大多数情况下,对源代码的某一版本执行分析。软件开发工具可以是例如根据命令行单独执行的分立程序,或者可以是单个大程序(通常称为集成开发环境(ide))的部分。
3.代码库(或代码基)是用于构建特定软件系统、应用程序或软件组件的人类编写的和机器生成的源代码片段的集合。代码库通常存储在源代码储存库中。对代码库的修订可以由版本控制系统管理。在许多情况下,专业软件工程师可能花费数月来创建用于构建特定软件开发工具的代码库。机器学习模型可以通过自动标识人类编写的源代码片段中的错误来帮助加速这些软件开发工具的构建过程。然而,这样的机器学习模型是为正在构建的软件开发工具而特别定制的,并且需要专业软件工程师来创建机器学习模型以供实际构建软件开发工具的不同软件工程师使用。


技术实现要素:

4.本公开的一个方面提供了一种用于生成代码洞察的方法。该方法包括在数据处理硬件处从开发者设备接收请求用于目标源代码的代码洞察的代码洞察请求,其中该开发者设备与使用目标源代码以构建软件开发工具的开发者相关联用于目标源代码的代码洞察。该代码洞察请求包括目标源代码和工具类型指示符。该工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个。该方法还包括由数据处理硬件基于工具类型指示符获得机器学习模型,该机器学习模型在与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联的训练源代码上被训练。该方法还包括由数据处理硬件使用机器学习模型生成用于目标源代码的代码洞察。当工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具时,用于目标源代码的代码洞察包括用于目标源代码的预测标签。当工具类型指示符指定软件开发工具包括代码变换类型的软件开发工具时,用于目标源代码的代码洞察包括用于训练源代码的预测代码变换。该方法还包括由数据处理硬件将代码洞察传输到开发者设备,代码洞察在由开发者设备接收时使得在开发者设备上执行的图形用户界面在开发者设备的显示屏上显示代码洞察。
5.本公开的实现方式可以包括以下可选特征中的一个或多个。在一些实现方式中,
该方法还包括由数据处理硬件从目标源代码提取目标特征的集合,该目标特征的集合对应于适合于机器学习模型的输入的目标源代码的语法表示。在这些实现方式中,该机器学习模型被配置成接收目标特征的集合作为输入并且生成用于目标源代码的代码洞察作为输出。目标源代码的语法表示可以包括抽象语法树。在一些示例中,获得机器学习模型包括通过使用机器学习模型生成器在所选择的训练源代码上训练机器学习模型,从而响应于接收到代码洞察请求而生成机器学习模型。可以从存储在与数据处理硬件通信的存储器硬件上的源代码储存库中选择训练源代码,该训练源代码与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联。在一些实现方式中,该方法还包括由数据处理硬件从所选择的训练源代码提取训练特征的集合,该训练特征的集合对应于适合于训练机器学习模型的训练源代码的语法表示。训练源代码的语法表示可以包括抽象语法树(ast)。
6.在一些实现方式中,代码洞察请求还包括与代码洞察相关联并且由开发者定义的成果特性类型,并且基于工具类型指示符来获得机器学习模型还可以基于成果特性类型。在这些实现方式中,使用机器学习模型生成用于目标源代码的代码洞察还可以包括使用机器学习模型生成用于代码洞察的仿真成果特性,该仿真成果特性与代码洞察请求的成果特性类型相关联。该方法还可以包括由数据处理硬件从存储在与数据处理硬件通信的存储器硬件上的源代码储存库中标识以下训练源代码的训练示例,该训练源代码与和代码洞察请求的成果特性类型相关联的对应成果特性配对。该方法还可以包括由数据处理硬件在以下训练示例上训练机器学习模型,该训练示例包括与对应成果特性配对的训练源代码。
7.用于代码洞察的仿真成果特性可以包括以下中的一个:用于目标源代码的仿真构建结果或目标源代码的变换、用于运行目标源代码的仿真经过时间段或目标源代码的变换、用于目标源代码的仿真元数据或目标源代码的变换,或用于目标源代码的模仿人类生成的评论或目标源代码的变换。该方法还可以包括当用于目标源代码的预测代码变换包括可执行代码时由数据处理硬件在以下训练示例上训练机器学习模型,该训练示例包括与从编译或解释训练源代码而得到的对应训练可执行代码配对的训练源代码。在一些实现方式中,使用机器学习模型生成用于目标源代码的代码洞察包括:使用被配置成接收从目标源代码提取的目标特征的集合作为特征输入的机器学习模型来生成用于目标源代码的向量表示;确定存储在与数据处理硬件通信的存储器硬件中的训练源代码片段池的相似性分数,每个相似性分数与对应训练代码片段相关联并且指示用于目标源代码的向量表示与用于对应训练代码片段的相应向量表示之间的相似性水平;以及从所述训练源代码片段池中将具有满足相似性阈值的相似性分数的一个或多个训练源代码标识为对应于所述目标源代码的突变。
8.目标源代码可以包括来自目标代码库的一对目标源代码片段,并且使用机器学习模型生成用于目标源代码的代码洞察可以包括针对该一对目标源代码片段中的每个目标源代码片段,使用被配置成接收从对应目标源代码片段提取的目标特征的集合作为特征输入的机器学习模型来生成用于对应目标源代码片段的向量表示,基于向量表示来确定该一对目标源代码片段之间的向量空间距离,并且当向量空间距离满足距离阈值时确定该一对目标源代码片段是彼此的重复。用于训练源代码的预测标签可以包括以下中的至少一个:目标源代码的预测复杂度水平、目标源代码的预测质量、用于目标源代码的预测测试要求
或目标源代码的预测难度评级。用于目标源代码的预测代码变换可以包括以下中的至少一个:修复目标源代码中的构建错误的经更新的目标源代码、用于目标源代码的可执行代码、对目标源代码的修订,或用于替换目标源代码的建议替换源代码。
9.本公开的另一个方面提供了一种用于生成代码洞察的系统。该系统包括数据处理硬件和与数据处理硬件通信并且存储指令的存储器硬件,当在数据处理硬件上执行这些指令时,这些指令使得数据处理硬件执行操作。这些操作包括从与使用目标源代码构建软件开发工具的开发者相关联的开发者设备接收请求用于目标源代码的代码洞察的代码洞察请求。该代码洞察请求包括目标源代码和工具类型指示符。该工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个。这些操作还包括基于工具类型指示符来获得机器学习模型,该机器学习模型在与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联的训练源代码上被训练。这些操作还包括使用机器学习模型生成用于目标源代码的代码洞察。当工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具时,用于目标源代码的代码洞察包括用于目标源代码的预测标签。当工具类型指示符指定软件开发工具包括代码变换类型的软件开发工具时,用于目标源代码的代码洞察包括用于训练源代码的预测代码变换。这些操作还包括将代码洞察传输到开发者设备,该代码洞察在由开发者设备接收时使得在开发者设备上执行的图形用户界面在开发者设备的显示屏上显示代码洞察。
10.本公开的实现方式可以包括以下可选特征中的一个或多个。在一些实现方式中,这些操作还包括从目标源代码提取目标特征的集合,该目标特征的集合对应于适合于机器学习模型的输入的目标源代码的语法表示。在这些实现方式中,该机器学习模型被配置成接收目标特征的集合作为输入并且生成用于目标源代码的代码洞察作为输出。目标源代码的语法表示可以包括抽象语法树。在一些示例中,获得机器学习模型包括通过使用机器学习模型生成器在所选择的训练源代码上训练机器学习模型,从而响应于接收到代码洞察请求而生成机器学习模型。可以从存储在与数据处理硬件通信的存储器硬件上的源代码储存库中选择训练源代码,该训练源代码与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联。在一些实现方式中,这些操作还包括从所选择的训练源代码提取训练特征的集合,该训练特征的集合对应于适合于训练机器学习模型的训练源代码的语法表示。训练源代码的语法表示可以包括抽象语法树(ast)。
11.在一些实现方式中,代码洞察请求还包括与代码洞察相关联并且由开发者定义的成果特性类型,并且基于工具类型指示符来获得机器学习模型还可以基于成果特性类型。在这些实现方式中,使用机器学习模型生成用于目标源代码的代码洞察还可以包括使用机器学习模型生成用于代码洞察的仿真成果特性,该仿真成果特性与代码洞察请求的成果特性类型相关联。这些操作还可以包括从存储在存储器硬件上的源代码储存库中标识以下训练源代码的训练示例,该训练源代码与和代码洞察请求的成果特性类型相关联的对应成果特性配对。这些操作还可以包括在以下训练示例上训练机器学习模型,该训练示例包括与对应成果特性配对的训练源代码。
12.用于代码洞察的仿真成果特性可以包括以下中的一个:用于目标源代码的仿真构建结果或目标源代码的变换、用于运行目标源代码的仿真经过时间段或目标源代码的变换、用于目标源代码的仿真元数据或目标源代码的变换,或用于目标源代码的模仿人类生
成的评论或目标源代码的变换。这些操作还可以包括:当用于目标源代码的预测代码变换包括可执行代码时在以下训练示例上训练机器学习模型,该训练示例包括与从编译或解释训练源代码而得到的对应训练可执行代码配对的训练源代码。在一些实现方式中,使用机器学习模型生成用于目标源代码的代码洞察包括:使用被配置成接收从目标源代码提取的目标特征的集合作为特征输入的机器学习模型来生成用于目标源代码的向量表示;确定存储在存储器硬件中的训练源代码片段池的相似性分数,每个相似性分数与对应训练代码片段相关联并且指示用于目标源代码的向量表示与用于对应训练代码片段的相应向量表示之间的相似性水平;以及从所述训练源代码片段池中将具有满足相似性阈值的相似性分数的一个或多个训练源代码标识为对应于所述目标源代码的突变。
13.目标源代码可以包括来自目标代码库的一对目标源代码片段,并且使用机器学习模型生成用于目标源代码的代码洞察可以包括针对该一对目标源代码片段中的每个目标源代码片段,使用被配置成接收从对应目标源代码片段提取的目标特征的集合作为特征输入的机器学习模型来生成用于对应目标源代码片段的向量表示,基于向量表示来确定该一对目标源代码片段之间的向量空间距离,并且当向量空间距离满足距离阈值时确定该一对目标源代码片段是彼此的重复。用于训练源代码的预测标签可以包括以下中的至少一个:目标源代码的预测复杂度水平、目标源代码的预测质量、用于目标源代码的预测测试要求或目标源代码的预测难度评级。用于目标源代码的预测代码变换可以包括以下中的至少一个:修复目标源代码中的构建错误的经更新的目标源代码、用于目标源代码的可执行代码、对目标源代码的修订,或用于替换目标源代码的建议替换源代码。
14.本公开的一个或多个实现方式的细节在附图和下面的描述中阐述。其它方面、特征和优点将从说明书和附图以及从权利要求书中显而易见。
附图说明
15.图1是用于训练在软件开发工具中使用的机器学习模型的示例环境的示意图。
16.图2是从目标源代码提取的示例目标特征的集合的示意图。
17.图3是训练用于软件开发工具的机器学习模型的示例的示意图。
18.图4a至图4d是执行用于软件开发的机器学习模型的示例的示意图。
19.图5是将机器学习模型应用于目标源代码的方法的操作的示例布置。
20.图6是示例性计算设备的示意图。
21.在各个附图中相同的附图标记表示相同的元件。
具体实施方式
22.本公开的各个方面涉及用于软件开发工具的机器学习模型。软件开发者使用软件开发工具来创建、调试、维护或以其它方式支持软件应用程序、网站或其它软件系统或组件。软件开发工具可以是例如根据命令解释器单独执行的分立程序,或者可以是单个大程序(通常称为集成开发环境(ide))的部分。为了在程序中找到故障,防止在扩展应用程序时创建新故障,并且为了一般地遵循被接受的编程实践,可以使用知晓代码库的软件开发工具。代码库(或代码基)是用于构建特定软件系统或软件组件(例如,软件开发工具)的源代码的集合。代码库通常存储在源代码储存库中。代码库一般包括人类编写的源代码片段。由
于这些源代码片段的高复杂度或仅是其纯粹的长度,即使是最有经验的软件开发者也通常不可能简单地通过扫视代码库来手动地检查源代码片段。由高级编程语言提供的抽象还使得更加难以理解源代码和软件应用程序的行为之间的连接。为了找到在程序中的故障,防止在扩展代码时创建新故障,并且为了一般地遵循被接受的编程实践,软件开发者可以在构建对源代码进行操作的软件开发工具时利用机器学习模型。
23.软件分析器通常通过应用规则以评估源代码来工作。基于编程错误的常见原因,规则可以是语言特定的和/或操作系统特定的。具有太小的精度的规则可能导致太多的假阳性指示,而对软件开发者是无用的。具有过度精度的规则可能仅在有限的情况中适用和/或花费太长时间执行而不实用。基于机器学习模型的软件开发工具可以有效地实现避免假阳性指示和实际执行时间之间的适当平衡。基于机器学习模型的软件开发工具可能超出了检测常见的编程错误。使用示例性代码库训练的机器学习模型可以能够基于示例性代码库和/或从示例性代码库提取的特征来获得洞察。
24.虽然理解源代码的机器学习模型能够显著减少构建软件开发工具的时间并且改善其整体质量,但是产生为构建特定软件开发工具而定制的机器学习模型是费力的过程,并且需要具有机器学习知识的专业工程师。此外,产生机器学习模型和产生源代码上的软件开发工具所需的技能和知识通常不重叠,从而需要专门从事机器学习和软件开发工具的单独工程师。通常,机器学习模型提供用于优化软件开发工具的构建的优点并不超过产生机器学习模型所需的附加成本和资源。结果,通常更容易以常规方式构建软件开发工具而不使用机器学习模型。
25.本文的实现方式针对自动生成机器学习模型以供在生成开发者用来构建软件开发工具的目标源代码的代码洞察时使用。通过生成理解目标源代码的机器学习模型,使得开发者从用于产生机器学习模型的过程的所有方面(诸如数据收集以及在产生机器学习模型时具有专业技能和知识)得到减轻(alleviated)。例如,开发者可以提供请求对目标源代码的代码洞察的代码洞察请求,其中代码洞察请求包括目标源代码和以下工具类型指示符,该工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具(例如,提供难度评级的工具)或代码变换类型的软件开发工具(例如,将代码作为输入并且产生不同代码作为输出的工具)中的一个。代码洞察请求可以可选地包括与代码洞察相关联的输出特性类型,诸如但不限于构建结果、用于运行目标源代码的经过时间段、用于目标源代码的元数据,或用于目标源代码的人类生成的评论。实质上,输出特性类型由开发者定义,并且提供关于哪种类型的数据与正在构建的软件开发工具相关的提示。
26.基于工具类型指示符以及可选地基于输出特性类型,机器学习系统被配置成自动收集并且加入与训练源代码相关的数据,以构建用于学习如何生成代码洞察的机器学习模型。也就是说,一旦在训练源代码上训练了机器学习模型,开发者就可以将目标源代码(例如,源代码片段)作为输入提供给经训练的机器学习模型,并且该经训练的机器学习模型可以生成用于目标源代码的代码洞察。这里,代码洞察包括以下各项中的一个:当工具类型指示符指定软件开发工具包括代码标记类型的软件开发工具时的用于目标源代码的预测标签;或者当工具类型指示符指定软件开发工具对应于软件构建工具的代码变换类型时的用于训练源代码的预测代码变换。开发者可以(例如,经由在图形用户界面上的显示)查看代码洞察并且基于代码洞察根据需要更新目标源代码。
27.参考图1,在一些实现方式中,系统100包括与软件开发者202相关联的开发者设备204,该软件开发者202可以例如经由网络130与远程系统140通信。远程系统140可以是具有可扩展/弹性资源142的分布式系统(例如,云环境)。资源142包括计算资源(例如,数据处理硬件)144和/或存储资源(例如,存储器硬件)146。软件开发者202可以使用开发者设备204来构建对目标源代码210进行操作的软件开发工具(例如,软件工具)418。远程系统140执行代码洞察服务150,以用于自动获得机器学习模型308并且使用机器学习模型308来生成开发者202正用于构建软件工具418的目标源代码210的代码洞察400、400a-b。与要求软件开发者202手动收集所有必要数据并且采取费力过程来构建专门为分析目标源代码而定制的机器学习模型的常规技术相反,代码洞察服务150被配置成自动获得(例如,自动生成)机器学习模型308,而无需除了目标源代码210和工具类型指示符205之外的来自开发者202的输入,其中该工具类型指示符指定工具418包括代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个的。为了获得/生成甚至更稳健的机器学习模型300,开发者202可以附加地提供与代码洞察400相关联的成果特性类型207。
28.开发者设备202可以执行图形用户界面(gui)220以显示在开发者设备202的屏幕上。开发者204可以使用gui 204来构建对目标源代码210进行操作的软件工具418。例如,开发者204可以经由gui 204将目标源代码210输入到开发者设备202。开发者204可以使用gui 220来与代码洞察服务150通信,例如,以将代码洞察请求110发送到代码洞察服务150并且显示由代码洞察服务150生成的代码洞察400。
29.在所示的示例中,代码洞察服务150接收代码洞察请求110,该代码洞察请求110请求对用于构建软件开发工具418的目标源代码210的代码洞察400。目标源代码210可以包括开发者204正寻求例如经由代码洞察400来获得洞察的代码库中的一个或多个源代码片段。代码洞察请求110包括目标源代码210和构建类型指示符205,该构建类型指示符指定软件开发工具418包括代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个。在附加示例中,代码洞察请求110还包括与代码洞察400相关联的输出特性类型207,诸如但不限于构建结果、用于运行目标源代码的经过时间段、用于目标源代码的元数据,或用于目标源代码的人类生成的评论。实质上,输出特征类型207由开发者202定义并且提供关于哪种类型的数据与正在构建的软件开发工具418相关的提示,并且在更细粒度的级别上,提供关于哪种类型的数据与获得/生成机器学习模型308相关的提示,以用于生成代码洞察400。
30.在一些实现方式中,在远程系统140上执行(例如,在数据处理硬件144上执行)的代码洞察服务150包括特征提取器200、机器学习(ml)系统300和洞察生成器410。在所示的示例中,特征提取器200被配置成从包括在从开发者设备204接收到的代码洞察请求110中的目标源代码210中提取目标特征212的集合。这里,目标特征212的集合对应于适合于机器学习模型308的输入的目标源代码210的语法表示。例如,使用目标特征212来在语法上表示目标源代码210可以以机器学习模型308可读的格式来表示目标源代码210,并且通过从目标源代码210中移除不必要的数据来减少机器学习模型308的存储器要求。在一些示例中,目标源代码210的语法表示包括抽象语法树(ast)。
31.图2示出了从目标源代码210提取目标特征212的集合到抽象语法树(ast)表示215中的示例特征提取器200。相同或不同的特征提取器200也可以从目标源代码210提取训练
特征到ast表示215中。特征提取器200还可以用于从目标源代码210提取不同特征以提供目标源代码210的其它类型的语法表示。虽然图1示出了在远程系统140上执行的特征提取器200,但是开发者设备204可以在其它配置中执行特征提取器200。通常,目标源代码210包括以高级结构化计算机语言表达的软件。例如,目标源代码210可以包括以具有定义的语法的高级结构化计算机语言(包括但不限于java、javascript、python、ruby、c/c 、c#、objective-c、sql、php和/或r)表达的软件。将目标源代码210直接插入到机器学习模型308中将产生如此低质量的结果,使得这些结果将是不可用的。另外,它将需要比可用资源多得多的资源。然而,特征提取器200可以通过对节点对及其共同祖先进行散列来将目标特征212的集合提取到ast表示215中,从而获得相同或更好的结果,并且同时,显著减少了存储器需求。ast表示215可以表示目标源代码210的结构或内容相关特征212。例如,ast表示215可以省略定义目标源代码210的结构的标点和分隔符,诸如大括号、分号、圆括号等。图2示出了目标源代码210的片段。该片段包括while循环、if/then/else语句和两个赋值语句。还示出了基于ast表示215的目标特征212的一部分。ast表示215省略了代码片段的大括号和分号,同时保留了以分层树形格式布置的目标源代码210的语法特征212。在该示例中,树结构中的每个框表示从目标源代码210提取的特征212、212a-n。
32.在一些示例中,ast表示215对应于特定计算机语言。在其它示例中,ast表示215广泛地应用于若干编程语言,由此使得能够在训练源代码310的编程语言不可知的ast表示上训练机器学习模型308,使得机器学习模型308可以学习识别与以多种编程语言(例如java或python)表达的目标源代码210中的已建立的命名标准的一致性。
33.返回参考图1,在一些实现方式中,ml系统300被配置成基于包括在从开发者设备204接收到的代码洞察请求110中的工具类型指示符205来获得机器学习模型308。在代码洞察请求110还包括与代码洞察400相关联的输出特性类型207的示例中,ml系统300被配置成基于工具类型指示符205和输出特性类型207两者来获得机器学习模型308。以下参考图3更详细地描述,ml系统300使用工具类型指示符205和输出特性类型207来收集用于生成机器学习模型308的相关数据。更具体地,ml系统300使用工具类型指示符205来选择与由工具类型指示符205指定的代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个相关联的训练源代码310。ml系统300还可以使用输出特性类型207来标识与成果特性类型207相关联的对应成果特性320配对的训练源代码310的训练示例。在所示的示例中,ml系统300在训练源代码310或包括与对应成果特性320配对的训练源代码310的训练示例上训练机器学习模型308。
34.在ml系统300响应于从开发者设备204接收代码洞察请求110而获得机器学习模型308之后,洞察生成器410被配置成使用机器学习模型308来生成用于目标源代码210的代码洞察400。在一些示例中,洞察生成器410接收从目标源代码210提取的目标特征212的集合作为模型308的输入,并且生成用于目标源代码210的代码洞察400作为输出。然而,在其它示例中,代码洞察服务器150可以省略特征提取器200,并且替代地从目标源代码210生成代码洞察400作为输入。
35.当工具类型指示符205指定软件开发工具418包括代码标记类型的软件开发工具时,代码洞察400包括用于目标源代码210的预测标签400a。例如,预测标签400a可以包括以下中的至少一个:目标源代码210的预测复杂度水平(例如,复杂相对于简单)、目标源代码
的预测质量(例如,好代码相对于坏代码);用于目标源代码的预测测试要求(例如,如果测试则更好);或目标源代码的预测难度评级。预测标签400a可以包括开发者202想要机器学习模型308为目标源代码210预测的任何类型的标签。此外,当开发者202在提供代码洞察请求110时指定开发者202想要机器学习模型308预测的特定标签时,代码洞察请求110中所包括的工具类型指示符205可以指定代码标记类型。也就是说,代码洞察请求110可以指示开发者202想要代码洞察服务150(例如,经由机器学习模型308)以预测目标源代码210的复杂度、目标源代码210的质量、目标源代码210的测试要求,或目标源代码210的难度评级。
36.另一方面,当工具类型指示符205指定软件开发工具418包括代码变换类型的软件开发工具时,代码洞察400包括用于目标源代码210的预测代码变换400b。在一些示例中,机器学习模型308被配置成作为构建错误修复器来操作,其中模型308标识目标源代码210中(例如,目标特征212中)的一个或多个构建错误并且生成修复所标识的一个或多个构建错误的预测代码变换400b。这里,预测代码变换400b可以包括修复构建错误的更新的目标源代码210,或可以包括用于修正导致构建错误的代码部分的代码修订。在附加示例中,预测代码变换400b包括仿真编译/解释目标源代码210的可执行代码输出。在一些实现方式中,预测代码变换400b包括用于替换目标源代码210的建议替换代码。
37.在代码洞察请求110包括由开发者202指定的成果特性类型207的场景中,洞察生成器410被进一步配置成使用机器学习模型308生成代码洞察400的仿真成果特性320。在这些场景中,仿真成果属性320与包括在代码洞察请求110中的成果特性类型207相关联。例如,仿真成果属性320可以包括仿真构建结果,该仿真构建结果指示目标源代码210的构建将会成功还是将会失败。仿真成果属性320可以附加地或可替换地包括用于运行目标源代码和/或目标源代码的仿真元数据的仿真经过时间段。在一些示例中,当成果特性类型207指定用户评论时,仿真成果属性320包括目标源代码210的模仿人工生成的评论,其仿真将从目标源代码210的代码审查产生的用户评论。
38.图3示出了在远程系统140上执行的代码洞察服务150的机器学习(ml)系统300的示例。ml系统300可以包括数据收集器340、机器学习模型生成器360、以及存储在远程系统140的存储器硬件146上的源代码储存库315。在所示的示例中,源代码储存库315可以包括训练源代码310、310a-n的代码库,模型生成器360可以使用该代码库来生成(即训练)经训练的ml模型308,以用于学习预测目标源代码210的标签400a或代码变换400b。在一些示例中,源代码储存库315还包含开发者设备204可以访问以用于构建软件开发工具418并且被包括在对代码洞察服务150的代码洞察请求110中的目标源代码210的片段。基于由代码洞察服务150接收到的代码洞察请求110中提供的构建类型指示符205(以及可选地输出特性类型207),数据收集器340可以查询源代码储存库315以选择与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联的训练源代码310。此后,模型生成器360使用由数据收集器340选择的训练源代码310作为用于训练机器学习模型308的训练示例350。因此,ml系统300可以通过从源代码储存库315选择训练源代码310并且使用机器学习模型生成器360在所选择的训练源代码310上训练机器学习模型308来响应于接收到代码洞察请求110而生成机器学习模型308。
39.数据收集器340可以收集构建/产生机器学习模型308所必需的其它相关数据,其中该机器学习模型被特别定制以生成用于对目标源代码210操作的软件开发工具418的开
发者定义的代码洞察400。模型生成器360对应于基于神经网络(诸如深度学习神经网络)的机器学习系统。模型生成器360可以实现广义反向传播以生成用于训练机器学习模型308的神经网络。
40.在一些实现方式中,ml系统300从所选择的训练源代码310提取训练特征的集合以提供适合于(例如,可读并且减少存储器要求)训练机器学习模型308的训练源代码310的语法表示。例如,ml系统300可以采用如上参考图1和图2所讨论的特征提取器200。在一些示例中,训练源代码310的语法表示包括ast表示215(图2)。
41.当代码洞察请求110还包括与代码洞察400相关联的成果特性类型207时,数据收集器340可以从源代码储存库315中标识/选择与和代码洞察请求110的成果特性类型207相关联的对应成果特性320配对的训练源代码310的训练示例350。这里,模型生成器360可以在与对应成果特性320配对的训练源代码310的训练示例上训练机器学习模型308。通过提供开发者定义的成果特性类型207,可以细化用于训练机器学习模型308的训练源代码310的池,和/或模型生成器360可以调整神经网络的权重以向与匹配开发者定义的成果特性类型207的特定成果特性320配对的训练源代码310给予更多偏好。在一些示例中,基于开发者202想要知道的代码洞察400来确定成果特性类型207。例如,开发者202可以(例如,在代码洞察请求110中)请求代码洞察服务150以确定一些目标源代码210是否将成功构建。在这种场景中,成果特性类型207可以指示与“构建结果”配对的训练源代码310与在训练机器学习模型308中使用高度相关。
42.存储在源代码储存库315中的训练源代码310的每个片段可以用与训练源代码310相关联的一个或多个成果特性320来标记。这些成果特性320可以包括但不限于代码310的对应构建结果、运行代码310的经过时间段、用于代码310的元数据,或基于代码310的审查周期的人类生成的评论(例如,用户评论)。在一些示例中,用于训练源代码310的成果特性320包括由编译/解释训练源代码310所产生的对应可执行代码。
43.在当开发者202(例如,在代码洞察请求110中)请求代码洞察服务150生成包括用于仿真编译/解释目标源代码210的可执行代码输出的预测代码变换400b时的示例中,模型生成器360可以在包括以下训练源代码310的训练示例350上训练机器学习模型308,其中该训练源代码310与由编译或解释训练源代码所产生的对应训练可执行代码配对。这里,训练可执行代码可以对应于与训练源代码310相关联的成果特性320。因此,数据收集器340可以查询源代码储存库315以选择/标识与对应训练可执行代码配对的训练源代码310作为模型生成器360用于训练机器学习模型308的训练示例350。
44.当代码洞察请求110中的构建类型指示符205指定标签类型的软件开发工具时,模型生成器360可以在肯定和否定训练示例350两者上训练机器学习模型308。例如,假设开发者202请求代码洞察服务150生成预测标签400b以指示目标源代码210在测试的情况下是否更好,则模型生成器360可以在包括被标记为“在测试的情况下更好”的训练源代码310的肯定训练示例350和包括被标记为“测试不需要的”的训练源代码310的否定训练示例350上训练模型308。在该场景中,肯定训练示例和否定训练示例350训练模型308以学习输入到模型308的源代码是否“在测试的情况下更好”。类似地,请求指示代码是简单/复杂(或好/坏)的预测标签400a将会需要模型生成器360在包括被标记为简单(或好)的训练源代码310的肯定训练示例和包括被标记为复杂(或坏)的训练源代码310的否定训练示例上训练模型308,
使得模型308可以学习输入到模型308的源代码是简单还是复杂(或好或坏)。
45.在一些示例中,模型生成器360训练模型308以针对训练源代码片段池中的每个训练源代码片段生成对应向量表示。ml系统300可以将所有向量表示的向量空间图存储在存储器硬件146中,洞察生成器410可访问该向量空间图以标识目标源代码210的“邻域”中的训练源代码片段。例如,并且参考图1,洞察生成器410可以使用被配置成接收目标特征212的集合作为特征输入的机器学习模型308来生成目标源代码210的向量表示,确定存储在存储器硬件146中的训练源代码片段池的相似性分数,并且将具有满足相似性阈值的相似性分数的训练源代码片段中的一个或多个标识为目标源代码210的“邻域”。这些“邻域”可以由洞察生成器410标识为用于替换目标源代码210的建议替换代码(例如,预测代码变换400b),或在其它示例中标识为目标源代码210的可能突变(例如,预测标签400a)。在该示例中,每个相似性分数与对应训练源代码片段相关联,并且指示目标源代码210的向量表示与对应训练源代码片段的相应向量表示之间的相似性水平。类似地,洞察生成器410可以使用向量空间图中的目标源代码210的向量表示来预测目标源代码210应该被定位在代码库中的位置。
46.继续参考图1和3,训练模型308以生成向量表示可以由洞察生成器410使用从而也生成其它类型的代码洞察400。例如,开发者202可以发送具有目标源代码210的代码洞察请求110,该目标源代码包括来自目标代码库(例如,存储在开发者设备204上或存储在存储器硬件146上)的一对目标源代码片段。这里,洞察生成器410可以通过使用以下机器学习模型针对该一对目标源代码片段中的每个目标源代码片段生成对应目标源代码片段的向量表示来生成目标源代码210的代码洞察400,其中该机器学习模型被配置成接收从对应目标源代码片段提取的目标特征212的集合作为特征输入。随后,洞察生成器410可以基于向量表示来确定该一对目标源代码片段之间的向量空间距离,并且在向量空间距离满足距离阈值时确定该一对目标源代码片段是彼此的重复。在该示例中,在开发者设备204接收并且显示代码洞察400以供开发者202查看时,开发者202可以选择从目标代码库中删除目标代码片段中的一个以节省存储要求。
47.图4a和图4b示出了用于允许开发者生成代码洞察请求112并且将代码洞察请求112提交给代码洞察服务150以请求目标源代码210的代码洞察400的示例gui 220、220a-b。开发者202使用gui 220来输入目标源代码210。例如,开发者202可以手动输入目标源代码210或可以从代码库(例如源代码储存库315(图3))或某一其它存储位置获得目标源代码210。gui 220a、220b中的每一个提示开发者204通过选择工具类型指示符205来指定开发者正在构建什么类型的工具。例如,图4a示出了接收指示选择代码标记类型的软件开发工具的输入指示的gui 220a。这里,开发者202可以(例如,经由鼠标光标)提供请求用于目标源代码210的“测试要求”标签的输入,该输入使得gui 200a(例如,经由填充“代码标记”的圆圈)选择指定代码标记类型的软件开发工具的工具类型指示符205。另一方面,图4b示出了接收指示选择代码变换类型的软件开发工具的输入指示的gui 200b,其中开发者202(例如,经由鼠标光标)提供请求将目标源代码210“编译器/解释器”变换成可执行代码的输入。
48.代码洞察请求gui 220a、220b还可以提示开发者202选择与代码洞察400相关联的成果特性类型207以包括在代码洞察请求110中。虽然图4a和图4b的示例提供了要为输出特征类型207选择的四个选项,例如“构建结果”、“运行时间”、“元数据”和“用户评论”,但是
gui 220a、220b可以提供更多的选项,并且还可以允许开发者202说出或键入成果特性类型207的文本。图4a示出了接收指示选择“用户评论”输出特性类型207的输入指示的gui 220a,而图4b示出了接收指示选择“构建结果”输出特性类型207的输入指示的gui 220b。gui 220a、220b包括“提交”按钮,当该按钮被选择时使得开发者设备202将代码洞察请求110发送到代码洞察服务150,由此代码洞察请求110包括目标源代码210、由开发者202选择的工具类型指示符205,以及由开发者202选择的输出特性类型207。
49.图4c和图4d示出了显示代码洞察400的示例gui 220、220c-d,其中这些代码洞察400是由代码洞察服务150响应于使用图4a和图4b的gui 220a-b生成的代码洞察请求110而生成的。图4c示出了显示以下代码洞察400的gui 220c,其中该代码洞察400包括用于目标源代码210的预测标签400a,其中该目标源代码210被包括在由开发者204使用图4a的gui 220a发送的代码洞察请求110中。这里,由于代码洞察请求110的工具类型指示符205指定软件开发工具418对应于代码标记类型的软件开发工具,因此为目标源代码210生成预测标签400a。在所示的示例中,预测标签400a指示目标源代码210“在测试时更好”。具体地,预测标签400a可以提供以下消息,该消息通知开发者:“通过机器学习模型的洞察分析,预测出所提供的目标源代码在测试时更好”。图4c还示出了显示代码洞察400a的仿真成果特性320的gui 220c,由此仿真成果特性320与开发者202经由图4a的gui 220a所选择的包括在代码洞察请求110中的“用户评论”的成果特性类型207相关联。在所示的示例中,仿真成果特性320包括用于目标源代码210的模仿人类生成的评论。因此,开发者202可以在审查周期期间确定对于目标源代码210的人类生成的评论可能是什么样。
50.图4d示出了显示以下代码洞察400的gui 220d,其中该代码洞察400包括用于目标源代码210的预测代码变换400b,其中该目标源代码210被包括在开发者204使用图4b的gui 220b发送的代码洞察请求110中。这里,由于代码洞察请求110的工具类型指示符205指定软件开发工具418对应于代码变换类型的软件开发工具,因此为目标源代码210生成预测代码变换400b。在所示的示例中,预测代码变换400b包括从目标源代码210解释/编译的可执行代码。图4d还示出了显示代码洞察400b的仿真成果特性320的gui 220d,由此仿真成果特性320与包括在代码洞察请求110中的由开发者202经由图4b的gui 220b选择的“构建结果”的成果特性类型207相关联。在所示的示例中,仿真成果特性320提供目标源代码210的“成功(success)”的仿真构建结果确定。因此,开发者202可以确定构建目标源代码210是否将会可能成功。
51.图5是用于生成代码洞察400的方法的操作的示例布置的流程图。在操作502处,方法500包括在数据处理硬件144处从与使用目标源代码210构建软件开发工具418的开发者202相关联的开发者设备204接收代码洞察请求112,该代码洞察请求请求用于目标源代码210的代码洞察400。代码洞察请求112包括目标源代码210和工具类型指示符205,该工具类型指示符205指定软件开发工具418包括代码标记类型的软件开发工具或代码变换类型的软件开发工具中的一个。在一些示例中,代码洞察请求112还包括与代码洞察400相关联的成果特性类型207。在这些示例中,成果特性类型207由开发者202定义。
52.在操作504处,方法500包括由数据处理硬件144基于工具类型指示符205来获得机器学习模型308。机器学习模型308在与代码标记类型的软件开发工具或代码变换类型的软件开发工具中的指定一个相关联的训练源代码310上被训练。
53.在操作506处,方法500包括由数据处理硬件144使用机器学习模型308生成用于目标源代码210的代码洞察400。用于目标源代码210的代码洞察400包括当工具类型指示符205指定软件开发工具418包括代码标记类型的软件开发工具时的用于目标源代码210的预测标签400a或者当工具类型指示符205指定软件开发工具418对应于代码变换类型的软件构建工具时的用于训练源代码310的预测代码变换400b中的一个。用于训练源代码310的预测标签400a可以包括目标源代码的预测复杂度水平、目标源代码的预测质量、用于目标源代码的预测测试要求,或目标源代码的预测难度评级中的至少一个。用于目标源代码的预测代码变换可以包括以下中的至少一个:修复目标源代码中的构建错误的经更新的目标源代码、用于目标源代码的可执行代码、对目标源代码的修订,或用于替换目标源代码的建议替换源代码。
54.在操作508处,方法500包括由数据处理硬件144将代码洞察400传输到开发者设备204。代码洞察400在被开发者设备204接收到时使得在开发者设备204上执行的图形用户界面220在开发者设备204的显示屏上显示代码洞察400。
55.图6是可以用于实现本文档中描述的系统和方法(例如,方法500)的示例计算设备600的示意图。计算设备600旨在表示各种形式的数字计算机,例如膝上型计算机、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机和其它适当的计算机。这里示出的组件、它们的连接和关系以及它们的功能仅是示例性的,而不是用于限制本文档中描述和/或要求保护的发明的实现方式。
56.计算设备600包括处理器610(也称为数据处理硬件)、存储器620(也称为存储器硬件)、存储设备630、连接到存储器620和高速扩展端口650的高速接口/控制器640、以及连接到低速总线670和存储设备630的低速接口/控制器660。组件610、620、630、640、650和660中的每一个使用各种总线互连,并且可以适当地以其它方式安装在公共主板上。处理器610可以处理用于在计算设备600内执行的指令,包括存储在存储器620中或存储设备630上的指令,以在外部输入/输出设备(例如耦合到高速接口640的显示器680)上显示图形用户界面(gui)的图形信息。在其它实现方式中,可以适当地使用多个处理器和/或多个总线以及多个存储器和各种类型的存储器。此外,可以连接多个计算设备600,其中每个设备提供必要操作的部分(例如,作为服务器组、刀片服务器组或多处理器系统)。
57.存储器620在计算设备600内非暂时性地存储信息。存储器620可以是计算机可读介质、易失性存储单元或非易失性存储单元。非暂时性存储器620可以是用于暂时或永久地存储程序(例如,指令序列)或数据(例如,程序状态信息)以供计算设备600使用的物理设备。非易失性存储器的示例包括但不限于闪存和只读存储器(rom)/可编程只读存储器(prom)/可擦除可编程只读存储器(eprom)/电子可擦除可编程只读存储器(eeprom)(例如,通常用于固件,例如引导程序)。易失性存储器的示例包括但不限于随机存取存储器(ram)、动态随机存取存储器(dram)、静态随机存取存储器(sram)、相变存储器(pcm)以及磁盘或磁带。
58.存储设备630能够为计算设备600提供大容量存储。在一些实现方式中,存储设备630是计算机可读介质。在各种不同的实现方式中,存储设备630可以是软盘设备、硬盘设备、光盘设备或磁带设备、闪存或其它类似的固态存储设备,或包括存储区域网络或其它配置中的设备的设备阵列。在附加实现方式中,计算机程序产品有形地体现在信息载体中。计
算机程序产品包含在执行时执行一种或多种方法(诸如上述那些方法)的指令。信息载体是计算机或机器可读介质,诸如存储器620、存储设备630或处理器610上的存储器。
59.高速控制器640管理计算设备600的带宽密集型操作,而低速控制器660管理较低带宽密集型操作。这种职责分配仅是示例性的。在一些实现方式中,高速控制器640耦合到存储器620、显示器680(例如,通过图形处理器或加速器)和高速扩展端口650,高速扩展端口650可以接受各种扩展卡(未示出)。在一些实现方式中,低速控制器660耦合到存储设备630和低速扩展端口690。可以包括各种通信端口(例如,usb、蓝牙、以太网、无线以太网)的低速扩展端口690可以例如通过网络适配器耦合到一个或多个输入/输出设备,诸如键盘、指点设备、扫描仪或网络设备(例如交换机或路由器)。
60.计算设备600可以以多种不同的形式来实现,如图所示,例如,它可以被实现为标准服务器600a或在一组这样的服务器600a中作为膝上型计算机600b被多次实现或被实现为机架服务器系统600c的一部分。
61.可以在数字电子和/或光学电路、集成电路、专门设计的asic(专用集成电路)、计算机硬件、固件、软件和/或它们的组合中实现本文描述的系统和技术的各种实现方式。这些各种实现方式可以包括在一个或多个计算机程序中的实现方式,这些计算机程序在可编程系统上可执行和/或可解释,该可编程系统包括至少一个可编程处理器,其可以是专用或通用的,被耦合以从存储系统、至少一个输入设备和至少一个输出设备接收数据和指令,并且将数据和指令传输到存储系统、至少一个输入设备和至少一个输出设备。
62.这些计算机程序(也称为程序、软件、软件应用程序或代码)包括用于可编程处理器的机器指令,并且可以以高级过程和/或面向对象编程语言和/或以汇编/机器语言实现。如本文所使用的,术语“机器可读介质”和“计算机可读介质”是指用于向可编程处理器提供机器指令和/或数据的任何计算机程序产品、非暂时性计算机可读介质、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(pld)),包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”是指用于向可编程处理器提供机器指令和/或数据的任何信号。
63.本说明书中描述的过程和逻辑流程可以由一个或多个可编程处理器来执行,这些处理器执行一个或多个计算机程序以通过操作输入数据和生成输出来执行功能。过程和逻辑流程也可以由专用逻辑电路(例如fpga(现场可编程门阵列)或asic(专用集成电路))来执行。适合于执行计算机程序的处理器例如包括通用和专用微处理器以及任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘,或光盘),或者被可操作地耦合以从这些存储设备接收数据或者将数据传输到这些存储设备,或者二者。然而,计算机不需要具有这样的设备。适用于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括作为示例的半导体存储器设备,例如eprom、eeprom和闪存设备;磁盘,例如,内部硬盘或可移动磁盘;磁光盘;以及cdrom和dvd-rom磁盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。
64.为了提供与用户的交互,可以在具有用于向用户显示信息的显示设备(例如,crt
(阴极射线管)、lcd(液晶显示器)监视器或触摸屏)以及可选的键盘和指点设备(例如,鼠标或轨迹球)的计算机上实现本公开的一个或多个方面,通过可选的键盘和指点设备,用户可以向计算机提供输入。也可以使用其它种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以任何形式接收来自用户的输入,包括声学、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档(例如,响应于从用户的客户端设备上的web浏览器接收到的请求而将web页面发送到web浏览器)来与用户交互。
65.描述了许多实现方式。然而,应当理解,可以在不脱离本公开的精神和范围的情况下进行各种修改。因此,其它实现方式在所附权利要求的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献