CN111290950A - 程序测试中测试点获取方法、装置、存储介质和设备 - Google Patents
程序测试中测试点获取方法、装置、存储介质和设备 Download PDFInfo
- Publication number
- CN111290950A CN111290950A CN202010073312.0A CN202010073312A CN111290950A CN 111290950 A CN111290950 A CN 111290950A CN 202010073312 A CN202010073312 A CN 202010073312A CN 111290950 A CN111290950 A CN 111290950A
- Authority
- CN
- China
- Prior art keywords
- function
- calling
- chain
- test
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种程序测试中测试点获取方法、装置、计算机可读存储介质和计算机设备,所述方法通过获取待测程序的函数调用链中静态调用链;对待测程序进行功能测试,记录在功能测试过程中函数调用链中动态调用链;提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。本申请通过在程序测试的测试过程中对比分析函数的静态调用链与动态调用链,来精准评估测试范围,并补充相应的测试点,从而提高测试效率,降低漏测风险。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种程序测试中测试点获取方法、装置、计算机可读存储介质和计算机设备。
背景技术
随着计算机技术的发展,计算机程序也不断在向前演进。计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。计算机以某些程序设计语言编写,运行于某种目标结构体系上。一般的,以英语文本为基础的计算机程序要经过编译、链接而成为人难以解读,但可轻易被计算机所解读的数字格式,然后放入运行。为了保证计算机程序可以顺序运行,需要对计算机程序进行程序测试。程序测试是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。
然而,在现有的测试流程内,会预先评估测试范围,而后确定测试点,并对测试点进行对应的功能测试,当测试通过后再执行上线操作。但评估的测试范围一般基于开发经验来确定,并不能提供一个精确的范围,选取出来的测试点可能会导致漏测或者盲目测试,降低测试精度与效率。
发明内容
基于此,有必要针对现有测试过程中测试点选取导致漏测或者盲目测试的技术问题,提供一种可以避免漏测以及盲目测试的程序测试中测试点获取方法、装置、计算机可读存储介质和计算机设备。
一种程序测试中测试点获取方法,包括:
获取待测程序的函数调用链中静态调用链;
对所述待测程序进行功能测试,记录在所述功能测试过程中所述函数调用链中动态调用链;
提取所述待测程序中函数的函数名称,对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点。
一种程序测试中测试点获取装置,所述装置包括:
第一调用链提取模块,用于获取待测程序的函数调用链中静态调用链;
第二调用链提取模块,用于对所述待测程序进行功能测试,记录在所述功能测试过程中所述待测程序的函数调用链中动态调用链;
测试点获取模块600,用于提取所述待测程序中函数的函数名称,对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待测程序的函数调用链中静态调用链;
对所述待测程序进行功能测试,记录在所述功能测试过程中所述函数调用链中动态调用链;
提取所述待测程序中函数的函数名称,并根据所述函数的函数名称,对比所述函数对应的静态调用链与动态调用链,获取测试点。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待测程序的函数调用链中静态调用链;
对所述待测程序进行功能测试,记录在所述功能测试过程中所述函数调用链中动态调用链;
提取所述待测程序中函数的函数名称,对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点。
上述程序测试中测试点获取方法、装置、计算机可读存储介质和计算机设备,通过获取待测程序的函数调用链中静态调用链;对待测程序进行功能测试,记录在功能测试过程中函数调用链中动态调用链;提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。本申请通过在程序测试的测试过程中对比分析函数的静态调用链与动态调用链,来精准评估测试范围,并补充相应的测试点,从而提高测试效率,降低漏测风险。
附图说明
图1为一个实施例中程序测试中测试点获取方法的应用环境图;
图2为一个实施例中程序测试中测试点获取方法的流程示意图;
图3为一个实施例中获取静态调用链步骤的流程示意图;
图4为一个实施例中通过分析两两调用关系获取静态调用链步骤的流程示意图;
图5为一个实施例中获取动态调用链步骤的流程示意图;
图6为一个实施例中获取函数名称步骤的流程示意图;
图7为一个实施例中程序测试中测试点获取方法的整体架构图;
图8为另一个实施例中程序测试中测试点获取方法的流程示意图;
图9为一个实施例中程序测试中测试点获取装置的结构框图;
图10为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中程序测试中测试点获取方法的应用环境图。参照图1,该测试点获取方法应用于应用测试系统。该应用测试系统包括终端102和测试服务器104。终端102和测试服务器104通过网络连接。终端102可以通过网络向测试服务器104提交待测程序,测试服务器104获取待测程序的函数调用链中的静态调用链;对待测程序进行功能测试,记录在功能测试过程中待测程序的函数调用链中的动态调用链;提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。终端102具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
如图2所示,在一个实施例中,提供了一种程序测试中测试点获取方法。本实施例主要以该方法应用于上述图1中的服务器104来举例说明。参照图2,该测试点获取方法具体包括如下步骤:
S200,获取待测程序的函数调用链中的静态调用链。
其中,待测程序是指应用测试系统测试的目标应用,本申请的测试点获取方法的目标为获取该待测程序中未测的测试点。待测程序具体可以是iOS、Android、Windows、Mac中任意一个平台的应用。函数调用链是在待测程序的待测代码中,其中一个函数可以被另外一个函数调用,以此类推,这种两两调用形成的函数调用关系,我们称之为函数调用链。函数调用关系包括了主调函数与被调函数。例如对于函数B调用函数A,函数C再调用函数B的调用关系。其对应的函数调用链为A--B--C,则函数C称为函数B的主调,而函数A则称为函数B的被调。而静态调用链则是指通过分析待测程序完整的代码,获取其中所有的函数调用关系,并得到的全部函数调用链。
具体地,在对待测程序进行功能测试时,可以通过从函数调用链的角度补充测试点,提高测试覆盖率,从而提高测试效率,降低漏测风险。具体的,在进行功能测试时,可以同时通过分析待测程序的全部代码,来得到待测程序的函数调用链中的静态调用链。在其中一个实施例中,可以通过代码语言对应的调用关系提取工具来获取待测程序的全部静态调用链。如对于Java类型的代码,可以先对Java代码进行编译,而后获取全量的jar包,而后通过java-callgraph来提取出Java代码中包括invokevirtual、invokeinterface、invokespecial、invokestatic、invokedynamic在内的5种类型的调用关系。
如图3所示,在一个实施例中,步骤200包括:
S210,获取待测程序对应的应用代码。
S230,通过预设函数调用分析工具提取应用代码对应的函数调用图。
S250,根据函数调用图获取待测程序的函数调用链中的静态调用链。
其中,待测程序对应的应用代码是指待测程序的全部构成代码,应用是由代码组成的,可以通过分析应用代码来提取待测程序中的静态调用链。预设函数调用分析工具具体可以根据应用代码对应的编程语言来进行选取,比如对于C语言的应用代码可以通过工具Call Graph(函数调用关系图)来获取函数调用关系。对于Java语言的应用代码,可以通过开源工具java-callgraph来获取函数调用关系,而通过预设函数调用分析工具获取的调用关系具体可以用函数调用图来表示,函数调用图具体包括了所有参与调用的函数以及这些函数之间的两两调用关系。而后测试服务器104可以根据函数调用图来获得函数调用链中的静态调用链。
具体的,服务器104可以根据待测程序的构成代码调用对应的函数调用分析工具。具体可以将函数调用分析工具的分析目标制定为待测程序的构成应用代码对应的代码文件。通过函数调用分析工具来提取这些应用代码中包含的函数调用。函数调用分析工具会根据提取出来的函数调用关系生成对应的函数调用图,并将函数调用图反馈给到测试服务器104。测试服务器得到函数调用图,而后通过分析函数调用图中的函数调用关系,来得到待测程序的函数调用链中的静态调用链。通过使用函数调用分析工具可以更加有效且高速地提取得到所有的函数调用关系,并得到对应的静态调用链,从而提高测试点的获取效率以及应用测试的效率。
如图4所示,在一个实施例中,步骤250包括:
S252,提取函数调用图内所有函数的两两调用关系。
S254,根据两两调用关系,通过深度优先搜索算法获取函数调用图中各函数的调用链。
S256,根据各函数的调用链,获取待测程序的函数调用链中的静态调用链。
其中两两调用关系是指包含调用关系的两个函数间的主调与被调关系。深度优先搜索算法(Depth First Search,DFS)是目的达到被搜索结构的叶结点的一种搜索方法,对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。在本申请中深度优先搜索算法主要用于查找各个函数对应的调用链,当计算函数A的调用链时,通过根据获得的两两调用关系,通过深度优先搜索算法获取函数A的全部主调函数,而后再获取得到的主调函数的主调函数,依次类推,就可以得到函数A对应的所有调用链。
具体的,服务器可以提取得到的函数调用图中包含的函数,并根据函数调用图获取这些函数间的两两调用关系。而后根据这些两两调用关系,针对每个函数运行一次深度优先搜索算法,得到该函数对应的调用链。而后根据得到的各函数的调用链,获取待测程序的函数调用链中的静态调用链。通过函数调用图提取所有函数的两两调用关系,而后通过优先搜索算法来生成函数调用链,可以有效提高获取待测程序的函数调用链中的静态调用链的效率,从而提高测试点的获取效率以及应用测试的效率。
S400,对待测程序进行功能测试,记录在功能测试过程中函数调用链中动态调用链。
其中功能测试是对应用进行测试的一个流程,主要用于测试对产品的各功能是否符合需求进行验证。动态调用链则是与静态调用链相对应的概念,功能测试过程中,测试覆盖到的调用链我们称之为动态调用链。具体,测试服务器104可以在功能测试的过程中,对功能测试覆盖到的调用链进行验证,以获取动态调用链。
具体的,测试人员可以预先评估功能测试的影响范围,并先评估出一些测试点,而后服务器104根据评估出的测试点执行对应的功能测试,同时服务器104在功能测试的过程中,可以记录功能测试涉及到的调用链,并将这些调用链作为动态调用链。
在一个实施例中,步骤S400包括:
对待测程序进行功能测试,记录测试过程中待测程序内各函数的调用路径。
根据调用路径获取待测程序的函数调用链中的动态调用链。
其中,调用路径指的是当前的函数在功能测试过程中每次被调用的路径记录信息,一个调用路径与一个动态调用链对应。此外,在功能测试的过程中,一个函数的改动,也只会影响到改动函数的主调路径,因此只需此函数主调的调用链。而后根据主调关系建立两个函数之间的两两调用关系,就可以进一步确定当前函数对应的各个动态调用链,进而确定待测程序的函数调用链中的全部动态调用链。通过调用路径可以更有效地分析确定待测程序对应的动态调用链。
具体的,服务器可以根据测试人员提供的测试点对当前的待测程序进行功能测试,同时在功能测试的过程中,记录功能测试覆盖到的函数对应的调用路径。具体的服务器可以记录功能测试过程中覆盖到的每一个函数对应的主调函数,以此建立函数之间的两两对应关系,同时建立对应的函数调用链。同时将功能测试过程中所得到的所有函数调用链作为待测程序的动态调用链。通过调用路径可以更有效地分析确定待测程序对应的动态调用链。
如图5所示,在一个实施例中,步骤S400具体包括:
S410,对待测程序进行功能测试,根据动态调用标记确定各函数对应主调函数,动态调用标记为预先在待测程序内各函数的入口处添加的标记。
S430,根据主调函数确定各函数的两两调用关系。
S450,根据两两调用关系,通过深度优先搜索算法获取各函数的函数调用链。
S470,根据各函数的调用链,获取待测程序的函数调用链中的动态调用链。
其中,动态调用标记是指在功能测试过程中用于识别被标记函数的主调函数对应的标记。可以先在待测程序中的各个函数上添加独特的动态调用标记,当其在执行过程中被主调函数调用时,则可以通过动态调用标记来查找该函数的主调函数。此外,在通过各函数的主调函数确定函数间的两两调用关系后,可以通过与上述类似的深度优先搜素算法,来确定各函数对应的函数调用链,从而进一步确定待测程序的函数调用链中的动态调用链。
具体的,测试服务器104可以在进行功能测试前,先向待测程序中函数的函数入口处添加上对应的动态调用标记,以在功能测试过程中,对功能测试覆盖到的调用关系进行识别。具体的,可以在功能测试的过程中。可以通过动态调用标记对当前的动态调用标记对应的主调函数进行识别。同时,由于一个函数的改动,只会影响到改动函数的主调路径,因此只需识别每个函数的主调函数就能进一步确定该函数对应的动态调用链。具体的,在其中一个实施例中,本申请用于对Java语言编写的待测程序进行测试,此时可以利用javaasm在每个函数的入口处获取堆栈,从而检测出动态调用标记,并进一步确定各函数对应主调函数。而后通过各函数对应的主调函数就可以获取当前功能测试过程中覆盖到的函数对应的动态调用链中的两两调用关系。而后根据这些两两调用关系,针对每个函数运行一次深度优先搜索算法,得到该函数对应的调用链。而后根据得到的各函数的调用链,获取待测程序的函数调用链中的动态调用链。通过函数调用图提取所有函数的两两调用关系,而后通过优先搜索算法来生成函数调用链,可以有效提高获取待测程序的函数调用链中的动态调用链的效率,从而提高测试点的获取效率以及应用测试的效率。
S600,提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。
其中函数名称是指待测程序中包括的所有的函数对应的名称。因为最终进行获取测试点计算是以函数为维度来进行,可以将函数名称作为动态调用链与动态调用链对比的枢纽,将当前函数名称对应的动态调用链与静态调用链进行对比。此外,如果代码有改变的话,则需要获取到改动的代码对应的函数名称。在其中一个实施例中,可以在编译时获得函数和行的对应关系,从而计算得到改动的代码对应的函数。
具体的,测试服务器104可以在对待测程序进行功能测试时,可以获取得到当前的待测程序对应的代码中各函数的函数名称,而后可以通过对该函数名称对应的动态调用链与静态调用链进行对比,来确定新的测试点。
因为静态调用链对应的为待测程序中所有的函数调用链。而动态调用链对应的则是在功能测试的过程中,涉及到的函数调用链。所以可以通过对比静态调用链与动态调用链,根据对比结果来补充测试点,使得功能测试可以覆盖全部的静态调用链,从而提高测试覆盖率。具体的,测试服务器104可以根据获得的函数名称查找得到该函数对应的动态调用链以及静态调用链。而后通过对比静态调用链与动态调用链,来确定功能测试过程中未覆盖到的静态调用链,并获取这些静态调用链对应的测试点,作为下次功能测试的补充测试点加入到下一轮次的功能测试中,从而提高测试的覆盖率。
如图6所示,在其中一个实施例中,步骤S600包括:
S610,对待测程序进行编译。
S630,获取待测程序的函数与代码行的对应关系。
S650,根据函数与代码行的对应关系提取函数的函数名称。
S670,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。
其中,函数与代码行的对应关系具体是指函数处于待测程序对应的代码中的第几行,因为最终计算是以函数的维度来进行计算的,如果代码有改变的话,则需要获取到改动的代码对应的函数名称。此时可以对待测代码进行编译,在编译过程中获得函数和行的对应关系,才能计算得到改动的代码对应的函数。
具体的,本申请的测试点获取方法还可以用于对改动前后的代码进行测试。由于代码改动前后函数的名称可能发生变化,此时需要确定改动前后代码中的名称。具体的,服务器104可以对提交至服务器端的待测程序对应的改动后代码进行编译,从而在编译的过程中得到这些代码中函数与行数的对应关系,从而确定改动后的代码中函数对应的函数名称。可以在编译过程中,通过函数与行数的对应关系更加高效地查找到改动后代码对应函数的函数名称,从而提高测试点的获取效率以及应用测试的效率。
在另一个实施例中,步骤S650之后的步骤S670具体包括:
根据函数的函数名称,确定各函数对应的静态调用链与动态调用链是否相同;当部分函数对应的静态调用链与动态调用链相同时,获取静态调用链与动态调用链不相同的函数,根据静态调用链与动态调用链不相同的函数对应静态调用链获取未覆盖功能测试影响范围,根据未覆盖业务影响范围获取测试点;当所有函数对应的静态调用链与动态调用链都不相同时,根据静态调用链获取未覆盖功能测试影响范围,根据未覆盖功能测试影响范围获取测试点。同时可以结合动态调用链,可以分析改动函数测试点的测试占比,帮助测试提高测试覆盖率,降低漏测的风险。
具体的,可以根据当前函数的函数名称,分别获得其对应的静态调用链与动态调用链,而后计算两种链是否完全一致。如果两种链完全一致的话就是全部相同,表明功能测试覆盖全部测试点,此时则无须补充测试点来进行测试。如果动态链属于静态链的一部分,动态链包含于静态链,称之为部分相同,表明有部分测试点未覆盖全,需要根据未包含部分的静态链补充相应的测试点。而如果,静态链和动态链完全不相同,称之为完全不同,此时则需要根据静态链评估影响范围,来补充测试点,重新进行测试。通过对比函数的静态链与动态链,可以精准地评估测试范围。而后根据对比结果来补充测试点,再进行测试,可以有效降低漏测的风险,提高测试效率。
上述程序测试中测试点获取方法,通过获取待测程序的函数调用链中静态调用链;对待测程序进行功能测试,记录在功能测试过程中函数调用链中动态调用链;提取待测程序中函数的函数名称,并根据函数的函数名称,对比函数对应的静态调用链与动态调用链,获取测试点。本申请通过在测试过程中对比分析函数的静态调用链与动态调用链,来精准评估测试范围,并补充相应的测试点,从而提高测试效率,降低漏测风险。
具体的,如图7所示,本申请的程序测试中测试点获取方法的作用目标为待测安卓应用。用于补充待测安卓应用在功能测试过程中的测试点,降低其漏测风险。该待测安卓应用的代码具体由Java语言编写。首先测试服务器可以接收待测安卓应用的源代码,而后通过两条线路分别获取待测安卓应用的函数调用链中的静态调用链以及动态调用链,其中获取静态调用链的过程可以参照图7上半部分的内容,测试服务器104首先对获得的待测安卓应用的全部源代码进行编译,获得待测安卓应用对应的全量jar(Java Archive,Java归档)包,而后对通过预设函数调用分析工具java-callgraph,获取待测安卓应用的源代码中函数调用关系中的两两调用关系,而后通过深度优先搜索算法(DFS)来获取函数调用链中的静态调用链。而获取动态调用链的过程则可以参照图7下半部分的内容,具体包括,测试服务器104将获得的待测安卓应用的全部源代码输入到编译器中,生成待测安卓应用对应的APK(Android application package,Android应用程序包),而后对该APK进行相应的功能测试,并在功能测试的过程中记录源代码中函数调用的路径,以此确定函数间的两两调用关系,而后通过深度优先搜索算法来获取函数调用链中的动态调用链。最后对比分析静态调用链中被动态调用链覆盖到的静态调用链,以及未被动态调用链覆盖到的静态调用链。根据对比分析的结果进一步补充测试点再进行测试。
此外,在另一个具体的实施例中,本申请的程序测试中测试点具体方法的应用对象为某款Java语言编写的安卓应用,该安卓应用具体应用于办公平台领域。当该应用根据需求单设计以及编写完毕后,需要进行一系列的软件测试来保证该安卓应用可以使用,同时可以满足预选涉及的要求。具体的,在功能测试过程中,包含多个测试轮次,在开始的测试轮次中,测试人员找对应功能开发人员评估功能测试的影响范围。而后功能开发人员和测试人员一起大致评估出一些测试点。测试服务器104可以根据这些测试点执行对应测试点的功能测试。由于功能开发人员和测试人员评估测试范围主要基于开发经验,并不能提供一个精确的影响范围,所以根据这些评估出来的测试点执行功能测试的话,往往会导致漏测或者盲目测试,从而降低了测试精度与效率。所以可以通过本申请的测试点获取方法来在测试过程中补充测试点,提高测试的覆盖率,降低漏测的风险。此外,当在测试过程中出现函数变动情况的话,也可以通过本申请来对测试点进行补充。具体的,测试人员在开始测试时,可以首先将待测安卓应用的完整代码提交到测试服务器104,同时将根据开发经验预估出的该待测安卓应用首次功能测试的测试点数据同时提交到测试服务器104。而后,测试服务器104首先获取该待测安卓应用的代码对应的静态调用链。具体的,测试服务器104可以首先对该待测安卓应用的代码进行编译,以获得这些代码对应的完整的jar包,而后启用预先安装完毕的开源应用java-callgraph,将获得的jar包输入到java-callgraph。通过java-callgraph绘制待测安卓应用内函数的函数调用图。而后测试服务器104可以得到java-callgraph反馈的函数调用图。并从函数调用图中分解得到各函数之间的两两调用关系。同时还可以获取函数之间的调用关系,调用关系具体包含invokevirtual、invokeinterface、invokespecial、invokestatic、invokedynamic这5种类型。而后可以对单个函数执行深度优先搜索算法,以得到该函数对应的调用链,这就是该函数的静态调用链。将所有函数的静态调用链综合起来,就是当前的待测安卓应用对应的函数调用链中的静态调用链。此外,测试服务器104还需要获得该待测安卓应用对应的动态调用链,这一过程具体可以为:测试服务器104将获得的待测安卓应用的源代码输入到编译器中,将该待测安卓应用编译成APK文件。而后根据预先选定的测试点对其进行功能测试。同时,测试服务器104在功能测试的过程中记录每个函数对应的路径。具体可以是,在待测安卓应用中函数的入口处添加对应的动态调用标记,而后在功能测试的过程中通过java asm在每个函数的入口处获取堆栈,以此识别当前函数的主调函数。对于版本测试而言,需要进行多次测试,在测试的过程中可能需要对函数进行修改,而一个函数的改动,只会影响到改动函数的主调路径,所以只需要识别主调函数后就可以建立函数间的两两调用关系,进而通过深度优先搜索算法获取当前函数的调用链,此次获得的函数调用链为动态调用链。将所有函数的动态调用链综合起来,就是当前的待测安卓应用对应的函数调用链中的动态调用链。当得到各函数的静态调用链与动态调用链之后,为了进行对比分析,还需要建立静态调用链与动态调用链的关联关系,因为最终计算是以函数的维度,所以在函数改变的情况下还需要获取到改动的代码对应的函数名称才能建立静态调用链与动态调用链的关联。具体的,可以再对当前的待测安卓应用的全部代码进行编译,在编译时拿到函数和行的对应关系,以此确定函数的名称,同时建立静态调用链与动态调用链的关联关系。而后可以进行对比分析,以补充测试点,具体的,可以根据函数的函数名称,确定各函数对应的静态调用链与动态调用链是否相同;当所有函数对应的静态调用链与动态调用链相同时,判定当前功能测试已覆盖所有测试点;当部分函数对应的静态调用链与动态调用链相同时,获取静态调用链与动态调用链不相同的函数,根据静态调用链与动态调用链不相同的函数对应静态调用链获取未覆盖功能测试影响范围,根据未覆盖业务影响范围获取测试点;当所有函数对应的静态调用链与动态调用链都不相同时,根据静态调用链获取未覆盖功能测试影响范围,根据未覆盖功能测试影响范围获取测试点。
图8为一个实施例中测试点获取方法的流程示意图。应该理解的是,虽然图8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图8中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
如图9所示,本申请还提供一种程序测试中测试点获取装置,装置包括:
第一调用链提取模块200,用于获取待测程序的函数调用链中的静态调用链;
第二调用链提取模块400,用于对待测程序进行功能测试,记录在功能测试过程中待测程序的函数调用链中的动态调用链;
测试点获取模块600,用于提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。
上述测试点获取装置,通过获取待测程序的函数调用链中静态调用链;对待测程序进行功能测试,记录在功能测试过程中函数调用链中动态调用链;提取待测程序中函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。本申请通过在测试过程中对比分析函数的静态调用链与动态调用链,来精准评估测试范围,并补充相应的测试点,从而提高测试效率,降低漏测风险。
在其中一个实施例中,第一调用链提取模块200具体用于:获取待测程序对应的应用代码;通过预设函数调用分析工具提取应用代码对应的函数调用图;根据函数调用图获取待测程序的函数调用链中的静态调用链。
在其中一个实施例中,第一调用链提取模块200还用于:提取函数调用图内所有函数的两两调用关系;根据两两调用关系,通过深度优先搜索算法获取函数调用图中各函数的调用链;根据各函数的调用链,获取待测程序的函数调用链中的静态调用链。
在其中一个实施例中,第二调用链提取模块400用于:对待测程序进行功能测试,记录测试过程中待测程序内各函数的调用路径;根据调用路径获取待测程序的函数调用链中的动态调用链。
在其中一个实施例中,第二调用链提取模块400还用于:对待测程序进行功能测试,根据动态调用标记确定各函数对应主调函数,动态调用标记为预先在待测程序内各函数的入口处添加的标记;根据主调函数确定各函数的两两调用关系;根据两两调用关系,通过深度优先搜索算法获取各函数的函数调用链;根据各函数的调用链,获取函数调用链中的动态调用链。
在其中一个实施例中,测试点获取模块600用于:对待测程序进行编译;获取待测程序的函数与代码行的对应关系;根据函数与代码行的对应关系提取函数的函数名称,对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。
在其中一个实施例中,测试点获取模块600还用于:根据函数的函数名称,确定各函数对应的静态调用链与动态调用链是否相同;当部分函数对应的静态调用链与动态调用链相同时,获取静态调用链与动态调用链不相同的函数,根据静态调用链与动态调用链不相同的函数对应静态调用链获取未覆盖功能测试影响范围,根据未覆盖业务影响范围获取测试点;当所有函数对应的静态调用链与动态调用链都不相同时,根据静态调用链获取未覆盖功能测试影响范围,根据未覆盖功能测试影响范围获取测试点。
图10示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的服务器104。如图10所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现测试点获取方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行测试点获取方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的程序测试中测试点获取装置可以实现为一种计算机程序的形式,计算机程序可在如图10所示的计算机设备上运行。计算机设备的存储器中可存储组成该程序测试中测试点获取装置的各个程序模块,比如,图9所示的第一调用链提取模块、第二调用链提取模块和测试点获取模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的测试点获取方法中的步骤。
例如,图10所示的计算机设备可以通过如图9所示的测试点获取装置中的第一调用链提取模块执行获取待测程序的函数调用链中的静态调用链的步骤。计算机设备可通过第二调用链提取模块执行对待测程序进行功能测试,记录在功能测试过程中待测程序的函数调用链中的动态调用链的步骤。计算机设备可通过测试点获取模块执行提取待测程序中函数的函数名称,根据函数的函数名称,对比函数对应的静态调用链与动态调用链,获取测试点的步骤。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述程序测试中测试点获取方法的步骤。此处程序测试中测试点获取方法的步骤可以是上述各个实施例的程序测试中测试点获取方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述程序测试中测试点获取方法的步骤。此处程序测试中测试点获取方法的步骤可以是上述各个实施例的程序测试中测试点获取方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种程序测试中测试点获取方法,包括:
获取待测程序的函数调用链中静态调用链;
对所述待测程序进行功能测试,记录在所述功能测试过程中所述函数调用链中动态调用链;
提取所述待测程序中函数的函数名称,对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点。
2.根据权利要求1所述的方法,其特征在于,所述获取待测程序的函数调用链中静态调用链包括:
获取待测程序对应的应用代码;
通过预设函数调用分析工具提取所述应用代码对应的函数调用图;
根据所述函数调用图获取所述函数调用链中静态调用链。
3.根据权利要求2所述的方法,其特征在于,所述根据所述函数调用图获取所述待测程序的函数调用链中静态调用链包括:
提取函数调用图内所有函数的两两调用关系;
根据两两调用关系,通过深度优先搜索算法获取所述函数调用图中各函数的调用链;
根据所述各函数的调用链,获取所述函数调用链中静态调用链。
4.根据权利要求1所述的方法,其特征在于,所述对所述待测程序进行功能测试,记录在所述功能测试过程中所述待测程序的函数调用链中动态调用链包括:
对所述待测程序进行功能测试,记录测试过程中所述待测程序内各函数的调用路径;
根据所述调用路径获取所述函数调用链中动态调用链。
5.根据权利要求1所述的方法,其特征在于,所述对所述待测程序进行功能测试,记录在所述功能测试过程中所述待测程序的函数调用链中动态调用链包括:
对所述待测程序进行功能测试,根据动态调用标记确定所述各函数对应主调函数,所述动态调用标记为预先在待测程序内各函数的入口处添加的标记;
根据所述主调函数确定所述各函数的两两调用关系;
根据两两调用关系,通过深度优先搜索算法获取所述各函数的函数调用链;
根据所述各函数的调用链,获取所述待测程序的函数调用链中动态调用链。
6.根据权利要求1所述的方法,其特征在于,所述提取所述待测程序中函数的函数名称,对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点包括:
对所述待测程序进行编译;
获取所述待测程序的函数与代码行的对应关系;
根据所述函数与代码行的对应关系提取所述函数的函数名称;
对比相同函数名称下函数对应的静态调用链与动态调用链,获取测试点。
7.根据权利要求1所述的方法,其特征在于,所述对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点包括:
根据所述函数的函数名称,确定各函数对应的静态调用链与动态调用链是否相同;
当部分函数对应的静态调用链与动态调用链相同时,获取静态调用链与动态调用链不相同的函数,根据所述静态调用链与动态调用链不相同的函数对应静态调用链获取未覆盖功能测试影响范围,根据所述未覆盖业务影响范围获取测试点;
当所有函数对应的静态调用链与动态调用链都不相同时,根据所述静态调用链获取未覆盖功能测试影响范围,根据所述未覆盖功能测试影响范围获取测试点。
8.一种程序测试中测试点获取装置,其特征在于,所述装置包括:
第一调用链提取模块,用于获取待测程序的函数调用链中静态调用链;
第二调用链提取模块,用于对所述待测程序进行功能测试,记录在所述功能测试过程中所述待测程序的函数调用链中动态调用链;
测试点获取模块,用于对比相同所述函数名称下所述函数对应的静态调用链与动态调用链,获取测试点。
9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010073312.0A CN111290950B (zh) | 2020-01-22 | 2020-01-22 | 程序测试中测试点获取方法、装置、存储介质和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010073312.0A CN111290950B (zh) | 2020-01-22 | 2020-01-22 | 程序测试中测试点获取方法、装置、存储介质和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111290950A true CN111290950A (zh) | 2020-06-16 |
CN111290950B CN111290950B (zh) | 2022-03-01 |
Family
ID=71023366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010073312.0A Active CN111290950B (zh) | 2020-01-22 | 2020-01-22 | 程序测试中测试点获取方法、装置、存储介质和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111290950B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486563A (zh) * | 2020-12-02 | 2021-03-12 | 车智互联(北京)科技有限公司 | 一种代码管理方法、系统、计算设备及可读存储介质 |
CN112540930A (zh) * | 2020-12-28 | 2021-03-23 | 北京百家科技集团有限公司 | 一种针对软件更新的评测方法、装置以及电子设备 |
CN112559343A (zh) * | 2020-12-11 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 测试路径生成方法及相关设备 |
CN112597007A (zh) * | 2020-12-14 | 2021-04-02 | 中国航发控制系统研究所 | 一种嵌入式软件集成测试完整性分析方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692206A (zh) * | 2009-08-28 | 2010-04-07 | 腾讯科技(深圳)有限公司 | 一种为静态回调函数添加动态参数的方法及相关实现 |
CN104536895A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 一种面向Java函数调用路径的测试过程跟踪方法及系统 |
CN105468508A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 代码检测方法及装置 |
CN106020848A (zh) * | 2016-06-07 | 2016-10-12 | 北京信息科技大学 | 面向c#的函数调用路径生成方法 |
US20180081777A1 (en) * | 2016-09-21 | 2018-03-22 | Lenvio Inc. | Call trace generation via behavior computation |
CN108874470A (zh) * | 2017-05-11 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及服务器、计算机存储介质 |
CN109829312A (zh) * | 2019-01-29 | 2019-05-31 | 北京启明星辰信息安全技术有限公司 | 基于调用链的java漏洞检测方法及检测系统 |
-
2020
- 2020-01-22 CN CN202010073312.0A patent/CN111290950B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692206A (zh) * | 2009-08-28 | 2010-04-07 | 腾讯科技(深圳)有限公司 | 一种为静态回调函数添加动态参数的方法及相关实现 |
CN105468508A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 代码检测方法及装置 |
CN104536895A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 一种面向Java函数调用路径的测试过程跟踪方法及系统 |
CN106020848A (zh) * | 2016-06-07 | 2016-10-12 | 北京信息科技大学 | 面向c#的函数调用路径生成方法 |
US20180081777A1 (en) * | 2016-09-21 | 2018-03-22 | Lenvio Inc. | Call trace generation via behavior computation |
CN108874470A (zh) * | 2017-05-11 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及服务器、计算机存储介质 |
CN109829312A (zh) * | 2019-01-29 | 2019-05-31 | 北京启明星辰信息安全技术有限公司 | 基于调用链的java漏洞检测方法及检测系统 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112486563A (zh) * | 2020-12-02 | 2021-03-12 | 车智互联(北京)科技有限公司 | 一种代码管理方法、系统、计算设备及可读存储介质 |
CN112559343A (zh) * | 2020-12-11 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 测试路径生成方法及相关设备 |
CN112597007A (zh) * | 2020-12-14 | 2021-04-02 | 中国航发控制系统研究所 | 一种嵌入式软件集成测试完整性分析方法 |
CN112597007B (zh) * | 2020-12-14 | 2023-10-03 | 中国航发控制系统研究所 | 一种嵌入式软件集成测试完整性分析方法 |
CN112540930A (zh) * | 2020-12-28 | 2021-03-23 | 北京百家科技集团有限公司 | 一种针对软件更新的评测方法、装置以及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111290950B (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111290950B (zh) | 程序测试中测试点获取方法、装置、存储介质和设备 | |
CN108427613B (zh) | 异常接口定位方法、装置、计算机设备和存储介质 | |
US8397104B2 (en) | Creation of test plans | |
US10289536B2 (en) | Distinguishing public and private code in testing environments | |
CN112559365A (zh) | 一种测试用例筛选方法、装置、计算机设备和存储介质 | |
CN110069404B (zh) | 代码调试方法、装置、设备及介质 | |
CN109766261B (zh) | 覆盖测试方法、装置、计算机设备和存储介质 | |
CN104021072A (zh) | 用于评估失效的软件程序的机器和方法 | |
KR102588856B1 (ko) | 소프트웨어 검증 방법 및 이를 위한 장치 | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN111078568A (zh) | 代码规范方法、装置、计算机设备和存储介质 | |
Alves et al. | Prioritizing test cases for early detection of refactoring faults | |
CN108399125B (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
CN113342685A (zh) | 精准测试方法、装置、计算机设备和存储介质 | |
CN112559364A (zh) | 一种测试用例生成方法、装置、计算机设备和存储介质 | |
CN111026647A (zh) | 代码覆盖率的获取方法、装置、计算机设备和存储介质 | |
CN113900962B (zh) | 代码差异检测方法及装置 | |
CN112860545B (zh) | 一种软件缺陷检测方法与装置 | |
JPH10320234A (ja) | ソフトウェアの自動テスト方法 | |
CN114328168A (zh) | 异常检测方法、装置、计算机设备和存储介质 | |
CN115794090A (zh) | 风控测试的方法、装置、计算机设备及计算机可读存储介质 | |
CN111625835B (zh) | 程序漏洞路径追踪方法、装置、计算机设备及存储介质 | |
CN114490413A (zh) | 测试数据的准备方法及装置、存储介质和电子设备 | |
CN113656318A (zh) | 软件版本测试方法、装置及计算机设备 | |
CN113094258A (zh) | 精准测试方法、装置、计算机设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40024089 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |