System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于依赖链路分析的Go语言依赖问题检测方法、存储介质及设备技术_技高网
当前位置: 首页 > 专利查询>南京大学专利>正文

一种基于依赖链路分析的Go语言依赖问题检测方法、存储介质及设备技术

技术编号:41210835 阅读:6 留言:0更新日期:2024-05-09 23:33
本发明专利技术公开了一种基于依赖链路分析的Go语言依赖问题检测方法、存储介质及设备,包括:根据待分析Go项目的直接依赖,逐层构建待分析Go项目的依赖树,获得以所述待分析Go项目为出发点的依赖链路集合;根据各类型依赖问题的成因,确定不同依赖问题出现的依赖链路模式,定义其为问题链路模式;基于步骤2获得的问题链路模式,收集诊断依赖问题所需的辅助信息,对所述依赖链路集合中的各依赖链路分别进行模式匹配,根据匹配的结果确定所述依赖树中具有问题链路模式的依赖链路,以及该依赖链路的依赖问题。本发明专利技术可以有效帮助Go开发者诊断并修复项目的依赖问题,及时发现社区项目出现的依赖问题并给出合适的修复策略。

【技术实现步骤摘要】

本专利技术涉及软件维护与演化,特别涉及一种基于依赖链路分析的go语言依赖问题检测方法、存储介质及设备。


技术介绍

1、go语言自发布以来,迅速获得了很多开发者的青睐,其开放的第三方库的生态允许开发者自由地从开源社区获取所需的第三方库或者将自己实现的第三方库发布到社区中供其它开发者使用。起初,go项目并没有正式的工具管理项目的第三方依赖,开发者大都使用社区中的第三方工具对第三方依赖进行管理或者干脆不管理,这些方式统称为gopath模式。虽然golang在go1.11版本引入官方的go modules依赖管理模式以期解决原先社区中go项目第三方依赖管理工具混乱的局面,但在整个社区朝着go modules模式迁移的过程中,由于新的依赖管理模式与旧第三方依赖管理工具不兼容以及开发者对于新依赖管理模式存在认知不全面的情况,社区中出现了大量的go语言依赖问题。

2、为了应对上述问题,一些社区中的开发者也设计了一些工具辅助go开发者将项目迁移到go modules模式,例如批量修改go源文件中引用路径的工具,但这些工具只是在开发者完全弄懂自己项目的问题后,帮助开发者减少修复问题过程中一些重复的工作,并不能帮助开发者发现并弄懂问题,目前golang社区中也缺乏对于这些依赖问题比较全面的统计和分析。因此,一种有效的go语言依赖问题检测方法亟待提出。


技术实现思路

1、针对现有技术中存在的问题,本专利技术提供了一种基于依赖链路分析的go语言依赖问题检测方法、存储介质及设备,对目前go社区中存在的主流依赖问题实现了高效地检测,并能够对社区中依赖问题进行即时监控。

2、为实现上述目的,本专利技术采用以下技术方案:一种基于依赖链路分析的go语言依赖问题检测方法,具体包括如下步骤:

3、步骤1、根据待分析go项目的直接依赖,逐层构建待分析go项目的依赖树,获得以所述待分析go项目为出发点的依赖链路集合;

4、步骤2、根据各类型依赖问题的成因,确定不同依赖问题出现的依赖链路模式,定义其为问题链路模式;

5、步骤3、基于步骤2获得的问题链路模式,收集诊断依赖问题所需的辅助信息,对所述依赖链路集合中的各依赖链路分别进行模式匹配;

6、若匹配结果为空,判定所述go项目没有依赖问题;

7、若匹配结果不为空,根据匹配的结果确定所述依赖树中具有问题链路模式的依赖链路,以及该依赖链路的依赖问题。

8、进一步地,

9、所述步骤2还包括,制定并存储不同依赖问题的修复策略的步骤;

10、所述步骤3在获得不为空的匹配结果后,还包括以下步骤:

11、结合具有问题链路模式的依赖链路上的项目信息,生成对其依赖问题成因的描述,调取并输出对应的修复策略。

12、进一步地,步骤1包括如下子步骤:

13、步骤1.1、从当前待分析go项目出发,获取其所有直接依赖的引用路径和版本,构建依赖树的第一层;

14、步骤1.2、对依赖树第一层的每个节点获取其所有直接依赖的引用路径和版本,构建依赖树的下一层;

15、步骤1.3、重复执行获取新层节点所有直接依赖的引用路径和版本的步骤,构建所述依赖树的层结构,直至完成对依赖树的构建。

16、进一步地,当待分析go项目为go modules项目时,通过所述go modules项目依赖的配置文件go.mod获取所有直接依赖的引用路径和准确的版本;

17、当待分析go项目为gopath项目时,通过分析gopath项目所有源文件中包的引用路径获取gopath项目的直接引用路径,同时从第三方依赖配置文件中获取直接依赖的准确版本,若无法确定直接依赖的准确版本,则使用对应依赖在源地址的最新版本。

