一种测试范围确定方法、装置、电子设备及介质与流程
未命名
08-22
阅读:97
评论:0
1.本公开涉及软件开发技术领域,尤其涉及软件测试技术领域。
背景技术:
2.在软件开发过程中,经常涉及部分代码的修改,每次修改代码后,都需要针对修改的代码,划分代码测试范围,从而在测试范围内进行软件测试。
技术实现要素:
3.本公开提供了一种测试范围确定方法、装置、电子设备及介质。
4.本公开实施例的第一方面,提供了一种测试范围确定方法,包括:
5.确定变更代码,以及所述变更代码所属的变更模块;
6.确定执行所述变更代码时需要调用的下游模块;
7.调用所述变更模块的变更接口,并监控所述变更模块中被执行的第一代码,以及所述下游模块中被执行的第二代码,所述变更接口用于调用所述变更代码;
8.根据所述第一代码和所述第二代码,确定测试范围。
9.本公开实施例的第二方面,提供了一种测试范围确定装置,包括:
10.确定模块,用于确定变更代码,以及所述变更代码所属的变更模块;
11.所述确定模块,还用于确定执行所述变更代码时需要调用的下游模块;
12.监控模块,用于调用所述变更模块的变更接口,并监控所述变更模块中被执行的第一代码,以及所述下游模块中被执行的第二代码,所述变更接口用于调用所述变更代码;
13.所述确定模块,还用于根据所述第一代码和所述第二代码,确定测试范围。
14.本公开实施例的第三方面,提供了一种电子设备,包括:
15.至少一个处理器;以及
16.与所述至少一个处理器通信连接的存储器;其中,
17.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行第一方面所述的方法。
18.本公开实施例的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行第一方面所述的方法。
19.本公开实施例的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现第一方面所述的方法。
20.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
21.附图用于更好地理解本方案,不构成对本公开的限定。其中:
22.图1是本公开实施例提供的一种测试范围确定方法的流程图;
23.图2是本公开实施例提供的另一种测试范围确定方法的流程图;
24.图3是本公开实施例提供的一种函数调用图和函数调用链的示例性示意图;
25.图4是本公开实施例提供的一种测试范围确定过程的示例性示意图;
26.图5是本公开实施例提供的一种测试范围确定装置的结构示意图;
27.图6是用来实现本公开实施例的测试范围确定方法的电子设备的框图。
具体实施方式
28.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
29.测试范围的确定是软件测试的基础工作之一,测试范围的准确性直接影响了测试结果的准确性、效率和参考价值。例如,如果测试范围不准确,可能使得测试过程抓不住重点,导致测试反复执行,或者部分测试结果无效,形成测试资源的浪费。
30.目前,划分测试范围时,由测试人员根据与研发人员的沟通,获取变更的代码所在的变更模块,并在变更模块内手动划分测试范围,使得测试范围的划分过渡依赖人工,导致准确性难以得到保障。而且,如果测试人员与研发人员之间的沟通存在误差,也影响了测试范围的准确性。
31.为了提高确定的测试范围的准确性,本公开实施例提供了一种测试范围确定方法,该方法可以应用于电子设备。例如,电子设备可以是服务器、笔记本电脑或者台式计算机等具备代码处理能力的设备。如图1所示,该方法包括如下步骤:
32.s101,确定变更代码,以及变更代码所属的变更模块。
33.待测试的软件可以包括多个模块,每个模块包括多个函数。研发人员每次修改代码时,一般对单个模块内的至少一个函数的部分代码进行修改,并提交修改后的变更代码对应的变更代码文件。其中,变更代码文件包括:变更代码、变更代码所属的函数名以及该函数内的分支情况等。
34.存储变更代码文件的形式可以是开源的分布式版本控制系统(git)、开放源代码的版本控制系统(subversion,svn)或者其他存储形式等。
35.电子设备可以每隔一段时间,获取研发人员在上一段时间内提交的各变更代码文件,并针对每个变更代码文件中的变更代码,利用本公开实施例提供的确定测试范围的方法,确定该变更代码的测试范围。
36.s102,确定执行变更代码时需要调用的下游模块。
37.可以接收人工输入的下游模块的模块名。
38.或者,可以通过代码扫描的方式,当扫描到变更代码中包括表示调用其他模块的字符串时,确定该其他模块为执行变更代码时需要调用的下游模块。具体方式可参考后续描述。
39.s103,调用变更模块的变更接口,并监控变更模块中被执行的第一代码,以及下游模块中被执行的第二代码。
40.每个模块具有至少一个接口,同一个模块的不同接口被调用时,模块内执行的代
码不完全相同,相应的实现的功能不完全相同。例如,模块a包括函数1、函数2和函数3;模块a的接口1被调用时,执行函数1和函数2;模块a的接口2被调用时,执行函数2和函数3。
41.变更接口用于调用变更代码。变更接口可以为一个或多个。例如,变更代码属于函数2,模块a的接口1和接口2被调用时均会执行函数2,因此确定变更接口为接口1和接口2。
42.当变更接口为多个时,可以按照顺序,先调用第一个变更接口,得到一次第一代码和第二代码。再调用第二个变更接口,得到一次第一代码和第二代码,以此类推。
43.s104,根据第一代码和第二代码,确定测试范围。
44.由于变更接口被调用后,第一代码和第二代码均被执行,因此变更代码可能影响第一代码和第二代码,可以将第一代码和第二代码的整体作为测试范围。
45.或者,还可以通过后续方法确定测试范围。
46.通过上述方法,本公开实施例可以得到变更模块内变更代码可能影响的第一代码,以及变更代码对下游模块内可能影响的第二代码,并结合第一代码和第二代码确定测试范围。即本公开实施例在确定测试范围时,不依赖人工,避免了由于人工经验不足、或人员沟通误差对于测试范围准确性的影响,因此提高了确定测试范围的准确度。
47.而且,本公开实施例确定测试范围时,不但能够对变更模块内变更代码的影响范围进行评估,还可以评估变更代码对于下游的其他模块的影响范围,使得测试范围的覆盖更全面,更准确。
48.在获得测试范围之后,可以对测试范围内的代码进行软件测试,得到测试结果。
49.以下对本公开实施例提供的测试范围确定方法进行详细说明:
50.上述s102中确定执行变更代码时需要调用的下游模块的方式,可以实现为:获取执行变更代码时需要调用的下游接口地址,然后,根据各接口地址与模块之间的预设对应关系,确定下游接口地址对应的下游模块。
51.可以通过扫描变更代码、或者接收人工输入的方式,获取变更代码包括的接口地址,并将其作为执行变更代码时需要调用的下游接口地址。由于变更代码需要基于下游模块的接口地址,调用下游模块,因此变更代码中包括的接口地址,即为执行变更代码时需要调用的下游接口地址。
52.各接口地址与模块之间的预设对应关系的形式,可以是:各接口的统一资源定位系统(uniform resource locator,url)与模块名的对应关系列表,或者各接口的url与模块存储地址之间的对应关系列表等。
53.由于代码可以通过接口地址调用下游模块,因此本公开实施例可以预先设置各接口地址与模块之间的对应关系,并由此查找到执行变更代码时需要调用的下游接口地址对应的模块,该模块即为变更代码需要调用的下游模块。
54.本公开实施例中,电子设备在调用变更模块的变更接口之前,还可以在变更模块和下游模块中的多行代码后,分别插入一个监控探针。
55.插入监控探针的方式包括以下三种:
56.方式一、在变更模块和下游模块的每一行代码后,分别插入一个监控探针。
57.方式二、在变更模块和下游模块的每个函数的最后一行代码后,分别插入一个监控探针。
58.方式三、在变更模块和下游模块中每个函数分支的最后一行代码后,分别插入一
个监控探针。
59.每个模块包括的各函数、每个函数在模块内的位置、每个函数包括的代码行数、每个函数分支在函数内的位置以及每个函数分支包括的代码行数均是预先设置的,因此能够分别在变更模块和下游模块内,以代码行为单位插入监控探针,或者以函数为单位插入监控探针,或者以函数分支为单位插入监控探针。
60.具体在模块内插入监控探针的方式可以根据实际需求进行选择。
61.其中,监控探针是进行信息采集的代码段,监控探针所在行代码被执行后,执行监控探针,当监控探针被执行时能够采集所处代码行的信息,即每个监控探针用于监控该监控探针所在行的代码是否被执行。当监控探针所在行的代码被执行时,监控探针向电子设备发送返回值。其中返回值表示监控探针所在行的代码被执行,返回值可以包括:该监控探针所在的行号、该监控探针所在的文件的文件名以及该文件的地址。其中,每个文件包括至少一个函数。
62.当监控探针所在行的代码未被执行时,监控探针不被执行,因此不发送任何消息,等待所在行的代码被执行。
63.在监控探针插入完成之后,还可以对插入监控探针后的变更模块和下游模块进行编译和测试环境部署,使变更模块和下游模块可以在统一的测试环境内被调用。
64.在此基础上,上述s103监控变更模块中被执行的第一代码,以及下游模块中被执行的第二代码的方式,包括以下步骤:
65.步骤一、每当接收到一个监控探针的返回值,根据返回值确定该监控探针所在的模块。
66.由于返回值包括该监控探针所在的文件的文件名,因此根据每个模块包括的文件,可以得到该监控探针所在的模块。
67.步骤二、若该监控探针所在的模块为变更模块,则将该监控探针所在行的代码作为第一代码。
68.由于返回值包括该监控探针所在的行号以及该监控探针所在的文件的地址,因此可以将接收到的行号作为被执行的代码的行号,并将该文件中的该行代码作为第一代码。
69.步骤三、若该监控探针所在的模块为下游模块,则将该监控探针所在行的代码作为第二代码。
70.步骤三的实现方式与步骤二相同,此处不再赘述。
71.通过上述方法,本公开实施例可以通过在变更模块和下游模块中插入监控探针,即利用代码插桩的方式,监控变更模块和下游模块在变更接口被调用后的代码执行情况,从而在变更模块和下游模块中,更全面地获得变更接口被调用时需要执行的各代码,以便后续更准确地确定测试范围。
72.另外,与基于接口和函数间的预设调用关系,确定接口被调用后执行的函数的方式相比,该方式可能存在接口和函数的预设调用关系存在误差,即与实际不符的情况,导致确定的测试范围有误差。而本公开实施例通过代码插桩,获得变更接口被调用后实际执行的代码,因此确定第一代码和第二代码的准确度更高,使得确定的测试范围的准确度更高。
73.本公开实施例中,在插入监控探针的方式为方式一或方式二的情况下,可以确定包括至少一行第一代码的函数,即第一函数,以及包括至少一行第二代码的函数,即第二函
数。此时,参见图2,上述s104中根据第一代码和第二代码,确定测试范围的方式,可以包括以下步骤:
74.s201、对变更模块进行代码扫描,得到变更模块包括的各函数的函数调用图,并从该函数调用图中,截取各第一函数以及各第一函数之间的调用关系,得到第一函数调用链。
75.其中,每个第一函数包括至少一行第一代码。
76.由于每个模块包括的各函数以及每个函数在模块内的位置是预先设置的,而且函数内调用其他函数的代码行具有固定的格式,例如固定的格式包括被调用的函数名和表示调用的字符串。因此可以通过代码扫描的方式,当扫描到固定格式的代码行时,确定当前函数被执行时需要调用该代码行包括的函数名对应的代码。从而可以通过代码扫描的方式,获得函数间的调用关系,从而得到模块的函数调用图。
77.例如,参见图3,图3所示的函数调用图为变更模块的函数调用图,其中每个节点表示一个函数,节点间的箭头表示节点间的调用关系。假设黑色的节点是第一函数,将从函数调用图中截取各第一函数以及各第一函数之间的调用关系,得到图3中的函数调用链。
78.s202、对下游模块进行代码扫描,得到下游模块包括的各函数的函数调用图,并从该函数调用图中,截取各第二函数以及各第二函数之间的调用关系,得到第二函数调用链。
79.其中,每个第二函数包括至少一行第二代码。
80.确定第二函数调用链的方式,与确定第一函数调用链的方式相同,可参考s201的相关描述,此处不再赘述。s201和s202可以先后执行,或者并行执行,本公开实施例对s201和s202的执行顺序不作具体限定。
81.s203、将第一函数调用链和第二函数调用链结合,将结合结果作为测试范围。
82.可以将变更代码所属的函数,与第二调用链的第一个函数连接,从而得到完整的调用链,作为测试范围。
83.通过上述方法,本公开实施例可以将变更模块以及下游模块中,被变更代码影响的各函数构建为函数调用链,并作为测试范围,使得测试范围的覆盖更全面。而且以函数调用链的形式划分测试范围能够使得后续测试过程的测试结果更准确。
84.本公开实施例中,在插入监控探针的方式为方式一或方式三的情况下,可以确定包括至少一行第一代码的函数分支,即第一函数分支,以及包括至少一行第二代码的函数分支,即第二函数分支。此时,上述s104中根据第一代码和第二代码,确定测试范围的方式,可以包括以下步骤:
85.步骤1、对变更模块进行代码扫描,得到变更模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第一函数分支以及各第一函数分支之间的调用关系,得到第一分支调用链。其中,每个第一函数分支包括至少一行第一代码。
86.由于每个模块包括的各函数、每个函数在模块内的位置以及每个函数分支在函数内的位置均是预先设置的,而且函数内调用其他函数的代码行具有固定格式,因此可以通过代码扫描的方式,当扫描到固定格式的代码行时,确定当前函数分支被执行时需要调用该代码行包括的函数名对应的代码。从而可以通过代码扫描的方式,获得函数分支间的调用关系,从而得到模块的分支调用图。
87.步骤2、对下游模块进行代码扫描,得到下游模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第二函数分支以及各第二函数分支之间的调用关系,得到
第二分支调用链。其中,每个第二函数分支包括至少一行第二代码。
88.确定第二分支调用链的方式,与确定第一分支调用链的方式相同,可参考步骤1的相关描述,此处不再赘述。
89.步骤3、将第一分支调用链和第二分支调用链结合,将结合结果作为测试范围。
90.可以将变更代码所属的函数分支,与第二调用链的第一个函数分支连接,从而得到完整的调用链,作为测试范围。
91.通过上述方法,本公开实施例可以将变更模块以及下游模块中,被变更代码影响的各函数分支构建为分支调用链,并作为测试范围,使得测试范围的覆盖更全面。而且与利用函数调用链构建测试范围的方式相比,分支调用链的划分粒度更细,使得得到的测试范围更准确。而且以分支调用链的形式划分测试范围能够使得后续测试过程的测试结果更准确。
92.参见图4,以下结合实际应用场景,对本公开实施例提供的测试范围确定方法的整体流程进行说明:
93.本公开实施例提供的测试范围的确定方法的输入数据包括:变更代码、变更代码所属的函数名、各url与模块名之间的对应关系。输出数据包括:需要被测试的函数列表,即测试范围。
94.具体的,电子设备首先根据变更代码所属的函数,确定变更代码所属的模块,即变更模块;并通过代码扫描的方式,获取执行变更代码时需要调用的模块的下游接口url,然后根据各url与模块名之间的对应关系,查找到下游接口url对应的模块名,并通过模块名得到下游模块,即图4中的下游模块a和下游模块b等。
95.之后对变更模块和各下游模块进行插桩,即在变更模块和各下游模块中的每一行代码后,分别插入一个监控探针。并对插桩后的变更模块和各下游模块进行编译和测试环境部署。
96.然后调用变更模块的变更接口,触发变更模块内代码的执行,且变更模块中的变更代码被执行时调用各下游模块,监控变更接口被调用后,变更模块内执行的第一代码,以及每个下游模块内执行的第二代码。确定包括至少一行第一代码的第一函数,以及包括至少一行第二代码的第二函数。
97.分别对变更模块和每个下游模块生成函数调用图。从变更模块的函数调用图中截取各第一函数以及各第一函数之间的调用关系,得到调用链1,从下游模块a的函数调用图中截取各第二函数以及各第二函数之间的调用关系,得到调用链2,从下游模块b的函数调用图中截取各第二函数以及各第二函数之间的调用关系,得到调用链3,以此类推。之后将各调用链结合,作为变更代码的测试范围。
98.通过本公开实施例提供的测试范围确定方法,能够提高测试范围的准确度、测试过程的完整度和测试结果的可信度。相比于现有方法,本公开实施例不但能够在单模块内划分测试范围,还能够基于模块之间的调用关系,对变更代码影响的下游模块进行统一评估,使测试范围的覆盖更全面。而且对变更代码影响的各函数或者各函数分支进行链接,能够方便后续软件测试过程的分析,得到更为准确的测试结果。另外,还能够将测试范围与变更模块和下游模块的整体范围的比值,作为测试覆盖率,并进一步对测试覆盖率进行评估,得到更为准确的测试效果,提高软件测试的准确性和效率。
99.本公开的技术方案中,所涉及的代码的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
100.基于相同的发明构思,对应于上述方法实施例,本公开实施例还提供了一种测试范围确定装置,如图5所示,该装置包括:确定模块501和监控模块502;
101.确定模块501,用于确定变更代码,以及变更代码所属的变更模块;
102.确定模块501,还用于确定执行变更代码时需要调用的下游模块;
103.监控模块502,用于调用变更模块的变更接口,并监控变更模块中被执行的第一代码,以及下游模块中被执行的第二代码,变更接口用于调用变更代码;
104.确定模块501,还用于根据第一代码和第二代码,确定测试范围。
105.在本公开的一些实施例中,其中,该装置还可以包括:
106.插桩模块,用于在调用变更模块的变更接口之前,在变更模块和下游模块中的多行代码后,分别插入一个监控探针,每个监控探针用于监控该监控探针所在行的代码是否被执行;
107.监控模块502,具体用于:
108.每当接收到一个监控探针的返回值,根据返回值确定该监控探针所在的模块,返回值表示监控探针所在行的代码被执行;
109.若该监控探针所在的模块为变更模块,则将该监控探针所在行的代码作为第一代码;
110.若该监控探针所在的模块为下游模块,则将该监控探针所在行的代码作为第二代码。
111.在本公开的一些实施例中,其中,插桩模块,具体用于:
112.在变更模块和下游模块的每一行代码后,分别插入一个监控探针;或者,在变更模块和下游模块的每个函数的最后一行代码后,分别插入一个监控探针;
113.确定模块501,具体用于:
114.对变更模块进行代码扫描,得到变更模块包括的各函数的函数调用图,并从该函数调用图中,截取各第一函数以及各第一函数之间的调用关系,得到第一函数调用链;每个第一函数包括至少一行第一代码;
115.对下游模块进行代码扫描,得到下游模块包括的各函数的函数调用图,并从该函数调用图中,截取各第二函数以及各第二函数之间的调用关系,得到第二函数调用链;每个第二函数包括至少一行第二代码;
116.将第一函数调用链和第二函数调用链结合,将结合结果作为测试范围。
117.在本公开的一些实施例中,其中,插桩模块,具体用于:
118.在变更模块和下游模块的每一行代码后,分别插入一个监控探针;或者,在变更模块和下游模块中每个函数分支的最后一行代码后,分别插入一个监控探针;
119.确定模块501,具体用于:
120.对变更模块进行代码扫描,得到变更模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第一函数分支以及各第一函数分支之间的调用关系,得到第一分支调用链;每个第一函数分支包括至少一行第一代码;
121.对下游模块进行代码扫描,得到下游模块包括的各函数分支的分支调用图,并从
该分支调用图中,截取各第二函数分支以及各第二函数分支之间的调用关系,得到第二分支调用链;每个第二函数分支包括至少一行第二代码;
122.将第一分支调用链和第二分支调用链结合,将结合结果作为测试范围。
123.在本公开的一些实施例中,其中,确定模块501,具体用于:
124.获取执行变更代码时需要调用的下游接口地址;
125.根据各接口地址与模块之间的预设对应关系,确定下游接口地址对应的下游模块。
126.根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
127.图6示出了可以用来实施本公开的实施例的示例电子设备600的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
128.如图6所示,电子设备600包括计算单元601,其可以根据存储在只读存储器(rom)602中的计算机程序或者从存储单元608加载到随机访问存储器(ram)603中的计算机程序,来执行各种适当的动作和处理。在ram 603中,还可存储电子设备600操作所需的各种程序和数据。计算单元601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
129.电子设备600中的多个部件连接至i/o接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许电子设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
130.计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如测试范围确定方法。例如,在一些实施例中,测试范围确定方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由rom 602和/或通信单元609而被载入和/或安装到电子设备600上。当计算机程序加载到ram 603并由计算单元601执行时,可以执行上文描述的测试范围确定方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行测试范围确定方法。
131.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器
可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
132.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
133.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
134.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
135.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
136.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
137.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
138.上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
技术特征:
1.一种测试范围确定方法,包括:确定变更代码,以及所述变更代码所属的变更模块;确定执行所述变更代码时需要调用的下游模块;调用所述变更模块的变更接口,并监控所述变更模块中被执行的第一代码,以及所述下游模块中被执行的第二代码,所述变更接口用于调用所述变更代码;根据所述第一代码和所述第二代码,确定测试范围。2.根据权利要求1所述的方法,其中,在所述调用所述变更模块的变更接口之前,所述方法还包括:在所述变更模块和所述下游模块中的多行代码后,分别插入一个监控探针,每个监控探针用于监控该监控探针所在行的代码是否被执行;所述监控所述变更模块中被执行的第一代码,以及所述下游模块中被执行的第二代码,包括:每当接收到一个监控探针的返回值,根据所述返回值确定该监控探针所在的模块,所述返回值表示监控探针所在行的代码被执行;若该监控探针所在的模块为所述变更模块,则将该监控探针所在行的代码作为所述第一代码;若该监控探针所在的模块为所述下游模块,则将该监控探针所在行的代码作为所述第二代码。3.根据权利要求2所述的方法,其中,所述在所述变更模块和所述下游模块中的多行代码后,分别插入一个监控探针,包括:在所述变更模块和所述下游模块的每一行代码后,分别插入一个监控探针;或者,在所述变更模块和所述下游模块的每个函数的最后一行代码后,分别插入一个监控探针;所述根据所述第一代码和所述第二代码,确定测试范围,包括:对所述变更模块进行代码扫描,得到所述变更模块包括的各函数的函数调用图,并从该函数调用图中,截取各第一函数以及各第一函数之间的调用关系,得到所述第一函数调用链;每个第一函数包括至少一行第一代码;对所述下游模块进行代码扫描,得到所述下游模块包括的各函数的函数调用图,并从该函数调用图中,截取各第二函数以及各第二函数之间的调用关系,得到所述第二函数调用链;每个第二函数包括至少一行第二代码;将所述第一函数调用链和所述第二函数调用链结合,将结合结果作为所述测试范围。4.根据权利要求2所述的方法,其中,所述在所述变更模块和所述下游模块中的多行代码后,分别插入一个监控探针,包括:在所述变更模块和所述下游模块的每一行代码后,分别插入一个监控探针;或者,在所述变更模块和所述下游模块中每个函数分支的最后一行代码后,分别插入一个监控探针;所述根据所述第一代码和所述第二代码,确定测试范围,包括:对所述变更模块进行代码扫描,得到所述变更模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第一函数分支以及各第一函数分支之间的调用关系,得到所述第一分支调用链;每个第一函数分支包括至少一行第一代码;对所述下游模块进行代码扫描,得到所述下游模块包括的各函数分支的分支调用图,
并从该分支调用图中,截取各第二函数分支以及各第二函数分支之间的调用关系,得到所述第二分支调用链;每个第二函数分支包括至少一行第二代码;将所述第一分支调用链和所述第二分支调用链结合,将结合结果作为所述测试范围。5.根据权利要求1所述的方法,其中,所述确定执行所述变更代码时需要调用的下游模块,包括:获取执行所述变更代码时需要调用的下游接口地址;根据各接口地址与模块之间的预设对应关系,确定所述下游接口地址对应的下游模块。6.一种测试范围确定装置,包括:确定模块,用于确定变更代码,以及所述变更代码所属的变更模块;所述确定模块,还用于确定执行所述变更代码时需要调用的下游模块;监控模块,用于调用所述变更模块的变更接口,并监控所述变更模块中被执行的第一代码,以及所述下游模块中被执行的第二代码,所述变更接口用于调用所述变更代码;所述确定模块,还用于根据所述第一代码和所述第二代码,确定测试范围。7.根据权利要求6所述的装置,其中,所述装置还包括:插桩模块,用于在所述调用所述变更模块的变更接口之前,在所述变更模块和所述下游模块中的多行代码后,分别插入一个监控探针,每个监控探针用于监控该监控探针所在行的代码是否被执行;所述监控模块,具体用于:每当接收到一个监控探针的返回值,根据所述返回值确定该监控探针所在的模块,所述返回值表示监控探针所在行的代码被执行;若该监控探针所在的模块为所述变更模块,则将该监控探针所在行的代码作为所述第一代码;若该监控探针所在的模块为所述下游模块,则将该监控探针所在行的代码作为所述第二代码。8.根据权利要求7所述的装置,其中,所述插桩模块,具体用于:在所述变更模块和所述下游模块的每一行代码后,分别插入一个监控探针;或者,在所述变更模块和所述下游模块的每个函数的最后一行代码后,分别插入一个监控探针;所述确定模块,具体用于:对所述变更模块进行代码扫描,得到所述变更模块包括的各函数的函数调用图,并从该函数调用图中,截取各第一函数以及各第一函数之间的调用关系,得到所述第一函数调用链;每个第一函数包括至少一行第一代码;对所述下游模块进行代码扫描,得到所述下游模块包括的各函数的函数调用图,并从该函数调用图中,截取各第二函数以及各第二函数之间的调用关系,得到所述第二函数调用链;每个第二函数包括至少一行第二代码;将所述第一函数调用链和所述第二函数调用链结合,将结合结果作为所述测试范围。9.根据权利要求7所述的装置,其中,所述插桩模块,具体用于:在所述变更模块和所述下游模块的每一行代码后,分别插入一个监控探针;或者,在所述变更模块和所述下游模块中每个函数分支的最后一行代码后,分别插入一个监控探针;
所述确定模块,具体用于:对所述变更模块进行代码扫描,得到所述变更模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第一函数分支以及各第一函数分支之间的调用关系,得到所述第一分支调用链;每个第一函数分支包括至少一行第一代码;对所述下游模块进行代码扫描,得到所述下游模块包括的各函数分支的分支调用图,并从该分支调用图中,截取各第二函数分支以及各第二函数分支之间的调用关系,得到所述第二分支调用链;每个第二函数分支包括至少一行第二代码;将所述第一分支调用链和所述第二分支调用链结合,将结合结果作为所述测试范围。10.根据权利要求6所述的装置,其中,所述确定模块,具体用于:获取执行所述变更代码时需要调用的下游接口地址;根据各接口地址与模块之间的预设对应关系,确定所述下游接口地址对应的下游模块。11.一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-5中任一项所述的方法。12.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-5中任一项所述的方法。13.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-5中任一项所述的方法。
技术总结
本公开提供了一种测试范围确定方法、装置、电子设备及介质,涉及软件开发技术领域,尤其涉及软件测试技术领域。具体实现方案包括:确定变更代码,以及变更代码所属的变更模块,然后确定执行变更代码时需要调用的下游模块。之后调用变更模块的变更接口,并监控变更模块中被执行的第一代码,以及下游模块中被执行的第二代码,其中变更接口用于调用变更代码。之后根据第一代码和第二代码,确定测试范围。从而实现了提高测试范围的准确度。而实现了提高测试范围的准确度。而实现了提高测试范围的准确度。
技术研发人员:黄磊 陈美娜
受保护的技术使用者:北京百度网讯科技有限公司
技术研发日:2023.05.29
技术公布日:2023/8/21
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
