本发明涉及计算机,尤其涉及一种条件语句取值确定方法、装置及存储介质。
背景技术:
1、一个判定语句中往往包含了若干个条件语句,条件覆盖比判定覆盖具有更强的测试能力;条件覆盖可以确定一个判定语句中的每一个条件语句的取值结果,而判定覆盖仅能判断判定语句的整个结果,而忽略每个条件语句的取值情况。现有技术中,白盒测试技术可以直接对源代码进行插桩来获取判定语句的取值情况,但在字节码插桩情况下,白盒测试工具对字节码进行分析,会导致源码信息缺失,从而不能获取到源代码中条件语句的取值情况。
技术实现思路
1、本发明实施例提供一种条件语句取值确定方法、装置及存储介质。
2、本发明实施例技术方案是这样实现的:
3、本发明实施例提供一种条件语句取值确定方法,所述方法包括:
4、确定源代码中的至少一个条件语句;
5、基于所述条件语句,在所述条件语句的之前和/或之后设置插桩语句;
6、基于所述插桩语句的执行状况,确定所述插桩语句对应的条件语句的取值,所述取值指示所述条件语句的执行结果。
7、上述方案中,所述确定源代码中的至少一个条件语句,包括:
8、从源代码的语句块中,确定出包含判定语句的判定语句块;其中,所述语句块包括:多个连续分布的代码语句;所述代码语句包括:一个入口语句和出口语句;
9、根据所述判定语句块对应的块信息,确定所述判定语句中的条件语句。
10、上述方案中,所述块信息包括:所述判定语句块的位置信息;
11、所述根据所述判定语句块对应的块信息,确定所述判定语句中的至少一个条件语句,包括:
12、根据判定语句块的位置信息,从源代码中确定出所述判定语句块中的判定语句;其中,所述判定语句包括一个或多个条件语句;
13、对所述判定语句进行解析,确定出所述判定语句中的条件语句。
14、上述方案中,所述基于所述条件语句,在所述条件语句的之前和/或之后设置插桩语句,包括:
15、通过汇编语言(asm)对所述条件语句进行字节码分析,生成测试语句;所述测试语句与所述条件语句逻辑相同或相反;
16、基于测试语句,在所述测试语句的之前设置包含第一数值的插桩语句;
17、和/或,
18、在所述测试语句的之后设置包含第二数值的插桩语句。
19、上述方案中,所述基于所述插桩语句的执行状况,确定所述插桩语句对应的条件语句的取值,所述取值指示所述条件语句的执行结果,包括:
20、基于所述包含第一数值的插桩语句和包含第二数值的插桩语句的执行状况,确定所述测试语句的取值;
21、根据所述测试语句的取值,确定所述条件语句的取值;其中,所述条件语句的取值指示所述条件语句的执行结果。
22、上述方案中,所述基于所述包含第一数值的插桩语句和包含第二数值的插桩语句的执行状况,确定所述测试语句的取值,包括:
23、若所述包含第一取值的插桩语句和所述包含第二取值的插桩语句均被执行,确定所述测试语句的取值为真的布尔值;
24、和/或,
25、若所述包含第一取值的插桩语句被执行,且所述包含第二取值的插桩语句未被执行,确定所述测试语句的取值为假的布尔值。
26、上述方案中,所述根据所述测试语句的取值,确定所述条件语句的取值,包括:
27、当所述测试语句与所述条件语句逻辑相同时,所述条件语句的取值等于所述测试语句的取值;
28、和/或,
29、当所述测试语句与所述条件语句逻辑相反时,所述条件语句的取值等于取反后的所述测试语句的取值。
30、本发明实施例还提供一种条件语句取值确定装置,所述装置包括:第一确定模块、设置模块和第二确定模块;
31、所述第一确定模块,用于确定源代码中的至少一个条件语句;
32、所述设置模块,用于基于所述条件语句,在所述条件语句的之前和/或之后设置插桩语句;
33、所述第二确定模块,用于基于所述插桩语句的执行状况,确定所述插桩语句对应的条件语句的取值,所述取值指示所述条件语句的执行结果。
34、上述方案中,所述第一确定模块,具体用于:
35、从源代码的语句块中,确定出包含判定语句的判定语句块;其中,所述语句块包括:多个连续分布的代码语句;所述代码语句包括:一个入口语句和出口语句;
36、根据所述判定语句块对应的块信息,确定所述判定语句中的条件语句。
37、上述方案中,所述块信息包括:所述判定语句块的位置信息;
38、所述第一确定模块,具体用于:根据判定语句块的位置信息,从源代码中确定出所述判定语句块中的判定语句;其中,所述判定语句包括一个或多个条件语句;
39、对所述判定语句进行解析,确定出所述判定语句中的条件语句。
40、上述方案中,所述设置模块,具体用于:
41、通过汇编语言(asm)对所述条件语句进行字节码分析,生成测试语句;所述测试语句与所述条件语句逻辑相同或相反;
42、基于测试语句,在所述测试语句的之前设置包含第一数值的插桩语句;
43、和/或,
44、在所述测试语句的之后设置包含第二数值的插桩语句。
45、上述方案中,所述第二确定模块,具体用于:
46、基于所述包含第一数值的插桩语句和包含第二数值的插桩语句的执行状况,确定所述测试语句条件语句的取值;
47、根据所述测试语句的取值,确定所述条件语句的取值;其中,所述条件语句的取值指示所述条件语句的执行结果。
48、上述方案中,所述第二确定模块,具体用于:
49、若所述包含第一取值的插桩语句和所述包含第二取值的插桩语句均被执行,确定所述测试语句的取值为真的布尔值;
50、和/或,
51、若所述包含第一取值的插桩语句被执行,且所述包含第二取值的插桩语句未被执行,确定所述测试语句的取值为假的布尔值。
52、上述方案中,所述第二确定模块,具体用于:
53、当所述测试语句与所述条件语句逻辑相同时,所述条件语句的取值等于所述测试语句的取值;
54、和/或,
55、当所述测试语句与所述条件语句逻辑相反时,所述条件语句的取值等于取反后的所述测试语句的取值。
56、本发明实施例还提供一种条件语句取值确定装置,所述装置包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器;
57、其中,所述处理器用于运行所述计算机程序时,执行上述任意一种条件语句取值确定方法的步骤。
58、本发明实施例还提供了一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令;所述计算机可执行指令被处理器执行后,能够实现上述一种条件语句取值确定方法的步骤。
59、本实施例中,确定出源代码中的至少一个条件语句,并基于条件语句,在条件语句的之前和/或之后设置插桩语句,通过插桩语句的执行状况,确定出指示所述条件语句执行结果的条件语句的取值,如此,基于插桩语句的执行情况,确定条件语句的执行结果,实现了在插桩过程中获取条件语句的执行结果即取值结果,进而基于条件语句的取值可以实现条件覆盖率的统计,从而对测试用例进行补充,提高测试效率,使软件测试覆盖率信息更全面。