代码测试方法、装置、电子设备及存储介质与流程

文档序号:27905025发布日期:2021-12-11 04:02阅读:77来源:国知局
代码测试方法、装置、电子设备及存储介质与流程
代码测试方法、装置、电子设备及存储介质
【技术领域】
1.本发明涉及测试技术领域,尤其涉及一种代码测试方法、装置、电子设备及存储介质。


背景技术:

2.代码覆盖率(codecoverage)是反映测试用例对被测程序覆盖程度的重要指标,也是衡量测试完整性的一个参考值。在软件开发的过程中,通过客户端获取代码覆盖率数据是基于被监控项目的全部代码生成的。现有技术中对程序源代码进行测试时,一般基于代码覆盖率选择已有的测试用例或编写新的测试用例,选择测试用例时没有考虑测试用例的实际执行链路,无法解决测试的代码分支覆盖率低的技术问题。


技术实现要素:

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.根据携带有所述新增标签的测试用例的所述运行信息生成所述测试用例的实际执行链路和实际执行时长;
31.删除所述测试用例的新增标签,将所述测试用例和对应的所述实际执行链路存储至测试用例库中。
32.可选地,所述获取待测试的程序源代码的逻辑链路,包括:
33.对待测试的所述程序源代码进行分析,生成所述程序源代码的抽象语法树;
34.访问所述抽象语法树,得到所述抽象语法树上各个符号对应的功能函数;
35.访问所述抽象语法树,得到所述功能函数的调用节点,记录所述功能函数间的调用关系;
36.根据所述功能函数以及所述功能函数的调用关系生成所述程序源代码的逻辑链路。
37.本发明的另一技术方案如下:提供一种代码测试装置,包括:
38.分析模块,用于获取待测试的程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;
39.链路生成模块,用于根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路;
40.插桩模块,用于在所述程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;
41.匹配模块,用于从预先构建的测试用例库中获取实际执行链路与所述理论执行链路相匹配的测试用例组合,其中,所述测试用例库包括多个测试用例以及与所述测试用例对应的实际执行链路,所述实际执行链路是所述测试用例被用于执行历史程序源代码的测试任务过程中记录获得的;
42.测试模块,用于调用插入有所述记录标签的所述程序源代码对所述测试用例组合中每个测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据各所述测试用例的所述运行信息生成所述程序源代码的测试结果。
43.本发明的另一技术方案如下:提供一种电子设备,包括处理器、以及与所述处理器耦接的存储器,所述存储器存储有可被所述处理器执行的程序指令;所述处理器执行所述存储器存储的所述程序指令时实现上述的代码测试方法。
44.本发明的另一技术方案如下:提一种存储介质,所述存储介质内存储有程序指令,所述程序指令被处理器执行时实现上述的代码测试方法。
45.本发明的代码测试方法、装置、电子设备及存储介质,对程序源代码进行结构分析,根据代码中多个功能函数以及所述功能函数的调用关系形成逻辑链路;根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块,根据代码块标识将逻辑链路调整为理论执行链路;从测试用例库中获取实际执行链路与理论执行链路匹配的测试用例形成测试用例组合;利用测试用例组合对程序源代码进行测试;通过理论执行链路和实际执行链路的匹配自动获取测试用例,能够提高测试的代码分支覆盖率,降低测试用例的获取难度。
【附图说明】
46.图1为本发明第一实施例的代码测试方法的流程图;
47.图2为本发明第二实施例的代码测试方法的流程图;
48.图3为本发明第三实施例的代码测试装置的结构示意图;
49.图4为本发明第四实施例的电子设备的结构示意图;
50.图5为本发明第五实施例的存储介质的结构示意图。
【具体实施方式】
51.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.本发明中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。本发明实施例中所有方向性指示(诸如上、下、左、右、前、后
……
)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
53.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
54.图1是本发明第一实施例的代码测试方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图1所示的流程顺序为限。
55.如图1所示,该代码测试方法包括步骤:
56.s101,获取待测试的程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;
57.其中,对待测试的程序源代码的结构进行分析,程序源代码的结构涉及多个功能的实现,每种功能的实现涉及一个或多个功能函数以及功能函数之间的调用,并且,在功能函数的执行过程中必然涉及到需要调用另一功能函数的操作以及需要进行判断的步骤,调用的结果以及判断的结果均可能会导致不同的逻辑分支出现;并且进行调用或判断的步骤也可能会继续调用另一个或多个功能函数实现,逻辑分支的存在导致不同逻辑链路的出现,每个逻辑链路用来表征该链路上多个功能函数的调用关系,因此,一个程序源代码可能涉及一个或多个逻辑链路,具体地,对于一个程序源代码,对程序源代码的分析显示其涉及7个功能函数,7个功能函数共有4条逻辑链路,逻辑链路1为功能函数a调用功能函数b以及功能函数b调用功能函数c,逻辑链路2为功能函数a调用功能函数b以及功能函数b调用功能函数d,逻辑链路3为功能函数a调用功能函数c、功能函数c调用功能函数e以及功能函数e调用功能函数f,逻辑链路4为功能函数a调用功能函数e以及功能函数e调用功能函数g。
58.具体地,步骤s101包括如下步骤:
59.s1011,对待测试的所述程序源代码进行分析,生成所述程序源代码的抽象语法树;
60.其中,首先对程序源代码进行编译得到该程序源代码的class文件;然后利用
javaparser对程序源代码进行语法解析,生成程序源代码对应的抽象语法树,其中,javaparser是javacc生成的。
61.s1012,访问所述抽象语法树,得到所述抽象语法树上各个符号对应的功能函数;
62.其中,利用访问者模式在抽象语法树上进行访问,在访问过程中根据步骤s1011中得到的class文件,结合java反射机制得到抽象语法树上各个符号的功能函数。
63.s1013,访问所述抽象语法树,得到所述功能函数的调用节点,记录所述功能函数间的调用关系;
64.s1014,根据所述功能函数以及所述功能函数的调用关系生成所述程序源代码的逻辑链路。
65.另外,还可以在抽象语法树上对功能函数节点进行访问,为每个功能函数生成对应的控制流图(control flow graph,cfg),控制流图也是程源代码的抽象数据结构。
66.s102,根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路;
67.其中,每个代码块对应一个功能函数,例如,功能函数a的代码块a,在程序源代码中确定实现功能函数a的代码,将其作为功能函数a的代码块,另外,在实际使用中,能够实现功能函数a的代码可能不止一个,例如,代码a1、代码a2、代码a3均可以实现功能函数a,在本实施例中,可以预先构建代码仓库,用于存储实现不同功能函数的代码,为每个代码提供一个代码标识,以区分同一功能函数对应的不同代码,例如,在程序源代码中实现功能函数a的为代码a1,于是,用代码a1的代码标识表征理论执行链路中的代码块a。
68.其中,理论执行链路用于表征在程序源代码执行过程中理论上会遍历到的所有路径,理论执行链路与逻辑链路对应,逻辑链路中的调用关系对应理论执行链路中的连接关系,例如,逻辑链路1为功能函数a调用功能函数b以及功能函数b调用功能函数c,功能函数a的代码块对应代码标识a1,功能函数b的代码块对应代码标识b2,功能函数c的代码块对应代码标识c1,理论执行链路1为a1

