一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

代码调用检测方法、装置、计算机设备以及存储介质与流程

2023-02-19 08:38:01 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种代码调用检测方法、装置、计算机设备以及存储介质。


背景技术:

2.软件测试是指在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。它是用来促进鉴定软件的正确性、完整性、安全性和质量的过程,是一种实际输出与预期输出之间的审核或者比较过程。
3.目前,在软件更新测试过程中,应用程序每个版本迭代完成后都会进行代码评审来对代码进行检查。在开发阶段,开发人员对功能模块进行编码时,会记录一些调试信息从而产生测试代码,在提交代码时可能会不小心将测试代码提交上去,这时代码评审能够检查出一些简单的逻辑错误和测试代码。但如果程序的业务逻辑非常复杂导致函数的调用栈非常深,这时自动化的代码评审不能检测出代码的调用执行逻辑,从而影响代码评审的效果。


技术实现要素:

4.基于此,有必要针对上述技术问题,提供一种能在软件测试过程有效地检测出代码执行逻辑的代码调用检测方法、装置、计算机设备和存储介质。
5.一种代码调用检测方法,所述方法包括:
6.获取待检测代码对应的代码更新信息;
7.生成所述代码更新信息对应的标签分支;
8.通过钩子操作提取所述标签分支对应的最新提交信息,基于所述最新提交信息生成钩子文件;
9.当执行所述待检测代码对应的预设测试用例时,加载所述钩子文件,基于运行时技术记录所述钩子文件对应方法的调用记录;
10.根据所述钩子文件对应方法的调用记录,获取所述代码更新信息中方法的调用检测结果。
11.一种代码调用检测装置,所述装置包括:
12.信息获取模块,用于获取待检测代码对应的代码更新信息;
13.标签分支生成模块,用于生成所述代码更新信息对应的标签分支;
14.钩子文件生成模块,用于通过钩子操作提取所述标签分支对应的最新提交信息,基于所述最新提交信息生成钩子文件;
15.调用记录生成模块,用于当执行所述待检测代码对应的预设测试用例时,加载所述钩子文件,基于运行时技术记录所述钩子文件对应方法的调用记录;
16.检测结果获取模块,用于根据所述钩子文件对应方法的调用记录,获取所述代码更新信息中方法的调用检测结果。
17.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
18.获取待检测代码对应的代码更新信息;
19.生成所述代码更新信息对应的标签分支;
20.通过钩子操作提取所述标签分支对应的最新提交信息,基于所述最新提交信息生成钩子文件;
21.当执行所述待检测代码对应的预设测试用例时,加载所述钩子文件,基于运行时技术记录所述钩子文件对应方法的调用记录;
22.根据所述钩子文件对应方法的调用记录,获取所述代码更新信息中方法的调用检测结果。
23.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
24.获取待检测代码对应的代码更新信息;
25.生成所述代码更新信息对应的标签分支;
26.通过钩子操作提取所述标签分支对应的最新提交信息,基于所述最新提交信息生成钩子文件;
27.当执行所述待检测代码对应的预设测试用例时,加载所述钩子文件,基于运行时技术记录所述钩子文件对应方法的调用记录;
28.根据所述钩子文件对应方法的调用记录,获取所述代码更新信息中方法的调用检测结果。
29.上述代码调用检测方法、装置、计算机设备和存储介质,通过获取待检测代码对应的代码更新信息;生成所述代码更新信息对应的标签分支;通过钩子操作提取所述标签分支对应的最新提交信息,基于所述最新提交信息生成钩子文件;当执行所述待检测代码对应的预设测试用例时,加载所述钩子文件,基于运行时技术记录所述钩子文件对应方法的调用记录;根据所述钩子文件对应方法的调用记录,获取所述代码更新信息中方法的调用检测结果。本技术通过在待检测代码更新后,生成代码更新信息对应的标签分支,而后通过钩子操作来记录标签分支内的最新提交信息,并基于这些来生成钩子文件,从而能在通过预设测试用例对待检测代码进行软件测试时,通过运行时技术加载钩子文件来记录这些最新提交信息中方法的调用记录,有效地实现测试过程中代码调用逻辑的检测。
附图说明
30.图1为一个实施例中代码调用检测方法的应用环境图;
31.图2为一个实施例中代码调用检测方法的流程示意图;
32.图3为一个实施例中创建标签分支步骤的流程示意图;
33.图4为一个实施例中创建标签分支的具体结构示意图;
34.图5为一个实施例中生成钩子文件步骤的流程示意图;
35.图6为另一个实施例中生成钩子文件步骤的流程示意图;
36.图7为一个实施例中钩子文件具体结构示意图;
37.图8为一个实施例中记录方法调用记录步骤的流程示意图;
38.图9为另一个实施例中记录方法调用记录步骤的流程示意图;
39.图10为一个实施例中代码调用检测过程的整体流程示意图;
40.图11为一个实施例中代码调用检测装置的结构框图;
41.图12为一个实施例中计算机设备的内部结构图。
具体实施方式
42.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
43.云技术(cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
44.云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。本技术的代码调用检测方法具体可以通过云计算来实现软件测试过程中的代码调用检测。
45.本技术提供的代码调用检测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。终端102可以向服务器104发送代码更新信息,以通过服务器104来在软件测试过程进行相应的代码调用检测,服务器104则获取终端102提交的待检测代码对应的代码更新信息;生成代码更新信息对应的标签分支;通过钩子操作提取标签分支对应的最新提交信息,基于最新提交信息生成钩子文件;当执行待检测代码对应的预设测试用例时,加载钩子文件,基于运行时技术记录钩子文件对应方法的调用记录;根据钩子文件对应方法的调用记录,获取代码更新信息中方法的调用检测结果。其中,服务器104可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端102可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本技术在此不做限制。
46.在一个实施例中,如图2所示,提供了一种代码调用检测方法,以该方法应用于图1中的服务器104为例进行说明,包括以下步骤:
47.步骤201,获取待检测代码对应的代码更新信息。
48.其中,待检测代码是指本技术的代码调用检测方法所对应的软件测试过程中所测试的工程代码。在一个具体的实施例中,待检测代码具体可以为一款移动端应用所对应的程序代码。而代码更新信息可以是开发过程中分步开发所编写的最新代码,也可以是指用于对待检测代码进行版本更新的代码。如对于上述的移动端应用所对应的程序代码,其代码更新信息具体可以包括用于对该移动端应用进行版本更新的代码,或者是修复该移动端
应用内bug的代码等,代码更新信息具体包括新增代码、修改原有代码以及删除原有代码等信息。
49.具体地,当终端102方的代码编写人员在最新代码编写完成后,可以进行对应的代码增量测试,来对代码进行测试,以确定其效果。在开发过程中,终端102方的开发人员可以提交最新编写完成的代码,以代码更新信息的形式发送至服务器104,而服务器104则获取代码更新信息,从而在后续的代码测试过程中,对这部分代码更新信息中方法被调用的次数进行具体检测。在一个具体的实施例中,本技术的代码调用检测方法具体应用于通过git(分布式版本控制系统)系统来对应用代码进行管理的实例。git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git能够对代码的版本控制做到较好的管理。git能在特定的重要动作发生时触发自定义脚本。而在开发人员提交代码时,可以通过执行git commit命令,来将新开发完成的代码提交,执行该命令可以将新编写完成的代码保存在本地的暂存区,而后通过执行git push命令,将这些新编写完成的代码提交至远程仓库。
50.步骤203,生成代码更新信息对应的标签分支。
51.其中,标签分支具体是指tag分支,具体地,在每一次代码更新信息提交后,服务器都可以为这个提交打上对应的标签,并创建对应的标签分支。例如在git系统中,就可以通过git tag来为提交打上tag分支。
52.具体地,在进行代码调用检测过程中,在提交代码更新信息后,可以针对代码更新信息来创建对应的标签分支,基于标签分支来实现代码调用检测的后续处理。如对于git系统,在通过执行git commit命令,将新编写完成的代码保存在本地的暂存区后,可以针对该commit节点打一个tag,从而生成代码更新信息对应的标签分支。通过创建标签分支可以在实现代码调用检测的同时,不影响当前开发分支的提交,也不影响git服务器对开发分支合并的效率。
53.步骤205,通过钩子操作提取标签分支对应的最新提交信息,基于最新提交信息生成钩子文件。
54.其中,钩子操作又称hook操作,由钩子函数执行,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子函数就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。而钩子文件则是指用于索引对应位置,从而执行后续钩子操作的文件。在本技术的方案中,钩子文件中能够通过标记索引到对应位置,方便运行程序后执行新的方法,从而实现代码调用检测。在本技术的方案中,钩子操作具体可以为git hook,用于在特定的重要动作发生时触发自定义脚本。git hook的钩子包括客户器端的钩子以及服务器端的钩子。客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。本技术的方案主要针对提交到服务器端的代码进行git hook操作。
55.本技术可以在创建标签分支完成后,通过执行钩子操作来提取标签分支对应的最新提交信息。该钩子操作具体可以是在完成代码更新信息提交操作时,通过钩子操作执行预设的脚本文件,基于脚本文件来实现代码更新信息对应的标签分支的信息提取,从而提取出标签分支对应的最新提交信息,而后基于最新提交信息生成钩子文件,通过钩子文件
来标记代码调用检测目标(代码更新信息中所包含的方法)的位置,从而实现代码调用检测。
56.步骤207,当执行待检测代码对应的预设测试用例时,加载钩子文件,基于运行时技术记录钩子文件对应方法的调用记录。
57.步骤209,根据钩子文件对应方法的调用记录,获取代码更新信息中方法的调用检测结果。
58.其中,预设测试用例是指用于对待检测代码进行软件测试所用的测试用例,在执行预设测试用例的过程中,代码更新信息中的方法会被调用以实现对应的功能。运行时技术即runtime技术,objective-c扩展了c语言,并加入了面向对象特性和smalltalk式的消息传递机制。而这个扩展的核心是一个用c和编译语言写的runtime库。它是objective-c面向对象和动态机制的基石。本技术的方案主要利用运行时技术在执行预设测试用例时,在待检测代码对应的程序运行的过程中将钩子文件中所记录的方法进行替换后进行代码插桩,从而实现调用检测。
59.具体地,代码调用检测具体是指在待检测代码进行软件测试时,对代码更新信息中新增方法的调用执行逻辑进行检测,从而确定代码更新信息中方法的调用次数是否异常。因此,在进行调用检测时,需要执行待检测代码对应的预设测试用例。并加载钩子文件,来确定待检测代码中,代码更新信息内的方法所处的位置,并在测试用例的执行过程中,记录相应方法被调用的次数,从而得到钩子文件中所记录方法的调用记录,而这些方法也即是代码更新信息中所记录的方法。而后可以基于调用记录与预设的调用预期进行对比,判断调用次数是否达到了预期的次数,从而得出最终的调用检测结果。
60.上述代码调用检测方法,通过获取待检测代码对应的代码更新信息;生成代码更新信息对应的标签分支;通过钩子操作提取标签分支对应的最新提交信息,基于最新提交信息生成钩子文件;当执行待检测代码对应的预设测试用例时,加载钩子文件,基于运行时技术记录钩子文件对应方法的调用记录;根据钩子文件对应方法的调用记录,获取代码更新信息中方法的调用检测结果。本技术通过在待检测代码更新后,生成代码更新信息对应的标签分支,而后通过钩子操作来记录标签分支内的最新提交信息,并基于这些来生成钩子文件,从而能在通过预设测试用例对待检测代码进行软件测试时,通过运行时技术加载钩子文件来记录这些最新提交信息中方法的调用记录,有效地实现测试过程中代码调用逻辑的检测。
61.在一个实施例中,如图3所示,步骤203包括:
62.步骤302,通过预设脚本文件提取代码更新信息对应的类名与方法名。
63.步骤304,生成所述代码更新信息对应的初始标签分支,并将所述类名与方法名提交至所述初始标签分支,得到所述代码更新信息对应的标签分支。
64.其中,预设脚本文件具体是指用于执行扫描功能所用的脚本文件,脚本文件的内容主要是匹配工程中的待检测代码源文件,提取出增加、修改、删除的类名及其方法名称,并且过滤掉提交的资源文件,包括图片、文本、zip包等。而代码更新信息具体为开发人员新编写完成的程序代码,因此里面包含了对应的类名与方法名等内容。
65.具体地,可以在待检测代码的工程文件中增加入预设脚本文件,而后在创建标签分支的过程中,开发人员提交代码后,在服务器104端即可以通过这些预先添加进入的预设
脚本文件,来提取代码更新信息对应的类名与方法名。而后创建该代码更新信息对应的空白初始标签分支,并将提取出的代码更新信息中涉及到的类名与方法名提交至标签分支,这些涉及到的类名和方法名具体可以为新增的类和方法,还可以是修改后的原有待检测代码中的类和方法。在其中一个实施例中,本技术的代码调用检测方法应用于git系统,创建标签分支的具体结构示意图可以参照图4。当开发人员从终端通过git commit提交代码更新信息至服务器时,携带代码更新信息中所携带的修改文件操作相关信息,包括新增代码、修改原有代码以及删除原有代码等。而后服务器在执行git push指令时,会生成git commit所提交的代码更新信息对应的tag分支,基于git commit所提交的代码更新信息来生成节点a,节点a内包括了当前轮次的代码更新信息中新增的类和方法。而对于git commit所提交待检测代码其他部分需要修改的类和方法,则可以在该tag分支中生成对应的其他提交轮次已提交的类和方法对应的节点。将类名与方法名提交至标签分支的操作具体可以通过cherry-pick来实现,将提交的代码更新信息的分支中的修改提交到该新创建的tag分支。本实施例中,先通过预设脚本来提取代码更新信息中涉及的类名与方法名,而后通过生成标签分支,并将提取到的类名和方法名提交到标签分支内,从而实现通过标签分支来记录代码更新信息中的类与方法。同时,创建标签分支可以不影响当前开发分支的提交,也不影响开发分支合并的效率。
66.在其中一个实施例中,如图5所示,步骤205包括:
67.步骤502,提取最新提交信息中的类名与方法名。
68.步骤504,基于最新提交信息中的类名与方法名,生成钩子文件。
69.具体地,钩子文件用于记录方法的位置,因此可以在创建玩标签分支后,直接执行钩子操作,通过钩子操作执行相应的脚本文件,来从tag分支中提取到最后一次提交信息,也就是代码更新信息中所涉及到的类名和方法名,而后定位这些类名和方法名,生成相应的钩子文件。本实施例中,基于待检测代码的最新提交信息中的类名与方法名来生成相应的钩子文件,从而可以通过钩子文件来有效地对类名与方法名对应部分进行定位,从而有效地记录这些方法的调用记录。
70.在其中一个实施例中,如图6所示,步骤504包括:
71.步骤601,基于最新提交信息中的类名,在待检测代码中识别新增的类方法与实例方法。
72.步骤603,基于最新提交信息中的方法名中的关键字,识别新增的类方法与实例方法对应的代码位置。
73.步骤605,基于代码位置,在新增的类方法与实例方法的方法名称上添加预设前缀,生成钩子文件。
74.其中,代码更新信息所涉及到的方法具体可以包括新增的类方法与新增的实例方法。而预设前缀则主要用于在代码调用检测过程中作为识别的标志。
75.具体地,在通过钩子操作提取到最新提交信息中的类名与方法名之后,可以将提交中的类名和方法名作为关键字,在待检测代码的开发分支中进行检索。在检索过程中,可以先以类名为基础搜索对应增加的类方法和实例方法。而后基于方法名关键字进行匹配,对新增的类方法与实例方法对应的代码位置进行标记。而后可以基于标记的位置,在原有方法名称上添加对应的预设前缀,生成新方法,最终生成钩子文件。钩子文件中能够通过标
记索引到对应位置,方便运行程序后执行新的方法。钩子文件具体可以参照图7所示,钩子文件即为单个图7中的数据结构组成的集合。通过钩子文件中标记的类名称和方法以及行号就能定位到方法被调用的开始地址。本实施例中,通过类名与方法名来进行方法所在代码位置的识别,从而在新增的类方法与实例方法的方法名称上添加预设前缀,从而有效地生成钩子文件,实现对新增的类方法与实例方法的定位,为后续的代码调用检测提供工具基础。
76.在其中一个实施例中,如图8所示,步骤207包括:
77.步骤801,当执行待检测代码对应的预设测试用例时,加载钩子文件。
78.步骤803,基于运行时技术将待检测代码中新增的类方法与实例方法,替换为钩子文件中包含预设前缀的对应的方法,对应的方法为待检测代码中新增的类方法与实例方法所对应的方法。
79.步骤805,基于预设前缀为新增的类方法与实例方法添加全局变量。
80.步骤807,基于全局变量,记录新增的类方法与实例方法的调用记录。
81.其中,运行时技术即runtime技术,objective-c扩展了c语言,并加入了面向对象特性和smalltalk式的消息传递机制。而这个扩展的核心是一个用c和编译语言写的runtime库。它是objective-c面向对象和动态机制的基石。本技术的方案主要利用运行时技术在执行预设测试用例时,在待检测代码对应的程序运行的过程中将钩子文件中所记录的方法进行替换后进行代码插桩,从而实现调用检测。而全局变量是变量的一种,相较于局部变量,全局变量拥有更长的生命周期。全局变量可以被待测试代码对应的程序中所有对象或函数引用,此处每一个类方法或者实例方法都分别对应有一个全局变量。
82.具体地,本技术的方案可以通过全局变量来记录类方法以及实例方法的被调用次数,由于全局变量可以被程序中所有对象或函数引用,所以可以通过创建相应的全局变量在方法外记录方法的调用次数,同时防止数据丢失。而对于具体的调用记录创建过程,则可以在执行测试用例开始时,先加载钩子文件,基于运行时技术将待检测代码中新增的类方法与实例方法,替换为钩子文件中包含预设前缀的对应方法,进行方法替换,如此一来待检测代码中所有新增的类方法与实例方法都被替换为了名字带有预设前缀的相同类方法以及实例方法。具体地,可以是通过运行时技术,调用method_exchangeimplementations函数将钩子文件中带预设前缀的方法和新增代码内原有的方法进行替换。而后创建全局变量,将预设前缀与全局变量相关联。当包含预设前缀的方法被调用时,全局变量会相应地记录下调用次数。因此,可以基于全局变量来记录新增的类方法与实例方法的调用记录。本实施中,通过运行时技术基于钩子文件记录的方法位置,来实现对方法的替换,而后通过全局变量来实现对替换后方法的调用过程记录,可以有效实现在预设测试用例执行过程中的方法调用检测,保证检测的准确率。
83.在其中一个实施例中,如图9所示,步骤807包括:
84.步骤902,当新增的类方法与实例方法被调用时,基于新增的类方法与实例方法被调用的次数修改全局变量的值。
85.步骤904,将修改后全局变量保存至预设数据存储类。
86.步骤906,当预设测试用例执行完成时,从预设数据存储类中获取最新的全局变量,根据最新的全局变量获取新增的类方法与实例方法的调用记录。
87.其中,预设数据存储类是指专门用于存储数据的类,如对于ios系统,其预设数据存储类具体可以为nsuserdefaults。
88.具体地,在新增的类方法与实例方法被调用时,每调用一次后相应的全局变量就会加一并保存在预设数据存储类中,而后,在每次预测用例执行完毕时,都可以从预设数据存储类中取出每个类对应方法的全局变量,而后基于这些全局变量的具体数值,来生成数据表。这些新生成的数据表就是最终得到的新增的类方法与实例方法的调用记录。通过调用记录可以有效地展示出这些新增的类方法与实例方法在测试用例执行过程中的调用逻辑。本实施例中,通过预设数据存储类来保存全局变量,从而有效地实现了代码调用过程中方法调用的统计。
89.在其中一个实施例中,步骤209包括:获取代码更新信息中方法对应的预设调用次数;根据调用记录以及预设调用次数,获取代码更新信息中方法的调用检测结果。
90.其中,调用检测结果具体是指代码更新信息内方法的调用次数是否达到预期值。
91.具体地,开发人员在提交代码更新信息时,还可以提交更新代码中每个方法的最少调用次数,而后在预设测试用例执行完成后,可以基于调用记录来确定在软件测试过程中,代码更新信息中方法实际的调用次数,从而通过对比提交的方法的最少调用次数和实际的调用次数,来确定调用检测结果。调用检测结果具体包括方法调用达到预期以及未达到预期,当调用记录内方法的调用次数小于法的最少调用次数时,可以判定方法调用未达到预期。
92.在其中一个实施例中,本技术的代码调用检测方法用于实现对git系统上迭代更新的ios程序进行代码调用检测。具体是指对最新版本所修改的方法进行调用检测。如图10所示,开发人员在开发完成时,可以通过git commit命令,向服务器提交最新编写完成的代码。而后服务器可以执行内置的脚本,扫描出该次commit中所提交的代码更新信息中所涉及到的类名以及方法名。而后执行git push命令。在执行git push命令时,创建该次commit对应的tag分支,并将该次commit中的类名和方法名提交到tag分支中,而后可以通过钩子操作来提取出最新的tag分支中的类名和方法名,通过检索和匹配来生成钩子文件,钩子文件中可以记录下类方法与实例方法的位置。而后开始执行测试用例的测试过程中,加载钩子文件,通过钩子文件来记录下方法调用和执行的次数,通过对比实例的执行次数与预设次数,得出最终的调用检测结果,并将其反馈给开发人员。其中,在获取调用检测结果时,在加载钩子文件后;可以基于运行时技术将待检测代码中新增的类方法与实例方法,替换为钩子文件中包含预设前缀的对应方法;基于预设前缀为新增的类方法与实例方法添加全局变量;基于全局变量记录新增的类方法与实例方法的调用记录。
93.应该理解的是,虽然图2-10的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-10中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
94.在一个实施例中,如图11所示,提供了一种代码调用检测装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:信息获
取模块1102、标签分支生成模块1104、钩子文件生成模块1106、调用记录生成模块1108和检测结果获取模块1110,其中:
95.信息获取模块1102,用于获取待检测代码对应的代码更新信息。
96.标签分支生成模块1104,用于生成代码更新信息对应的标签分支。
97.钩子文件生成模块1106,用于通过钩子操作提取标签分支对应的最新提交信息,基于最新提交信息生成钩子文件。
98.调用记录生成模块1108,用于当执行待检测代码对应的预设测试用例时,加载钩子文件,基于运行时技术记录钩子文件对应方法的调用记录。
99.检测结果获取模块1110,用于根据钩子文件对应方法的调用记录,获取代码更新信息中方法的调用检测结果。
100.在其中一个实施例中,标签分支生成模块1104具体用于:通过预设脚本文件提取代码更新信息对应的类名与方法名;生成代码更新信息对应的初始标签分支,并将类名与方法名提交至初始标签分支,得到代码更新信息对应的标签分支。
101.在其中一个实施例中,钩子文件生成模块1106具体用于:提取最新提交信息中的类名与方法名;基于最新提交信息中的类名与方法名,生成钩子文件。
102.在其中一个实施例中,钩子文件生成模块1106还用于:基于最新提交信息中的类名,在待检测代码中识别新增的类方法与实例方法;基于最新提交信息中的方法名中的关键字,识别新增的类方法与实例方法对应的代码位置;基于代码位置,在新增的类方法与实例方法的方法名称上添加预设前缀,生成钩子文件。
103.在其中一个实施例中,调用记录生成模块1108具体用于:当执行待检测代码对应的预设测试用例时,加载钩子文件;基于运行时技术将待检测代码中新增的类方法与实例方法,替换为钩子文件中包含预设前缀的对应的方法,对应的方法为待检测代码中新增的类方法与实例方法所对应的方法;基于预设前缀为新增的类方法与实例方法添加全局变量;基于全局变量,记录新增的类方法与实例方法的调用记录。
104.在其中一个实施例中,调用记录生成模块1108还用于:当新增的类方法与实例方法被调用时,基于新增的类方法与实例方法被调用的次数修改全局变量的值;将修改后全局变量保存至预设数据存储类;当预设测试用例执行完成时,从预设数据存储类中获取最新的全局变量,根据最新的全局变量获取新增的类方法与实例方法的调用记录。
105.在其中一个实施例中,检测结果获取模块1110具体用于:获取代码更新信息中方法对应的预设调用次数;根据调用记录以及预设调用次数,获取代码更新信息中方法的调用检测结果。
106.关于代码调用检测装置的具体限定可以参见上文中对于代码调用检测方法的限定,在此不再赘述。上述代码调用检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
107.在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图12所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易
失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储代码调用检测数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码调用检测方法。
108.本领域技术人员可以理解,图12中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
109.在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
110.在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
111.在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
112.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
113.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
114.以上实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献