System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机领域,特别涉及一种处理源代码的方法、装置及存储介质。
技术介绍
1、代码覆盖率是服务运行过程中被执行代码占全部代码的比例,是一种客观有效地度量服务的源代码质量的指标。在开发出服务的源代码后,可以对服务的源代码进行测试,在对该源代码进行测试的过程中可以获取代码覆盖率。
2、在相关技术中,需要技术人员手动参与才能获取到源代码的代码覆盖率。技术人员手动参与,需要技术人员感知代码覆盖率的获取过程,增加了成本。
技术实现思路
1、本申请提供了一种处理源代码的方法、装置及存储介质,以实现自动化获取代码覆盖率,降低成本。所述技术方案如下:
2、第一方面,本申请提供了一种处理源代码的方法,所述方法应用于代码测试平台,代码测试平台用于使用第一测试用例测试第一源代码。在所述方法中,接收针对启动代码测试的指令,该启动代码测试的指令用于指示代码测试平台启动对第一源代码的测试。在第一源代码包括的至少一个第一方法中增加私有变量,该至少一个第一方法为第一源代码中未执行的方法,第一方法中的私有变量用于在执行该第一方法时记录该第一方法中的每个代码语句的执行情况。在使用第一测试用例测试完第一源代码时,基于该至少一个第一方法中的私有变量获取第一代码覆盖信息,第一代码覆盖信息用于描述该至少一个第一方法中代码语句的执行情况。基于第一代码覆盖信息,展示第一代码覆盖结果,第一代码覆盖结果包括第一源代码的代码覆盖率。
3、在接收启动代码测试的指令时启动对第一源代码的测试。在启动
4、在一种可能的实施方式中,第一源代码还包括第二方法,第二方法是在该至少一个第一方法中增加私有变量时正在执行的方法。获取第二方法的线程栈帧信息,该线程栈帧信息用于记录第二方法中的每个代码语句的执行情况。基于该线程栈帧信息确定第二方法中被执行的代码语句,第一代码覆盖信息还用于描述第二方法中代码语句的执行情况。这样丰富了第一代码覆盖信息,避免遗漏第二方法的代码执行情况。
5、在另一种可能的实施方式中,第一代码覆盖信息还用于描述第一静态代码块中的每个代码语句的执行情况,第一静态代码块是在该至少一个第一方法中增加私有变量前第一源代码中已执行完的静态代码块,第一静态代码块中的每个代码语句被执行。这样丰富了第一代码覆盖信息,避免遗漏第一静态代码块的代码执行情况。
6、在另一种可能的实施方式中,第一代码覆盖信息还用于描述目标类的构造方法中的每个代码语句的执行情况,目标类是在该至少一个第一方法中增加私有变量前第一源代码中已执行完的包括一个构造方法的类,目标类的构造方法中的每个代码语句被执行。这样丰富了第一代码覆盖信息,避免遗漏目标类的构造方法的代码执行情况。
7、在另一种可能的实施方式中,第一方法的私有变量包括第一方法中的每个代码语句对应的元素。增加与第一方法中的第i个代码语句对应的赋值语句,i=1、2、3、……,该赋值语句用于在第i个代码语句被执行时将第i个代码语句对应的元素的取值设置为目标值,目标值用于指示第i个代码语句被执行。这样通过第一方法中的赋值语句使私有变量记录该第一方法中的代码语句执行情况。
8、在另一种可能的实施方式中,第一代码覆盖信息包括该至少一个第一方法中被执行的代码语句的标识信息。获取每个第一方法在第一源代码中的顺序以及每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息。获取每个第一方法的私有变量包括的各元素的取值。基于每个第一方法的私有变量包括的各元素的取值,每个第一方法的顺序,每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息,获取第一代码覆盖信息。
9、由于在代码测试平台中该至少一个方法是乱序存储的,基于每个第一方法的顺序,每个第一方法中的起始代码语句的标识信息和结束代码语句的标识信息,可以恢复出第一源代码中的该至少一个第一方法的顺序,这样提高获取的第一代码覆盖信息的精度。
10、在另一种可能的实施方式中,代码测试平台包括第一测试设备和第二测试设备,第一源代码包括第一部分和第二部分,第一测试设备用于使用第一测试用例测试第一部分,第二测试设备用于使用第一测试用例测试第二部分,第一代码覆盖信息用于描述第一部分中代码语句的执行情况。在第二测试设备中的第一源代码包括的至少一个第三方法中增加第二私有变量,该至少一个第三方法为第二测试设备中的第一源代码中未执行的方法。在第二测试设备使用第一测试用例测试完第一源代码时,基于第二部分包括的第三方法中的私有变量获取第二代码覆盖信息,第二代码覆盖信息用于描述第二部分中代码语句的执行情况。基于第一代码覆盖信息和第二代码覆盖信息获取第一源代码对应的整体代码覆盖信息。基于该整体代码覆盖信息,展示第一代码覆盖结果。
11、这样可以使用多个测试设备测试第一源代码的不同部分,然后获取每个测试设备测试的部分源代码对应的代码覆盖信息,基于每个部分源代码对应的代码覆盖信息获取第一源代码对应的整体代码覆盖信息。从而保证使用多个测试设备并行地对第一源代码进行测试,提高了测试效率。
12、在另一种可能的实施方式中,在第一源代码中除该至少一个第一方法之外的方法中增加私有变量。这样保证在第一源代码的每个方法中增加私有变量,通过每个方法中的私有变量收集每个方法中的代码语句的执行情况。
13、在另一种可能的实施方式中,第一代码覆盖结果包括的代码覆盖率是第一源代码执行第一测试用例时的代码覆盖率,代码测试平台还用于在使用第一测试用例测试完第一源代码之后使用第二测试用例测试第一源代码。在使用第二测试用例测试完第一源代码时,基于第一源代码包括的各方法中的私有变量获取第三代码覆盖信息,第三代码覆盖信息用于描述第一源代码中代码语句的执行情况。基于第一代码覆盖信息和第三代码覆盖信息,展示第二代码覆盖结果,第二代码覆盖结果包括第一源代码执行第一测试用例和第二测试用例时的代码覆盖率。
14、由于使用一个测试用例可能无法执行第一源代码的每个代码语句,所以获取每个测试用例对应的代码覆盖信息,基于每个测试用例对应的代码覆盖信息可以准确地获取到第本文档来自技高网...
【技术保护点】
1.一种处理源代码的方法,其特征在于,所述方法应用于代码测试平台,所述代码测试平台用于使用第一测试用例测试第一源代码,所述方法包括:
2.如权利要求1所述的方法,其特征在于,所述第一源代码还包括第二方法,所述第二方法是在所述至少一个第一方法中增加所述私有变量时正在执行的方法,所述方法还包括:
3.如权利要求1或2所述的方法,其特征在于,所述第一代码覆盖信息还用于描述第一静态代码块中的每个代码语句的执行情况,所述第一静态代码块是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的静态代码块,所述第一静态代码块中的每个代码语句被执行。
4.如权利要求1-3任一项所述的方法,其特征在于,所述第一代码覆盖信息还用于描述目标类的构造方法中的每个代码语句的执行情况,所述目标类是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的包括一个构造方法的类,所述目标类的构造方法中的每个代码语句被执行。
5.如权利要求1-4任一项所述的方法,其特征在于,所述第一方法的私有变量包括所述第一方法中的每个代码语句对应的元素,所述
6.如权利要求1-5任一项所述的方法,其特征在于,所述第一代码覆盖信息包括所述至少一个第一方法中被执行的代码语句的标识信息,所述方法还包括:
7.如权利要求1-6任一项所述的方法,其特征在于,所述代码测试平台包括第一测试设备和第二测试设备,所述第一源代码包括第一部分和第二部分,所述第一测试设备用于使用所述第一测试用例测试所述第一部分,所述第二测试设备用于使用所述第一测试用例测试所述第二部分,所述第一代码覆盖信息用于描述所述第一部分中代码语句的执行情况,所述方法还包括:
8.如权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
9.如权利要求8所述的方法,其特征在于,所述第一代码覆盖结果包括的所述代码覆盖率是所述第一源代码执行所述第一测试用例时的代码覆盖率,所述代码测试平台还用于在使用所述第一测试用例测试完所述第一源代码之后使用第二测试用例测试所述第一源代码,所述方法还包括:
10.如权利要求1-9任一项所述的方法,其特征在于,所述方法还包括:
11.如权利要求10所述的方法,其特征在于,所述方法还包括:
12.如权利要求11所述的方法,其特征在于,所述至少一个组成部分包括如下一个或多个:所述差异部分中的至少一个分支,所述差异部分中的至少一个方法,或者,所述差异部分中的至少一个类。
13.一种处理源代码的装置,其特征在于,所述装置用于使用第一测试用例测试第一源代码,所述装置包括:
14.如权利要求13所述的装置,其特征在于,所述第一源代码还包括第二方法,所述第二方法是在所述至少一个第一方法中增加所述私有变量时正在执行的方法,所述处理单元,还用于:
15.如权利要求13或14所述的装置,其特征在于,所述第一代码覆盖信息还用于描述第一静态代码块中的每个代码语句的执行情况,所述第一静态代码块是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的静态代码块,所述第一静态代码块中的每个代码语句被执行。
16.如权利要求13-15任一项所述的装置,其特征在于,所述第一代码覆盖信息还用于描述目标类的构造方法中的每个代码语句的执行情况,所述目标类是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的包括一个构造方法的类,所述目标类的构造方法中的每个代码语句被执行。
17.如权利要求13-16任一项所述的装置,其特征在于,所述第一方法的私有变量包括所述第一方法中的每个代码语句对应的元素,所述处理单元,还用于:
18.如权利要求13-17任一项所述的装置,其特征在于,所述第一代码覆盖信息包括所述至少一个第一方法中被执行的代码语句的标识信息,所述处理单元,用于:
19.如权利要求13-18任一项所述的装置,其特征在于,所述装置还包括第一测试设备和第二测试设备,所述第一源代码包括第一部分和第二部分,所述第一测试设备用于使用所述第一测试用例测试所述第一部分,所述第二测试设备用于使用所述第一测试用例测试所述第二部分,所述第一代码覆盖信息用于描述所述第一部分中代码语句的执行情况,所述处理单元,还用于:
20.如权利要求13-19任一项所述的装置,其特征在于,所述处理单元,还用于在所述第一源代码中除所述至少一个第一方法之外的方法中增加私有变量。
21.如权利要求20所述的装置,其特征...
【技术特征摘要】
1.一种处理源代码的方法,其特征在于,所述方法应用于代码测试平台,所述代码测试平台用于使用第一测试用例测试第一源代码,所述方法包括:
2.如权利要求1所述的方法,其特征在于,所述第一源代码还包括第二方法,所述第二方法是在所述至少一个第一方法中增加所述私有变量时正在执行的方法,所述方法还包括:
3.如权利要求1或2所述的方法,其特征在于,所述第一代码覆盖信息还用于描述第一静态代码块中的每个代码语句的执行情况,所述第一静态代码块是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的静态代码块,所述第一静态代码块中的每个代码语句被执行。
4.如权利要求1-3任一项所述的方法,其特征在于,所述第一代码覆盖信息还用于描述目标类的构造方法中的每个代码语句的执行情况,所述目标类是在所述至少一个第一方法中增加所述私有变量前所述第一源代码中已执行完的包括一个构造方法的类,所述目标类的构造方法中的每个代码语句被执行。
5.如权利要求1-4任一项所述的方法,其特征在于,所述第一方法的私有变量包括所述第一方法中的每个代码语句对应的元素,所述在所述第一源代码包括的至少一个第一方法中增加私有变量之后,还包括:
6.如权利要求1-5任一项所述的方法,其特征在于,所述第一代码覆盖信息包括所述至少一个第一方法中被执行的代码语句的标识信息,所述方法还包括:
7.如权利要求1-6任一项所述的方法,其特征在于,所述代码测试平台包括第一测试设备和第二测试设备,所述第一源代码包括第一部分和第二部分,所述第一测试设备用于使用所述第一测试用例测试所述第一部分,所述第二测试设备用于使用所述第一测试用例测试所述第二部分,所述第一代码覆盖信息用于描述所述第一部分中代码语句的执行情况,所述方法还包括:
8.如权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
9.如权利要求8所述的方法,其特征在于,所述第一代码覆盖结果包括的所述代码覆盖率是所述第一源代码执行所述第一测试用例时的代码覆盖率,所述代码测试平台还用于在使用所述第一测试用例测试完所述第一源代码之后使用第二测试用例测试所述第一源代码,所述方法还包括:
10.如权利要求1-9任一项所述的方法,其特征在于,所述方法还包括:
11.如权利要求10所述的方法,其特征在于,所述方法还包括:
12.如权利要求11所述的方法,其特征在于,所述至少一个组成部分包括如下一个或多个:所述差异部分中的至少一个分支,所述差异部分中的至少一个方法,或者,所述差异部分中的至少一个类。
13.一种处理源代码的装置,其特征在于,所述装置用于使用第一测试用例测试第一源代码,所述装置包括:
14.如权利要求13所述的装置,其特征在于,所述第一源代码还包括第二方法,所述第二方法是在所述至少一个第一方法中增加所述私有变量时正在执行的方法,所述处理单元,还用于:
15.如权利...
【专利技术属性】
技术研发人员:刘昊,李明胜,贾敬楠,
申请(专利权)人:华为云计算技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。