CN117632224A - 一种代码管理方法及相关设备 - Google Patents
一种代码管理方法及相关设备 Download PDFInfo
- Publication number
- CN117632224A CN117632224A CN202211665526.2A CN202211665526A CN117632224A CN 117632224 A CN117632224 A CN 117632224A CN 202211665526 A CN202211665526 A CN 202211665526A CN 117632224 A CN117632224 A CN 117632224A
- Authority
- CN
- China
- Prior art keywords
- party library
- annotation
- party
- user
- code
- 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
- 238000007726 management method Methods 0.000 title abstract description 122
- 238000013507 mapping Methods 0.000 claims abstract description 33
- 238000000034 method Methods 0.000 claims description 55
- 230000015654 memory Effects 0.000 claims description 31
- 238000007418 data mining Methods 0.000 claims description 23
- 230000003993 interaction Effects 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 description 20
- 238000010586 diagram Methods 0.000 description 16
- 238000004458 analytical method Methods 0.000 description 12
- 238000011161 development Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 7
- 230000010354 integration Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 5
- 239000012634 fragment Substances 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 238000012549 training Methods 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000009432 framing Methods 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 241000508269 Psidium Species 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000011148 porous material Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9035—Filtering based on additional data, e.g. user or group profiles
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/907—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Library & Information Science (AREA)
- Computational Linguistics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种代码管理方法,由代码管理系统执行,包括:接收用户输入的待生成的目标代码的注释,根据注释以及存储有第三方库和标签的映射关系的标签仓库,确定与注释对应的至少一个第三方库,向用户推荐与注释对应的至少一个第三方库。由于第三方库和标签的映射关系是从海量的源码中提取得到,保障了推荐的第三方库可信、安全,与本地依赖没有冲突,并且在功能上满足用户实际的业务诉求,避免不同第三方库具有相同类名称导致引入错误的场景,降低了安全风险。
Description
本申请要求于2022年08月10日提交中国国家知识产权局、申请号为202210953688.X、发明名称为“确定第三方库的方法、装置、服务器及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及软件开发技术领域,尤其涉及一种代码管理方法、系统、计算设备集群、计算机可读存储介质、计算机程序产品。
背景技术
随着计算机和互联网的不断发展,许多传统行业也开始进行数字化转型。为了实现数字化转型,通常需要进行软件开发,从而将需求转化为满足需求的软件。其中,软件开发的速度和质量对需求转化率起到至关重要的作用。
在开发软件时,开发人员可以利用代码生成(Code Generation)技术辅助开发,从而提高开发效率,降低开发成本。主流的代码生成技术包括基于模型实现的代码生成。基于模型实现的代码生成的核心是模型驱动架构(model driven architecture,MDA),在该架构下,软件系统的功能性是用合适的规约语言以平台无关的模型的方式定义的,然后为实际的实现翻译到一个或多个平台特定模型(platform-specific model)。上述平台特定模型可以经过一系列转换可以得到相应的代码文件。如此,打破了设计语言的限制,提高了多平台软件开发的效率。
然而,上述方法生成的代码文件可能存在非常隐蔽的错误,进而引入安全风险,对软件的安全性产生巨大的影响。
发明内容
本申请提供了一种代码管理方法,该方法引入标签仓库,根据用户输入的待生成的目标代码的注释以及标签仓库,推荐与注释对应的至少一个第三方库。由于第三方库和标签的映射关系是从海量的源码中提取得到,保障了推荐的第三方库可信、安全,与本地依赖没有冲突,并且在功能上满足用户实际的业务诉求,避免不同第三方库具有相同类名称导致引入错误的场景,降低了安全风险。本申请还提供了对应的系统、计算设备集群、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供一种代码管理方法。该方法可以由代码管理系统执行。代码管理系统可以是软件系统。例如,代码管理系统可以是集成开发环境(IntegratedDevelopment Environment,IDE)等软件开发平台,该软件开发平台集成有第三方库推荐能力,或者代码管理系统可以是集成于软件开发平台的插件、扩展。代码管理系统部署在计算设备集群中,计算设备集群执行软件系统的代码,从而执行本申请的代码管理方法。在一些可能的实现方式中,代码管理系统也可以是硬件系统,例如是具有代码管理能力的计算设备集群,包括但不限于提供代码管理能力如第三方库推荐能力的云服务器,该云服务器提供软件即服务(software as a service,SaaS)。硬件系统运行时,执行本申请的代码管理方法。
具体地,代码管理系统接收用户输入的注释,该注释为待生成的目标代码的自然语言描述,然后根据注释以及存储有第三方库和标签的映射关系的标签仓库,确定与注释对应的至少一个第三方库,接着向用户推荐与注释对应的至少一个第三方库。
该方法针对当下流行的基于模型的代码生成技术进行进一步优化,在用户使用自然语言描述完想要实现的功能(即需求)时,可以基于标签仓库中第三方库和标签的映射关系,优先推荐用户一些可能需要的第三方库。由于第三方库和标签的映射关系是从海量的源码中提取得到,保障了推荐的第三方库可信、安全,与本地依赖没有冲突,并且在功能上满足用户实际的业务诉求,避免不同第三方库具有相同类名称导致引入错误的场景,降低了安全风险。
在一些可能的实现方式中,代码管理系统在确定第三方库时,可以根据注释搜索所述标签仓库,获得与所述注释对应的至少一个第三方库。
该方法支持通过搜索标签仓库方式,推荐合适的第三方库,在保障推荐结果的准确度的情况下,提高了推荐第三方库的效率。
在一些可能的实现方式中,代码管理系统可以对所述注释进行分解,获得所述注释在多个层级的标签,然后根据所述注释在多个层级的标签,分别搜索所述标签仓库,获得所述注释在多个层级的推荐三方库,接着根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。
该方法通过将注释分解为多个层级的标签,然后根据多个层级的标签分别搜索标签仓库,如此可以实现细粒度的第三方库推荐,提高推荐结果的准确度。
在一些可能的实现方式中,多个层级的标签可以包括Name级别标签、Manual级别标签和Auto级别标签中的任意组合。Name级别标签是最直观反映第三方库的信息的标签,通常以三方库的名称作为标签。Manual级别标签是权重中等的标签,它是通过官方网站的介绍,进行标签化拆解形成的标签,这些标签将从第三方库的功能角度进行描述,也是对第三方库相对准确的表达。Auto级别的标签是权重最低的标签,但同时也是量级最大的标签,Auto标签可以是从海量数据中挖掘而来的标签,这些标签是开发者在不同的场景下对当前场景为何使用该三方库的描述。Auto标签在单独出现时可能会有些片面,但在数据量足够大时,可以理解成在大量场景中使用该三方库使用的原因,是第三方库一种侧面的描述。
该方法通过将注释分解为Name级别标签、Manual级别标签或Auto级别标签,可以实现从不同维度挖掘注释获得用户真实意图,进而推荐出较为全面的第三方库,为用户选择合适的第三方库进行代码生成提供帮助。
在一些可能的实现方式中,代码管理系统可以确定所述用户从所述至少一个第三方库中选择的第三方库,然后根据所述用户选择的第三方库,更新所述多个层级的权重。
如此,可以实现持续更新权重,避免长期采用相同权重导致当前权重与业务不适配,进而提高了第三方库推荐的精度。
在一些可能的实现方式中,代码管理系统也可以将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
分类器采用深度学习的神经网络模型,将第三方库和其标签进行训练,得到一套完整的分类模型。当用户输入注释时,分类器可以将注释的标签进行分类,得到最有可能的第三方库。相较于搜索方式,分类器能够挖掘第三方库和标签的内在联系,在进行第三方库推荐时,具有较高的准确度。
在一些可能的实现方式中,代码管理系统可以根据注释搜索所述标签仓库,获得与所述注释对应的第一组第三方库,以及将注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的第二组第三方库,然后根据上述第一组第三方库、第二组第三方库确定与注释对应的至少一个第三方库,以推荐给用户。
例如,第一组第三方库和第二组第三方库分别设置有权重,通过该权重进行加权运算,得到各第三方库的综合评分,基于该综合评分可以确定与注释对应的至少一个第三方库。
该方法通过结合搜索方式以及分类器方式共同确定与注释对应的至少一个第三方库,以推荐给用户,保障了推荐的第三方库的准确度。
在一些可能的实现方式中,代码管理系统还可以向所述用户推荐基于所述至少一个第三方库生成的所述目标代码。如此实现了在代码自动生成阶段,通过第三方库选择好的框定行为来优化生成的内容,可以增加生成代码的安全性。
在一些可能的实现方式中,代码管理系统可以响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。
如此,不仅通过推荐的第三方库进行代码生成保障代码安全性,还满足了用户的个性化需求。
在一些可能的实现方式中,代码管理系统可以根据与所述注释对应的至少一个第三方库中的每个第三方库,分别生成每个第三方库对应的所述目标代码,然后向所述用户推荐每个第三方库对应的所述目标代码。
用户可以通过一次操作选择三方库以及对应的目标代码,简化了用户操作,提升了用户体验。
在一些可能的实现方式中,当所述用户触发三方库推荐时,代码管理系统可以根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。例如,代码编辑界面可以包括三方库推荐控件,用户可以点击该控件触发三方库推荐。又例如,代码管理系统可以对用户最近一次输入代码的时间进行计时,当该时间达到设定时长,则可以触发三方库推荐。
该方法支持用户通过不同方式触发三方库推荐功能,并基于该功能,选择合适的三方库生成的目标代码,避免引入安全风险。
在一些可能的实现方式中,代码管理系统还可以获取源码数据集,所述源码数据集包括多个源码文件,然后根据所述多个源码文件的调用点,确定调用第三方库的源码文件,接着根据所述调用第三方库的源码文件,获得所述源码文件的调用模式,然后根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库。其中,所述第三方库对应的标签从所述调用模式中抽取得到。
该方法通过对源码数据集中的真实源码文件进行挖掘分析,获得大量的标签和第三方库之间的映射关系,由此构建标签仓库,可以为第三方库推荐奠定基础。
第二方面,本申请提供一种代码管理系统。所述系统包括:
交互子系统,用于接收用户输入的注释,所述注释为待生成的目标代码的自然语言描述;
推荐子系统,用于根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,所述标签仓库存储有第三方库和标签的映射关系;
所述推荐子系统,还用于向所述用户推荐与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统具体用于:
根据所述注释搜索所述标签仓库,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统具体用于:
对所述注释进行分解,获得所述注释在多个层级的标签;
根据所述注释在多个层级的标签,分别搜索所述标签仓库,获得所述注释在多个层级的推荐三方库;
根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统还用于:
确定所述用户从所述至少一个第三方库中选择的第三方库;
根据所述用户选择的第三方库,更新所述多个层级的权重。
在一些可能的实现方式中,所述推荐子系统具体用于:
将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统还用于:
向所述用户推荐基于所述至少一个第三方库生成的所述目标代码。
在一些可能的实现方式中,所述推荐子系统具体用于:
响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。
在一些可能的实现方式中,所述系统还包括生成子系统;
所述生成子系统,用于根据与所述注释对应的至少一个第三方库中的每个第三方库,分别生成每个第三方库对应的所述目标代码;
所述推荐子系统具体用于:
向所述用户推荐每个第三方库对应的所述目标代码。
在一些可能的实现方式中,所述推荐子系统具体用于:
当所述用户触发三方库推荐时,根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述系统还包括:
数据挖掘子系统,用于获取源码数据集,所述源码数据集包括多个源码文件,根据所述多个源码文件的调用点,确定调用第三方库的源码文件,根据所述调用第三方库的源码文件,获得所述源码文件的调用模式,根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库,所述第三方库对应的标签从所述调用模式中抽取得到。
第三方面,本申请提供一种计算设备集群。所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器。所述至少一个处理器、所述至少一个存储器进行相互的通信。所述至少一个处理器用于执行所述至少一个存储器中存储的指令,以使得计算设备或计算设备集群执行如第一方面或第一方面的任一种实现方式所述的代码管理方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算设备或计算设备集群上运行时,使得计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种代码管理系统的架构示意图;
图2为本申请实施例提供的一种代码生成方法的流程示意图;
图3为本申请实施例提供的一种浅集成方案的示意图;
图4为本申请实施例提供的一种深集成方案的示意图;
图5为本申请实施例提供的一种代码管理方法的流程图;
图6为本申请实施例提供的一种通过代码编辑界面输入注释的示意图;
图7为本申请实施例提供的一种搜索得到第三方库的流程示意图;
图8为本申请实施例提供的一种结合智能搜索和模型分类共同推荐第三方库的示意图;
图9为本申请实施例提供的一种在代码编辑界面展示推荐的第三方库的示意图;
图10为本申请实施例提供的一种第三方库引入的流程示意图;
图11为本申请实施例提供的一种数据挖掘子系统构建标签仓库的流程示意图;
图12为本申请实施例提供的一种源码分析引擎进行源码分析的示意图;
图13为本申请实施例提供的一种标签仓库中第三方库与标签的映射关系的示意图;
图14为本申请实施例提供的一种计算设备的结构示意图;
图15为本申请实施例提供的一种计算设备集群的结构示意图;
图16为本申请实施例提供的另一种计算设备集群的结构示意图;
图17为本申请实施例提供的又一种计算设备集群的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
代码生成(Code Generation),是指基于已知信息自动生成代码片段或完整代码。其中,已知信息可以包括上下文(例如为已输入的代码)、注释(也称作注解)中的一种或多种。基于上下文生成代码片段也称作代码补全(code completion)。代码补全提供即时类名、方法名和关键字等预测,辅助开发人员编写应用程序(application,APP)的代码。
代码生成工具所生成的代码中可以包括对第三方库(Third-party Library)的调用。第三方库是指由软件开发平台上的开发者以外的实体开发、发布的可重用软件组件。典型的第三方库包括但不限于用于科学计算和数据工作的工作基础包numpy、用于处理文档的python-docx、用于数据挖掘、监控的scrapy、用于web开发的django或用于图像领域的图形库pillow。与直接生成相应功能的代码相比,通过调用第三库,一方面可以减少代码量,提升代码简洁度,另一方面可以缩短代码生成时间,提高代码生成效率。
代码生成工具所推荐的第三方库对生成的代码的质量具有决定性作用。目前,业界提供了多种方式实现第三方库的推荐,包括但不限于基于用户画像的智能推荐、基于开发者习惯的智能推荐。此外,基于模板的代码生成、基于模型的代码生成也可以实现第三方库的推荐。
其中,基于模型的代码自动生成是当前业界主流的代码自动生成方式。该方法基于模型驱动架构(model driven architecture,MDA)实现。MDA支持使用模型语言完成应用设计,实现系统代码生成、运行编译等,最终满足用户需求。应用设计是指通过指定的模型语言或建模工具,建立满足用户需求的系统模型。系统模型的结构和动作可以有效地反映系统信息。在完成一系列转换处理后,系统模型可以被转换为一个能够独立使用的代码文件。一般来说,模型转换包括两种转换模式:模型到模型和模型到代码。由于MDA架构基于统一建模语言(Unified Modeling Language,UML),集成了一些工业系统架构,用于系统设计、可视化服务和数据转换。与传统的UML相比,MDA模型在抽象性、独立性和可操作性方面得到了显著的优化。因此,系统模型在运行过程中可以重复调用,并可以转换为适合不同平台的描述文件。基于此,MDA体系结构打破了设计语言的限制,将模型语言提升到程序语言级别。
然而,基于模型的代码生成方案并未确定引入的第三方库的版本。不同第三方库的类名称很可能一致,一旦引入错误,可能导致生成的代码中有非常隐蔽的错误,甚至引入带有安全风险的第三方库,对应用的安全性产生巨大挑战。
有鉴于此,本申请提供一种代码管理方法。该方法可以由代码管理系统执行。代码管理系统可以是软件系统。例如,代码管理系统可以是集成开发环境(IntegratedDevelopment Environment,IDE)等软件开发平台,该软件开发平台集成有第三方库推荐能力,或者代码管理系统可以是集成于软件开发平台的插件、扩展。代码管理系统部署在计算设备集群中,计算设备集群执行软件系统的代码,从而执行本申请的代码管理方法。在一些可能的实现方式中,代码管理系统也可以是硬件系统,例如是具有代码管理能力的计算设备集群,包括但不限于提供代码管理能力如第三方库推荐能力的云服务器,该云服务器提供软件即服务(software as a service,SaaS)。硬件系统运行时,执行本申请的代码管理方法。
具体地,代码管理系统接收用户输入的注释,该注释为待生成的目标代码的自然语言描述,然后根据注释和存储有第三方库和标签的映射关系的标签仓库,确定与注释对应的至少一个第三方库,接着向用户推荐与注释对应的至少一个第三方库。
该方法针对当下流行的基于模型的代码生成技术进行进一步优化,在用户使用自然语言描述完想要实现的功能(即需求)时,可以基于标签仓库中第三方库和标签的映射关系,优先推荐用户一些可能需要的第三方库。由于第三方库和标签的映射关系是从海量的源码中提取得到,保障了推荐的第三方库可信、安全,与本地依赖没有冲突,并且在功能上满足用户实际的业务诉求,避免不同第三方库具有相同类名称导致引入错误的场景。进一步地,在代码自动生成阶段,通过第三方库选择好的框定行为来优化生成的内容,可以增加生成代码的安全性。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对代码管理系统的系统架构进行介绍。
参见图1所示的代码管理系统的架构示意图,该代码管理系统100包括交互子系统102、推荐子系统104。其中,交互子系统102用于接收用户输入的注释,该注释为待生成的目标代码的自然语言描述。其中,自然语言描述可以描述用户的需求。推荐子系统104用于根据注释以及标签仓库106存储的第三方库和标签的映射关系,确定与注释对应的至少一个第三方库,然后向用户推荐与注释对应的至少一个第三方库。
图1以标签仓库106为代码管理系统100内置的标签仓库示例说明,在一些可能的实现方式中,标签仓库106也可以是第三方(如其他平台或开发者)提供,如此,代码管理系统100可以外接上述标签仓库106,以基于标签仓库106中第三方库和标签的映射关系进行第三方库推荐。
需要说明的是,代码管理系统100还可以包括数据挖掘子系统107。数据挖掘子系统107用于构建标签仓库,以支持第三方库推荐。其中,数据挖掘子系统107可以获取源码数据集,该源码数据集包括多个源码文件,然后根据多个源码文件的调用点,确定调用第三方库的源码文件,接着根据调用第三方库的源码文件,获得源码文件的调用模式(pattern),最后根据调用模式中每个第三方库对应的标签以及标签的出现频率,构建标签仓库。其中,第三方库对应的标签从调用模式中抽取得到。
进一步地,代码管理系统100还可以包括代码生成子系统108。代码生成子系统108用于根据推荐的至少一个第三方库生成目标代码。相应地,推荐子系统104还用于向用户推荐基于至少一个第三方库生成的目标代码。
本申请实施例通过将第三方库推荐能力与代码生成能力集成,从而解决图2所示的代码生成方案中第三方库引入失败的痛点问题。如图2所示,在用户通过自然语言表达需求后,代码生成工具可以生成详细的代码片段,如果代码片段中使用了第三方库,用户需要手动引入这些仓库。这个过程中有可能引入错误,如引入具有相同类名称的其他第三方库,或者是引入同一个第三方库的不同版本。本申请实施例的代码管理系统100集成推荐子系统104的第三方库推荐能力和代码生成子系统108的代码生成能力解决了上述问题。
在实际应用时,上述推荐子系统14与代码生成子系统108可以浅集成,或者是深集成。下面分别对浅集成、深集成的方案进行详细说明。
参见图3所示的浅集成方案的示意图,当用户通过交互子系统102输入需求,由推荐子系统104(库推荐工具)确定与上述需求对应的第三方库,该第三方库安全、可信,再由代码生成子系统108(代码生成工具)生成相应的代码片段,如此可以解决手动引入第三方库失败或者产生风险的问题。
参见图4所示的深集成的方案的示意图,当用户通过交互子系统102输入需求,代码生成子系统108(代码生成工具)可以针对该需求生成多个候选的代码片段,推荐子系统104可以针对该需求,确定与上述需求对应的第三方库。由于代码片段通常有对应依赖的第三方库,当代码片段依赖的第三方库包括推荐的第三方库时,表征使用这个代码片段的效果好,可以向用户推荐该代码片段。
接下来,从代码管理系统100的角度对本申请实施例的代码管理方法进行介绍。
参见图5所示的代码管理方法的流程图,该方法包括:
S502:代码管理系统100接收用户输入的注释。
注释,也称作注解,通常是待生成的目标代码的自然语言描述。注释可以由用户(如开发人员)根据自然语言编写得到,例如是用户采用自然语言描述待生成的目标代码的功能。在一些示例中,用户输入的注释可以为“I want to test the class and try tocreate a http method client”。
具体实现时,代码管理系统100可以提供代码编辑界面,该代码编辑界面可以是图形用户界面(graphical user interface,GUI)或者是命令用户界面(command userinterface,CUI),用户可以通过上述代码编辑界面输入注释,代码管理系统100可以接收用户通过代码编辑界面输入的注释。
为了便于理解,下面以代码编辑界面为GUI示例说明。参见图6所示的通过代码编辑界面输入注释的示意图,代码编辑界面600承载有菜单组件602,用户可以通过菜单组件602中的控件新建代码文件,代码编辑界面600的代码编辑窗口604可以展示该新建的代码文件。用户可以在代码编辑窗口604向代码文件输入注释。其中,用户可以在具体的类中以注释方式输入相对明确的自然语言来描述希望实现的功能。例如,用户可以在JavaFile类中输入注释“I want to test the class and try to create a http method client”,以对上述JavaFile类进行测试,并生成一个http客户端方法。
S504:代码管理系统100根据注释以及标签仓库,确定与注释对应的至少一个第三方库。
用户输入注释以表达该用户真实想要实现的功能,代码管理系统100(例如是推荐子系统104)可以解析用户输入的注释,从中理解用户表达的真实意图,并根据算法模型,确定出与注释对应的至少一个第三方库,该第三方库可以视为与用户的真实意图匹配的第三方库。
代码管理系统100还可以设置第三方库推荐的触发条件。当用户触发三方库推荐时,即触发条件被满足时,代码管理系统100可以根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。
其中,标签仓库存储有第三方库和标签的映射关系。代码管理系统100可以根据注释搜索标签仓库,获得与注释对应的至少一个第三方库,或者是将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
下面对确定与注释对应的至少一个第三方库的不同方式分别进行介绍。
第一种方式为搜索。具体地,代码管理系统100可以利用搜索引擎如弹性搜索(elastic search,ES)的搜索引擎来搜索标签仓库,从而确定与注释对应的至少一个第三方库。参见图7所示的搜索得到第三方库的流程示意图,标签仓库中第三方库和标签的映射关系可以预先存储至ES的搜索引擎(ES engine)中,当用户传递注释时,可以先使用拦截器(interceptor)进行拦截。其中,拦截器可以使用启发式规则,将用户输入的无效注释进行剔除,将具有功能意图的注释输入搜索引擎。
需要说明,注释在进入搜索引擎之前,代码管理系统100(例如是代码管理系统100调用的搜索引擎)还可以对注释进行分解(split),获得注释在多个层级的标签。代码管理系统100可以根据所述注释在多个层级的标签,分别搜索所述标签仓库,获得所述注释在多个层级的推荐三方库。代码管理系统100可以根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。其中,各个层级具有相应的权重,代码管理系统100可以根据权重进行加权运算,从而获得与所述注释对应的至少一个第三方库。
在图7的示例中,多个层级的标签可以包括Name级别标签、Manual级别标签和Auto级别标签中的任意组合。Name级别标签是最直观反映第三方库的信息的标签,通常以三方库的名称作为标签。Manual级别标签是权重中等的标签,它是通过官方网站的介绍,进行标签化拆解形成的标签,这些标签将从第三方库的功能角度进行描述,也是对第三方库相对准确的表达。Auto级别的标签是权重最低的标签,但同时也是量级最大的标签,Auto标签可以是从海量数据中挖掘而来的标签,这些标签是开发者在不同的场景下对当前场景为何使用该三方库的描述。Auto标签在单独出现时可能会有些片面,但在数据量足够大时,可以理解成在大量场景中使用该三方库使用的原因,是第三方库一种侧面的描述。
注释被分解得到上述三个层级的标签后,ES engine可以将Label在Name层级,Manual层级和Auto层级分别进行搜索。每次搜索可以得到对应层级的推荐三方库,三个层级的推荐三方库可以按照权重由高到低进行排列,代码管理系统100可以通过聚合模型,筛选出最终需要推荐的第三方库。
第二种方式为模型分类。具体地,代码管理系统100可以利用标签仓库中的第三方库与标签的映射关系,训练分类器Classifier。例如代码管理系统100可以根据第三方库及其标签构建样本,利用该样本,通过深度学习算法训练神经网络模型,获得分类器。如此,代码管理系统100可以将用户输入的注释输入至分类器,分类器可以提取注释的标签,并进行分类,从而输出与注释对应的至少一个第三方库。
在一些可能的实现方式中,代码管理系统100也可以结合智能搜索、模型分类共同确定与注释对应的至少一个第三方库,解决用户无法准确获取需要的三方库的问题。
参见图8所示的推荐第三方库的示意图,当用户输入自然语言描述的注释时,该注释可以进入代码管理系统100(具体是推荐子系统104)的搜索模块中,搜索模块可以根据不同层级的标签,在标签仓库中进行搜索,获得与标签对应的至少一个第三方库。与此同时,注释也可以被输入到分类器中,分类器可以将注释的标签进行分类,得到与注释对应的至少一个第三方库。搜索模块和分类器确定的至少一个第三方库可以结合搜索模块和分类器各自的权重进行加权运算,从而确定最终的结果。
S506:代码管理系统100向用户推荐与注释对应的至少一个第三方库。
代码管理系统100可以通过代码管编辑界面,向用户展示与注释对应的至少一个第三方库,从而实现向用户推荐与注释对应的至少一个第三方库。当第三方库包括多个版本时,代码管理系统100还可以确定与注释对应的第三方库的版本,相应地,代码管理系统还可以向用户展示与注释对应的至少一个第三方库的版本。
为了便于理解,继续以测试类和创建http方法示例说明。如图9所示,当用户输入“Iwant to test the class and try to create a http client method”时,代码管理系统100推断用户很可能要实现一个对http进行操作的方法,代码管理系统100经过筛选,确定两个第三方库,具体为:
“org.apache.httpcomponents:httpclient:4.2.1-atlassian-1”;
“org.asynchttpclient:async-http-client:2.4.1”。
其中,4.2.1-atlassian-1、2.4.1表示第三方库的版本。需要说明的是,代码管理系统100可以确定各个第三方库的推荐程度,然后基于该推荐程度对第三方库进行排序,相应地,代码管理系统100在展示第三方库时,可以按照推荐程度由高至低的顺序展示,推荐程度高的第三方库可以在推荐列表的上方。此外,代码管理系统100还可以展示各第三方库的推荐程度,例如第一个第三方库的推荐程度可以为1.0,第二个第三方库的推荐程度相对低一些。这些第三方库的版本通常是安全、无漏洞的,并且大概率可以实现用户想要的功能。
S508:代码管理系统100基于推荐的至少一个第三方库生成目标代码。
具体地,代码管理系统100可以针对推荐至少一个第三方库中的每个第三方库分别生成目标代码。在一些示例中,用户也可以从推荐的至少一个第三方库中选择一个第三方库,然后代码管理系统100可以响应于用户对所述至少一个第三方库的选择操作,根据用户选择的第三方库生成目标代码。
需要说明的是,当用户选择添加一个或多个第三方库,代码管理系统100还可以在工程文件添加该第三方库的信息,以引入该第三方库。参见图10的第三方库引入的流程示意图,用户可以选择通过第三方库对应的添加(Add)控件触发该第三方库的添加操作,或者是通过触发全部(Add All)控件触发所有推荐的第三方库的添加操作,代码管理系统100可以响应于上述操作,自动在pom文件中加入相应的第三方库的信息(如图中标注框所示),进一步方便用户的开发工作。
S510:代码管理系统100向用户推荐目标代码。
当用户选择第三方库时,代码管理系统100可以响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。当用户未执行选择操作,代码管理系统100可以向用户推荐至少一个第三方库中每个第三方库对应的目标代码。
其中,代码管理系统100可以在向用户展示至少一个第三方库时,一并展示每个第三方库对应的目标代码,换言之,上述S506、S510可以并行执行。如此,用户可以直接选择合适的代码进行代码开发。
需要说明的是,当用户选择了推荐的第三方库或选择了推荐的目标代码,代码管理系统100还可以确定所述用户从所述至少一个第三方库中选择的第三方库,例如是用户直接选择的第三方库,或者是选择目标代码,从而选择的该目标代码所依赖的第三方库,然后根据用户选择的第三方库,更新多个层级的权重,由此提高推荐精度。需要说明的是,推荐子系统108采用智能搜索和模型分类共同推荐第三方库时,还可以基于用户选择的第三方库更新搜索模块和分类器的权重,不断优化推荐精度。
上述S508、S510为本申请实施例的可选步骤,执行本申请实施例的代码管理方法也可以不执行上述步骤。例如,用户手动编写代码时,代码管理系统100可以不执行上述S508、S510。
基于上述内容描述,本申请实施例提供一种代码管理方法。该方法针对当下流行的基于模型的代码生成技术进行进一步优化,在用户使用自然语言描述完想要实现的功能(即需求)时,可以基于标签仓库中第三方库和标签的映射关系,优先推荐用户一些可能需要的第三方库。由于第三方库和标签的映射关系是从海量的源码中提取得到,保障了推荐的第三方库可信、安全,与本地依赖没有冲突,并且在功能上满足用户实际的业务诉求,避免不同第三方库具有相同类名称导致引入错误的场景。进一步地,在代码自动生成阶段,通过第三方库选择好的框定行为来优化生成的内容,可以增加生成代码的安全性。
本申请实施例实现第三方库推荐的关键在于标签仓库。标签仓库可以由数据挖掘子系统107进行数据挖掘分析得到。具体地,数据挖掘子系统107可以获取源码数据集,该源码数据集包括多个源码文件,然后根据多个源码文件的调用点,确定调用第三方库的源码文件,接着根据所述调用第三方库的源码文件,获得所述源码文件的调用模式,再根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库。
数据挖掘子系统107支持多种语言的数据挖掘,例如支持Java,C,C++,Go,Python等语言,为了便于理解,下面以Java语言示例说明。
参见图11所示的数据挖掘子系统构建标签仓库的流程示意图,数据挖掘子系统107可以包括源码分析引擎、数据获取模块、标签获取模块,下面分别对各个模块的处理流程进行阐述。
在该方案中,数据获取模块首先下载海量的第三方库的源码,例如数据获取模块可以从开源网站上下载海量的开源源码工程,构成Java源码仓库,数据获取模块可以将这些源码使用源码分析引擎进行拆分,获取其中的全量的信息,比如类名ClassName,方法名MethodName等。数据获取模块将全部信息完成清洗后,可以存储到知识图谱中。知识图谱中包括第三方库的最细粒度的信息。如此完成原始数据的积累。
其中,源码分析引擎对源码进行拆分的过程可以参见图12,源码分析引擎可以对源码文件进行解析获得语法树(abstract syntax tree,AST),然后基于AST树的各个节点进行细粒度地拆分,将其拆分成类(class)级别、属性(field)级别、方法(method)级别,可以得到类声明(class declaration)、属性声明(field declaration)、方法声明(methoddeclaration)等。如此,源码分析引擎可以抽取出全部的声明和调用点。源码分析引擎可以将调用点与知识图谱中第三方库的数据进行适配,从而得到第三方库的调用模式(pattern)。
上述调用pattern可以用于构建训练集,并存储到训练集仓库。训练集仓库可以存储第三方库的三坐标(method,field,class)、调用点的JavaDoc、调用点的上下文以及client库的名称和其他相关信息。
标签获取模块针对训练集中的第三方库获取标签,以构建标签仓库。具体地,标签获取模块可以获取第三方库的名称,作为Name级标签,从第三方库的宣传文档(如官方网站的介绍文档)进行标签化拆解,从而获得Manual级别标签,从Java源码仓库中的Client工程中获取Auto级别标签。
Auto级别标签的挖掘流程如下:
标签获取模块将Java源码仓库中的Client工程依次进行拆分,具体到每一个Java文件,然后将所有Java文件放入到源码分析引擎中,拆解成最细粒度的原子节点,这些节点可以是Method级别,Field级别等。拆解完成之后与知识图谱中的调用点进行对比,一旦Mapping成功,即可认为Client工程中的这个文件调用了一种三方库。源码分析引擎将调用点对应method的JavaDoc抽取出来,即可获得第三方库和调用点的描述对应的调用Pattern。源码分析引擎将全部调用Pattern存储起来可以构成训练集仓库。
标签获取模块可以抽取调用Pattern中的注释,使用分词器进行拆分。分词器使用开源算法,将自然语言拆分成细粒度的词组,这些词组可以被称为标签。将所有的标签和第三方库进行统计,可以获得每一个第三方库对应的全量的标签,以及标签的出现频率。基于出现频率发现每一个标签的长尾效应,在数据量巨大的情况下,可以有效地将长尾部分切割掉,留存的第三方库和标签的映射关系即为可信的映射关系。最后标签获取模块可以将这些新挖掘的调用Pattern存储,从而获得每一个第三方库的细粒度的描述。
图13示出了标签仓库中第三方库与标签的映射关系,以第三方库Guava为例,其name级别标签为guava,其manual级别标签是从官网上的描述挖掘而来,为google,read。其Auto标签是从海量第三方工程中挖掘而来,其中read出现的频率最高,write和io出现的频率相对较低。
基于上述实施例的代码管理方法,本申请还提供一种代码管理系统100,如图1所示,该系统100包括:
交互子系统102,用于接收用户输入的注释,所述注释为待生成的目标代码的自然语言描述;
推荐子系统104,用于根据所述注释以及标签仓库106,确定与所述注释对应的至少一个第三方库,所述标签仓库106存储有第三方库和标签的映射关系;
所述推荐子系统104,还用于向所述用户推荐与所述注释对应的至少一个第三方库。
示例性地,上述交互子系统102、推荐子系统104可以通过硬件实现,或者可以通过软件实现。例如,交互子系统102、推荐子系统104可以是软件或软件的功能模块;又例如,交互子系统102、推荐子系统104也可以是具有相应功能的硬件,例如是部署有相应功能软件的计算设备集群。
为了便于描述,下面以推荐子系统104示例说明。
当通过软件实现时,推荐子系统104可以是运行在计算设备上的应用程序,如计算引擎等。该应用程序可以以虚拟化服务的方式提供给用户使用。虚拟化服务可以包括虚拟机(virtual machine,VM)服务、裸金属服务器(bare metal server,BMS)服务以及容器(container)服务。其中,VM服务可以是通过虚拟化技术在多个物理主机(如计算设备)上虚拟出虚拟机(virtual machine,VM)资源池以为用户按需提供VM进行使用的服务。BMS服务是在多个物理主机上虚拟出BMS资源池以为用户按需提供BMS进行使用的服务。容器服务是在多个物理主机上虚拟出容器资源池以为用户按需提供容器进行使用的服务。VM是模拟出来的一台虚拟的计算机,也即逻辑上的一台计算机。BMS是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以达到隔离用户空间、进程和资源的目的。应理解,上述虚拟化服务中的VM服务、BMS服务以及容器服务仅仅是作为具体的示例,在实际应用中,虚拟化服务还可以是其他轻量级或者重量级的虚拟化服务,此处不作具体限定。
当通过硬件实现时,推荐子系统104中可以包括至少一个计算设备,如服务器等。或者,推荐子系统104也可以是利用专用集成电路(application-specific integratedcircuit,ASIC)实现、或可编程逻辑器件(programmable logic device,PLD)实现的设备等。其中,上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD)、现场可编程门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。
在一些可能的实现方式中,所述推荐子系统104具体用于:
根据所述注释搜索所述标签仓库106,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统104具体用于:
对所述注释进行分解,获得所述注释在多个层级的标签;
根据所述注释在多个层级的标签,分别搜索所述标签仓库106,获得所述注释在多个层级的推荐三方库;
根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统104还用于:
确定所述用户从所述至少一个第三方库中选择的第三方库;
根据所述用户选择的第三方库,更新所述多个层级的权重。
在一些可能的实现方式中,所述推荐子系统104具体用于:
将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述推荐子系统104还用于:
向所述用户推荐基于所述至少一个第三方库生成的所述目标代码。
在一些可能的实现方式中,所述推荐子系统104具体用于:
响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。
在一些可能的实现方式中,所述系统100还包括生成子系统108;
所述生成子系统108,用于根据与所述注释对应的至少一个第三方库中的每个第三方库,分别生成每个第三方库对应的所述目标代码;
所述推荐子系统104具体用于:
向所述用户推荐每个第三方库对应的所述目标代码。
与推荐子系统104类似,生成子系统108可以通过软件实现,或者通过硬件实现。
当通过软件实现时,生成子系统108可以是运行在计算设备上的应用程序,如计算引擎等。该应用程序可以以虚拟化服务的方式提供给用户使用。当通过硬件实现时,生成子系统108中可以包括至少一个计算设备,如服务器等。或者,生成子系统108也可以是利用专用集成电路ASIC实现、或可编程逻辑器件PLD实现的设备等。
在一些可能的实现方式中,所述推荐子系统104具体用于:
当所述用户触发三方库推荐时,根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。
在一些可能的实现方式中,所述系统100还包括:
数据挖掘子系统107,用于获取源码数据集,所述源码数据集包括多个源码文件,根据所述多个源码文件的调用点,确定调用第三方库的源码文件,根据所述调用第三方库的源码文件,获得所述源码文件的调用模式,根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库,所述第三方库对应的标签从所述调用模式中抽取得到。
与推荐子系统104类似,数据挖掘子系统107可以通过软件实现,或者通过硬件实现。
当通过软件实现时,数据挖掘子系统107可以是运行在计算设备上的应用程序,如计算引擎等。该应用程序可以以虚拟化服务的方式提供给用户使用。当通过硬件实现时,数据挖掘子系统107中可以包括至少一个计算设备,如服务器等。或者,数据挖掘子系统107也可以是利用专用集成电路ASIC实现、或可编程逻辑器件PLD实现的设备等。
本申请还提供一种计算设备1400。如图14所示,计算设备1400包括:总线1402、处理器1404、存储器1406和通信接口1408。处理器1404、存储器1406和通信接口1408之间通过总线1402通信。计算设备1400可以是服务器或终端设备。应理解,本申请不限定计算设备1400中的处理器、存储器的个数。
总线1402可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图14中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线1404可包括在计算设备1400各个部件(例如,存储器1406、处理器1404、通信接口1408)之间传送信息的通路。
处理器1404可以包括中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
存储器1406可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。处理器1404还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。存储器1406中存储有可执行的程序代码,处理器1404执行该可执行的程序代码以实现前述代码管理方法。具体的,存储器1406上存有代码管理系统100用于执行代码管理方法的指令。
通信接口1403使用例如但不限于网络接口卡、收发器一类的收发模块,来实现计算设备1400与其他设备或通信网络之间的通信。
本申请实施例还提供了一种计算设备集群。该计算设备集群包括至少一台计算设备。该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。
如图15所示,所述计算设备集群包括至少一个计算设备1400。计算设备集群中的一个或多个计算设备1400中的存储器1406中可以存有相同的代码管理系统100用于执行代码管理方法的指令。
在一些可能的实现方式中,该计算设备集群中的一个或多个计算设备1400也可以用于执行代码管理系统100用于执行代码管理方法的部分指令。换言之,一个或多个计算设备1400的组合可以共同执行代码管理系统100用于执行代码管理方法的指令。
需要说明的是,计算设备集群中的不同的计算设备1400中的存储器1406可以存储不同的指令,用于执行代码管理系统100的部分功能。
图16示出了一种可能的实现方式。如图16所示,两个计算设备1400A和1400B通过通信接口1408实现连接。计算设备1400A中的存储器上存有用于执行交互子系统10的功能的指令,计算设备1400B中的存储器上存有用于执行推荐子系统104的功能的指令。进一步地,计算设备1400A中的存储器上还可以存有用于执行代码生成子系统108的功能的指令,计算设备1400B中的存储器上还可以存有用于执行数据挖掘子系统107的功能的指令。其中,数据挖掘子系统107构建的数据仓库106可以存储在计算设备1400B的存储器中。换言之,计算设备1400A和1400B的存储器1406共同存储了代码管理系统100用于执行代码管理方法的指令。
图16所示的计算设备集群之间的连接方式可以是考虑到本申请提供的代码管理方法需要消耗较多的计算资源进行第三方库推荐。因此,考虑将推荐子系统104实现的功能交由计算设备1400B执行。
应理解,图16中示出的计算设备1400A的功能也可以由多个计算设备1400完成。同样,计算设备1400B的功能也可以由多个计算设备1400完成。
在一些可能的实现方式中,计算设备集群中的一个或多个计算设备可以通过网络连接。其中,所述网络可以是广域网或局域网等等。图17示出了一种可能的实现方式。如图17所示,两个计算设备1400C和1400D之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备1400C中的存储器上存有用于执行交互子系统10的功能的指令,计算设备1400D中的存储器上存有用于执行推荐子系统104的功能的指令。进一步地,计算设备1400C中的存储器上还可以存有用于执行代码生成子系统108的功能的指令,计算设备1400D中的存储器上还可以存有用于执行数据挖掘子系统107的功能的指令。其中,数据挖掘子系统107构建的数据仓库106可以存储在计算设备1400D的存储器中。换言之,计算设备1400C和1400D的存储器1406共同存储了代码管理系统100用于执行代码管理方法的指令。
图17所示的计算设备集群之间的连接方式可以是考虑到本申请提供的代码管理方法需要消耗较多的计算资源进行第三方库推荐。因此,考虑将推荐子系统104实现的功能交由计算设备1400D执行。
应理解,图17中示出的计算设备1400C的功能也可以由多个计算设备1400完成。同样,计算设备1400D的功能也可以由多个计算设备1400完成。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于代码管理系统100用于执行代码管理方法。
本申请实施例还提供了一种包含指令的计算机程序产品。所述计算机程序产品可以是包含指令的,能够运行在计算设备上或被储存在任何可用介质中的软件或程序产品。当所述计算机程序产品在至少一个计算机设备上运行时,使得至少一个计算机设备执行上述代码管理方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。
Claims (23)
1.一种代码管理方法,其特征在于,由代码管理系统执行,所述方法包括:
接收用户输入的注释,所述注释为待生成的目标代码的自然语言描述;
根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,所述标签仓库存储有第三方库和标签的映射关系;
向所述用户推荐与所述注释对应的至少一个第三方库。
2.根据权利要求1所述的方法,其特征在于,所述根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,包括:
根据所述注释搜索所述标签仓库,获得与所述注释对应的至少一个第三方库。
3.根据权利要求2所述的方法,其特征在于,所述根据所述注释搜索所述标签仓库,获得与所述注释对应的至少一个第三方库,包括:
对所述注释进行分解,获得所述注释在多个层级的标签;
根据所述注释在多个层级的标签,分别搜索所述标签仓库,获得所述注释在多个层级的推荐三方库;
根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。
4.根据权利要求2或3所述的方法,其特征在于,所述方法还包括:
确定所述用户从所述至少一个第三方库中选择的第三方库;
根据所述用户选择的第三方库,更新所述多个层级的权重。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,包括:
将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:
向所述用户推荐基于所述至少一个第三方库生成的所述目标代码。
7.根据权利要求6所述的方法,其特征在于,所述向所述用户推荐基于所述至少一个第三方库生成的所述目标代码,包括:
响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。
8.根据权利要求6所述的方法,其特征在于,所述向所述用户推荐基于所述至少一个第三方库生成的所述目标代码,包括:
根据与所述注释对应的至少一个第三方库中的每个第三方库,分别生成每个第三方库对应的所述目标代码;
向所述用户推荐每个第三方库对应的所述目标代码。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,包括:
当所述用户触发三方库推荐时,根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述方法还包括:
获取源码数据集,所述源码数据集包括多个源码文件;
根据所述多个源码文件的调用点,确定调用第三方库的源码文件;
根据所述调用第三方库的源码文件,获得所述源码文件的调用模式;
根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库,所述第三方库对应的标签从所述调用模式中抽取得到。
11.一种代码管理系统,其特征在于,所述系统包括:
交互子系统,用于接收用户输入的注释,所述注释为待生成的目标代码的自然语言描述;
推荐子系统,用于根据所述注释以及标签仓库,确定与所述注释对应的至少一个第三方库,所述标签仓库存储有第三方库和标签的映射关系;
所述推荐子系统,还用于向所述用户推荐与所述注释对应的至少一个第三方库。
12.根据权利要求11所述的系统,其特征在于,所述推荐子系统具体用于:
根据所述注释搜索所述标签仓库,获得与所述注释对应的至少一个第三方库。
13.根据权利要求12所述的系统,其特征在于,所述推荐子系统具体用于:
对所述注释进行分解,获得所述注释在多个层级的标签;
根据所述注释在多个层级的标签,分别搜索所述标签仓库,获得所述注释在多个层级的推荐三方库;
根据所述注释在多个层级的三方库,获得与所述注释对应的至少一个第三方库。
14.根据权利要求12或13所述的系统,其特征在于,所述推荐子系统还用于:
确定所述用户从所述至少一个第三方库中选择的第三方库;
根据所述用户选择的第三方库,更新所述多个层级的权重。
15.根据权利要求11至14任一项所述的系统,其特征在于,所述推荐子系统具体用于:
将所述注释输入由所述标签仓库中第三方库和标签的映射关系训练得到的分类器,获得与所述注释对应的至少一个第三方库。
16.根据权利要求11至15任一项所述的系统,其特征在于,所述推荐子系统还用于:
向所述用户推荐基于所述至少一个第三方库生成的所述目标代码。
17.根据权利要求16所述的系统,其特征在于,所述推荐子系统具体用于:
响应于用户对所述至少一个第三方库的选择操作,向所述用户推荐基于所述用户选择的第三方库生成的所述目标代码。
18.根据权利要求16所述的系统,其特征在于,所述系统还包括生成子系统;
所述生成子系统,用于根据与所述注释对应的至少一个第三方库中的每个第三方库,分别生成每个第三方库对应的所述目标代码;
所述推荐子系统具体用于:
向所述用户推荐每个第三方库对应的所述目标代码。
19.根据权利要求11至18任一项所述的系统,其特征在于,所述推荐子系统具体用于:
当所述用户触发三方库推荐时,根据注释以及标签仓库,确定与所述注释对应的至少一个第三方库。
20.根据权利要求11至19任一项所述的系统,其特征在于,所述系统还包括:
数据挖掘子系统,用于获取源码数据集,所述源码数据集包括多个源码文件,根据所述多个源码文件的调用点,确定调用第三方库的源码文件,根据所述调用第三方库的源码文件,获得所述源码文件的调用模式,根据所述调用模式中每个第三方库对应的标签以及所述标签的出现频率,构建所述标签仓库,所述第三方库对应的标签从所述调用模式中抽取得到。
21.一种计算设备集群,其特征在于,所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器,所述至少一个存储器中存储有计算机可读指令;所述至少一个处理器执行所述计算机可读指令,以使得所述计算设备集群执行如权利要求1至10中任一项所述的方法。
22.一种计算机可读存储介质,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至10任一项所述的方法。
23.一种计算机程序产品,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2023/081059 WO2024031983A1 (zh) | 2022-08-10 | 2023-03-13 | 一种代码管理方法及相关设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210953688X | 2022-08-10 | ||
CN202210953688 | 2022-08-10 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632224A true CN117632224A (zh) | 2024-03-01 |
Family
ID=90015302
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211665526.2A Pending CN117632224A (zh) | 2022-08-10 | 2022-12-23 | 一种代码管理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117632224A (zh) |
-
2022
- 2022-12-23 CN CN202211665526.2A patent/CN117632224A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10579344B2 (en) | Converting visual diagrams into code | |
US11875136B2 (en) | Edit automation using a temporal edit pattern | |
US11763078B2 (en) | Provisional selection drives edit suggestion generation | |
US11941372B2 (en) | Edit automation using an anchor target list | |
US20140173563A1 (en) | Editor visualizations | |
US10162605B2 (en) | Code snippet content recommendation to define an object literal | |
WO2022089188A1 (zh) | 一种代码处理方法、装置、设备及介质 | |
CN111507086A (zh) | 本地化应用程序中翻译文本位置的自动发现 | |
WO2018161509A1 (zh) | 条件编译预处理方法、终端及存储介质 | |
US20220237376A1 (en) | Method, apparatus, electronic device and storage medium for text classification | |
US11789913B2 (en) | Integration of model execution engine containers with a model development environment | |
US11934801B2 (en) | Multi-modal program inference | |
US11086600B2 (en) | Back-end application code stub generation from a front-end application wireframe | |
JP2023024365A (ja) | ソフトウェアバージョン間のapi下位互換性の検出 | |
CN117931190A (zh) | 一种代码管理方法及相关设备 | |
US9898467B1 (en) | System for data normalization | |
US20210150289A1 (en) | Text classification for input method editor | |
JP2024052547A (ja) | ソフトウェア・パッケージのためのバージョン更新の推奨 | |
CN107077365B (zh) | 有选择地加载预编译的头部和/或其部分 | |
US20190095538A1 (en) | Method and system for generating content from search results rendered by a search engine | |
CN117632224A (zh) | 一种代码管理方法及相关设备 | |
WO2024031983A1 (zh) | 一种代码管理方法及相关设备 | |
CN112181429A (zh) | 信息处理方法、装置以及电子设备 | |
US20200082027A1 (en) | Discovering and displaying business artifact and term relationships | |
US20240202458A1 (en) | Generating prompt recommendations for natural language processing tasks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |