CN115221047A - 测试用例自动生成方法及电子设备 - Google Patents
测试用例自动生成方法及电子设备 Download PDFInfo
- Publication number
- CN115221047A CN115221047A CN202210797921.XA CN202210797921A CN115221047A CN 115221047 A CN115221047 A CN 115221047A CN 202210797921 A CN202210797921 A CN 202210797921A CN 115221047 A CN115221047 A CN 115221047A
- Authority
- CN
- China
- Prior art keywords
- electronic equipment
- input
- function
- file
- source code
- 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.)
- Pending
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/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
本申请实施方式公开了一种测试用例自动生成方法及电子设备,其中,测试用例自动生成方法包括:电子设备根据测试配置文件确定待测源码的测试工具;电子设备基于测试工具确定输入参数类型和输入规则;电子设备根据输入参数类型对待测源码进行参数提取,得到目标参数文件;电子设备根据输入规则和目标参数文件生成待测源码的测试用例。本申请实施方式的方法实现Fuzzing测试下测试用例的自动生成,提高测试效率,降低对专业人员的依赖程度。
Description
技术领域
本发明涉及软件分析测试技术领域,具体涉及一种测试用例自动生成方法及电子设备。
背景技术
模糊测试,也称为Fuzzing测试,或健壮性测试,是安全测试的一种,主要是指发现系统潜在的安全性缺陷的测试,也可以称之为漏洞的发掘。目前,传统的C/C++白盒Fuzzing测试工具,需要白盒测试人员基于对于待测源码的理解,确定目标程序的核心功能代码,继而通过人工的编写测试用例的方式,对目标程序的核心功能代码进行测试。
但是,上述方式需要大量的人工干预,需要测试人员花费大量的时间和精力去分析源码并手工编写测试用例,不适用于对大量不同的待测程序进行测试的场景。同时,上述方式对测试人员的专业和技术能力有较高的要求,导致测试结果的正确性受测试人员专业和技术能力的影响较大。
发明内容
本申请实施方式提供了一种测试用例自动生成方法及电子设备,可以实现Fuzzing测试下测试用例的自动生成,提高测试效率,降低对专业人员的依赖程度。
本发明的实施方式采用如下技术方案:
第一方面,本申请实施方式提供一种测试用例自动生成方法,包括:
电子设备根据测试配置文件确定待测源码的测试工具;
电子设备基于测试工具确定输入参数类型和输入规则;
电子设备根据输入参数类型对待测源码进行参数提取,得到目标参数文件;
电子设备根据输入规则和目标参数文件生成待测源码的测试用例。
可以看出,在本实施方式中,实现了测试用例的自动化生成,无需大量的人工干预,提升了整体的测试效率,且可适用于对大量不同的待测程序进行测试的场景。同时,根据测试工具输入规则,生成的测试用例不受测试人员的专业和技术能力的影响,可以完美的契合测试工具的需求,确保测试结果的客观性和正确性。
在一种可能的实施方式中,当测试工具为AFL&&AFL++或LibFuzzer时,电子设备根据输入参数类型对待测源码进行参数提取,得到目标参数文件,包括:
电子设备获取待测源码的头文件;
电子设备根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口;
电子设备根据至少一个第一函数入口解析头文件,确定至少一个第一函数入口中每个第一函数入口的函数输入参数类型;
电子设备将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,电子设备根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口,包括:
电子设备将头文件转化为抽象语法树,遍历抽象语法树,提取节点类型为函数的节点,得到至少一个第一函数入口。
在一种可能的实施方式中,在电子设备将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件之前,方法还包括:
电子设备确定至少一个第一函数入口中的第二函数入口,其中,第二函数入口为至少一个第一函数入口中,函数输入参数类型未记载在头文件中函数入口;
电子设备根据第二函数入检索待测源码,得到第二函数入口对应的第一结构体,其中,第一结构体用于定义第二函数入口;
电子设备解析第一结构体,确定第二函数入口的函数输入参数类型。
在一种可能的实施方式中,电子设备获取待测源码的头文件,包括:
电子设备根据配置文件确定待测源码的头文件路径;
电子设备根据头文件路径获取待测源码的头文件。
在一种可能的实施方式中,当测试工具为Syzkaller时,电子设备根据输入参数类型对待测源码进行参数提取,得到目标参数文件,包括:
电子设备将待测源码转化为中间语言,其中,中间语言用于将待测源码中的结构体的表达格式转化为相同的格式;
电子设备采用预设的第一字符串搜索中间语言,确定设备节点信息;
电子设备全局搜索中间语言,确定至少一个命令码;
电子设备对至少一个命令码中的每个命令码进行回溯解析,确定每个命令码对应的命令码输入参数类型;
电子设备将设备节点信息、至少一个命令码和每个命令码对应的命令码输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,电子设备全局搜索中间语言,确定至少一个命令码,包括:
电子设备全局搜索中间语言,确定至少一个第二结构体,其中,至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令;
电子设备对至少一个第二结构体进行信息整合,得到至少一个结构体名;
电子设备采用至少一个结构体名搜索中间语言,得到至少一个第三结构体,其中,至少一个结构体名包括至少一个第三结构体中任意一个第三结构体的结构体名;
电子设备采用预设的第二字符串搜索至少一个第二结构体和至少一个第三结构体,得到至少一个目标代码;
电子设备采用预设的第三字符串搜索至少一个目标代码,得到至少一个命令码,其中,至少一个命令码与至少一个目标代码一一对应。
在一种可能的实施方式中,电子设备根据输入规则和目标参数文件生成待测源码的测试用例,包括:
电子设备根据输入规则确定测试工具的输入语法和输入结构;
电子设备根据输入语法和输入结构对目标参数文件中的参数进行编辑,得到测试用例。
第二方面,本申请实施方式提供一种测试用例自动生成装置,包括:
源码分析模块,用于根据测试配置文件确定待测源码的测试工具,并基于测试工具确定输入参数类型和输入规则;
信息整合模块,用于根据输入参数类型对待测源码进行参数提取,得到目标参数文件;
用例生成模块,用于根据输入规则和目标参数文件生成待测源码的测试用例。
在一种可能的实施方式中,当测试工具为AFL&&AFL++或LibFuzzer时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,信息整合模块,具体用于:
获取待测源码的头文件;
根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口;
根据至少一个第一函数入口解析头文件,确定至少一个第一函数入口中每个第一函数入口的函数输入参数类型;
将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口方面,信息整合模块,具体用于:
将头文件转化为抽象语法树,遍历抽象语法树,提取节点类型为函数的节点,得到至少一个第一函数入口。
在一种可能的实施方式中,在将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件之前,信息整合模块,还用于:
确定至少一个第一函数入口中的第二函数入口,其中,第二函数入口为至少一个第一函数入口中,函数输入参数类型未记载在头文件中函数入口;
根据第二函数入检索待测源码,得到第二函数入口对应的第一结构体,其中,第一结构体用于定义第二函数入口;
解析第一结构体,确定第二函数入口的函数输入参数类型。
在一种可能的实施方式中,在获取待测源码的头方面,信息整合模块,具体用于:
根据配置文件确定待测源码的头文件路径;
根据头文件路径获取待测源码的头文件。
在一种可能的实施方式中,当测试工具为Syzkaller时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,信息整合模块,具体用于:
将待测源码转化为中间语言,其中,中间语言用于将待测源码中的结构体的表达格式转化为相同的格式;
采用预设的第一字符串搜索中间语言,确定设备节点信息;
全局搜索中间语言,确定至少一个命令码;
对至少一个命令码中的每个命令码进行回溯解析,确定每个命令码对应的命令码输入参数类型;
将设备节点信息、至少一个命令码和每个命令码对应的命令码输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在全局搜索中间语言,确定至少一个命令码方面,信息整合模块,具体用于:
全局搜索中间语言,确定至少一个第二结构体,其中,至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令;
对至少一个第二结构体进行信息整合,得到至少一个结构体名;
采用至少一个结构体名搜索中间语言,得到至少一个第三结构体,其中,至少一个结构体名包括至少一个第三结构体中任意一个第三结构体的结构体名;
采用预设的第二字符串搜索至少一个第二结构体和至少一个第三结构体,得到至少一个目标代码;
采用预设的第三字符串搜索至少一个目标代码,得到至少一个命令码,其中,至少一个命令码与至少一个目标代码一一对应。
在一种可能的实施方式中,在根据输入规则和目标参数文件生成待测源码的测试用例方面,用例生成模块,具体用于:
根据输入规则确定测试工具的输入语法和输入结构;
根据输入语法和输入结构对目标参数文件中的参数进行编辑,得到测试用例。
第三方面,本申请实施方式提供一种电子设备,包括:处理器,处理器与存储器相连,存储器用于存储计算机程序,处理器用于执行存储器中存储的计算机程序,以使得电子设备执行如第一方面的方法。
在一种可能的实施方式中,电子设备为服务器。
可见,第二方面和第三方面是第一方面的方法对应的装置,关于第二方面和第三方面中各步骤的说明,名词的解释、各种实现方式以及有益效果说明,前述有关的论述同样适用,可参见第一方面中的相关内容,此处不再赘述。
第四方面,本申请实施方式提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序使得计算机执行如第一方面的方法。关于第四方面中涉及各步骤的说明,名词的解释、各种实现方式以及有益效果说明,前述有关的论述同样适用,可参见前述的相关内容,此处不再赘述。
第五方面,本申请实施方式提供一种计算机程序产品,计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,计算机可操作来使计算机执行如第一方面的方法中任意一项可能的实现方式。关于第五方面中涉及各步骤的说明,名词的解释、各种实现方式以及有益效果说明,前述有关的论述同样适用,可参见前述的相关内容,此处不再赘述。
附图说明
为了更清楚地说明本发明实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式。
图1为本发明实施方式提供的一种测试用例自动生成方法的流程示意图;
图2为本发明实施方式提供的一种目标参数文件的预设格式的示意图;
图3为本发明实施方式提供的一种目标参数文件的示意图;
图4为本发明实施方式提供的一种结构体的统一格式的示意图;
图5为本发明实施方式提供的一种全局搜索中间语言,确定至少一个命令码的方法的流程示意图;
图6为本发明实施方式提供的一种命令码中嵌套另一个IOCTL的示意图;
图7为本发明实施方式提供的另一种目标参数文件的预设格式的示意图;
图8为本发明实施方式提供的一种测试用例自动生成装置的结构示意图;
图9为本发明实施方式提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施方式中的附图,对本申请实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本申请一部分实施方式,而不是全部的实施方式。基于本申请中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本申请保护的范围。
本申请的说明书和权利要求书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施方式”意味着,结合实施方式描述的特定特征、结果或特性可以包含在本申请的至少一个实施方式中。在说明书中的各个位置出现该短语并不一定均是指相同的实施方式,也不是与其它实施方式互斥的独立的或备选的实施方式。本领域技术人员显式地和隐式地理解的是,本文所描述的实施方式可以与其它实施方式相结合。
首先,为了便于理解,对本申请所涉及的相关名词进行解释:
AFL&&AFL++:American Fuzzy Lop,一种基于覆盖引导(Coverage-guided)的模糊测试工具,可以通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
LibFuzzer:一中进程内(In-process)的,基于覆盖引导(Coverage-guided),进化型(Evolutionary)的模糊测试引擎,是底层虚拟机(Low Level Virtual Machine,LLVM)项目的一部分。
Syzkaller:一种非监督式、覆盖率指导的模糊测试器,支持:Akaros、FreeBSD、Fuchsia、gVisor、Linux、NetBSD、OpenBSD、Windows等系统。
参阅图1,图1为本申请实施方式提供的一种测试用例自动生成方法的流程示意图,包括如下步骤:
101:电子设备根据测试配置文件确定待测源码的测试工具。
在本实施方式中,在执行测试前,会对待测源码配置一个测试配置文件,该测试配置文件用于记录对待测源码进行测试的测试参数,包括测试类型、测试工具、测试工具路径、待测源码路径、待测源码头文件路径等。具体而言,在测试配置文件中,每个测试参数都对应有各自的参数名。基于此,可以通过测试工具对应的参数名查询该测试配置文件,继而确定该待测源码的测试工具。
示例性的,本实施方式提供了一种配置文件,具体如下:
其中,各个参数的含义如表1所示:
表1:
参数名 | 解释 |
driver | 驱动类fuzzing测试 |
library | 库类fuzzing测试 |
enable | 是否允许该类fuzzing测试 |
tool | Fuzzing工具 |
toolPath | 工具路径 |
sourceCodePath | 源代码路径 |
includeFile | 待测源码头文件路径 |
由此,可以先查询参数名“enable”确定待测源码的测试类型,继而在允许,即“enable”的值为“True”的测试类型中,查询参数名称“tool”,确定该待测源码的测试工具。对于上述示例而言,其驱动类fuzzing测试和库类fuzzing测试均被允许,继而可以生成驱动类fuzzing测试用例和库类fuzzing测试用例共两种测试用例。其中,驱动类fuzzing测试下,测试工具为Syzkaller;库类fuzzing测试下,测试工具为AFL&&AFL++或LibFuzzer。
102:电子设备基于测试工具确定输入参数类型和输入规则。
在本实施方式中,测试工具可以包括:AFL&&AFL++、LibFuzzer和Syzkaller。对于不同的测试工具,由于其测试对象的不同,其需求的输入参数类型和输入规则也不相同。具体而言,AFL&&AFL++和LibFuzzer测试对象为库,需要依据库提供的头文件实现调用库接口的测试用例,而后将用例编译为可执行的二进制文件后进行测试。其中,AFL&&AFL++还需要在测试前使用自身的编译器afl-gcc/afc-g++来重新编译生成待测库,并在调用测试demo时,按照接口入参,提供一个初始的测试种子输入。而Syzkaller测试对象为内核代码中的驱动接口,需要将驱动接口的相关信息提取后使用syzlang语法编写测试用例。
基于此,在本实施方式中,将AFL&&AFL++和LibFuzzer划分为库类fuzzing测试,其所需的输入参数类型为:函数入口和函数入口的函数输入参数类型;Syzkaller则划分为驱动类fuzzing测试,其所需的输入参数类型为:设备节点信息、命令码和命令码输入参数类型。而输入规则即各个测试工具对获取到的输入参数的使用或编译方法,以及语法要求,可以通过对各个测试工具的运行环境以及底层逻辑进行分析来确定,本申请对此不作限定。
在本实施方式中,可以将每个测试工具的输入参数类型和输入规则预先进行提取,继而和对应的测试工具相关联,继而在确定待测源码的测试工具后,可以直接通过该关联关系确定对应的输入参数类型和输入规则。
103:电子设备根据输入参数类型对待测源码进行参数提取,得到目标参数文件。
在本实施方式中,如步骤102中,基于测试对象的不同,测试工具被分为库类fuzzing测试和驱动类fuzzing测试两种,以下将分别对这两种测试类型下根据输入参数类型对待测源码进行参数提取,得到目标参数文件的方法进行说明。
(1)库类fuzzing测试:
库类fuzzing测试对应的测试工具为AFL&&AFL++和LibFuzzer,其输入参数类型为:函数入口和函数入口的函数输入参数类型。
在本实施方式中,首先,可以获取待测源码的头文件。具体而言,如步骤101中,配置文件中包括待测源码头文件路径,由此,可以根据配置文件确定待测源码的头文件路径,继而根据头文件路径获取待测源码的头文件。
需要说明的是,该头文件路径除了通过在导入待测源码信息时自动获取之外,还可以由用户在配置文件中自行定义。此时,用户可以在测试前预先将待测源码中不同头文件内想要测试的函数入口单独梳理在一个新增头文件内,继而将该新增的头文件的路径填写至配置文件中,进行指定扫描。由此,将扫描的头文件由原本待测源码中的多个头文件转化为梳理后的一个头文件,提高了扫描效率,同时可以针对测试方案和测试目的灵活的调整需要测试的函数入口,提升了测试的灵活性和效率。
在本实施方式中,获取到头文件后,即可根据输入参数类型扫描该头文件,提取该头文件内的至少一个第一函数入口。然后,基于该至少一个第一函数入口对头文件进行解析,确定至少一个第一函数入口中每个第一函数入口的函数输入参数类型。
具体而言,该至少一个第一函数入口可以理解为该头文件中所出现的所有函数入口。基于此,在本实施方式中,可以将头文件转化为抽象语法树(Abstract Syntax Tree,AST),继而通过遍历AST的方式,提取其中节点类型为函数的节点,得到该至少一个第一函数入口。同时,对于每个节点类型为函数的节点,提取该节点下的函数定义信息,确定该节点的输入参数的类型,作为该节点对应的第一函数入口的函数输入参数类型。
最后,将至少一个第一函数入口和每个第一函数入口的函数输入参数类型按照预设的格式进行整合,得到该目标参数文件。具体而言,该目标参数文件可以是json文件,预设的格式如图2所示,其中,Interface为函数入口,Input为函数输入参数类型。
示例性的,对于如下头文件:
其函数入口为VulnerableFunction1,入参类型为uint8_t*、size_t。继而上述示例中的头文件对应的目标参数文件如图3所示。
此外,在可选的实施方式中,至少一个第一函数入口中可能存在一些函数输入参数类型未记载在头文件中函数入口,对于这些函数入口,以下将其称为第二函数入口以便于描述。此时,通过解析头文件,将无法得到全部第一函数入口的函数输入参数类型,由此,在本实施方式中,在将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件之前,可以从至少一个第一函数入口中确定出该第二函数入口,继而根据第二函数入口检索待测源码,得到待测源码中用于定义第二函数入口的第一结构体。最后,通过解析第一结构体,确定第二函数入口对应的函数输入参数类型。具体而言,对第一结构体的解析方式可以和对头文件的解析方式相似,即通过将第一结构体转化为AST进行函数输入参数类型的识别,在此不再赘述。
(2)驱动类fuzzing测试:
驱动类fuzzing测试对应的测试工具为Syzkaller,其输入参数类型为:设备节点信息、命令码和命令码对应的命令码输入参数类型。
在本实施方式中,首先,可以将待测源码转化为中间语言。具体而言,该中间语言可以将待测源码中的结构体的表达格式转化为相同的格式。例如,该中间语言可以是底层虚拟机(Low Level Virtual Machine,LLVM)语言,继而经过转化后,待测源码中的各个结构体的表达格式将统一转化为如图4所示的结构体名+偏移+接口的格式。由此,将源码中的各个结构体的表达格式进行统一,继而提升后续的处理效率。
然后,在本实施方式中,采用预设的第一字符串搜索中间语言,确定设备节点信息。具体而言,以LLVM语言为中间语言例,该第一字符串可以是“alloc_chrdev_region”,设备节点信息可以是设备名称。该字符串对应的语句格式为:int alloc_chrdev_region(dev_t*dev,unsigned baseminor,unsigned count,const char*name),其中,第四个参数“const char*name”即为所需的设备名称,继而通过对检索出的字段进行参数追溯,即可确定出设备节点信息。示例性的,经检索,某源码转化为LLVM语言后对应与“alloc_chrdev_region”的字段如下:
%66=call i32@alloc_chrdev_region(i32*@g tc ns client devt,i32 0,i321,i8*getelementptr inbounds([13xi8],[13xi8]*@.str.80,i64 0,i640)),!dbg!10775
其中,第四个参数为“i8*getelementptr inbounds([13xi8],[13xi8]*@.str.80,i64 0,i640)”,对其进行设备名称识别后,确定出设备节点信息为“@.str.80”。
然后,在本实施方式中,可以全局搜索中间语言,确定至少一个命令码。具体而言,本实施方式提供了一种全局搜索中间语言,确定至少一个命令码的方法,如图5所示,该方法包括:
501:电子设备全局搜索中间语言,确定至少一个第二结构体。
在本实施方式中,该至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令(input/output control,IOCTL)。由于通过中间语言,所有的结构体被转化为结构体名+偏移+接口的统一格式,而用于注册ioctl_handler(IOCTL)的结构体,其对应的接口即为“IOCTL”。基于此,可以以“IOCTL”为搜索字符串,在中间语言中进行检索,继而获取接口部分为“IOCTL”的所有结构体,作为该至少一个第二结构体。
502:电子设备对至少一个第二结构体进行信息整合,得到至少一个结构体名。
如图4所示,在本实施方式中,结构体名以“struct.xxx”的形式表现在中间语言中。基于此,可以对每个第二结构体中,“struct.”之后的字符串进行识别提取,继而得到至少一个结构体名。需要说明的是,在本步骤中,提取出的结构体名可能会出现重复,则再出现重复时,可以对其进行去重处理后,再汇总统计,得到该至少一个结构体名。
503:电子设备采用至少一个结构体名搜索中间语言,得到至少一个第三结构体。
在本实施方式中,该至少一个结构体名包括至少一个第三结构体中任意一个第三结构体的结构体名。具体而言,根据至少一个结构体名中的每个结构体名,在中间语言中进行检索,找到与每个结构体名相同的结构体进行汇总,得到至少一个第三结构体。示例性的,对于第二结构体“struct.file_operations,9,IOCTL”,其结构体名为“file_operations”,经过检索,得到另外两个结构体名相同的结构体:“struct.file_operations,2,FileRead”和“struct.file_operations,3,FileWrite”,继而将“struct.file_operations,2,FileRead”和“struct.file_operations,3,FileWrite”作为第二结构体“struct.file_operations,9,IOCTL”对应的第三结构体。
504:电子设备采用预设的第二字符串搜索至少一个第二结构体和至少一个第三结构体,得到至少一个目标代码。
具体而言,以LLVM语言为例,该第二字符串可以是“command”。对每个第二结构体或每个第三结构体进行检索后,将获得每个第二结构体或每个第三结构体对应的目标代码的路径,继而可以根据该路径获取每个第二结构体或每个第三结构体对应的目标代码。
505:电子设备采用预设的第三字符串搜索至少一个目标代码,得到至少一个命令码。
在本实施方式中,该至少一个命令码与至少一个目标代码一一对应。
具体而言,以LLVM语言为例,该第三字符串可以是“switch case”。通过在每个目标代码中查看对应的“switch case”命令,即可获取每个目标代码对应的结构体的命令码。
在可选的实施方式中,如图6所示,获取到的命令码中存在嵌套另一个IOCTL结构体的可能性,继而在向下搜索时,需要持续关注IOCTL结构体,当发现存在嵌套时,可以应用如上述步骤501-505的方法,分析确认嵌套逻辑,获取嵌套的IOCTL结构体对应的命令码。
506:电子设备对至少一个命令码中的每个命令码进行回溯解析,确定每个命令码对应的命令码输入参数类型。
具体而言,可以通过分析数据流,回溯参数的传递过程,继而定位参数类型。
507:电子设备将设备节点信息、至少一个命令码和每个命令码对应的命令码输入参数类型进行整合,得到目标参数文件。
具体而言,该目标参数文件可以是json文件,预设的格式如图7所示,其中,device为设备节点信息,handler为第二结构体或第三结构体,code为命令码,value为命令码输入参数类型。
104:电子设备根据输入规则和目标参数文件生成待测源码的测试用例。
在本实施方式中,可以根据输入规则确定测试工具的输入语法和输入结构,继而根据输入语法和输入结构对目标参数文件中的参数进行编辑,得到测试用例。示例性的,可以根据测试工具的输入语法和输入结构生成该测试工具的输入模板,继而将目标参数文件中的内容关联填充进该输入模板,生成待测源码的测试用例。此外,该输入模板也可以预先进行生成,继而在使用时直接进行调用,以提升处理效率。
示例性的,以LibFuzzer为例,其输入语法和输入规则为:
其中,“AAAA”对应于目标参数文件中的函数入口,“BBBB”对应于目标参数文件中的函数输入参数类型。
然后,再以目标参数文件中的函数输入参数类型,调整“BBBB”部分的具体内容。示例性的,以步骤103中库类fuzzing测试示例中的头文件为例,其对应的目标参数文件为:
Interface:VulnerableFunction1
Input:[uint8_t*,size_t]
可见,其中包含两个输入参数,类型分别为“uint8_t*”和“size_t”,基于此,结合LibFuzzer的输入语法和输入规则,可以得到如下模板:
再将目标参数文件中的内容关联填充进该输入模板中,即可得到如下测试用例:
在另一种实施方式中,以AFL&&AFL++为例,其输入语法和输入规则为:根据函数输入类型生成一个相同类型的测试种子,再通过一个main函数,以stdin将测试种子中的函数输入参数类型导入,得到测试用例。
基于此,继续沿用步骤103中库类fuzzing测试示例中的头文件,其函数输入类型为“uint8_t*”和“size_t”,继而基于该类型生成若干与该类型相同的数据构成测试种子,并得到如下所示的测试用例:
在另一种实施方式中,以Syzkaller为例,其输入语法和输入规则为:将驱动接口的相关信息提取后使用syzlang语法编写测试用例。基于此,在本实施方式中,可以通过Syzkaller的测试逻辑和上述获取到的输入参数类型,按照syzlang的语法规则生成符合要求的通用Syzkaller模板。继而将上述获取到的输入参数类型填入模板中对应的位置,生成测试用例。
在可选的实施方式中,还可以预先对已生成的Syzkaller测试用例进行分析,提取其中的通用语句构建来构建通用的Syzkaller模板。继而在实际测试中,可以直接调用预先生成的模板进行测试用例的生成,继而进一步提升测试效率。综上,本实施方式所提供的测试用例自动生成方法,通过待测源码的配置文件确定待测源码的测试工具,继而确定该测试工具的输入参数类型和输入规则。然后,根据输入参数类型对待测源码进行参数提取,得到目标参数文件,继而根据输入规则和目标参数文件生成待测源码的测试用例。由此,实现了测试用例的自动化生成,无需大量的人工干预,提升了整体的测试效率,且可适用于对大量不同的待测程序进行测试的场景。同时,根据测试工具输入规则,生成的测试用例不受测试人员的专业和技术能力的影响,可以完美的契合测试工具的需求,确保测试结果的客观性和正确性。
为了便于更好的实施本申请实施方式的上述方案,相应的,下面还提供用于配合实施上述方案的相关装置。
图8为本申请实施方式提供的一种测试用例自动生成装置的结构示意图,该测试用例自动生成装置800包括:
源码分析模块801,用于根据测试配置文件确定待测源码的测试工具,并基于测试工具确定输入参数类型和输入规则;
信息整合模块802,用于根据输入参数类型对待测源码进行参数提取,得到目标参数文件;
用例生成模块803,用于根据输入规则和目标参数文件生成待测源码的测试用例。
其中,源码分析模块801中根据测试工具的不同,可以包括Syzkaller分析单元804和AFL&&AFL++&&LibFuzzer分析单元805。当需要选择不同的Fuzzing工具测试时,可以调用对应工具的分析单元对待测源码进行分析。信息整合模块802中可以包括文件生成单元806,用于将待测源码中提取出的参数写入.json文件,生成用于生成用例的.json文件,该.json文件为目标参数文件。用例生成模块803可以包括文件获取单元807和用例模板库808,其中,文件获取单元807用于从文件生成单元806处获取生成的.json文件,用例模板库808则用于存储预先生成的测试用例模板。
在一种可能的实施方式中,当测试工具为AFL&&AFL++或LibFuzzer时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,信息整合模块802,具体用于:
获取待测源码的头文件;
根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口;
根据至少一个第一函数入口解析头文件,确定至少一个第一函数入口中每个第一函数入口的函数输入参数类型;
将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口方面,信息整合模块802,具体用于:
将头文件转化为抽象语法树,遍历抽象语法树,提取节点类型为函数的节点,得到至少一个第一函数入口。
在一种可能的实施方式中,在将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件之前,信息整合模块802,还用于:
确定至少一个第一函数入口中的第二函数入口,其中,第二函数入口为至少一个第一函数入口中,函数输入参数类型未记载在头文件中函数入口;
根据第二函数入检索待测源码,得到第二函数入口对应的第一结构体,其中,第一结构体用于定义第二函数入口;
解析第一结构体,确定第二函数入口的函数输入参数类型。
在一种可能的实施方式中,在获取待测源码的头方面,信息整合模块802,具体用于:
根据配置文件确定待测源码的头文件路径;
根据头文件路径获取待测源码的头文件。
在一种可能的实施方式中,当测试工具为Syzkaller时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,信息整合模块802,具体用于:
将待测源码转化为中间语言,其中,中间语言用于将待测源码中的结构体的表达格式转化为相同的格式;
采用预设的第一字符串搜索中间语言,确定设备节点信息;
全局搜索中间语言,确定至少一个命令码;
对至少一个命令码中的每个命令码进行回溯解析,确定每个命令码对应的命令码输入参数类型;
将设备节点信息、至少一个命令码和每个命令码对应的命令码输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在全局搜索中间语言,确定至少一个命令码方面,信息整合模块802,具体用于:
全局搜索中间语言,确定至少一个第二结构体,其中,至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令;
对至少一个第二结构体进行信息整合,得到至少一个结构体名;
采用至少一个结构体名搜索中间语言,得到至少一个第三结构体,其中,至少一个结构体名包括至少一个第三结构体中任意一个第三结构体的结构体名;
采用预设的第二字符串搜索至少一个第二结构体和至少一个第三结构体,得到至少一个目标代码;
采用预设的第三字符串搜索至少一个目标代码,得到至少一个命令码,其中,至少一个命令码与至少一个目标代码一一对应。
在一种可能的实施方式中,在根据输入规则和目标参数文件生成待测源码的测试用例方面,用例生成模块803,具体用于:
根据输入规则确定测试工具的输入语法和输入结构;
根据输入语法和输入结构对目标参数文件中的参数进行编辑,得到测试用例。
图9为本申请实施方式提供的一种电子设备的结构示意图,该电子设备900包括处理器901和存储器902,它们之间通过总线903连接,其中,存储器902中存储程序指令和数据。
处理器901用于读取存储器902中的程序指令执行以下操作:
根据测试配置文件确定待测源码的测试工具;
基于测试工具确定输入参数类型和输入规则;
根据输入参数类型对待测源码进行参数提取,得到目标参数文件;
根据输入规则和目标参数文件生成待测源码的测试用例。
在一种可能的实施方式中,当测试工具为AFL&&AFL++或LibFuzzer时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,处理器901,具体用于执行以下操作:
获取待测源码的头文件;
根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口;
根据至少一个第一函数入口解析头文件,确定至少一个第一函数入口中每个第一函数入口的函数输入参数类型;
将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在根据输入参数类型扫描头文件,提取头文件内的至少一个第一函数入口方面,处理器901,具体用于执行以下操作:
将头文件转化为抽象语法树,遍历抽象语法树,提取节点类型为函数的节点,得到至少一个第一函数入口。
在一种可能的实施方式中,在将至少一个第一函数入口和每个第一函数入口的函数输入参数类型进行整合,得到目标参数文件之前,处理器901,还用于执行以下操作:
确定至少一个第一函数入口中的第二函数入口,其中,第二函数入口为至少一个第一函数入口中,函数输入参数类型未记载在头文件中函数入口;
根据第二函数入检索待测源码,得到第二函数入口对应的第一结构体,其中,第一结构体用于定义第二函数入口;
解析第一结构体,确定第二函数入口的函数输入参数类型。
在一种可能的实施方式中,在获取待测源码的头方面,处理器901,具体用于执行以下操作:
根据配置文件确定待测源码的头文件路径;
根据头文件路径获取待测源码的头文件。
在一种可能的实施方式中,当测试工具为Syzkaller时,在根据输入参数类型对待测源码进行参数提取,得到目标参数文件方面,处理器901,具体用于执行以下操作:
将待测源码转化为中间语言,其中,中间语言用于将待测源码中的结构体的表达格式转化为相同的格式;
采用预设的第一字符串搜索中间语言,确定设备节点信息;
全局搜索中间语言,确定至少一个命令码;
对至少一个命令码中的每个命令码进行回溯解析,确定每个命令码对应的命令码输入参数类型;
将设备节点信息、至少一个命令码和每个命令码对应的命令码输入参数类型进行整合,得到目标参数文件。
在一种可能的实施方式中,在全局搜索中间语言,确定至少一个命令码方面,处理器901,具体用于执行以下操作:
全局搜索中间语言,确定至少一个第二结构体,其中,至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令;
对至少一个第二结构体进行信息整合,得到至少一个结构体名;
采用至少一个结构体名搜索中间语言,得到至少一个第三结构体,其中,至少一个结构体名包括至少一个第三结构体中任意一个第三结构体的结构体名;
采用预设的第二字符串搜索至少一个第二结构体和至少一个第三结构体,得到至少一个目标代码;
采用预设的第三字符串搜索至少一个目标代码,得到至少一个命令码,其中,至少一个命令码与至少一个目标代码一一对应。
在一种可能的实施方式中,在根据输入规则和目标参数文件生成待测源码的测试用例方面,处理器901,具体用于执行以下操作:
根据输入规则确定测试工具的输入语法和输入结构;
根据输入语法和输入结构对目标参数文件中的参数进行编辑,得到测试用例。
在一种可能的实施方式中,该电子设备可以是服务器。
本申请实施方式还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行以实现如上述方法实施方式中记载的任何一种测试用例自动生成方法的部分或全部步骤。
本申请实施方式还提供了一种计算机程序产品,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个通信方法与中的一个或多个步骤。上述所涉及的设备的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在所述计算机可读取存储介质中。
应理解,本申请实施方式中提及的处理器可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(FieldProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施方式中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-OnlyMemory,ROM)、可编程只读存储器(ProgrammableROM,PROM)、可擦除可编程只读存储器(ErasablePROM,EPROM)、电可擦除可编程只读存储器(ElectricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(RandomAccessMemory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(StaticRAM,SRAM)、动态随机存取存储器(DynamicRAM,DRAM)、同步动态随机存取存储器(SynchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(DoubleDataRateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(EnhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(SynchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambusRAM,DRRAM)。
需要说明的是,当处理器为通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)集成在处理器中。
需要说明的是,对于前述的各方法实施方式,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以利用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施方式均属于可选实施方式,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施方式中,对各个实施方式的描述都各有侧重,某个实施方式中没有详述的部分,可以参见其他实施方式的相关描述。
在本申请所提供的几个实施方式中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以利用硬件的形式实现,也可以利用软件程序模块的形式实现。
集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施方式方法的全部或部分步骤。
本领域普通技术人员可以理解上述实施方式的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中。存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本申请实施方式进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施方式的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种测试用例自动生成方法,其特征在于,所述方法包括:
电子设备根据测试配置文件确定待测源码的测试工具;
所述电子设备基于所述测试工具确定输入参数类型和输入规则;
所述电子设备根据所述输入参数类型对所述待测源码进行参数提取,得到目标参数文件;
所述电子设备根据所述输入规则和所述目标参数文件生成所述待测源码的测试用例。
2.根据权利要求1所述的方法,其特征在于,当所述测试工具为AFL&&AFL++或LibFuzzer时,所述电子设备根据所述输入参数类型对所述待测源码进行参数提取,得到目标参数文件,包括:
所述电子设备获取所述待测源码的头文件;
所述电子设备根据所述输入参数类型扫描所述头文件,提取所述头文件内的至少一个第一函数入口;
所述电子设备根据所述至少一个第一函数入口解析所述头文件,确定所述至少一个第一函数入口中每个第一函数入口的函数输入参数类型;
所述电子设备将所述每个第一函数入口和所述每个第一函数入口的函数输入参数类型进行整合,得到所述目标参数文件。
3.根据权利要求2所述的方法,其特征在于,所述电子设备根据所述输入参数类型扫描所述头文件,提取所述头文件内的至少一个第一函数入口,包括:
所述电子设备将所述头文件转化为抽象语法树,遍历所述抽象语法树,提取节点类型为函数的节点,得到所述至少一个第一函数入口。
4.根据权利要求2或3所述的方法,其特征在于,在所述电子设备将所述至少一个第一函数入口和所述每个第一函数入口的函数输入参数类型进行整合,得到所述目标参数文件之前,所述方法还包括:
所述电子设备确定所述至少一个第一函数入口中的第二函数入口,其中,所述第二函数入口为所述至少一个第一函数入口中,函数输入参数类型未记载在所述头文件中函数入口;
所述电子设备根据所述第二函数入检索所述待测源码,得到所述第二函数入口对应的第一结构体,其中,所述第一结构体用于定义所述第二函数入口;
所述电子设备解析所述第一结构体,确定所述第二函数入口的函数输入参数类型。
5.根据权利要求2所述的方法,其特征在于,所述电子设备获取所述待测源码的头文件,包括:
所述电子设备根据所述配置文件确定所述待测源码的头文件路径;
所述电子设备根据所述头文件路径获取所述待测源码的头文件。
6.根据权利要求1所述的方法,其特征在于,当所述测试工具为Syzkaller时,所述电子设备根据所述输入参数类型对所述待测源码进行参数提取,得到目标参数文件,包括:
所述电子设备将所述待测源码转化为中间语言,其中,所述中间语言用于将所述待测源码中的结构体的表达格式转化为相同的格式;
所述电子设备采用预设的第一字符串搜索所述中间语言,确定设备节点信息;
所述电子设备全局搜索所述中间语言,确定至少一个命令码;
所述电子设备对所述至少一个命令码中的每个命令码进行回溯解析,确定所述每个命令码对应的命令码输入参数类型;
所述电子设备将所述设备节点信息、所述至少一个命令码和所述每个命令码对应的命令码输入参数类型进行整合,得到所述目标参数文件。
7.根据权利要求6所述的方法,其特征在于,所述电子设备全局搜索所述中间语言,确定至少一个命令码,包括:
所述电子设备全局搜索所述中间语言,确定至少一个第二结构体,其中,所述至少一个第二结构体中的每个第二结构体用于注册输入输出控制指令;
所述电子设备对所述至少一个第二结构体进行信息整合,得到至少一个结构体名;
所述电子设备采用所述至少一个结构体名搜索所述中间语言,得到至少一个第三结构体,其中,所述至少一个结构体名包括所述至少一个第三结构体中任意一个第三结构体的结构体名;
所述电子设备采用预设的第二字符串搜索所述至少一个第二结构体和所述至少一个第三结构体,得到至少一个目标代码;
所述电子设备采用预设的第三字符串搜索所述至少一个目标代码,得到所述至少一个命令码,其中,所述至少一个命令码与所述至少一个目标代码一一对应。
8.根据权利要求1-7中任意一项所述的方法,其特征在于,所述电子设备根据所述输入规则和所述目标参数文件生成所述待测源码的测试用例,包括:
所述电子设备根据所述输入规则确定所述测试工具的输入语法和输入结构;
所述电子设备根据所述输入语法和所述输入结构对所述目标参数文件中的参数进行编辑,得到所述测试用例。
9.一种电子设备,其特征在于,包括处理器和存储器,所述处理器和所述存储器耦合;其中,所述存储器用于存储计算机程序指令;当所述计算机程序指令被所述处理器执行时,使得所述电子设备执行如权利要求1-8中任一项所述的方法。
10.根据权利要求9所述的电子设备,其特征在于,所述电子设备为服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210797921.XA CN115221047A (zh) | 2022-07-08 | 2022-07-08 | 测试用例自动生成方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210797921.XA CN115221047A (zh) | 2022-07-08 | 2022-07-08 | 测试用例自动生成方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115221047A true CN115221047A (zh) | 2022-10-21 |
Family
ID=83609796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210797921.XA Pending CN115221047A (zh) | 2022-07-08 | 2022-07-08 | 测试用例自动生成方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115221047A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116257037A (zh) * | 2023-05-15 | 2023-06-13 | 通达电磁能股份有限公司 | 控制器测试程序的生成方法、系统、电子设备及存储介质 |
-
2022
- 2022-07-08 CN CN202210797921.XA patent/CN115221047A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116257037A (zh) * | 2023-05-15 | 2023-06-13 | 通达电磁能股份有限公司 | 控制器测试程序的生成方法、系统、电子设备及存储介质 |
CN116257037B (zh) * | 2023-05-15 | 2023-08-11 | 通达电磁能股份有限公司 | 控制器测试程序的生成方法、系统、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108614707B (zh) | 静态代码检查方法、装置、存储介质和计算机设备 | |
CN106227668B (zh) | 数据处理方法和装置 | |
CN109918294B (zh) | 一种混源软件自主可控性检测方法及系统 | |
US9122540B2 (en) | Transformation of computer programs and eliminating errors | |
CN109857641B (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
US8972938B2 (en) | Determining functional design/requirements coverage of a computer code | |
CN106371997B (zh) | 一种代码检查方法及装置 | |
CN110059006B (zh) | 代码审计方法及装置 | |
CN105512021A (zh) | 用于软件测试的Diff分析方法及装置 | |
US20160124795A1 (en) | Evaluation method and apparatus | |
CN115509514B (zh) | 一种前端数据模拟方法、装置、设备及介质 | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN113094252B (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN115221047A (zh) | 测试用例自动生成方法及电子设备 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN109032946B (zh) | 一种测试方法和装置、计算机可读存储介质 | |
CN113946339A (zh) | 应用工程文件的处理方法、装置、电子设备及可读介质 | |
CN115098368A (zh) | 一种识别脑图用例的智能验证方法和装置 | |
CN114661298A (zh) | 公共方法自动生成方法、系统、设备及介质 | |
CN114895914A (zh) | 日志输出代码的生成方法、装置、电子设备及存储介质 | |
CN117111902B (zh) | Ai智能软件开发方法及装置 | |
CN110362579B (zh) | 一种信息处理方法和电子设备 | |
CN117909152A (zh) | 一种接口向下兼容检测方法、系统、计算机及存储介质 | |
CN117472776A (zh) | 一种基于ast的框架自适应c++单元测试用例自动化生成方法及系统 |
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 |