CN106776348B - 测试用例管理方法和装置 - Google Patents
测试用例管理方法和装置 Download PDFInfo
- Publication number
- CN106776348B CN106776348B CN201710065827.4A CN201710065827A CN106776348B CN 106776348 B CN106776348 B CN 106776348B CN 201710065827 A CN201710065827 A CN 201710065827A CN 106776348 B CN106776348 B CN 106776348B
- Authority
- CN
- China
- Prior art keywords
- function
- test case
- branch
- branches
- test cases
- 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.)
- Active
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
-
- 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/3684—Test management for test design, e.g. generating new test cases
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
技术领域
本发明涉及计算机应用领域,特别是涉及一种测试用例管理方法和装置。
背景技术
测试用例是为某个目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
传统的测试用例管理方法是建立数据库平台,用户在平台上进行测试用例的录入、查询、编辑、关联等操作。因测试用例和代码的关系完全靠人工关联,准确性低。
发明内容
本发明提供一种测试用例管理方法和装置,能提高用例和代码关联的准确性。
一种测试用例管理方法,包括:
获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址;
获取待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记;
根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数。
一种测试用例管理装置,包括:
解析模块,用于获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址;
记录模块,用于获取待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记;
关联模块,用于根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数。
上述测试用例管理方法和装置,通过获取待测对象的汇编代码,在汇编代码中的跳转指令前插入断点标记,获取测试用例,记录测试用例过程中的函数调用地址、函数调用关系和断点标记,从而建立了测试用例与函数之间的关联关系,因通过插入断点标记自动建立了测试用例与函数之间的关联关系,相比于人工关联,更加准确。
附图说明
图1为一个实施例中电子设备的内部结构示意图;
图2为一个实施例中测试用例管理方法的流程图;
图3为函数funA的代码示意图;
图4为图3中函数funA对应的函数分支示意图;
图5为一个实施例中测试用例去重处理的流程图;
图6A为已有测试用例关联函数的函数分支中函数名称变更示意图;
图6B为已有测试用例关联函数的函数分支中条件变更示意图;
图6C为已有测试用例关联函数的函数分支中增加条件示意图;
图7为一个实施例中变更后的函数获取测试用例的流程图;
图8为一个实施例测试用例管理装置的结构框图;
图9为另一个实施例测试用例管理装置的结构框图;
图10为另一个实施例测试用例管理装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为一个实施例中电子设备的内部结构示意图。如图1所示,该服务器包括通过系统总线连接的处理器、非易失性存储介质、内存储器和网络接口。其中,该服务器的非易失性存储介质存储有操作系统、数据库和测试用例管理装置,数据库中存储有测试用例及代码数据等,该测试用例管理装置用于实现适用于服务器的一种测试用例管理方法。该服务器的处理器用于提供计算和控制能力,支撑整个服务器的运行。该服务器的内存储器为非易失性存储介质中的测试用例管理装置的运行提供环境,该内存储器中可储存有计算机可读指令,该计算机可读指令被所述处理器执行时,可使得所述处理器执行一种测试用例管理方法。该电子设备的网络接口用于据以与外部的设备通过网络连接通信。电子设备可以是一个或者多个电子设备组成的设备集群来实现。本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
图2为一个实施例中测试用例管理方法的流程图。如图2所示,一种测试用例管理方法,包括步骤202至步骤206。其中:步骤202,获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址。
在一个实施例中,获取待测对象的汇编代码包括:获取与待测对象对应的二进制文件和程序数据库文件;通过所述二进制文件及对应的程序数据库文件反汇编得到待测对象的汇编代码。
本实施例中,待测对象是指有测试需求的产品。该产品可为某个网站、某个数据库、某个服务器等。
可根据所述待测对象的标识获取对应的代码路径,再根据代码路径自动获取到待测对象的二进制文件和PDB(Program Database File,程序数据库)文件。PDB文件的结构包括数据库头部、记录入口列表、应用信息块、排序信息块、数据库记录信息等。待测对象标识是指用来唯一标示待测对象身份的字符串。该字符串可包括数字、字母、字符等中一种或多种。待测对象标识可为待测对象的版本号等。根据待测对象的版本号可从编译平台获取对应的代码路径。
通过对所述二进制文件及对应的程序数据库文件进行反汇编,可以得到待测对象的汇编代码。
本实施例中,跳转指令是指call、jump等指令。断点标记是用于标记跳转指令,表示后续会产生跳转,进入一条支路。
步骤204,获取待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记。
本实施例中,可获取用户输入的测试用例的标识,根据测试用例的标识得到对应的测试用例。执行测试用例过程中,记录各函数调用地址、函数调用关系以及断点标记。
步骤206,根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数。
本实施例中,由所记录的测试用例执行过程中的函数调用地址、函数调用关系和断点标记,可以得到测试用例执行过程中的函数和函数的执行顺序,及由各函数的执行顺序可建立测试用例与函数之间的关联关系。
本实施例中测试用例管理方法,通过获取待测对象的二进制文件和程序数据库文件,通过反汇编得到汇编代码,在汇编代码中的跳转指令前插入断点标记,获取测试用例,记录测试用例过程中的函数调用地址、函数调用关系和断点标记,从而建立了测试用例与函数之间的关联关系,因通过插入断点标记自动建立了测试用例与函数之间的关联关系,相比于人工关联,更加准确。
在一个实施例中,上述测试用例管理方法还包括:通过调用跳转指令接口循环获取函数中跳转指令的个数,根据所述跳转指令的个数得到所述函数的函数分支个数;获取所述函数对应的已有测试用例的数量;及根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例。
在一个实施例中,根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例,包括:当所述函数对应的已有测试用例数量小于所述函数的函数分支个数时,为所述函数配置的测试用例个数等于所述函数分支个数与已有测试用例的数量之差。
本实施例中,测试用例和函数之间的关联关系是多对多的关系,即一个测试用例对应多个函数,一个函数对应多条测试用例。
针对单个函数,通过调用IDA(Interactive Disassembler,反汇编工具)提供的跳转指令接口(get_next_fcref_from)循环获取函数中跳转指令的个数,跳转指令的个数即为函数的函数分支个数。
已有测试用例的数量是指函数已经分配的测试用例的个数。为了对函数的函数分支进行全量覆盖,函数对应的测试用例数量需要与函数分支个数相等,当函数已有的测试用例数量小于函数分支个数时,将函数分支个数减去函数已有的测试用例个数得到还需要增加的测试用例的个数,通过函数分支可以检测出函数是否缺少测试用例,以及缺少测试用例的数量。
图3为函数funA的代码示意图。如图3所示,函数funA中包括两个条件if(a)和if(b),调用函数有funB、funE、funC、funF。函数funA执行过程为:if(a)为true(真),则执行函数funB{},再执行funE{};if(a)为false(假),则执行funC{},然后再判断if(b),若if(b)为true(真),执行函数funB{},若if(b)为false(假),则执行funF{}。
图4为图3中函数funA对应的函数分支示意图。如图4所示,函数funA对应的调用的函数分支有3条,分别为funA-funB-funE、funA-funC-funB和funA-funC-funF。funA-funB-funE对应测试用例1,funA-funC-funB对应测试用例2,funA-funC-funF对应测试用例3。
在一个实施例中,上述测试用例管理方法还包括:获取每个函数各分支下的判断条件和所述判断条件下的函数名称,进行字符串哈希运算得到每个函数各分支的哈希值,并将每个函数的各分支记为函数分支;采用各函数分支的哈希值表示所述函数分支。
本实施例中,哈希(hash)值是指散列,即把任意长度的输入通过散列算法变成固定长度的输出。
每个函数分支的哈希值计算公式可为:
hashi=hash(CONCAT(cond1,fun1,…,condj,funj))
其中,hashi表示第i个函数分支,condj表示第i个函数分支上的第j个条件判断,funj表示第i个函数分支上的第j个条件判断下的函数名称。CONCAT表示连接两个或多个数组的函数。
以图4中3个函数分支为例,函数funA的三个函数分支的hash值分别为:
hash1=hash(if(a)funBfunE);
hash2=hash(if(a)funCif(b)funB);
hash3=hash(if(a)funCif(b)funF)。
当多条测试用例执行的函数分支为同一个函数分支时,需要对测试用例进行去重处理。
在一个实施例中,上述测试用例管理方法还包括:根据所述测试用例与函数之间的关联关系获取测试用例被执行时所调用的函数和函数执行顺序;根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度。
具体地,函数执行顺序是指函数执行的先后顺序。函数分支的层级是指函数分支中按照函数执行顺序可以分为一层一层的。
可预先设置函数分支中的层级与测试用例之间的亲密度。例如,函数分支中第一层的函数与测试用例的亲密度为1,第二层函数与测试用例的亲密度为2,第三层函数与测试用例的亲密度为3,依次类推。亲密度越小越亲密。以测试用例1对应的函数分支funA-funB-funE为例,测试用例1与函数funA的亲密度为1,测试用例1与函数funB的亲密度为2,测试用例1与函数funE的亲密度为3。
根据亲密度分配测试用例的优先级,亲密度越小对应的测试用例的优先级越高。若有多个测试用例与函数的亲密度最小,则随机选取一个测试用例作为优先级最高的测试用例。
在一个实施例中,在所述根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度之后,所述测试用例管理方法还包括:从函数分支中获取选择的核心函数;根据所述核心函数调整所述函数分支中函数与测试用例之间的亲密度。
本实施例中,因测试用例的实际测试函数有可能不是入口函数,因此在获取函数与测试用例之间的亲密度之后,可由用户选择函数分支的核心函数,将核心函数与测试用例的亲密度设置为1,从该核心函数开始相邻的下一个函数与测试用例的亲密度为2,依此类推,调整函数分支中函数与测试用例之间的亲密度。通过选择核心函数,根据核心函数调整函数与测试用例的亲密度,使得测试用例与用户关心的函数之间的关系更加密切,更能反映用户的需求。
因一相同的函数分支可能关联了多个测试用例,造成测试用例的容易,需要对测试用例进行去重处理。
图5为一个实施例中测试用例去重处理的流程图。如图5所示,一种测试用例去重处理,包括:
步骤502,获取函数的函数分支个数,并获取各函数分支的哈希值。
本实施例中,获取函数后,通过跳转指令接口循环获取函数中的跳转指令个数,得到函数的函数分支个数,并通过哈希运算获取各函数分支的哈希值。
步骤504,获取相同哈希值的函数分支对应的测试用例。
本实施例中,当相同哈希值的函数分支关联多个测试用例,则获取相同哈希值的函数分支对应的多个测试用例。
步骤506,获取相同哈希值的函数分支对应的测试用例与所述函数的亲密度。
本实施例中,获取到相同哈希值的函数分支对应的全部测试用例,并获取全部测试用例中各个测试用例与函数的亲密度。
步骤508,选择亲密度最小的测试用例作为所述相同哈希值的函数分支对应的优先级最高的测试用例。
本实施例中,亲密度越小,测试用例与函数越亲密。相同哈希值的函数分支对应有多个测试用例,选择测试用例与函数亲密度最小的测试用例作为函数的哈希值的函数分支对应的优先级最高的测试用例。
计算公式:c=MIN(dist(ci,funj)),其中,ci表示哈希值相同的函数分支对应的测试用例,dist表示该测试用例ci与funj的亲密度。
当测试用例与函数的最小亲密度有两个或两个以上相同时,随机选择一个测试用例作为优先级最高的测试用例。
例如,函数funA有3个函数分支,函数分支funA-funB-funE对应的哈希值为hashA,该hashA的函数分支对应了测试用例1、测试用例2和测试用例3,测试用例1与函数funA的亲密度为1,测试用例2与函数funA的亲密度为2,测试用例3与函数funA的亲密度为3,则选取测试用例1作为哈希值hashA的函数分支对应的优先级最高的测试用例。从而实现测试用例去重处理。
在一个实施例中,上述测试用例管理方法还包括:获取与已有测试用例关联的函数的函数分支所发生的变更情况,根据所述变更情况对函数与测试用例的关联关系进行动态更新。
第一种情况,若所述变更情况为判断条件不变,函数分支中函数名称变更,则所述函数的函数分支个数不变,变更的函数所在的函数分支的哈希值变更,所述变更的函数关联的测试用例不变。
第二种情况,若所述变更情况为判断条件变更,则所述函数的函数分支个数不变,变更条件所在的函数分支的哈希值均变更,关联的测试用例发生变更,增加新的测试用例;
第三种情况,若所述变更情况为新增加判断条件,则所述函数的函数分支个数发生变更,对所述函数重新划分函数分支,获取所述函数分支的哈希值,删除新增加判断条件所在的函数分支所对应的原有的测试用例,增加新的测试用例。
图6A为已有测试用例关联函数的函数分支中函数名称变更示意图。如图6A所示,函数funA原包括函数分支funA-funB-funE、funA-funC-funB和funA-funC-funF,条件1和条件2。函数funA关联有测试用例1、测试用例2和测试用例3。函数funA的函数分支funA-funB-funE中的funE函数名称变更,则变更后函数funA的函数分支(即函数调用链)哈希数为3,重新计算函数funE所在函数分支funA-funB-funE的哈希值,测试用例不变。
图6B为已有测试用例关联函数的函数分支中条件变更示意图。如图6B所示,函数funA原包括函数分支funA-funB-funE、funA-funC-funB和funA-funC-funF,以及条件1和条件2。函数funA关联有测试用例1、测试用例2和测试用例3。变更情况:将条件2变为条件3。则变更后函数funA的函数分支(即函数调用链)哈希数为3,去掉测试用例2和测试用例3,增加测试用例4和测试用例5。
图6C为已有测试用例关联函数的函数分支中增加条件示意图。如图6C所示,函数funA原包括函数分支funA-funB-funE、funA-funC-funB和funA-funC-funF,以及条件1和条件2。函数funA关联有测试用例1、测试用例2和测试用例3。变更情况:增加条件3。则变更后函数funA的函数分支(即函数调用链)哈希数为4,去掉测试用例3,增加测试用例6和测试用例7。
图6A、图6B和图6C三种情况变更后的函数对应的函数分支个数和测试用例变更如表1所示。
表1
图7为一个实施例中变更函数获取测试用例的流程图。如图6所示,变更函数获取测试用例,包括:
步骤702,获取变更后的函数。
本实施例中,变更后的函数是指发生变更后的函数。
步骤704,获取所述函数对应的测试用例集合。
本实施例中,测试用例集合是用于记录变更函数关联的测试用例。
步骤706,根据所述函数对应的函数分支的哈希值将所述测试用例集合中的测试用例分类。
本实施例中,将变更后的函数进行函数分支划分得到各个函数分支,并计算各个函数分支的哈希值,一个函数分支关联有一个或多个测试用例,根据哈希值将测试用例集合中的测试用例进行分类,将相同哈希值的函数分支对应的测试用例分为同一类别。例如将测试用例集合分类得到测试用例集合1、测试用例集合2、测试用例集合3等。
步骤708,获取测试用例与函数的亲密度,根据所述亲密度将同类别的测试用例分配对应的优先级。
本实施例中,同类别的测试用例是指相同哈希值的函数分支对应的测试用例。根据测试用例被执行所调用的函数和函数执行顺,根据函数执行顺序中函数分支的层级获取测试用例与函数的亲密度。将亲密度最小的测试用例的优先级分配为最高,亲密度最大的测试用例的优先级分配为最低。
步骤710,选择同类别的测试用例中优先级最高的测试用例作为所述函数在所述类别的测试用例。
本实施例中,例如通过哈希值分类得到第一类的测试用例集合1,获取测试用例集合1中优先级最高的测试用例作为变更后的函数的第一类的测试用例。
例如,函数funA关联了测试用例1、测试用例2和测试用例3。当funA发生变更时,则根据funcA与测试用例1、测试用例2和测试用例3的亲密度来选择测试用例,假设funA与测试用例1的亲密度为1,funA与测试用例2的亲密度为2,funA与测试用例3的其密度为3,则选择测试用例1为最高优先级的测试用例优先执行。
本实施例中,当函数发生变更时,通过获取变更后的函数对应的测试用例,根据函数分支的哈希值将测试用例分类后,得到各个哈希值对应的测试用例,从测试用例中选取与函数亲密度最小的测试用例作为优先级最高的测试用例,避免了因函数变更,导致函数变更后测试用例混淆。
图8为一个实施例测试用例管理装置的结构框图。如图8所示,一种测试用例管理装置800,为对应于测试用例管理方法的虚拟装置,描述不详细之处请参照方法中描述,包括文件获取模块802、反汇编模块804、解析模块806、记录模块808和关联模块810。其中:
文件获取模块802用于获取与待测对象对应的二进制文件和程序数据库文件。在一个实施例中,文件获取模块802还用于可根据所述待测对象的标识获取对应的代码路径,再根据代码路径自动获取到待测对象的二进制文件和PDB文件。
反汇编模块804用于通过所述二进制文件及对应的程序数据库文件逆向得到待测对象的汇编代码。
解析模块806用于获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址。
记录模块808用于获取待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记。
关联模块810用于根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数。
本实施例中测试用例管理装置,通过获取待测对象对应的二进制文件和程序数据库文件,通过反汇编得到汇编代码,在汇编代码中的跳转指令前插入断点标记,获取测试用例,记录测试用例过程中的函数调用地址、函数调用关系和断点标记,从而建立了测试用例与函数之间的关联关系,因通过插入断点标记自动建立了测试用例与函数之间的关联关系,相比于人工关联,更加准确。
在一个实施例中,一种测试用例管理装置800可包括解析模块806、记录模块808和关联模块810。
图9为另一个实施例测试用例管理装置的结构框图。如图9所示,一种测试用例管理装置800,除了包括文件获取模块802、反汇编模块804、解析模块806、记录模块808和关联模块810,还包括函数分支划分模块812、测试用例获取模块814、测试用例配置模块816、哈希运算模块818、关系获取模块820、亲密度获取模块822、测试用例获取模块824和用例去重模块826。其中:
函数分支划分模块812用于通过调用跳转指令接口循环获取函数中跳转指令的个数,根据所述跳转指令的个数得到所述函数的函数分支个数。
测试用例获取模块814用于获取所述函数对应的已有测试用例的数量;及
测试用例配置模块816用于根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例。测试用例配置模块816用于当所述函数对应的已有测试用例数量小于所述函数的函数分支个数时,为所述函数配置的测试用例个数等于所述函数分支个数与已有测试用例的数量之差。
哈希运算模块818用于获取每个函数各分支下的判断条件和各判断条件下的函数名称,进行字符串哈希运算得到每个函数各分支的哈希值,并将每个函数的各分支记为函数分支;采用各函数分支的哈希值表示该函数分支。
关系获取模块820用于根据所述测试用例与函数之间的关联关系获取测试用例被执行时所调用的函数和函数执行顺序;
亲密度获取模块822用于根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度。
亲密度获取模块822还用于在所述根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度之后,从函数分支中获取选择的核心函数;以及根据所述核心函数调整所述函数分支中函数与测试用例之间的亲密度。
在一个实施例中,所述函数分支划分模块812还用于获取函数的分支个数,并获取所述函数分支的哈希值。
所述测试用例获取模块824用于获取相同哈希值的函数分支对应的测试用例。
所述亲密度获取模块822还用于获取所述相同哈希值的函数分支对应的测试用例与所述函数的亲密度。
所述用例去重模块826用于选择亲密度最小的测试用例作为所述相同哈希值的函数分支对应的优先级最高的测试用例。
图10为另一个实施例测试用例管理装置的结构框图。如图10所示,一种测试用例管理装置800,除了包括文件获取模块802、反汇编模块804、解析模块806、记录模块808和关联模块810,还包括变更函数获取模块828、用例获取模块830、用例分类模块832、等级配置模块834、选取模块836和变更更新模块838。其中:
变更函数获取模块828用于获取变更后的函数。
用例获取模块830用于获取所述函数对应的测试用例集合。
用例分类模块832用于根据所述函数对应的函数分支的哈希值将所述测试用例集合中的测试用例分类。
等级配置模块834用于获取测试用例与函数的亲密度,根据所述亲密度将同类别的测试用例分配对应的优先级。
选取模块836用于选择同类别的测试用例中优先级最高的测试用例作为所述变更函数在所述类别的测试用例。
变更更新模块838用于获取已有测试用例关联的函数的函数分支发生变更情况,根据所述变更情况对函数与测试用例之间的关联关系进行动态更新。
若所述变更情况为判断条件不变,函数分支中函数名称变更,则所述函数的函数分支个数不变,变更的函数所在的函数分支的哈希值变更,所述变更的函数关联的测试用例不变;
若所述变更情况为判断条件变更,所述函数的函数分支个数不变,变更条件所在的函数分支的哈希值均变更,关联的测试用例发生变更,增加新的测试用例;
若所述变更情况为新增加判断条件,所述函数的函数分支个数发生变更,对所述函数重新划分函数分支,获取所述函数分支的哈希值,删除新增加判断条件所在的函数分支所对应的原有的测试用例,增加新的测试用例。
在其他实施例中,一种测试用例管理装置800,可包括文件获取模块802、反汇编模块804、解析模块806、记录模块808和关联模块810、函数分支划分模块812、测试用例获取模块814、测试用例配置模块816、哈希运算模块818、关系获取模块820、亲密度获取模块822、测试用例获取模块824和用例去重模块826、变更函数获取模块828、用例获取模块830、用例分类模块832、等级配置模块834、选取模块836和变更更新模块838中任意可能的组合。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (20)
1.一种测试用例管理方法,包括:
获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址;
获取待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记;
根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数;
获取与已有测试用例关联的函数的函数分支所发生的变更情况,根据所述变更情况对函数与测试用例的关联关系进行动态更新;
若所述变更情况为判断条件不变,函数分支中函数名称变更,则所述函数的函数分支个数不变,变更的函数所在的函数分支的哈希值变更,所述变更的函数关联的测试用例不变;所述哈希值通过所述函数分支进行哈希运算得到。
2.根据权利要求1所述的方法,其特征在于,所述获取待测对象的汇编代码的步骤包括:
获取与待测对象对应的二进制文件和程序数据库文件;
通过对所述二进制文件及对应的程序数据库文件反汇编得到所述待测对象的汇编代码。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:通过调用跳转指令接口循环获取所述函数中跳转指令的个数,根据所述跳转指令的个数得到所述函数的函数分支个数;
获取所述函数对应的已有测试用例的数量;及
根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例。
4.根据权利要求3所述的方法,其特征在于,所述根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例,包括:
当所述函数对应的已有测试用例数量小于所述函数的函数分支个数时,为所述函数配置的测试用例个数等于所述函数分支个数与已有测试用例的数量之差。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
获取每个函数各分支下的判断条件和各判断条件下的函数名称,进行字符串哈希运算得到每个函数各分支的哈希值,并将每个函数的各分支记为函数分支;
采用各函数分支的哈希值表示该函数分支。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
根据所述测试用例与函数之间的关联关系获取测试用例被执行时所调用的函数和函数执行顺序;
根据所述函数执行 顺序中函数分支的层级获取函数与测试用例之间的亲密度。
7.根据权利要求6所述的方法,其特征在于,在所述根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度之后,所述方法还包括:
从所述函数分支中获取选择的核心函数;
根据所述核心函数调整所述函数分支中函数与测试用例之间的亲密度。
8.根据权利要求6或7所述的方法,其特征在于,所述方法还包括:
获取函数的函数分支个数,并获取各个函数分支的哈希值;
获取相同哈希值的函数分支对应的测试用例;
获取所述相同哈希值的函数分支对应的测试用例与所述函数的亲密度;
选择亲密度最小的测试用例作为所述相同哈希值的函数分支对应的优先级最高的测试用例。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述变更情况为判断条件变更,则所述函数的函数分支个数不变,变更条件所在的函数分支的哈希值均变更,关联的测试用例发生变更,增加新的测试用例;
若所述变更情况为新增加判断条件,则所述函数的函数分支个数发生变更,对所述函数重新划分函数分支,获取所述函数分支的哈希值,删除新增加判断条件所在的函数分支所对应的原有的测试用例,增加新的测试用例。
10.一种测试用例管理装置,其特征在于,包括:
解析模块,用于获取待测对象的汇编代码,在所述汇编代码中的跳转指令前作断点标记,解析所述汇编代码得到函数调用地址;
记录模块,用于获取所述待测对象的测试用例,执行所述测试用例,并记录执行过程中所涉及的所述汇编代码中的函数调用地址、函数调用关系和断点标记;
关联模块,用于根据所述测试用例以及所述测试用例执行过程中所涉及的所述汇编代码中的所述函数调用地址、函数调用关系和断点标记建立测试用例与函数之间的关联关系,所述函数包括函数调用地址所对应的函数;
变更更新模块,用于获取与已有测试用例关联的函数的函数分支所发生的变更情况,根据所述变更情况对函数与测试用例的关联关系进行动态更新;
若所述变更情况为判断条件不变,函数分支中函数名称变更,则所述函数的函数分支个数不变,变更的函数所在的函数分支的哈希值变更,所述变更的函数关联的测试用例不变;所述哈希值通过所述函数分支进行哈希运算得到。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
文件获取模块,用于获取与待测对象对应的二进制文件和程序数据库文件;
反汇编模块,用于通过所述二进制文件及对应的程序数据库文件反汇编得到所述待测对象的汇编代码。
12.根据权利要求10所述的装置,其特征在于,所述装置还包括:
函数分支划分模块,用于通过调用跳转指令接口循环获取所述函数中跳转指令的个数,根据所述跳转指令的个数得到所述函数的函数分支个数;
测试用例获取模块,用于获取所述函数对应的已有测试用例的数量;及
测试用例配置模块,用于根据所述函数的函数分支个数和已有测试用例的数量,为所述函数配置测试用例。
13.根据权利要求12所述的装置,其特征在于,所述测试用例配置模块还用于当所述函数对应的已有测试用例数量小于所述函数的函数分支个数时,为所述函数配置的测试用例个数等于所述函数分支个数与已有测试用例的数量之差。
14.根据权利要求12所述的装置,其特征在于,所述装置还包括:
哈希运算模块,用于获取每个函数各分支下的判断条件和各判断条件下的函数名称,进行字符串哈希运算得到每个函数各分支的哈希值,并将每个函数的各分支记为函数分支;采用各函数分支的哈希值表示该函数分支。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
关系获取模块,用于根据所述测试用例与函数之间的关联关系获取测试用例被执行时所调用的函数和函数执行顺序;
亲密度获取模块,用于根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度。
16.根据权利要求15所述的装置,其特征在于,所述亲密度获取模块还用于在所述根据所述函数执行顺序中函数分支的层级获取函数与测试用例之间的亲密度之后,从所述函数分支中获取选择的核心函数;以及根据所述核心函数调整所述函数分支中函数与测试用例之间的亲密度。
17.根据权利要求15或16所述的装置,其特征在于,所述装置还包括测试用例获取模块和用例去重模块;
所述函数分支划分模块还用于获取函数的分支个数,并获取各个函数分支的哈希值;
所述测试用例获取模块用于获取相同哈希值的函数分支对应的测试用例;
所述亲密度获取模块还用于获取所述相同哈希值的函数分支对应的测试用例与所述函数的亲密度;
所述用例去重模块用于选择亲密度最小的测试用例作为所述相同哈希值的函数分支对应的优先级最高的测试用例。
18.根据权利要求10所述的装置,其特征在于,所述变更更新模块,还用于
若所述变更情况为判断条件变更,则所述函数的函数分支个数不变,变更条件所在的函数分支的哈希值均变更,关联的测试用例发生变更,增加新的测试用例;
若所述变更情况为新增加判断条件,则所述函数的函数分支个数发生变更,对所述函数重新划分函数分支,获取所述函数分支的哈希值,删除新增加判断条件所在的函数分支所对应的原有的测试用例,增加新的测试用例。
19.一种电子设备,包括内存储器和处理器,所述内存储器存储有计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时实现权利要求1至9中任一项所述的方法的步骤。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710065827.4A CN106776348B (zh) | 2017-02-06 | 2017-02-06 | 测试用例管理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710065827.4A CN106776348B (zh) | 2017-02-06 | 2017-02-06 | 测试用例管理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776348A CN106776348A (zh) | 2017-05-31 |
CN106776348B true CN106776348B (zh) | 2022-09-09 |
Family
ID=58956262
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710065827.4A Active CN106776348B (zh) | 2017-02-06 | 2017-02-06 | 测试用例管理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776348B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107741905B (zh) * | 2017-09-11 | 2020-01-03 | 珠海格力电器股份有限公司 | 测试用例及其解析模型、执行方法、存储介质和处理器 |
CN107783904B (zh) * | 2017-09-27 | 2021-03-16 | 武汉斗鱼网络科技有限公司 | 单元测试桩去重方法、装置、计算机可读存储介质及设备 |
CN110109816A (zh) * | 2018-02-01 | 2019-08-09 | 华为技术有限公司 | 测试用例选择方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201383144Y (zh) * | 2009-03-25 | 2010-01-13 | 北京信息工程学院 | 测试装置 |
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
CN104536896A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 面向函数调用路径的回归测试用例选择与排序方法及系统 |
CN105808438A (zh) * | 2016-03-11 | 2016-07-27 | 北京信息科技大学 | 一种基于函数调用路径的测试用例复用方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873945B2 (en) * | 2007-06-29 | 2011-01-18 | Microsoft Corporation | Automatically generating test cases for binary code |
CN102789419B (zh) * | 2012-07-20 | 2015-04-15 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN103678097A (zh) * | 2012-09-05 | 2014-03-26 | 百度在线网络技术(北京)有限公司 | 一种选择回归测试用例的方法和装置 |
CN105302710B (zh) * | 2014-07-03 | 2019-06-07 | 腾讯科技(深圳)有限公司 | 一种确定需要回归测试的测试用例的方法和装置 |
CN104536895B (zh) * | 2015-01-12 | 2017-06-09 | 牟永敏 | 一种面向Java函数调用路径的测试过程跟踪方法及系统 |
-
2017
- 2017-02-06 CN CN201710065827.4A patent/CN106776348B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
CN201383144Y (zh) * | 2009-03-25 | 2010-01-13 | 北京信息工程学院 | 测试装置 |
CN104536896A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 面向函数调用路径的回归测试用例选择与排序方法及系统 |
CN105808438A (zh) * | 2016-03-11 | 2016-07-27 | 北京信息科技大学 | 一种基于函数调用路径的测试用例复用方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106776348A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108073519B (zh) | 测试用例生成方法和装置 | |
KR101609088B1 (ko) | 검색 부하들에 따라 균형이 맞춰지는 지문 데이터베이스를 갖는 미디어 식별 시스템 | |
US8707268B2 (en) | Testing operations of software | |
CN111506498A (zh) | 测试用例的自动生成方法、装置、计算机设备及存储介质 | |
US20180136933A1 (en) | Dependency rank based on commit history | |
JP2017224184A (ja) | 機械学習装置 | |
CN106776348B (zh) | 测试用例管理方法和装置 | |
CN110704062A (zh) | 依赖管理方法、数据获取方法、装置及设备 | |
CN108496190B (zh) | 用于从电子数据结构中提取属性的注释系统 | |
US10031936B2 (en) | Database table data fabrication | |
CN110674360B (zh) | 一种用于数据的溯源方法和系统 | |
CN110287696A (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN103473076A (zh) | 一种代码版本的发布方法及系统 | |
CN111062013A (zh) | 一种账号过滤方法、装置、电子设备及机器可读存储介质 | |
US9323885B2 (en) | Method for generating updated vehicle wiring harness diagrams | |
CN111615688A (zh) | 一种断言验证代码绑定方法及装置 | |
CN109690571A (zh) | 基于学习的组标记系统和方法 | |
CN109388568B (zh) | 代码测试方法和装置 | |
CN114329022A (zh) | 一种色情分类模型的训练、图像检测方法及相关装置 | |
CN113268439A (zh) | 内存地址的查找方法和装置、电子设备和存储介质 | |
JP6356015B2 (ja) | 遺伝子発現情報解析装置、遺伝子発現情報解析方法、及びプログラム | |
Douglas et al. | Processing a 16S rRNA sequencing dataset with the microbiome helper workflow | |
JP6123372B2 (ja) | 情報処理システム、名寄せ判定方法及びプログラム | |
CN113780950A (zh) | 数据处理方法、装置、服务器和可读存储介质 | |
CN108984780B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |