CN112783765B - 一种适用于指针的单元测试用例生成方法及装置 - Google Patents
一种适用于指针的单元测试用例生成方法及装置 Download PDFInfo
- Publication number
- CN112783765B CN112783765B CN202110043899.5A CN202110043899A CN112783765B CN 112783765 B CN112783765 B CN 112783765B CN 202110043899 A CN202110043899 A CN 202110043899A CN 112783765 B CN112783765 B CN 112783765B
- Authority
- CN
- China
- Prior art keywords
- type
- void
- pointer
- preset
- generating
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 66
- 238000000034 method Methods 0.000 title claims abstract description 43
- 239000011800 void material Substances 0.000 claims abstract description 146
- 238000004458 analytical method Methods 0.000 claims abstract description 21
- 230000003068 static effect Effects 0.000 claims abstract description 20
- 230000014509 gene expression Effects 0.000 claims description 35
- 230000015556 catabolic process Effects 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 25
- 238000010586 diagram Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 239000004744 fabric Substances 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000010845 search algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
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/3684—Test management for test design, e.g. generating new test cases
-
- 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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
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)
- Software Systems (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种适用于指针的单元测试用例生成方法及装置,该方法包括:对预设被测程序进行静态分析确定输入元素中的成员类型,根据成员类型判断输入元素是否为void*或含void*成员的结构体;若是void*或含void*成员的结构体,则确定void*或void*成员指向的实际类型以及根据实际类型生成输入驱动文件;判断实际类型是否为结构体类型且结构体类型中的结构体是否包含指向动态堆数据结构的成员;若是结构体类型且结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据展开层次生成配置文件,根据驱动文件以及配置文件自动生成测试用例。本申请解决了现有技术中生成的测试用例覆盖率较低、执行崩溃或内存开销过大的技术问题。
Description
技术领域
本申请涉及自动测试用例生成技术领域,尤其涉及一种适用于指针的单元测试用例生成方法及装置。
背景技术
单元测试是保证软件质量的一种有效措施,然而随着软件代码规模膨胀,仅靠人工做单元测试的效率无法满足需求,因此自动化生成测试用例的方法应运而生,如随机生成、符号执行等技术。而C/C++程序软件中存在大量指针类型的输入,对这类输入的用例自动生成不但要生成指针所指向的内存区域,还要生成对应内存区域中的值,才能实现预期的覆盖。C/C++程序软件中存在指针类型的输入包括void*类型的指针、以及指向链表、树、图等动态堆数据结构的指针。
目前,对于输入为void*类型的指针,由于指向目标内存的类型不确定,在生成单元测试用例时,一般方法使用固定类型作为变量类型进行生成(如char[]);对于输入为指向链表、树、图等动态堆数据结构的指针,由于事先不知道所指向内存的形态,一般方法采用预设的固定层次递归展开。但是,对于void*类型的指针,实际指向类型为其他时(如结构体),无法按照给定类型生成相应的值,导致用例生成的覆盖率不高。而对于指向链表、树、图等动态堆数据结构的指针,当展开层次过少时会导致没有生成足够的目标内存空间,也无法生成达到相应覆盖的值,甚至有时可能因空指针解引用造成用例执行崩溃,而递归展开层次过多时,又会导致所需生成输入的内存空间很多,内存开销过大。
发明内容
本申请解决的技术问题是:针对现有技术中生成的测试用例覆盖率较低、执行崩溃或内存开销过大,本申请提供了一种适用于指针的单元测试用例生成方法及装置,本申请实施例所提供的方案中,通过对预设被测程序进行静态分析,一方面,若输入元素是void*或含void*成员的结构体时,确定void*或结构体的void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件,避免当void*或void*成员的结构体作为输入时,因指向变量类型不确定导致覆盖率较低的问题;另一方面,若void*或结构体的void*成员指向动态堆数据结构时,设置指针或结构体展开层次,并根据展开层次生成配置文件,避免当指针指向动态堆数据结构时,由于展开层次不确定导致覆盖率较低、执行崩溃或内存开销过大问题。
第一方面,本申请实施例提供一种适用于指针的单元测试用例生成方法,该方法包括:
对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体;
若所述输入元素是void*或含void*成员的结构体,则确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件;
判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员;
若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例。
本申请实施例所提供的方案中,通过对预设被测程序进行静态分析,一方面,若输入元素是void*或含void*成员的结构体时,确定void*或结构体的void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件,避免当void*或void*成员的结构体作为输入时,因指向变量类型不确定导致覆盖率较低的问题;另一方面,若void*或结构体的void*成员指向动态堆数据结构时,设置指针或结构体展开层次,并根据展开层次生成配置文件,避免当指针指向动态堆数据结构时,由于展开层次不确定导致覆盖率较低、执行崩溃或内存开销过大问题。
可选地,还包括:若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;若包含指针型成员,则确定指针类型成员的结构体或结构体指针;判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,还包括:若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,确定所述void*或所述void*成员指向的实际类型,包括:对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
可选地,根据所述强转表达式确定被强转的目标类型之后,还包括:判断是否存在任一void*或void*成员未确定目标类型;若存在,则根据用户输入的类型为所述任一void*或void*成员设置目标类型。
可选地,根据所述驱动文件以及所述配置文件自动生成测试用例,包括:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
第二方面,本申请实施例提供了一种适用于指针的单元测试用例生成装置,该装置包括:
第一判断单元,用于对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体;
确定单元,用于若所述输入元素是void*或含void*成员的结构体,则确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件;
第二判断单元,用于判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员;
生成单元,用于若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例。
可选地,所述第二判断单元,具体用于:若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;若包含指针型成员,则确定指针类型成员的结构体或结构体指针;判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,所述生成单元,具体用于:若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,所述确定单元,具体用于:对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
可选地,所述第一判断单元,还用于:判断是否存在任一void*或void*成员未确定目标类型;若存在,则根据用户输入的类型为所述任一void*或void*成员设置目标类型。
可选地,所述生成单元,具体用于:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
附图说明
图1为本申请实施例所提供的一种适用于指针的单元测试用例生成方法的流程示意图;
图2为本申请实施例所提供的一种预设被测程序示意图;
图3为本申请实施例所提供的一种适用于指针的单元测试用例生成装置的结构示意图。
具体实施方式
本申请实施例提供的方案中,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
以下结合说明书附图对本申请实施例所提供的一种适用于指针的单元测试用例生成方法做进一步详细的说明,该方法具体实现方式可以包括以下步骤(方法流程如图1所示):
步骤101,计算机设备对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体。
在本申请实施例所提供的方案中,预设被测程序的输入元素可以包括void*指针、含void*成员的结构体、结构体指针、或不含void*成员的结构体等。因此,为了便于确定预设被测程序的输入元素中所包含的指针或结构体的类型,计算机设备首先对预设被测程序进行静态分析确定输入元素中的成员类型,然后根据成员类型判断输入元素是否为void*或含void*成员的结构体。
应理解,在本申请实施例所提供的方案中,计算机设备可以是服务器、台式电脑、笔记本电脑或者其他具体处理功能的电子设备,在此并不做限定。
步骤102,若所述输入元素是void*或含void*成员的结构体,则计算机设备确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件。
在本申请实施例所提供的方案中,当计算机设备确定输入元素是void*或含void*成员的结构体时,计算机设备需确定void*或结构体的void*成员指向的实际类型。具体的,计算机设备确定void*或结构体的void*成员指向的实际类型的方式有多种,下面以其中一种为例进行说明。
在一种可能实现的方式中,确定所述void*或所述void*成员指向的实际类型,包括:对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
进一步,在一种可能实现的方式中,根据所述强转表达式确定被强转的目标类型之后,还包括:判断是否存在任一void*或void*成员未确定目标类型;若存在,则根据用户输入的类型为所述任一void*或void*成员设置目标类型。
为了便于理解下面对确定void*或结构体的void*成员指向的实际类型的过程进行简要介绍,具体过程如下所示:
步骤1、计算机设备对预设被测程序进行静态分析,抽取函数接口信息和函数控制流程图(Control Flow Graph,CFG),函数接口包含参数、全局变量和返回值类型信息,CFG的节点包含每条语句的详细信息。
步骤2、计算机设备深度遍历CFG分析类型强转表达式,确定出void*或结构体的void*成员被强转的目标类型,并将目标类型作为void*或结构体的void*成员指向的实际类型。
步骤3、对于步骤2中的分析出的void*类型表达式或结构体成员的实际类型,可以人工对其进行修改;对于未分析出实际类型的void*表达式或结构体成员,可以人工添加、指定其实际类型。
步骤103,计算机设备判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员。
在本申请实施例所提供的方案中,计算机设备在确定void*或结构体的void*成员指向的实际类型之后,根据实际类型生成驱动文件,并判断void*指针或所述结构体的void*成员是否包含指向动态堆数据结构的成员,其中,动态堆数据结构包括链表、树或图等结构。
步骤104,若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则计算机设备设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例。
在本申请实施例所提供的方案中,计算机设备设置指针或结构体展开层次,并根据所述展开层次生成配置文件,然后根据驱动文件以及配置文件自动生成测试用例。
进一步,在一种可能实现的方式中,在步骤102之后,还包括:若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;若包含指针型成员,则确定指针类型成员的结构体或结构体指针;判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
进一步,在一种可能实现的方式中,在步骤103之后,还包括:若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
具体的,计算机设备根据驱动文件以及配置文件自动生成测试用例的方式有多种,下面以其中一种为例进行说明。
在一种可能实现的方式中,根据所述驱动文件以及所述配置文件自动生成测试用例,包括:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
为了便于理解下面对上述自动生成测试用例的过程进行简要介绍,具体的,自动生成测试用例的过程如下所示:
1、开始启动生成测试用例引擎,先根据输入驱动文件设置输入表达式,在将结构体输入展开为预设基本类型对应的输入表达式过程中,读取设定,若当前已展开层次数小于设置指针或结构体展开层次或所述预设展开层次,则展开且展开层次数加1。
2、若当前已展开层次与2)中的设定相同或已超过,则不再继续展开。
3、展开完成后所有的表达式被编码为符号值,开始自动生成用例,利用路径搜索算法、约束求解和反复迭代,把执行过程中的输入抽取为用例,最终得到用例集合。
为了便于理解上述适用于指针的单元测试用例生成方法的过程,下面以预设被测程序test为例进行说明,参见图2,为本申请实施例提供的一种预设被测程序示意图。具体生成测试用例的过程如下所示:
1)、对预设被测程序静态分析,可知该函数有1个参数:void*p,一个全局变量:S*s。
2)、通过静态分析,抽取函数接口信息和函数控制流程图(CFG),函数接口包含参数、使用的全局变量和返回值类型信息,CFG的节点包含每条语句的详细信息。
3)、深度优先遍历函数CFG,过程中分析类型强转表达式,识别出void*被强转的目标类型,得到test函数中void*类型的参数p被强转为T*类型,结构体T中的void*类型成员data被强转为S*类型。
4)、人工确认将T*作为void*p的真实类型,将S*作为结构体T中的成员void*data的真实类型,无需修改。
5)、通过静态分析,识别出test函数中结构体T含有指针类型的成员void*data,结构体S含有指针类型的成员struct structS*next。
6)、分析test函数,void*类型的参数p强转为了T*t,对于T*类型的变量t,展开一层后可以得到t->data的值,t->data转换为S*类型后,再展开两层才能获取data->next->i的值,故人工将结构体T的展开层次设置为3;而对于类型为S*的全局变量s,只需要展开一层就可得到s->i的值,故人工将结构体S的展开层次设置为1。
7)、在生成解释器输入驱动文件时,将void*类型表达式或结构体成员转换为其真实类型,即p转换为T*类型,t->data转换为S*类型。
8)、在根据输入驱动文件指定要求解的输入时,需要将结构体递归展开为基本类型,遇到强转为T*类型的参数p时,按照设定将其展开为三层作为输入,即展开一层后,再将其成员void*data按照S*类型展开两层。遇到S*类型全局变量s时,按照设定将其展开为一层作为输入。
9)、解释器求解时,对强转为T*类型的参数p展开第一层后的输入求解可以生成其为空指针或指向某个自定义变量两个值;当p不是空指针时,将参数p展开第二层的输入求解可以生成data为空指针或data指向某个自定义变量两个值;对参数p展开第三层后的输入求解可以生成data->next为空指针或指向另外某个自定义变量的两个值;当data->next不是空指针时,可以对data->next->i进行求解,生成大于0和不大于0的两个值。对S*类型的全局变量s展开一层后的输入求解可以生成其为空指针或指向某个自定义变量的两个值;当s不是空指针时,可以对s->i求解,生成大于0和不大于0的两个值。此时test函数的所有语句和分支都可被覆盖。
10)、按照以上方法在路径搜索算法的牵引下,可生成针对void*类型指针和含有指针成员的结构体程序的100%覆盖的测试用例。
本申请实施例所提供的方案中,通过对预设被测程序进行静态分析,一方面,若输入元素是void*或含void*成员的结构体时,确定void*或结构体的void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件,避免当void*或void*成员的结构体作为输入时,因指向变量类型不确定导致覆盖率较低的问题;另一方面,若void*或结构体的void*成员指向动态堆数据结构时,设置指针或结构体展开层次,并根据展开层次生成配置文件,避免当指针指向动态堆数据结构时,由于展开层次不确定导致覆盖率较低、执行崩溃或内存开销过大问题。
基于与图1所示的方法相同的发明构思,本申请实施例提供了一种适用于指针的单元测试用例生成装置,参见图3,该装置包括:
第一判断单元301,用于对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体;
确定单元302,用于若所述输入元素是void*或含void*成员的结构体,则确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件;
第二判断单元303,用于判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员;
生成单元304,用于若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例。
可选地,所述第二判断单元303,具体用于:若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;若包含指针型成员,则确定指针类型成员的结构体或结构体指针;判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,所述生成单元304,具体用于:若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
可选地,所述确定单元302,具体用于:对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
可选地,所述第一判断单元301,还用于:判断是否存在任一void*或void*成员未确定目标类型;若存在,则根据用户输入的类型为所述任一void*或void*成员设置目标类型。
可选地,所述生成单元304,具体用于:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (7)
1.一种适用于指针的单元测试用例生成方法,其特征在于,包括:
对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体;
若所述输入元素是void*或含void*成员的结构体,则确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件;
判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员;
若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例;
若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例;
其中,根据所述驱动文件以及所述配置文件自动生成测试用例,具体为:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
2.如权利要求1所述的方法,其特征在于,还包括:若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;
若包含指针型成员,则确定指针类型成员的结构体或结构体指针;
判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;
若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
3.如权利要求2所述的方法,其特征在于,确定所述void*或所述void*成员指向的实际类型,包括:
对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
4.如权利要求3所述的方法,其特征在于,根据所述强转表达式确定被强转的目标类型之后,还包括:
判断是否存在任一void*或void*成员未确定目标类型;
若存在,则根据用户输入的类型为所述任一void*或void*成员设置目标类型。
5.一种适用于指针的单元测试用例生成装置,其特征在于,包括:
第一判断单元,用于对预设被测程序进行静态分析确定输入元素中的成员类型,根据所述成员类型判断所述输入元素是否为void*或含void*成员的结构体;
确定单元,用于若所述输入元素是void*或含void*成员的结构体,则确定所述void*或所述void*成员指向的实际类型以及根据所述实际类型生成输入驱动文件;
第二判断单元,用于判断所述实际类型是否为结构体类型且所述结构体类型中的结构体是否包含指向动态堆数据结构的成员;
生成单元,用于若所述实际类型是结构体类型且所述结构体类型中的结构体包含指向动态堆数据结构的成员,则设置指针或结构体展开层次,并根据所述展开层次生成配置文件,根据所述驱动文件以及所述配置文件自动生成测试用例;若所述实际类型不是结构体类型或所述结构体类型中的结构体不包含指向动态堆数据结构的成员,则根据预设展开层次生成所述配置文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例;其中,根据所述驱动文件以及所述配置文件自动生成测试用例,具体为:根据所述驱动文件设置输入表达式,根据所述设置指针或结构体展开层次或所述预设展开层次对所述输入表达式进行展开,直到展开层次大于所述设置指针或结构体展开层次或所述预设展开层次为止;将展开后的每个表达式编码为符号值,根据所述符号值自动生成所述测试用例。
6.如权利要求5所述的装置,其特征在于,所述第二判断单元,具体用于:
若所述输入元素不是void*或含void*成员的结构体,则根据所述成员类型判断是否包含指针型成员;
若包含指针型成员,则确定指针类型成员的结构体或结构体指针;
判断所述指针类型成员的结构体或结构体指针是否指向所述动态堆数据结构;
若指向所述动态堆数据结构,则根据预设基本类型生成所述驱动文件,并根据所述驱动文件以及所述配置文件自动生成所述测试用例。
7.如权利要求5~6任一项所述的装置,其特征在于,所述确定单元,具体用于:
对所述预设被测程序进行静态分析确定出函数控制流程图,根据预设深度优先遍历算法以及所述函数控制流程图确定出所述void*或所述void*成员对应的强转表达式,根据所述强转表达式确定被强转的目标类型,将所述目标类型作为所述实际类型。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110043899.5A CN112783765B (zh) | 2021-01-13 | 2021-01-13 | 一种适用于指针的单元测试用例生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110043899.5A CN112783765B (zh) | 2021-01-13 | 2021-01-13 | 一种适用于指针的单元测试用例生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783765A CN112783765A (zh) | 2021-05-11 |
CN112783765B true CN112783765B (zh) | 2024-02-09 |
Family
ID=75755725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110043899.5A Active CN112783765B (zh) | 2021-01-13 | 2021-01-13 | 一种适用于指针的单元测试用例生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783765B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6859920B1 (en) * | 2000-10-30 | 2005-02-22 | Microsoft Corporation | System and method for implementing a dependency based property system with coalescing |
CN102622297A (zh) * | 2012-02-23 | 2012-08-01 | 北京航空航天大学 | 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法 |
CN106095668A (zh) * | 2016-06-02 | 2016-11-09 | 上海科梁信息工程股份有限公司 | 基于事件和动作的c++测试用例的生成方法 |
CN106991050A (zh) * | 2017-04-05 | 2017-07-28 | 西安邮电大学 | 一种静态测试空指针引用缺陷假阳性识别方法 |
CN107741905A (zh) * | 2017-09-11 | 2018-02-27 | 珠海格力电器股份有限公司 | 测试用例及其解析模型、执行方法、存储介质和处理器 |
CN109299003A (zh) * | 2018-08-31 | 2019-02-01 | 苏州洞察云信息技术有限公司 | 一种面向复杂软件的全自动测试用例驱动生成系统 |
CN110750459A (zh) * | 2019-10-23 | 2020-02-04 | 天津汇缘诚信科技有限公司 | 基于白盒分析的测试用例自动生成和测试进程管理方法 |
-
2021
- 2021-01-13 CN CN202110043899.5A patent/CN112783765B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6859920B1 (en) * | 2000-10-30 | 2005-02-22 | Microsoft Corporation | System and method for implementing a dependency based property system with coalescing |
CN102622297A (zh) * | 2012-02-23 | 2012-08-01 | 北京航空航天大学 | 针对com组件导出函数参数空间及2进制数据的fuzz工具的测试用例生成方法 |
CN106095668A (zh) * | 2016-06-02 | 2016-11-09 | 上海科梁信息工程股份有限公司 | 基于事件和动作的c++测试用例的生成方法 |
CN106991050A (zh) * | 2017-04-05 | 2017-07-28 | 西安邮电大学 | 一种静态测试空指针引用缺陷假阳性识别方法 |
CN107741905A (zh) * | 2017-09-11 | 2018-02-27 | 珠海格力电器股份有限公司 | 测试用例及其解析模型、执行方法、存储介质和处理器 |
CN109299003A (zh) * | 2018-08-31 | 2019-02-01 | 苏州洞察云信息技术有限公司 | 一种面向复杂软件的全自动测试用例驱动生成系统 |
CN110750459A (zh) * | 2019-10-23 | 2020-02-04 | 天津汇缘诚信科技有限公司 | 基于白盒分析的测试用例自动生成和测试进程管理方法 |
Non-Patent Citations (2)
Title |
---|
"CUTE: a concolic unit testing engine for C";Koushik Sen 等;《Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering》;第 263–272页 * |
"可信软件测试理论与技术研究";郭曦;《中国博士学位论文全文数据库信息科技辑》;第I138-11页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112783765A (zh) | 2021-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5918037A (en) | Generating tests for an extended finite state machine using different coverage levels for different submodels | |
Lakhotia et al. | AUSTIN: An open source tool for search based software testing of C programs | |
Narodytska et al. | Core-guided minimal correction set and core enumeration | |
CN111581106A (zh) | 二进制程序漏洞测试方法、装置及可读存储介质 | |
CN107025175A (zh) | 一种模糊测试种子用例变长字段修剪方法 | |
CN112765031A (zh) | 一种群智化漏洞挖掘任务的分解方法 | |
CN112783765B (zh) | 一种适用于指针的单元测试用例生成方法及装置 | |
CN110502443A (zh) | 冗余代码检测方法、检测模块、电子设备及计算机存储介质 | |
CN107203469B (zh) | 基于机器学习的编译器测试加速方法 | |
CN115828804A (zh) | 一种修改rtl源代码文件的方法及电子设备 | |
Ouimet et al. | The TASM Toolset: Specification, Simulation, and Formal Verification of Real-Time Systems: (Tool Paper) | |
CN114780967B (zh) | 基于大数据漏洞挖掘的挖掘评估方法及ai漏洞挖掘系统 | |
CN114840856A (zh) | 一种状态感知的物联网可信执行环境模糊测试方法和系统 | |
EP2820547B1 (en) | Debugging method and computer program product | |
CN113282495B (zh) | 一种基于轨迹监控的Java软件故障定位方法 | |
Wilhelm et al. | Algorithm explanation: Visualizing abstract states and invariants | |
CN113688403A (zh) | 一种基于符号执行验证的智能合约漏洞检测方法及装置 | |
Wang et al. | Optimized branch and bound for path-wise test data generation | |
Allen et al. | Agent influence as a predictor of difficulty for decentralized problem-solving | |
CN116932416B (zh) | 基于敏感函数的模糊测试方法、装置、设备以及存储介质 | |
Jie et al. | The generation of software reliability test cases based on software reuse | |
Schulz et al. | Accelerating source-level timing simulation | |
Alhameedyeen et al. | Goal-Oriented Testing for Pointer Data Type | |
CN114416598B (zh) | 一种基于测试切片的众包测试扩增方法 | |
Lin et al. | Usage modeling through sequence enumeration for automated statistical testing of a GUI application |
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 |