b2

c1;相应地,理论执行链路2为a1

b2

d1,理论执行链路3为a1

c1

e2

f2,理论执行链路4为a1

e2

g1。
69.步骤s102具体包括如下步骤:
70.s201,根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块;
71.s202,将所述代码块与预设的代码仓库中各单元代码进行比对,根据对比结果确定与所述代码块匹配的单元代码;
72.其中,若代码块与单元代码匹配失败,则说明该代码块为新编写的代码,对于新编写的代码一般会编写新的测试用例,无法在测试用例库中获取适合的测试用例,在本发明中,不考虑上述情况。
73.s203,获取所述单元代码在代码仓库中的代码标识,将所述代码标识作为代码块的代码标识;
74.s204,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系;
75.s205,根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路;
76.其中,代码仓库中各单元代码为实现不同功能函数的代码,每个单元代码对应一个功能函数,同一个功能函数可能对应多个单元代码,代码标识可以为单元代码在代码仓库中的编号。
77.s103,在所述程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;
78.其中,对程序源代码进行插桩,记录标识为用于实现信息采集的代码,在程序源代码的每个代码块中插桩记录标识,程序源代码执行过程中,执行到对应的代码块时该代码块内的记录标识会自动记录该代码块被执行时的运行信息,运行信息为代码块被执行时产生的特征数据,可以包括代码块的与其他代码块的连接节点、代码块被执行的时间等,记录标识在代码块中的插桩位置一般为代码块对应功能函数的入口位置,如果代码块包括发生判断的位置(例如if语句)或发生跳转的位置(例如goto语句),也可以设置在发生判断的位置或发生跳转的位置。
79.其中,不同的测试用例中参数取值不同,可能会触发执行不同的执行链路,例如,在一个代码块中包含一个判断步骤“若y>0则跳转至w”,y为代码块中的内部变量,变量y是根据测试用例中的参数x计算所得,因此,判断条件y>0由于测试用例不同而有不同的分支,用不同的测试用例对该程序源代码进行测试时,会执行不同的执行链路。
80.s104,从预先构建的测试用例库中获取实际执行链路与所述理论执行链路相匹配的测试用例组合,其中,所述测试用例库包括多个测试用例以及与所述测试用例对应的实际执行链路,所述实际执行链路是所述测试用例被用于执行历史程序源代码的测试任务过程中记录获得的;
81.其中,为了便于理解,首先对所述实际执行链路的获取步骤以及测试用例库的构建方式进行说明,具体步骤如下:
82.s301,获取第一程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;
83.s302,根据所述逻辑链路中各功能函数将所述第一程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块和所述连接关系生成所述第一程序源代码的理论执行链路;
84.s303,在所述第一程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;
85.步骤s301至步骤s303可以具体参见步骤s101至步骤s103的描述。
86.s304,获取预先编辑的测试用例,调用插入有所述记录标签的所述第一程序源代码对所述测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据所述运行信息生成所述测试用例的实际执行链路和实际执行时长;
87.其中,本步骤的测试用例是针对程序源代码进行编写的,在利用测试用例对第一程序源代码进行测试的过程中,执行到哪个代码块,就会记录该代码块相关的运行信息,根据各代码块记录的运行信息能够得到用该测试用例进行测试时实际覆盖了哪些代码块以及被覆盖的代码块之间的先后顺序,可以得到该测试用例在测试第一程序源代码时的实际执行链路,该实际执行链路可能无法完全覆盖第一程序源代码的理论执行链路,根据运行信息中每个代码块的执行时间能够得到该实际执行链路的实际执行时长,反应该测试用例
的测试速度。
88.s305,将所述测试用例和对应的所述实际执行链路存储至测试用例库中;
89.其中,实际执行链路表征该测试用例能够覆盖的代码块以及代码块之间的逻辑关系,将步骤s304所得实际执行链路与测试用例进行关联后存储,另外,该测试用例还可以用来对其他程序源代码进行测试,例如,对第二程序源代码进行测试,测试成功并形成了新的实际执行链路,将新的实际执行链路与该测试用例进行关联。
90.其中,随着测试工作的推进,测试用例库中的测试用例不断增加,实际执行链路的数量不断增加,当需要对待测试的程序源代码进行测试时,从测试用例库筛选匹配的测试用例。
91.步骤s104具体包括如下步骤:
92.s401,将所述程序源代码的理论执行链路分别与预先构建的测试用例库中存储的实际执行链路进行比对,得到与所述理论执行链路匹配的实际执行链路;
93.其中,程序源代码具有多个理论执行链路,分别进行匹配,具体地,针对每个理论执行链路获取匹配的实际执行链路时,理论执行链路和实际执行链路中均包括多个按照执行顺序依次连接的代码标识,比对时,按照执行顺序首先判断理论执行链路中的第一个代码标识与实际执行链路中的第一个代码标识是否匹配;若第一个代码标识匹配,则判断理论执行链路中的第二个代码标识与实际执行链路中的第二个代码标识是否匹配,若不匹配,则结束;重复上述步骤,若上一个代码标识匹配,则判断理论执行链路中的下一个代码标识与实际执行链路中的下一个代码标识是否匹配,若不匹配,则结束;重复上述步骤,直至所述理论执行链路中最后一个代码标识,若最后一个代码标识匹配,则确定所述实际执行链路与所述理论执行链路匹配。
94.s402,若所述匹配的实际执行链路的数量为多个,则获取各所述实际执行链路的实际执行时长,选择所述实际执行时长最小的实际执行链路;
95.s403,根据所述实际执行链路获取与所述程序源代码匹配的测试用例,生成所述测试用例组合;
96.具体地,例如,理论执行链路1为a1

