CN115774565B - 一种单代码仓库建设方法及系统及装置及介质 - Google Patents
一种单代码仓库建设方法及系统及装置及介质 Download PDFInfo
- Publication number
- CN115774565B CN115774565B CN202310092363.1A CN202310092363A CN115774565B CN 115774565 B CN115774565 B CN 115774565B CN 202310092363 A CN202310092363 A CN 202310092363A CN 115774565 B CN115774565 B CN 115774565B
- Authority
- CN
- China
- Prior art keywords
- data
- code
- project
- sub
- functions
- 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
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种单代码仓库建设方法及系统及装置及介质,涉及软件项目管理领域,实现了将基于多代码库软件构架下的独立项目转化为基于单代码库软件架构的自动化处理,减少专业技术人员重构软件开发构架所需的时间成本,提高企业工作效率;同时,通过自动化提取项目间相似代码块,降低了技术人员对源代码进行检索的时间;通过脚本实现自动化文件夹新建以及对应的项目转移,有效的避免了人工操作项目转移以及项目新建过程中可能存在的误操作,提高了企业工作效率,具有良好的实用性。
Description
技术领域
本发明涉及软件项目管理领域,具体地,涉及一种单代码仓库建设方法及系统及装置及介质。
背景技术
随着互联网技术的发展,各种超级应用层出不穷,而一个应用产品中通常包括若干个相互关联的项目。在软件开发过程中,开发者需要对应用内的若干项目进行管理,并对项目间由于版本升级而产生的版本同步问题进行处理。Multirepo(多代码库)是一种将每一个项目对应一个单独的仓库来分来管理的软件开发架构,而Monorepo(单代码库)是一种将多个项目存储在同一个仓库里的软件开发架构。基于Multirepo的软件开发架构是目前最常用的软件开发策略,但由于其将应用中的每个功能作为独立的项目分开打包,会导致项目间的协作成本大大增加,而基于Monorepo的软件开发架构由于能够对其中拆离出来的项目进行单独的配置,又能够通过总体配置使项目之间达到很好的协作效果,能够显著提高项目间的协作效率。将基于Multirepo的软件开发架构向Monorepo库转换需要专业技术人员耗费大量的时间,因此,如何高效的将传统的基于Multirepo的软件开发架构转化为基于Monorepo的软件开发架构是目前亟待解决的问题。
发明内容
为了自动化将传统的基于Multirepo的软件开发架构转化为基于Monorepo的软件开发架构,减少专业技术人员重构软件开发构架所需的时间成本,提高企业工作效率,本发明提供了一种单代码仓库建设方法,所述单代码仓库建设方法包括以下步骤:
步骤1:确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
步骤2:提取所述第一数据中相似代码块,获得第二数据;
步骤3:建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖。
其中,本方法原理为:确定多代码库对应的若干项目间相关的项目,根据相关项目对应的源代码自动化提取所述源代码中的相似代码块,建立代码库,将提取出的相似代码置于所述代码库顶层,以供所述相关项目引用,并将所述相关项目均存储于所述代码库中,由此,所述相关项目被整合至单代码库中,实现了自动化将基于多代码库的软件开发架构转化为基于单代码库的软件开发架构。
进一步的,为了自动提取相关的项目对应的源代码间相似的代码,降低人工对源代码进行检索过程带来的大量时间成本,所述步骤2具体为:
遍历所述第一数据,获得所述第一数据中出现的函数,所述函数为一个或多个,分别记录所述函数对应的重复次数;
将所述函数根据对应的重复次数进行排序,获得排序结果;
根据所述排序结果获得第一阈值,提取所述函数中重复次数大于所述第一阈值的函数对应的代码,获得第二数据。
进一步的,为了自动且准确提取到相关的项目对应的源代码间相似的代码,并将提取到的相似代码分为不同的集合以供专业技术人员从所述集合中选取最具代表性的代码块或能够被各项目引用的代码块,保证提取结构的稳定性,所述步骤2具体为:
步骤a:遍历所述第一数据,对所述第一数据进行分割,获得代码块;
步骤b:建立并训练神经网络模型,获得相似度识别模型;
步骤c:根据所述相似度识别模型对所述代码块进行处理,将所述代码块分为相似代码集合,其中,所述相似代码集合中任意一个相似代码集合包括至少一个代码块;
步骤d:分别整合所述相似代码集合对应的代码块,获得第二数据。
其中,由于对所述第一数据进行分割是依据代码结构而实现的,而代码是由若干语句相互嵌套所构成的,因此对所述第一数据分割的粒度会影响处理的效果,当分割粒度太细时,提取到的代码不具有代表性;当分割粒度太粗时,无法提取到相似的代码,因此为了提高自动识别相似代码块的准确率,当分割结果不满足需要时自动调整分割粒度,所述步骤a具体为:
根据所述第一数据的结构对所述第一数据进行处理,获得代码结构树;
获得所述代码结构树的深度n,其中,n为正整数;
根据所述代码结构树的深度n确定分割粒度,并根据所述分割粒度对所述第一数据进行分割,获得代码块;
执行完所述步骤d后,所述步骤2还包括以下步骤:
计算所述第二数据对应的数据量和所述第一数据对应的数据量的比值,并判断所述比值是否在第二阈值范围内;
若所述比值不在所述第二阈值范围内,则返回所述步骤a,根据所述比值更新所述分割粒度,并执行后续步骤。
进一步的,由于项目更新的需要,可能存在对所述第一数据多次识别的情况,为了避免将已有的识别结果作为后续识别的目标再次识别从而影响识别结果,因此,遍历所述第一数据前,还包括对所述第一数据的筛选,其中,对所述第一数据的筛选根据所述第一数据对应的文件名实现。
进一步的,为了避免所述代码库结构出现幽灵依赖、重复安装依赖等问题导致浪费磁盘空间,所述步骤3中建立的代码库基于pnpm包管理器实现。
其中,为了降低人工实现多代码库和单代码库之间项目转移所带来的时间成本,通过脚本自动建立代码库,并将项目转移至新建的代码库对应的目录下,因此,所述步骤3具体为:
建立代码库,全局安装pnpm包管理器并初始化;
判断所述代码库中是否存在目录文件,若不存在则创建目录文件;
根据所述第二数据生成子项目文件夹,并在所述目录文件中安装所述子项目文件夹对应的依赖;
将所述第二数据载入至对应的子项目文件夹中;
配置脚本文件,并根据所述脚本文件对所述子项目文件夹进行测试。
其中,为了避免使用第三方插件带来的安全隐患,通过脚本自动生成子项目文件夹,所述生成子项目文件夹通过以下步骤实现:
根据所述第二数据获得对应的子项目名;
遍历当前目录文件下的文件,判断是否存在与所述子项目名同名的项目文件夹;
若存在与所述子项目名同名的项目文件夹,则跳过对该同名子项目名的处理,若不存在与所述子项目名同名的项目文件夹,则创建对应的项目文件夹。
为实现上述目的,本发明提供了一种单代码仓库建设系统,所述系统包括:
数据采集单元,用于确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
数据处理单元,用于提取所述第一数据中相似代码块,获得第二数据;
数据建设单元,用于建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖。
其中,本系统原理为:数据采集单元确定多代码库对应的若干项目间相关的项目,并下载相关的项目对应的源代码;数据处理单元根据下载的源代码提取所述源代码中的相似代码块;数据建设单元建立代码库,并将所述数据处理单元提取出的相似代码置于所述代码库顶层,安装对应的依赖以供所述相关项目引用,并将所述相关项目均存储于所述代码库中,由此,本系统实现了基于多代码库的软件开发架构向基于单代码库的软件开发架构的自动化转化。
为实现上述目的,本发明提供了一种单代码仓库建设装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现上述任意一个单代码仓库建设方法的步骤。
为实现上述目的,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现上述仍以一个单代码仓库建设方法的步骤。
本发明提供的一个或多个技术方案,至少具有如下技术效果或优点:
自动化将基于多代码库软件构架下的独立项目转化为基于单代码库软件架构,减少专业技术人员重构软件开发构架所需的时间成本,提高企业工作效率;通过自动化提取项目间相似代码块,降低了技术人员对源代码进行检索的时间;自动化实现项目转移,避免人工操作项目转移以及项目新建过程中误操作对代码库建设的影响,提高了企业工作效率,具有良好的实用性。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,并不构成对本发明实施例的限定;
图1是本发明中单代码仓库建设方法整体流程示意图;
图2是本发明中脚本提取相似代码块流程示意图;
图3是本发明中单代码建设系统结构示意图。
实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
实施例一
请参考图1-图2,本发明实施例一提供了一种单代码仓库建设方法,所述单代码仓库建设方法包括以下步骤:
步骤1:确定目标项目及所述目标项目对应的若干源代码,下载所述若干源代码,获得第一数据;
步骤2:提取所述第一数据中相似代码块,获得第二数据;
步骤3:建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖。
其中,所述目标项目根据实际使用时项目间的业务相关性确定,具体的,所述目标项目为实际使用时存在相互协作关系的若干项目,对于存在相互协作关系的项目,其源代码存在复写部分,具体项目本实施例在此不做具体限定。
其中,所述源代码为所述目标项目对应的源代码,具体的,由于所述目标项目为实际使用时存在相互协作关系的项目,因此,所述源代码对应的编程语言相同,具体编程语言种类根据实际情况确定,本实施例在此不做具体限定。
其中,在本实施例中,所述步骤2具体为:
遍历所述第一数据,获得所述第一数据中出现的函数,所述函数为一个或多个,分别记录所述函数对应的重复次数;
将所述函数根据对应的重复次数进行排序,获得排序结果;
根据所述排序结果获得第一阈值,提取所述函数中重复次数大于所述第一阈值的函数对应的代码,获得第二数据。
其中,所述第一阈值用于描述所述函数的代码复写次数标准,当代码复用次数大于所述第一阈值时,表示该代码在所述第一数据中复写率高,为了使项目间代码引用便捷,将重复次数大于所述第一阈值的函数提取出来,所述第一阈值的具体大小根据实际使用时对所述函数对应的重复次数进行排序所获得的结果确定,具体的,所述第一阈值可以根据实际使用时获得的排序结果对应的重复次数均值、重复次数均方差、重复次数极差等确定,本实施例在此不做具体限定。
其中,在本实施例中,遍历所述第一数据前,还包括对所述第一数据的筛选,其中,对所述第一数据的筛选根据所述第一数据对应的文件名实现。
具体的,由于实际工作的需要,所述第一数据中可能包含重复的第三方代码文件,对于此类无法更改的文件,为了使对所述第一数据进行提取所获得的结果更加准确,在遍历所述第一数据前,首先筛选出所述第一数据中存在的第三方代码文件并进行隔离,使后续不再计算所述第三方代码文件中重复出现的代码块,其中,根据实际工作时所述第三方代码文件对应的文件名实现对所述第一数据的筛选,具体文件名本实施例在此不做具体限定。
具体的,由于实际工作的中项目多次更新的需要,所述第一数据可能会经过多次代码提取,为了使对所述第一数据进行提取所获得的结果更加准确,避免由于重复对上一次提取获得的结果进行遍历而影响新的提取结果,在遍历所述第一数据前,首先筛选出所述第一数据中用于存储历史提取结果的文件并进行隔离,使后续不再计算所述用于存储历史提取结果的文件中重复出现的代码块,其中,根据实际工作时所述用于存储历史提取结果的文件对应的文件名实现对所述第一数据的筛选,具体文件名本实施例在此不做具体限定。
其中,在本实施例中,由于pnpm包管理器能够避免单代码库中项目间幽灵依赖、重复依赖的问题,所述步骤3中建立的代码库基于pnpm包管理器实现,所述步骤3具体为:
建立代码库,全局安装pnpm包管理器并初始化;
判断所述代码库中是否存在目录文件,若不存在则创建目录文件;
根据所述第二数据生成子项目文件夹,并在所述目录文件中安装所述子项目文件夹对应的依赖;
将所述第二数据载入至对应的子项目文件夹中;
配置脚本文件,并根据所述脚本文件对所述子项目文件夹进行测试。
其中,在本实施例中,所述生成子项目文件夹通过以下步骤实现:
根据所述第二数据获得对应的子项目名;
遍历当前目录文件下的文件,判断是否存在与所述子项目名同名的项目文件夹;
若存在与所述子项目名同名的项目文件夹,则跳过对该同名子项目名的处理,若不存在与所述子项目名同名的项目文件夹,则创建对应的项目文件夹。
具体的,通过脚本或第三方插件自动化执行所述步骤3,以及所述生成子项目文件夹对应的步骤,为保障数据安全,所述脚本可以由Python、PHP或JavaScript语言编写,本实施例优选JavaScript编写脚本实现上述步骤的自动化执行。
实施例二
请参考图1,本发明实施例二提供了一种单代码仓库建设方法,所述单代码仓库建设方法包括以下步骤:
步骤1:确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
步骤2:提取所述第一数据中相似代码块,获得第二数据;
步骤3:建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖。
其中,所述目标项目根据实际使用时项目间的业务相关性确定,具体的,所述目标项目为实际使用时存在相互协作关系的项目,对于存在相互协作关系的项目,其源代码存在复写部分,具体项目本实施例在此不做具体限定。
其中,所述源代码为所述目标项目对应的源代码,具体的,由于所述目标项目为实际使用时存在相互协作关系的项目,因此,所述源代码对应的编程语言相同,具体编程语言种类根据实际情况确定,本实施例在此不做具体限定。
其中,在本实施例中,所述步骤2具体为:
步骤a:遍历所述第一数据,对所述第一数据进行分割,获得代码块;
步骤b:建立并训练神经网络模型,获得相似度识别模型;
步骤c:根据所述相似度识别模型对所述代码块进行处理,将所述代码块分为相似代码集合,其中,所述相似代码集合中任意一个相似代码集合包括至少一个代码块;
步骤d:分别整合所述相似代码集合对应的代码块,获得第二数据。
其中,所述步骤a中对所述第一数据进行分割根据所述第一数据对应的代码结构实现,具体的,可以根据所述第一数据中的分号、大括号或函数名等特征对所述第一数据进行分割,具体依据根据实际使用时代码种类确定,本实施例在此不做具体限定。
其中,所述神经网络模型可以为word2vec、glove、ELMo、BERT等语言模型,所述语言模能够将文字符号转换为计算机能够理解的向量,从而实现对所述代码的分类,所述神经网络模型的具体种类根据实际需要确定,本实施例在此不做具体限定。
其中,在本实施例中,所述步骤a具体为:
根据所述第一数据的结构对所述第一数据进行处理,获得代码结构树;
获得所述代码结构树的深度n,其中,n为正整数;
根据所述代码结构树的深度n确定分割粒度,并根据所述分割粒度对所述第一数据进行分割,获得代码块;
执行完所述步骤d后所述步骤2还包括以下步骤:
计算所述第二数据对应的数据量和所述第一数据对应的数据量的比值,并判断所述比值是否在第二阈值范围内;
若所述比值不在所述第二阈值范围内,则返回所述步骤a,根据所述比值更新所述分割粒度,并执行后续步骤。
其中,所述第二阈值用于确定提取出的所述第二数据对应的数据量与所述第一数据对应的数据量的比值标准,所述第二阈值的具体取值根据实际使用时的需要确定,本实施例在此不做具体限定。
其中,在本实施例中,遍历所述第一数据前,还包括对所述第一数据的筛选,其中,对所述第一数据的筛选根据所述第一数据对应的文件名实现。
具体的,由于实际工作的需要,所述第一数据中可能包含重复的第三方代码文件,对于此类无法更改的文件,为了使对所述第一数据进行提取所获得的结果更加准确,在遍历所述第一数据前,首先筛选出所述第一数据中存在的第三方代码文件并进行隔离,使后续不再计算所述第三方代码文件中重复出现的代码块,其中,根据实际工作时所述第三方代码文件对应的文件名实现对所述第一数据的筛选,具体文件名本实施例在此不做具体限定。
具体的,由于实际工作中项目代码会随着实际需求产生多次更新,相应的,所述第一数据会经过多次代码提取,为了使对所述第一数据进行提取所获得的结果更加准确,避免由于重复对上一次提取获得的结果进行遍历而影响新的提取结果,在遍历所述第一数据前,首先筛选出所述第一数据中用于存储历史提取结果的文件并进行隔离,使后续不再计算所述用于存储历史提取结果的文件中重复出现的代码块,其中,根据实际工作时所述用于存储历史提取结果的文件对应的文件名实现对所述第一数据的筛选,具体文件名本实施例在此不做具体限定。
实施例三
请参考图3,本发明实施例三提供了一种单代码仓库建设系统,所述系统包括:
数据采集单元,用于确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
数据处理单元,用于提取所述第一数据中相似代码块,获得第二数据;
数据建设单元,用于建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖。
实施例四
本发明实施例四提供了一种单代码仓库建设装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述单代码仓库建设方法的步骤。
实施例五
本发明实施例五提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述单代码仓库建设方法的步骤。
其中,所述处理器可以是中央处理器(CPU,Central Processing Unit),还可以是其他通用处理器、数字信号处理器(digital signal processor)、专用集成电路(Application Specific Integrated Circuit)、现成可编程门阵列(Field programmablegate array)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器也可以是任何常规的处理器。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的数据,实现发明中单代码仓库建设装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等。此外,存储器可以包括高速随机存取存储器、还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡,安全数字卡,闪存卡、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述单代码仓库建设装置如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序存储于一个计算机可读存介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码、对象代码形式、可执行文件或某些中间形式等。所述计算机可读取介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存储器、点载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
本发明已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。
本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、Visual Basic、Fortran 2003、Perl、COBOL 2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。
同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种单代码仓库建设方法,其特征在于,所述单代码仓库建设方法包括以下步骤:
步骤1:确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
步骤2:提取所述第一数据中相似代码块,获得第二数据;
步骤3:建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖;
其中,所述步骤2具体为:遍历所述第一数据,获得所述第一数据中出现的函数,所述函数为一个或多个,分别记录所述函数对应的重复次数;
将所述函数根据对应的重复次数进行排序,获得排序结果;
根据所述排序结果获得第一阈值,提取所述函数中重复次数大于所述第一阈值的函数对应的代码,获得第二数据;
或,所述步骤2具体为:步骤a:根据所述第一数据的结构对所述第一数据进行处理,获得代码结构树;获得所述代码结构树的深度n,其中,n为正整数;根据所述代码结构树的深度n确定分割粒度,并根据所述分割粒度对所述第一数据进行分割,获得代码块;
步骤b:建立并训练神经网络模型,获得相似度识别模型;
步骤c:根据所述相似度识别模型对所述代码块进行处理,将所述代码块分为相似代码集合,其中,所述相似代码集合中任意一个相似代码集合包括至少一个代码块;
步骤d:分别整合所述相似代码集合对应的代码块,获得第二数据;
步骤e:计算所述第二数据对应的数据量和所述第一数据对应的数据量的比值,并判断所述比值是否在第二阈值范围内;若所述比值不在所述第二阈值范围内,则返回所述步骤a,根据所述比值更新所述分割粒度,并执行后续步骤。
2.根据权利要求1所述的一种单代码仓库建设方法,其特征在于,遍历所述第一数据前,还包括对所述第一数据的筛选,其中,对所述第一数据的筛选根据所述第一数据对应的文件名实现。
3.根据权利要求1所述的一种单代码仓库建设方法,其特征在于,所述步骤3中建立的代码库基于pnpm包管理器实现。
4.根据权利要求3所述的一种单代码仓库建设方法,其特征在于,所述步骤3具体为:
建立代码库,全局安装pnpm包管理器并初始化;
判断所述代码库中是否存在目录文件,若不存在则创建目录文件;
根据所述第二数据生成子项目文件夹,并在所述目录文件中安装所述子项目文件夹对应的依赖;
将所述第二数据载入至对应的子项目文件夹中;
配置脚本文件,并根据所述脚本文件对所述子项目文件夹进行测试。
5.根据权利要求4所述的一种单代码仓库建设方法,其特征在于,所述生成子项目文件夹通过以下步骤实现:
根据所述第二数据获得对应的子项目名;
遍历当前目录文件下的文件,判断是否存在与所述子项目名同名的项目文件夹;
若存在与所述子项目名同名的项目文件夹,则跳过对该同名子项目名的处理,若不存在与所述子项目名同名的项目文件夹,则创建对应的项目文件夹。
6.一种单代码仓库建设系统,其特征在于,所述系统包括:
数据采集单元,用于确定目标项目及所述目标项目对应的源代码,下载所述源代码,获得第一数据;
数据处理单元,用于提取所述第一数据中相似代码块,获得第二数据;
数据建设单元,用于建立代码库,将所述第二数据添加至所述代码库中,并根据所述第二数据在所述代码库中安装依赖;
其中,所述数据处理单元获得第二数据具体步骤为:遍历所述第一数据,获得所述第一数据中出现的函数,所述函数为一个或多个,分别记录所述函数对应的重复次数;
将所述函数根据对应的重复次数进行排序,获得排序结果;
根据所述排序结果获得第一阈值,提取所述函数中重复次数大于所述第一阈值的函数对应的代码,获得第二数据;
或,所述数据处理单元获得第二数据具体步骤为:步骤a:根据所述第一数据的结构对所述第一数据进行处理,获得代码结构树;获得所述代码结构树的深度n,其中,n为正整数;根据所述代码结构树的深度n确定分割粒度,并根据所述分割粒度对所述第一数据进行分割,获得代码块;
步骤b:建立并训练神经网络模型,获得相似度识别模型;
步骤c:根据所述相似度识别模型对所述代码块进行处理,将所述代码块分为相似代码集合,其中,所述相似代码集合中任意一个相似代码集合包括至少一个代码块;
步骤d:分别整合所述相似代码集合对应的代码块,获得第二数据;
步骤e:计算所述第二数据对应的数据量和所述第一数据对应的数据量的比值,并判断所述比值是否在第二阈值范围内;若所述比值不在所述第二阈值范围内,则返回所述步骤a,根据所述比值更新所述分割粒度,并执行后续步骤。
7.一种单代码仓库建设装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-5中任意一个所述单代码仓库建设方法的步骤。
8.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-5中任意一个所述单代码仓库建设方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310092363.1A CN115774565B (zh) | 2023-02-10 | 2023-02-10 | 一种单代码仓库建设方法及系统及装置及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310092363.1A CN115774565B (zh) | 2023-02-10 | 2023-02-10 | 一种单代码仓库建设方法及系统及装置及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115774565A CN115774565A (zh) | 2023-03-10 |
CN115774565B true CN115774565B (zh) | 2023-04-18 |
Family
ID=85393799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310092363.1A Active CN115774565B (zh) | 2023-02-10 | 2023-02-10 | 一种单代码仓库建设方法及系统及装置及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115774565B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10048945B1 (en) * | 2017-05-25 | 2018-08-14 | Devfactory Fz-Llc | Library suggestion engine |
CN109634594A (zh) * | 2018-11-05 | 2019-04-16 | 南京航空航天大学 | 一种考虑代码语句顺序信息的代码片段推荐方法 |
CN110688112A (zh) * | 2019-09-25 | 2020-01-14 | 上海创功通讯技术有限公司 | 多项目共线开发代码的自动入库的方法及系统 |
CN112308210A (zh) * | 2020-10-27 | 2021-02-02 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
CN115357252A (zh) * | 2022-10-08 | 2022-11-18 | 成都数联云算科技有限公司 | 源码文件生成方法、装置、电子设备和存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3764249A1 (en) * | 2019-07-08 | 2021-01-13 | Dmitri Goloubentsev | A streaming compiler for automatic adjoint differentiation |
US11150877B2 (en) * | 2019-11-06 | 2021-10-19 | Google Llc | Automatically generating machine learning models for software tools that operate on source code |
-
2023
- 2023-02-10 CN CN202310092363.1A patent/CN115774565B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10048945B1 (en) * | 2017-05-25 | 2018-08-14 | Devfactory Fz-Llc | Library suggestion engine |
CN109634594A (zh) * | 2018-11-05 | 2019-04-16 | 南京航空航天大学 | 一种考虑代码语句顺序信息的代码片段推荐方法 |
CN110688112A (zh) * | 2019-09-25 | 2020-01-14 | 上海创功通讯技术有限公司 | 多项目共线开发代码的自动入库的方法及系统 |
CN112308210A (zh) * | 2020-10-27 | 2021-02-02 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
CN115357252A (zh) * | 2022-10-08 | 2022-11-18 | 成都数联云算科技有限公司 | 源码文件生成方法、装置、电子设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
俞婷 等."基于词法分析与特征量化的代码相似度检测方法".《嘉兴学院学报》.2017,第29卷(第6期),120-128. * |
Also Published As
Publication number | Publication date |
---|---|
CN115774565A (zh) | 2023-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110765770B (zh) | 一种合同自动生成方法及装置 | |
US10296307B2 (en) | Method and system for template extraction based on source code similarity | |
CN111160045B (zh) | 一种游戏资源文件翻译方法、装置及设备 | |
US20170277518A1 (en) | Converting visual diagrams into code | |
CN108536745B (zh) | 基于Shell的数据表提取方法、终端、设备及存储介质 | |
CN108334609B (zh) | Oracle中实现JSON格式数据存取的方法、装置、设备及存储介质 | |
US9727209B2 (en) | Hierarchical data structure with shortcut list | |
WO2019041891A1 (zh) | 升级包的生成方法及装置 | |
US9122561B2 (en) | Program integration that accommodates restrictions on merge-locations | |
CN108427580B (zh) | 配置对命名重复的检测方法、存储介质和智能设备 | |
CN112214617A (zh) | 一种基于区块链技术的数字档案管理方法及系统 | |
CN111984666B (zh) | 数据库访问方法、装置、计算机可读存储介质和计算机设备 | |
US11645058B2 (en) | User interface resource file optimization | |
CN113254024A (zh) | 代码继承关系优化方法、装置、设备及存储介质 | |
CN115774565B (zh) | 一种单代码仓库建设方法及系统及装置及介质 | |
CN117272959A (zh) | 基于bert模型的表单低代码生成方法及系统 | |
CN109582347B (zh) | 一种获取前端代码的方法及装置 | |
US9996799B2 (en) | Migrating a legacy system by inferring context-sensitive business rules from legacy source code | |
CN103809915A (zh) | 一种磁盘文件的读写方法和装置 | |
CN115269548A (zh) | 一种数据仓库开发模型的生成方法、系统及相关设备 | |
CN114089962A (zh) | 一种构件管理方法、设备及介质 | |
CN113504904A (zh) | 用户定义函数实现方法、装置、计算机设备和存储介质 | |
CN114253595A (zh) | 代码仓库管理方法、装置、计算机设备及存储介质 | |
CN103823842A (zh) | 一种erwin模型软件更新方法和装置 | |
US20230281482A1 (en) | Systems and methods for rule-based machine learning model promotion |
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 |