一种Java软件版本一致性检测方法与流程
本发明涉及软件版本校验,尤其涉及一种java软件版本一致性检测方法。
背景技术:
1、随着java软件开发迭代速度不断加快,同一软件会衍生出多个不同版本,项目运维、版本管控、漏洞核查等场景下,需要频繁对不同软件版本进行一致性比对;目前行业内主流比对方式存在明显短板,短板如下:
2、单纯依靠文件哈希比对,仅能识别文件完全变更,无法区分格式调整、变量重命名、代码注释修改等无逻辑改动;
3、仅比对代码文本内容,易受排版、命名干扰造成误判;
4、传统语法树比对仅做单层节点匹配,未区分标识符名称变更与业务逻辑变更,且未建立跨文件依赖调用的标识符映射补偿机制,当类内方法/字段仅重命名、逻辑不变时,依赖文件调用校验会产生误判;
5、现有方案未结合项目整体依赖关系,难以识别工程架构层面的隐性变更;
6、对于java类主流工程化开发语言,项目包含大量依赖包、配置文件与源码文件,版本变更不仅体现在代码本身,还包括依赖包增删、版本升级等深层次改动;现有单一维度的比对方式,要么检测效率低下,要么判定精度不足,无法兼顾快速筛查与精准判定的双重需求,难以满足大规模软件版本自动化校验的使用场景。
技术实现思路
1、针对现有方法的不足,本发明结合文件哈希、项目依赖清单、抽象语法树三大维度构建分层筛选机制,由表层至深层逐步完成版本校验。
2、本发明所采用的技术方案是:一种java软件版本一致性检测方法包括以下步骤:
3、步骤一、分别计算新、旧版软件中工程文件的哈希匹配度值;利用哈希匹配度值判断两版软件的一致性;
4、进一步的, (1)
5、其中,为工程文件总数;、分别为旧版本、新版本中第个工程文件的哈希值;是版本中第'个工程文件;为哈希匹配函数,为哈希匹配函数的两个入参。
6、步骤二、针对哈希不匹配的工程文件,利用新、旧版软件的依赖配置文件分别构建两版本的依赖特征集,并计算两版本的依赖特征相似度值,当依赖特征相似度值小于1时,执行源码文件的语法树校验;当依赖特征相似度值等于1时,判断两版软件一致;
7、进一步的,依赖特征相似度值的公式为:
8、 (2)
9、其中,、分别为旧版本和新版本依赖特征集。
10、步骤三、将源码文件生成标准化java抽象语法树ast,根据java抽象语法树ast的成员语义指纹计算ast一致性分值,利用ast一致性分值进行版本一致性判断和跨文件补偿校验;
11、进一步的,步骤三具体包括:
12、步骤31、对每个新、旧版本中的源码文件逐个进行归一化预处理;
13、步骤32、对预处理后的源码分层解析,生成标准化java抽象语法树ast;利用java抽象语法树ast的核心节点构建成员语义指纹;
14、步骤33、基于旧、新版本的成员语义指纹,逐个计算两个版本中所有源码文件对的ast一致性分值;
15、进一步的,步骤33中ast一致性分值的赋值方法如下:
16、当旧、新版本中某个源码文件对的java抽象语法树ast的顶层节点和类内成员节点的成员语义指纹完全匹配时,;
17、当旧、新版本中某源码文件对的java抽象语法树ast的顶层节点或类内成员节点存在新增或删除,;
18、当旧、新版本中某源码文件对的java抽象语法树ast的顶层节点和类内成员节点不存在新增或删除,且成员逻辑特征伪实质修改时,。
19、步骤34、比对所有旧、新版本的源码文件对的过程中,一旦存在-1,则流程结束;否则,执行步骤35;
20、步骤35、比对完成所有旧、新版本的源码文件对,针对1的所有旧、新版本的源码文件对构建全局哈希映射;针对0的新版本的所有源码文件执行跨文件补偿校验,补偿校验完成后得到补偿校验新版本的源码文件集合。
21、进一步的,对步骤31中源码文件进行剔除空格、换行、冗余注释,清除编译无关字符的预处理操作。
22、进一步的,跨文件补偿校验包括:
23、遍历新版本中时的全部不确定源码文件的ast中的方法调用节点,提取调用目标的新版本标识符;
24、查询全局哈希映射,若存在映射关系,则将新版本成员节点标识符替换为旧版本成员节点的标识符。
25、进一步的,成员语义指纹包括:字段指纹、方法指纹:。
26、步骤四、利用跨文件补偿校验后的新版本和旧版本分别构建指纹集合;利用两个指纹集合计算ast结构相似度值,利用ast结构相似度值进行版本一致性判断;
27、利用步骤一至四依次形成文件级判定版本无变更、架构级判定版本变更、语义级判定版本无变更、语义级判定版本变更四层判定输出结果。
28、进一步的,java软件版本一致性检测系统,包括:存储器,用于存储可由处理器执行的指令;处理器,用于执行指令以实现java软件版本一致性检测方法。
29、进一步的,存储有计算机程序代码的计算机可读介质,计算机程序代码在由处理器执行时实现java软件版本一致性检测方法。
30、本发明的有益效果:
31、1、采用哈希、依赖清单、抽象语法树三层递进式筛选架构,搭配单个源码文件一致性分值与ast相似度双重量化模型;指纹集合依托单个源码文件校验结果聚合生成,实现全局粗粒度判定与单文件细粒度校验强绑定,兼顾检测效率与判定精度,可快速筛除无变更版本,适配大批量软件版本自动化比对场景;
32、2、通过逐层判断文件级是否变更、架构级判定版本是否变更和语义级判定版本是否变更,提高版本是否变更的准确性;
33、3、通过依赖特征相似度计算,可精准识别工程架构、第三方依赖的深层次版本变更,弥补单一源码文件比对的不足;
34、4、增设源码归一化预处理步骤,创新设计基于修饰符、参数、实现体的成员指纹生成机制,彻底隔离变量、方法标识符重命名的干扰,实现“只校验逻辑、不校验命名/格式”;
35、5、新增跨文件标识符映射缓存与调用补偿校验机制,解决多文件依赖场景下,类内成员仅改名但逻辑不变时的ast一致性误判问题,大幅提升多模块java工程校验准确率;
36、6、重新定义集合,将相似度计算约束于单个源码文件校验输出,解决传统方案全局与单个源码文件校验脱节、判定精度差的缺陷;
37、7、全流程采用标准化量化公式+分层确定性判定逻辑,规则清晰、可落地性强,便于程序开发、自动化部署与后期运维。
1.一种java软件版本一致性检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的java软件版本一致性检测方法,其特征在于,步骤三具体包括:
3.根据权利要求2所述的java软件版本一致性检测方法,其特征在于,步骤33中ast一致性分值的赋值方法如下:
4.根据权利要求2所述的java软件版本一致性检测方法,其特征在于,跨文件补偿校验包括:
5.根据权利要求2所述的java软件版本一致性检测方法,其特征在于,成员语义指纹包括:字段指纹,方法指纹。
6.根据权利要求1所述的java软件版本一致性检测方法,其特征在于,哈希匹配度值的公式为:
7.根据权利要求1所述的java软件版本一致性检测方法,其特征在于,依赖特征相似度值的公式为:
8.根据权利要求2所述的java软件版本一致性检测方法,其特征在于,步骤31中归一化预处理包括:对源码文件进行剔除空格、换行、冗余注释,清除编译无关字符。
9.java软件版本一致性检测系统,其特征在于,包括:存储器,用于存储可由处理器执行的指令;处理器,用于执行指令以实现如权利要求1-8任一项所述的java软件版本一致性检测方法。
10.存储有计算机程序代码的计算机可读介质,其特征在于,计算机程序代码在由处理器执行时实现如权利要求1-8任一项所述的java软件版本一致性检测方法。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com