18、进一步地,所述依赖问题的分类包括:

19、类型1:新旧依赖管理模式的项目间混合依赖导致的依赖问题;

20、类型2:开发者对于新依赖管理模式认知不足导致的依赖问题;

21、所述新依赖管理模式为go modules项目的管理模式,步骤3中,对辅助信息的收集针对go modules项目进行,其中:

22、服务于诊断类型1依赖问题的辅助信息包括:依赖树中各项目包含虚拟版本后缀的引用路径,以及go modules项目发布v2+主版本时采取的策略,所述策略是指是/否使用了子目录法发布对应版本;

23、服务于诊断类型2依赖问题的辅助信息包括:go modules项目的模块路径和replace指令使用情况以及项目的tag版本在源地址和goproxy代理上副本是否一致。

24、进一步地,在执行步骤1前,下载golang开源社区中的go项目的完整git历史,针对其所有tag版本和最新commit版本分别生成缓存单元,全量构建go项目既有提交历史的本地缓存系统,然后启动用于go项目增量更新的定时任务,进行本地缓存系统的日常更新,通过比较更新前后的go项目的依赖信息,判断是否有导致依赖问题的重要变化产生,所述重要变化为预设条件,对于更新后产生重要变化的go项目,进入步骤1,作为待分析go项目进行依赖问题的检测。

25、进一步地,生成缓存单元的过程具体为:

26、i、使用git clone指令将go项目的所有提交历史下载到本地;

27、ii、下载完成后,使用git tags指令获取所述go项目所有模块和版本,确定所述go项目所有需要的的缓存单元;

28、iii、使用git checkout指令将所述go项目切换到对应模块的具体版本,解析对应版本对应模块部分go源文件和依赖配置文件获取必要的依赖信息进行缓存。

29、进一步地,通过go项目增量更新的定时任务的具体过程为:

30、a、通过github rest api指定一段时间区间作为pushed关键字的参数,并将language关键字限制为go,查询得到这段时间区间内有过提交记录的go项目;

31、b、下载有过提交记录的go项目的最新commit版本,解析获得有过提交记录的go项目各模块新的缓存单元,将新的缓存单元替换原先缓存系统中旧的缓存单元;

32、c、通过github rest api获取有过提交记录的go项目所有的版本,与本地缓存系统中已有的版本对比,如有新增,补充新版本的缓存单元。

33、进一步地,本专利技术还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序使计算机执行所述的基于依赖链路分析的go语言依赖问题检测方法。

34、进一步地,本专利技术还提供了一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行计算机程序时,实现所述的基于依赖链路分析的go语言依赖问题检测方法。

35、与现有技术相比,本专利技术具有如下有益效果:本专利技术提供的一种基于依赖链路分析的go语言依赖问题检测方本文档来自技高网...

【技术保护点】

1.一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,具体包括如下步骤:

2.根据权利要求1所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于:

3.根据权利要求1所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,步骤1包括如下子步骤:

4.根据权利要求2所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于:

5.根据权利要求1所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,所述依赖问题的分类包括:

6.根据权利要求1所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,在执行步骤1前,下载Golang开源社区中的Go项目的完整Git历史,针对其所有tag版本和最新commit版本分别生成缓存单元,全量构建Go项目既有提交历史的本地缓存系统,然后启动用于Go项目增量更新的定时任务,进行本地缓存系统的日常更新,通过比较更新前后的Go项目的依赖信息,判断是否有导致依赖问题的重要变化产生,所述重要变化为预设条件,对于更新后产生重要变化的Go项目,进入步骤1,作为待分析Go项目进行依赖问题的检测。

7.根据权利要求6所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,生成缓存单元的过程具体为:

8.根据权利要求6所述的一种基于依赖链路分析的Go语言依赖问题检测方法,其特征在于,通过Go项目增量更新的定时任务的具体过程为:

9.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序使计算机执行如权利要求1-8任一项所述的基于依赖链路分析的Go语言依赖问题检测方法。

10.一种电子设备,其特征在于,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行计算机程序时,实现如权利要求1-8任一项所述的基于依赖链路分析的Go语言依赖问题检测方法。

...

【技术特征摘要】

1.一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于,具体包括如下步骤:

2.根据权利要求1所述的一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于:

3.根据权利要求1所述的一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于,步骤1包括如下子步骤:

4.根据权利要求2所述的一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于:

5.根据权利要求1所述的一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于,所述依赖问题的分类包括:

6.根据权利要求1所述的一种基于依赖链路分析的go语言依赖问题检测方法,其特征在于,在执行步骤1前,下载golang开源社区中的go项目的完整git历史,针对其所有tag版本和最新commit版本分别生成缓存单元,全量构建go项目既有提交历史的本地缓存系统,然后启动用于go项目增量更新的定时任务,进行本地缓存系统的...

【专利技术属性】
技术研发人员:许畅袁彦
申请(专利权)人:南京大学
类型:发明
国别省市:

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

1