处理源代码的方法、装置及存储介质与流程

文档序号:39484042发布日期:2024-09-24 20:31阅读:29来源:国知局
处理源代码的方法、装置及存储介质与流程

本技术涉及计算机领域,特别涉及一种处理源代码的方法、装置及存储介质。


背景技术:

1、代码覆盖率是服务运行过程中被执行代码占全部代码的比例,是一种客观有效地度量服务的源代码质量的指标。在开发出服务的源代码后,可以对服务的源代码进行测试,在对该源代码进行测试的过程中可以获取代码覆盖率。

2、在相关技术中,需要技术人员手动参与才能获取到源代码的代码覆盖率。技术人员手动参与,需要技术人员感知代码覆盖率的获取过程,增加了成本。


技术实现思路

1、本技术提供了一种处理源代码的方法、装置及存储介质,以实现自动化获取代码覆盖率,降低成本。所述技术方案如下:

2、第一方面,本技术提供了一种处理源代码的方法,所述方法应用于代码测试平台,代码测试平台用于使用第一测试用例测试第一源代码。在所述方法中,接收针对启动代码测试的指令,该启动代码测试的指令用于指示代码测试平台启动对第一源代码的测试。在第一源代码包括的至少一个第一方法中增加私有变量,该至少一个第一方法为第一源代码中未执行的方法,第一方法中的私有变量用于在执行该第一方法时记录该第一方法中的每个代码语句的执行情况。在使用第一测试用例测试完第一源代码时,基于该至少一个第一方法中的私有变量获取第一代码覆盖信息,第一代码覆盖信息用于描述该至少一个第一方法中代码语句的执行情况。基于第一代码覆盖信息,展示第一代码覆盖结果,第一代码覆盖结果包括第一源代码的代码覆盖率。

3、在接收启动代码测试的指令时启动对第一源代码的测试。在启动对第一源代码的测试后,在第一源代码中未执行的至少一个第一方法中增加私有变量,这样在执行该至少一个第一方法中的每个第一方法时,使用该第一方法中的私有变量记录该第一方法中的每个代码语句的执行情况。在使用第一测试用例测试完第一源代码时,基于该至少一个第一方法中的私有变量获取第一代码覆盖信息。第一代码覆盖信息用于描述该至少一个第一方法中代码语句的执行情况,基于第一代码覆盖信息,展示第一源代码的代码覆盖率。由于在启动对第一源代码的测试后,才向未执行的该至少一个第一方法中增加私有变量,避免了在启动时插桩的场景下所需要的对启动代码测试的指令的修改,在启动测试第一源代码后,自动在第一源代码中的未执行方法中增加私有变量,用户不感知整个获取第一代码覆盖信息的过程。从而实现自动获取代码覆盖率,节省成本,降低维护代码测试平台的成本,增加了用户使用自动化的代码测试平台的灵活性。

4、在一种可能的实施方式中,第一源代码还包括第二方法,第二方法是在该至少一个第一方法中增加私有变量时正在执行的方法。获取第二方法的线程栈帧信息,该线程栈帧信息用于记录第二方法中的每个代码语句的执行情况。基于该线程栈帧信息确定第二方法中被执行的代码语句,第一代码覆盖信息还用于描述第二方法中代码语句的执行情况。这样丰富了第一代码覆盖信息,避免遗漏第二方法的代码执行情况。

5、在另一种可能的实施方式中,第一代码覆盖信息还用于描述第一静态代码块中的每个代码语句的执行情况,第一静态代码块是在该至少一个第一方法中增加私有变量前第一源代码中已执行完的静态代码块,第一静态代码块中的每个代码语句被执行。这样丰富了第一代码覆盖信息,避免遗漏第一静态代码块的代码执行情况。

6、在另一种可能的实施方式中,第一代码覆盖信息还用于描述目标类的构造方法中的每个代码语句的执行情况,目标类是在该至少一个第一方法中增加私有变量前第一源代码中已执行完的包括一个构造方法的类,目标类的构造方法中的每个代码语句被执行。这样丰富了第一代码覆盖信息,避免遗漏目标类的构造方法的代码执行情况。

7、在另一种可能的实施方式中,第一方法的私有变量包括第一方法中的每个代码语句对应的元素。增加与第一方法中的第i个代码语句对应的赋值语句,i=1、2、3、……,该赋值语句用于在第i个代码语句被执行时将第i个代码语句对应的元素的取值设置为目标值,目标值用于指示第i个代码语句被执行。这样通过第一方法中的赋值语句使私有变量记录该第一方法中的代码语句执行情况。

8、在另一种可能的实施方式中,第一代码覆盖信息包括该至少一个第一方法中被执行的代码语句的标识信息。获取每个第一方法在第一源代码中的顺序以及每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息。获取每个第一方法的私有变量包括的各元素的取值。基于每个第一方法的私有变量包括的各元素的取值,每个第一方法的顺序,每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息,获取第一代码覆盖信息。

9、由于在代码测试平台中该至少一个方法是乱序存储的,基于每个第一方法的顺序,每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息,可以恢复出第一源代码中的该至少一个第一方法的顺序,这样提高获取的第一代码覆盖信息的精度。