b2

c1,理论执行链路2为a1

b2

d1,理论执行链路3为a1

c1

e2

f2,理论执行链路4为a1

e2

g1,分别针对理论执行链路1,2,3筛选匹配的测试用例。测试用例组合中的各测试用例的实际执行链路叠加后能够最大程度的覆盖待测试的程序源代码的理论执行链路。
97.s105,调用插入有所述记录标签的所述程序源代码对所述测试用例组合中每个测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据各所述测试用例的所述运行信息生成所述程序源代码的测试结果;
98.其中,在利用测试用例对程序源代码进行测试的过程中,执行到哪个代码块,就会记录该代码块相关的运行信息,根据各代码块记录的运行信息能够得到用该测试用例进行测试时实际覆盖了哪些代码块以及被覆盖的代码块之间的先后顺序,得到所述程序源代码的测试执行链路,根据测试执行链路与理论执行链路计算执行链路覆盖率。
99.随着测试用例库中测试用例样本的大量积累,本实施例的代码测试方法可以实现智能化的测试案例组合推荐,基于人工智能技术对相关的数据进行获取和处理,实现无人值守的人工智能测试。其中,人工智能(artificial intelligence,ai)是利用数字计算机
或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
100.人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
101.本实施例的代码测试方法还可以应用于数字医疗平台的漏洞检测。
102.图2是本发明第二实施例的代码测试方法的流程示意图。需注意的是,若有实质上相同的结果,本发明的方法并不以图2所示的流程顺序为限。
103.如图2所示,该代码测试方法包括步骤:
104.s501,获取待测试的程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;
105.s502,根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路;
106.s503,在所述程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;
107.s504,从预先构建的测试用例库中获取实际执行链路与所述理论执行链路相匹配的测试用例组合,其中,所述测试用例库包括多个测试用例以及与所述测试用例对应的实际执行链路,所述实际执行链路是所述测试用例被用于执行历史程序源代码的测试任务过程中记录获得的;
108.其中,步骤s501至步骤s504具体参见第一实施例的步骤s101至步骤s104,在此不进行一一赘述。
109.s505,若所述理论执行链路无法成功获取匹配的实际执行链路,则生成所述理论执行链路的测试用例生成请求;接收输入的对应于所述理论执行链路的测试用例,为所述测试用例添加新增标签,将所述携带有新增标签的测试用例添加至所述测试用例组合中。
110.其中,无法成功获取匹配的实际执行链路,说明测试用例库中没有适用于该理论执行链路的测试用例,此时,发送测试用例生成请求,提醒测试人员编写该理论执行链路的测试用例。
111.s506,调用插入有所述记录标签的所述程序源代码对所述测试用例组合中每个测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据各所述测试用例的所述运行信息生成所述程序源代码的测试结果;
112.其中,步骤s506具体参见第一实施例的步骤s105,在此不进行一一赘述。
113.s507,根据携带有所述新增标签的测试用例的所述运行信息生成所述测试用例的实际执行链路和实际执行时长;删除所述测试用例的新增标签,将所述测试用例和对应的所述实际执行链路存储至测试用例库中。
114.在本实施例中,在测试用例库中无法匹配测试用例时,需要为该理论执行链路重新编写新的测试用例,在测试结束后,将该新的测试用例及对应的实际执行链路存储至测试用例库中,不断丰富测试用例库。
115.图3是本发明第三实施例的代码测试装置的结构示意图。如图3所示,该代码测试装置30包括分析模块31、链路生成模块32、插桩模块33、匹配模块34以及测试模块35,其中,分析模块31,用于获取待测试的程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;链路生成模块32,用于根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路;插桩模块33,用于在所述程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;匹配模块34,用于从预先构建的测试用例库中获取实际执行链路与所述理论执行链路相匹配的测试用例组合,其中,所述测试用例库包括多个测试用例以及与所述测试用例对应的实际执行链路,所述实际执行链路是所述测试用例被用于执行历史程序源代码的测试任务过程中记录获得的;测试模块35,用于调用插入有所述记录标签的所述程序源代码对所述测试用例组合中每个测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据各所述测试用例的所述运行信息生成所述程序源代码的测试结果。
116.进一步地,该链路生成模块32还用于:根据所述逻辑链路中各功能函数将所述程序源代码划分为多个代码块;将所述代码块与预设的代码仓库中各单元代码进行比对,根据对比结果确定与所述代码块匹配的单元代码;获取所述单元代码在代码仓库中的代码标识,将所述代码标识作为代码块的代码标识;根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系;根据所述代码块的代码标识和所述连接关系生成所述程序源代码的理论执行链路。
117.进一步地,该匹配模块34还用于获取第一程序源代码的逻辑链路,其中,所述逻辑链路包括多个功能函数以及所述功能函数的调用关系;根据所述逻辑链路中各功能函数将所述第一程序源代码划分为多个代码块,根据所述逻辑链路中所述功能函数的调用关系获取各所述代码块的连接关系,根据所述代码块和所述连接关系生成所述第一程序源代码的理论执行链路;在所述第一程序源代码的每个代码块中插入用于记录所述代码块的运行信息的记录标识;获取预先编辑的测试用例,调用插入有所述记录标签的所述第一程序源代码对所述测试用例进行测试,获取各所述记录标识记录的对应所述代码块的运行信息,根据所述运行信息生成所述测试用例的实际执行链路和实际执行时长;将所述测试用例和对应的所述实际执行链路存储至测试用例库中。
118.进一步地,该匹配模块34还用于将所述程序源代码的理论执行链路分别与预先构建的测试用例库中存储的实际执行链路进行比对,得到与所述理论执行链路匹配的实际执行链路;若所述匹配的实际执行链路的数量为多个,则获取各所述实际执行链路的实际执行时长,选择所述实际执行时长最小的实际执行链路;根据所述实际执行链路获取与所述程序源代码匹配的测试用例,生成所述测试用例组合。
119.进一步地,该匹配模块34还用于若所述理论执行链路无法成功获取匹配的实际执行链路,则生成所述理论执行链路的测试用例生成请求;接收输入的对应于所述理论执行链路的测试用例,为所述测试用例添加新增标签,将所述携带有新增标签的测试用例添加至所述测试用例组合中。
120.进一步地,该匹配模块34还用于根据携带有所述新增标签的测试用例的所述运行
信息生成所述测试用例的实际执行链路和实际执行时长;删除所述测试用例的新增标签,将所述测试用例和对应的所述实际执行链路存储至测试用例库中。
121.进一步地,该分析模块31还用于对待测试的所述程序源代码进行分析,生成所述程序源代码的抽象语法树;访问所述抽象语法树,得到所述抽象语法树上各个符号对应的功能函数;访问所述抽象语法树,得到所述功能函数的调用节点,记录所述功能函数间的调用关系;根据所述功能函数以及所述功能函数的调用关系生成所述程序源代码的逻辑链路。
122.图4是本发明第四实施例的电子设备的结构示意图。如图4所示,该电子设备40包括处理器41及和处理器41耦接的存储器42。
123.存储器42存储有用于实现上述任一实施例的所述代码测试方法的程序指令。
124.处理器41用于执行存储器42存储的程序指令以进行代码测试。
125.其中,处理器41还可以称为cpu(central processing unit,中央处理单元)。处理器41可能是一种集成电路芯片,具有信号的处理能力。处理器41还可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
126.参阅图5,图5为本发明第五实施例的存储介质的结构示意图。本发明实施例的存储介质存储有能够实现上述所有方法的程序指令51,所述存储介质可以是非易失性,也可以是易失性。其中,该程序指令51可以以软件产品的形式存储在上述存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。
127.在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
128.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围。
129.以上所述的仅是本发明的实施方式,在此应当指出,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1