【技术实现步骤摘要】
一种代码依赖关系的检测方法、装置和系统
[0001]本专利技术属于软件成分分析
,更具体地,涉及一种代码依赖关系的检测方法、装置和系统。
技术介绍
[0002]软件成分分析是软件工程中一个重要的研究领域。软件成分分析技术通过分析软件组件之间的依赖关系,帮助开发人员理解和管理软件系统的结构和复杂性,以提高软件系统的可维护性和可重用性。目前,大部分主流编程语言的软件成分分析方法主要通过标准的项目管理工具解析软件依赖文件获得软件依赖关系。目前软件成分分析仅能够依靠代码克隆检测技术完成。但是对待测项目中的全部函数或文件与开源社区中其他组件的函数或文件一一进行相似性比较的时间复杂度过高。因此,受限于代码克隆检测方法的时间开销,其难以支持大规模编程项目的软件成分分析。
[0003]现有的软件成分分析方法主要基于代码克隆检测技术完成,即一般以函数粒度与开源社区的所有项目函数进行相似性比较,对于相似性较高的函数则认为其存在代码依赖关系。事实上,一个项目中仅有少部分的函数具有项目代表性,即其核心函数。因此,将全部函数均进行相似性比较的方法不仅产生较高的时间开销,且会引入大量误报。比如,大部分项目均具有文件读写的功能函数,因此在对该函数进行克隆检测时,势必得到其与大量软件存在代码依赖关系。然而,该功能函数的依赖关系并非事实意义上的组件依赖。
技术实现思路
[0004]针对现有技术的以上缺陷或改进需求,本专利技术提供了一种代码依赖关系的检测方法、装置和系统,其目的在于,本专利技术通过创建代码仓库
‑< ...
【技术保护点】
【技术特征摘要】
1.一种代码依赖关系的检测方法,其特征在于,包括:S1:将代码仓库中各项目每个版本的代码拆分成多个函数,并生成每个函数的调用图;将每个版本对应的所有函数的调用图进行拼接,得到每个版本的函数调用图;S2:根据每个项目各版本对应函数并集计算每个项目的索引字典D1;创建代码仓库
‑
版本
‑
函数对应的嵌套索引字典H1;将各项目的索引字典D1,得到代码仓库的索引字典D2;S3:将嵌套索引字典H1中函数与索引字典D2中函数进行查重对比以去重,再对去重后的嵌套索引字典H1中各函数进行复杂度过滤,得到新嵌套索引字典H2;对嵌套索引字典H1中每个版本的函数调用图进行中心性过滤,得到每个版本的核心函数列表FL2;将核心函数列表FL2和新嵌套索引字典H2中函数信息列表FL1交集运算得到项目指纹函数H3;S4:对待检测项目的代码函数与项目指纹函数H3进行代码克隆检测,得到待检测项目的代码依赖关系。2.如权利要求1所述的代码依赖关系的检测方法,其特征在于,所述S3包括:S301:将嵌套索引字典H1中函数与索引字典D2中函数进行查重对比以去重,再对去重后的嵌套索引字典H1中各函数进行复杂度过滤,得到新嵌套索引字典H2及其函数信息列表FL1;S302:基于中心性分析方法,计算代码仓库中各项目中每个版本的函数调用图的中心性评估值C
mean
,将符合中心性要求对应的函数列入每个版本的核心函数列表FL2;S303:将核心函数列表FL2和新嵌套索引字典H2中的函数信息列表FL1进行交集运算,得到项目指纹函数H3。3.如权利要求2所述的代码依赖关系的检测方法,其特征在于,所述S302包括:S3021:分别计算嵌套索引字典H1中每个版本对应函数调用图的度中心性、katz中心性、介数中心性、特征向量中心性、紧密中心性和调和中心性;S3022:基于S3021中计算得到中心性及各自的权重计算对应版本的函数调用图的中心性评估值C
mean
。4.如权利要求3所述的代码依赖关系的检测方法,其特征在于,所述S3022包括:利用公式计算版本的函数调用图的中心性评估值C
mean
;其中,C
d
为katz中心性,C
k
为katz中心性,C
b
为介数中心性,C
e
为特征向量中心性,C
c
为紧密中心性,C
h
为调和中心性。5.如权利要求2所述的代码依赖关系的检测方法,其特征在于,所述S301包括:S3011:将嵌套索引字典H1中函数与索引字典D2中函数进行查重对比以去重;S3012:计算去重后的嵌套索引字典H1中各函数的代码可维护性指数,...
【专利技术属性】
技术研发人员:胡雨涛,张明昊,吴月明,王可馨,邹德清,李珍,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。