10、在另一种可能的实施方式中,代码测试平台包括第一测试设备和第二测试设备,第一源代码包括第一部分和第二部分,第一测试设备用于使用第一测试用例测试第一部分,第二测试设备用于使用第一测试用例测试第二部分,第一代码覆盖信息用于描述第一部分中代码语句的执行情况。在第二测试设备中的第一源代码包括的至少一个第三方法中增加第二私有变量,该至少一个第三方法为第二测试设备中的第一源代码中未执行的方法。在第二测试设备使用第一测试用例测试完第一源代码时,基于第二部分包括的第三方法中的私有变量获取第二代码覆盖信息,第二代码覆盖信息用于描述第二部分中代码语句的执行情况。基于第一代码覆盖信息和第二代码覆盖信息获取第一源代码对应的整体代码覆盖信息。基于该整体代码覆盖信息,展示第一代码覆盖结果。

11、这样可以使用多个测试设备测试第一源代码的不同部分,然后获取每个测试设备测试的部分源代码对应的代码覆盖信息,基于每个部分源代码对应的代码覆盖信息获取第一源代码对应的整体代码覆盖信息。从而保证使用多个测试设备并行地对第一源代码进行测试,提高了测试效率。

12、在另一种可能的实施方式中,在第一源代码中除该至少一个第一方法之外的方法中增加私有变量。这样保证在第一源代码的每个方法中增加私有变量,通过每个方法中的私有变量收集每个方法中的代码语句的执行情况。

13、在另一种可能的实施方式中,第一代码覆盖结果包括的代码覆盖率是第一源代码执行第一测试用例时的代码覆盖率,代码测试平台还用于在使用第一测试用例测试完第一源代码之后使用第二测试用例测试第一源代码。在使用第二测试用例测试完第一源代码时,基于第一源代码包括的各方法中的私有变量获取第三代码覆盖信息,第三代码覆盖信息用于描述第一源代码中代码语句的执行情况。基于第一代码覆盖信息和第三代码覆盖信息,展示第二代码覆盖结果,第二代码覆盖结果包括第一源代码执行第一测试用例和第二测试用例时的代码覆盖率。

14、由于使用一个测试用例可能无法执行第一源代码的每个代码语句,所以获取每个测试用例对应的代码覆盖信息,基于每个测试用例对应的代码覆盖信息可以准确地获取到第一源代码的代码覆盖率。

15、在另一种可能的实施方式中,获取变更信息,该变更信息用于描述第二源代码和第一源代码之间的差异部分,第一源代码和第二源代码是同一服务的两个版本的源代码,第二源代码的版本早于第一源代码的版本。基于该变更信息和第一代码覆盖信息获取差异部分对应的代码覆盖信息,差异部分对应的代码覆盖信息用于描述差异部分中代码语句的执行情况。基于差异部分对应的代码覆盖信息展示差异部分的代码覆盖结果,差异部分的代码覆盖结果包括差异部分的代码覆盖率。

16、差异部分是第一源代码中新增的内容,差异部分的代码语句的执行情况可能是用户感兴趣的内容,展示差异部分的代码覆盖结果,能够满足用户需求,使得用户得知新版本源代码中新增部分的代码覆盖信息。

17、在另一种可能的实施方式中,获取差异部分包括的至少一个组成部分。针对每个组成部分,基于该差异部分对应的代码覆盖信息获取该组成部分对应的代码覆盖信息,该组成部分对应的代码覆盖信息用于描述该组成部分中代码语句的执行情况。基于该组成部分对应的代码覆盖信息展示该组成部分的代码覆盖结果,该组成部分的代码覆盖结果包括该组成部分的代码覆盖率。差异部分的每个组成部分可能是用户感兴趣的内容,展示每个组成部分的代码覆盖结果,能够满足用户需求。

18、在另一种可能的实施方式中,至少一个组成部分包括如下一个或多个:该差异部分中的至少一个分支,该差异部分中的至少一个方法,或者,该差异部分中的至少一个类。

19、第二方面,本技术提供了一种处理源代码的装置,用于执行第一方面或第一方面的任意一种可能的实现方式中的方法。具体地,所述装置包括用于执行第一方面或第一方面的任意一种可能的实现方式中的方法的单元。

20、第三方面,本技术提供了一种计算设备集群,所述集群包括至少一个计算设备,所述至少一个计算设备中的每个设备包括至少一个处理器和至少一个存储器,所述至少一个存储器中存储有计算机可读指令;所述至少一个处理器执行所述计算机可读指令,以使得所述集群实现第一方面或第一方面的任意一种可能的实现方式中的方法。

21、第四方面,本技术提供了一种计算机程序产品,所述计算机程序产品包括在计算机可读存储介质中存储的计算机程序,并且所述计算程序通过处理器进行加载来实现第一方面或第一方面的任意一种可能的实现方式中的方法。

22、第五方面,本技术提供了一种计算机可读存储介质,用于存储计算机程序,所述计算机程序通过处理器进行加载来执行第一方面或第一方面的任意一种可能的实现方式中的方法。

23、第六方面,本技术提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行第一方面或第一方面的任意一种可能的实现方式中的方法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1