1.一种单元测试用例自动生成方法,其特征在于,包括:获取源文件,对源文件进行预处理后生成中间文件,包括:遍历源文件,获取源文件中的多分支语句,所述源文件的格式为c文件,获取源文件中的if‑elseif等多分支语句;
将源文件中的多分支语句插装替换为if‑else单分支语句;
对插装替换后的源文件进行格式化,格式对齐,生成中间文件;
创建初始用例写入文件,基于MC/DC覆盖的映射转换对中间文件和初始用例写入文件进行插桩,以生成用例生成文件和用例写入文件,包括:遍历源文件,提取源文件中的逻辑判断条件,根据代码映射规则将所述逻辑判断条件转换为代码插入中间文件中得到用例生成文件;
提取源文件中测试函数的入参的符号化语句和全局输入变量的符号化语句,并生成入参声明和全局输入声明;
在用例生成文件中插入main方法,并在main方法中插入所述测试函数的入参的符号化语句和全局输入变量的符号化语句;
以用例写入文件框架文件为模版,创建初始用例写入文件;
获取源文件中的桩函数,根据桩函数生成数组声明和符号化语句;
将入参声明、全局输入声明、数组声明以及符号化语句插入至初始用例写入文件生成用例写入文件;
利用所述用例生成文件和预设的符号执行工具生成多个测试用例;
分别对所述用例生成文件和用例写入文件进行编译分别生成执行用例生成文件和执行用例写入文件;
所述执行用例写入文件读取多个所述测试用例后,由执行用例生成文件运行每个测试用例,基于输出重定向的测试用例返回方法生成测试用例文件。
2.根据权利要求1所述的单元测试用例自动生成方法,其特征在于,以用例写入文件框架文件为模版,采用模版样式复制插桩法创建初始用例写入文件,包括:创建空白用例写入文件;
获取用例写入框架文件中的头文件,并将其复制到空白用例写入文件,所述头文件包括头文件动态插桩标记位、结构体和宏定义插桩标记位、符号化变量的动态插桩标记位以及桩函数动态插桩标记位;
依次获取用例写入框架文件中的文件输入输出流、内存赋值方法、变量替换插桩标记位以及桩函数返回值替换的插桩标记位,并将其复制到空白用例写入文件中;
依次获取用例写入框架文件中的测试函数重现测试用例语句、增加测试用例代码以及资源释放操作,并将其复制到空白用例写入文件中生成初始用例写入文件。
3.根据权利要求2所述的单元测试用例自动生成方法,其特征在于,所述生成初始用例写入文件之后,还包括动态声明插桩:读取并复制源文件中头文件的引用,以替换空白用例写入文件中的原头文件动态插桩标记位;
读取并复制源文件中复制结构体、全局变量的声明,以替换空白用例写入文件中的原结构体和宏定义插桩标记位;
读取并复制源文件中的变量声明,以替换空白用例写入文件中的原符号化变量的动态插桩标记位;
获取源文件中桩函数,并为所述桩函数构建数组声明,以替换空白用例写入文件的原桩函数动态插桩标记位;
根据所述源文件中的变量声明构建变量赋值语句,以替换空白用例写入文件中的原变量替换插桩标记位;
根据源函数对桩函数的使用构建桩函数赋值语句,以替换空白用例写入文件中的原桩函数返回值替换的插桩标记位。
4.一种单元测试用例自动生成装置,其特征在于,包括:预处理模块:用于获取源文件,对源文件进行预处理后生成中间文件,包括:遍历源文件,获取源文件中的多分支语句,所述源文件的格式为c文件,获取源文件中的if‑elseif等多分支语句;
将源文件中的多分支语句插装替换为if‑else单分支语句;
对插装替换后的源文件进行格式化,格式对齐,生成中间文件;
第一生成模块:用于创建初始用例写入文件,基于MC/DC覆盖的映射转换对中间文件和初始用例写入文件进行插桩,以生成用例生成文件和用例写入文件,包括:转换单元:用于遍历源文件,提取源文件中的逻辑判断条件,根据代码映射规则将所述逻辑判断条件转换为代码插入中间文件中得到用例生成文件;
提取单元:用于提取源文件中测试函数的入参的符号化语句和全局输入变量的符号化语句,并生成入参声明和全局输入声明;
第一插桩单元:用于在用例生成文件中插入main方法,并在main方法中插入所述测试函数的入参的符号化语句和全局输入变量的符号化语句;
第一创建单元:用于以用例写入文件框架文件为模版,创建初始用例写入文件;
声明单元:用于获取源文件中的桩函数,根据桩函数生成数组声明和符号化语句;
第二插桩单元:用于将入参声明、全局输入声明、数组声明以及符号化语句插入至初始用例写入文件生成用例写入文件;
第二生成模块:用于利用所述用例生成文件和预设的符号执行工具生成多个测试用例;
编译模块:用于分别对所述用例生成文件和用例写入文件进行编译分别生成执行用例生成文件和执行用例写入文件;
执行模块:用于所述执行用例写入文件读取多个所述测试用例后,由执行用例生成文件运行每个测试用例,基于输出重定向的测试用例返回方法生成测试用例文件。
5.根据权利要求4的单元测试用例自动生成装置,其特征在于,所述第一创建单元包括:第二创建单元:用于创建空白用例写入文件;
第一复制单元:用于获取用例写入框架文件中的头文件,并将其复制到空白用例写入文件,所述头文件包括头文件动态插桩标记位、结构体和宏定义插桩标记位、符号化变量的动态插桩标记位以及桩函数动态插桩标记位;
第二复制单元:用于依次获取用例写入框架文件中的文件输入输出流、内存赋值方法、变量替换插桩标记位以及桩函数返回值替换的插桩标记位,并将其复制到空白用例写入文件中;
第三复制单元:用于依次获取用例写入框架文件中的测试函数重现测试用例语句、增加测试用例代码以及资源释放操作,并将其复制到空白用例写入文件中生成初始用例写入文件。
6.根据权利要求4所述的单元测试用例自动生成装置,其特征在于,还包括:第一替换单元:用于读取并复制源文件中头文件的引用,以替换空白用例写入文件中的原头文件动态插桩标记位;
第二替换单元:用于读取并复制源文件中复制结构体、全局变量的声明,以替换空白用例写入文件中的原结构体和宏定义插桩标记位;
第三替换单元:用于读取并复制源文件中的变量声明,以替换空白用例写入文件中的原符号化变量的动态插桩标记位;
第四替换单元:用于获取源文件中桩函数,并为所述桩函数构建数组声明,以替换空白用例写入文件的原桩函数动态插桩标记位;
第五替换单元:用于根据所述源文件中的变量声明构建变量赋值语句,以替换空白用例写入文件中的原变量替换插桩标记位;
第六替换单元:用于根据源函数对桩函数的使用构建桩函数赋值语句,以替换空白用例写入文件中的原桩函数返回值替换的插桩标记位。
7.一种单元测试用例自动生成设备,其特征在于,包括:存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至3任意一项所述单元测试用例自动生成方法的步骤。
8.一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任意一项所述单元测试用例自动生成方法的步骤。