一种分析源代码相似性的方法、系统和电子设备技术方案

技术编号:26030393 阅读:19 留言:0更新日期:2020-10-23 21:07
本发明专利技术涉及一种分析源代码相似性的方法、系统和电子设备,首先,根据程序源代码生成JSON格式的抽象语法树,然后根据抽象语法树中的词汇将抽象语法树映射成空间向量,最后,根据余弦相似度计算方法和所述空间向量,计算出用于表征源代码相似性的余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据。

【技术实现步骤摘要】
一种分析源代码相似性的方法、系统和电子设备
本专利技术涉及计算机
,尤其涉及一种分析源代码相似性的方法、系统和电子设备。
技术介绍
开发团队协作完成大规模软件的工作过程中,由大规模软件中的业务需求不断迭代,基于业务的变化,其代码也在不断增加,且代码规模及复杂度逐步增大,由于相似逻辑的代码可能会出现在不同的业务代码组件中,开发团队不易辨识出相似逻辑的代码,从而对代码重构、业务合并等应用场景的实施造成影响。
技术实现思路
本专利技术所要解决的技术问题是针对现有技术的不足,提供了一种分析源代码相似性的方法、系统和电子设备。本专利技术的一种分析源代码相似性的方法的技术方案如下:根据程序源代码生成JSON格式的抽象语法树;根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量;根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度。本专利技术的一种分析源代码相似性的方法的有益效果如下:首先,根据程序源代码生成JSON格式的抽象语法树,然后根据抽象语法树中的词汇将抽象语法树映射成空间向量,最后,根据余弦相似度计算方法和所述空间向量,计算出用于表征源代码相似性的余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据。在上述方案的基础上,本专利技术的一种分析源代码相似性的方法还可以做如下改进。进一步,所述根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量,包括:根据所述抽象语法树中的词汇,将所述抽象语法树纵向地从左至右生成抽象代码树数组;将所述抽象代码树数组映射为所述空间向量。进一步,所述根据程序源代码生成JSON格式的抽象语法树,包括:通过语法分析器将所述程序源代码自顶向下进行分析,生成JSON格式的所述抽象语法树。本专利技术的一种分析源代码相似性的系统的技术方案如下:包括生成模块、映射模块和计算模块;所述生成模块用于根据程序源代码生成JSON格式的抽象语法树;所述映射模块用于根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量;所述计算模块用于根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度。本专利技术的一种分析源代码相似性的系统的有益效果如下:生成模块根据程序源代码生成JSON格式的抽象语法树,映射模块根据抽象语法树中的词汇将抽象语法树映射成空间向量,计算模块根据余弦相似度计算方法和所述空间向量,计算出用于表征源代码相似性的余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据。在上述方案的基础上,本专利技术的一种分析源代码相似性的系统还可以做如下改进。进一步,所述映射模块具体用于根据所述抽象语法树中的词汇,将所述抽象语法树纵向地从左至右生成抽象代码树数组。并将所述抽象代码树数组映射为所述空间向量。进一步,所述生成模块具体用于通过语法分析器将所述程序源代码自顶向下进行分析,生成JSON格式的所述抽象语法树。本专利技术的一种电子设备的技术方案如下:包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如上述任一项所述的一种分析源代码相似性的系统的步骤。本专利技术的一种电子设备的有益效果如下:首先,根据程序源代码生成JSON格式的抽象语法树,然后根据抽象语法树中的词汇将抽象语法树映射成空间向量,最后,根据余弦相似度计算方法和所述空间向量,计算出用于表征源代码相似性的余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据。附图说明图1为本专利技术实施例的一种分析源代码相似性的方法的流程示意图;图2为本专利技术实施例的一种分析源代码相似性的系统的结构示意图;图3为本专利技术实施例的一种电子设备的结构示意图;具体实施方式如图1所示,本专利技术实施例的一种分析源代码相似性的方法,包括如下步骤:S1、根据程序源代码生成JSON格式的抽象语法树;S2、根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量;S3、根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度。首先,根据程序源代码生成JSON格式的抽象语法树,然后根据抽象语法树中的词汇将抽象语法树映射成空间向量,最后,根据余弦相似度计算方法和所述空间向量,计算出用于表征源代码相似性的余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据。S1中,通过语法分析器将所述程序源代码自顶向下进行分析,生成JSON格式的抽象语法树(AST:AbstractSyntaxTree),该抽象语法树定义了代码的语义结构,去除空格、回车以及无用的注释代码等,S2中,所述根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量,包括:S20、根据所述抽象语法树中的词汇,将所述抽象语法树纵向地从左至右生成抽象代码树数组;S21、将所述抽象代码树数组映射为所述空间向量。其中,在S20之前,可首先删除抽象语法树中的变量值,此时,不需要关注各源程序的变量值,只需关注各源代码的结构即逻辑即可;在S20之后可对抽象代码树数组中的词汇进行去重,以减小分析的计算量;其中,可在数据库中预设用来存储抽象代码树数组的抽象数据表,此时,将抽象代码树数组作为文本信息并存储至抽象数据表中,通过Word2vec将抽象数据表的文本信息转为空间向量,文本信息即抽象代码树数组。其中,还可将空间向量继续存储在抽象数据表中,并与抽象代码树数组相对应。S3中,根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度,用一个实例进行阐述,具体地:程序源代码中包括很多包,例如不同业务对应的包等,每个包中包含相应的源代码,由于根据程序源代码生成抽象语法树与抽象代码树数组,因此,抽象代码树数组中包括了各个源代码对应的空间向量,那么:1)任意选择两个源代码对应的空间向量,并将该两个空间向量输入余弦相似度计算方法进行计算,得到该两个源代码之间的余弦相似度,余弦相似度来衡量该两个源代码之间的差异的大小,具体地,余弦相似度越接近1,则表明该两个源代码对应的空间向量之间的夹角越接近0,该两个源代码也越相似,当夹角等于0时,该两个源代码对应的空间向量相等,余弦相似度越接近0,则表明该两个源代码也越不相似,以此类推,根据每两个源代码得到余弦相似度,从而能协助开发团队识别重复或相似逻辑的源代码,为代码重构、业务合并等场景的实施提供判断依据;例如,两个源程序:iA、iB,分别将iA和iB中的每个词汇的出现的次数和位置进行标记,标记结果如下:iA为ia1,ib1,ic2,id1,ie1,if1,ig0,ih0,ij0本文档来自技高网...

【技术保护点】
1.一种分析源代码相似性的方法,其特征在于,包括:/n根据程序源代码生成JSON格式的抽象语法树;/n根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量;/n根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度。/n

【技术特征摘要】
1.一种分析源代码相似性的方法,其特征在于,包括:
根据程序源代码生成JSON格式的抽象语法树;
根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量;
根据余弦相似度计算方法和所述空间向量,计算用于表征源代码相似性的余弦相似度。


2.根据权利要求1所述的一种分析源代码相似性的方法,其特征在于,所述根据所述抽象语法树中的词汇将所述抽象语法树映射成空间向量,包括:
根据所述抽象语法树中的词汇,将所述抽象语法树纵向地从左至右生成抽象代码树数组;
将所述抽象代码树数组映射为所述空间向量。


3.根据权利要求1或2所述的一种分析源代码相似性的方法,其特征在于,所述根据程序源代码生成JSON格式的抽象语法树,包括:
通过语法分析器将所述程序源代码自顶向下进行分析,生成JSON格式的所述抽象语法树。


4.一种分析源代码相似性的系统,其特征在于,包括生成模块、映射模块和计算模块;...

【专利技术属性】
技术研发人员:张睿
申请(专利权)人:北京思特奇信息技术股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1