一种基于调试器的单元测试系统及方法技术方案

技术编号:15159050 阅读:99 留言:0更新日期:2017-04-12 08:56
本发明专利技术公开了一种基于调试器的单元测试系统,包括:测试定义模块,用于定义包括元数据信息、单元测试对象、单元测试内容的执行脚本;翻译模块,用于解析执行脚本,将所述执行脚本转换产生操纵脚本、工作指示代码序列和引导脚本;以及执行模块,用于载入所述引导脚本的相应功能,载入执行脚本序列,通过基于执行操纵脚本、工作指示代码序列进行单元测试,调用测试的返回值与预置量进行比较判断,得出测试是否成功的结论。本发明专利技术所述技术方案克服了C、C++等静态链接系统难以方便的进行运行时代码逻辑控制的问题。

【技术实现步骤摘要】

本专利技术涉及计算机软件检测
,更具体地涉及一种基于调试器的单元测试系统及方法
技术介绍
单元测试是持续集成活动中对软件工程质量的重要保证体系,但对于目前普遍存在的C、C++等静态语言编写的工程而言,由于C、C++等静态链接系统难以方便的进行运行时代码逻辑控制,目前普遍存在的对C、C++代码进行单元测试的系统,均需要在项目早期即做好充分文件体系及调用链规划,以方便的独立代码逻辑。对大量的已有代码资产而言,在之前开发的代码没有充分准备的情况下,使用现有C、C++单元测试手段加入单元测试需要大量的配置变更,而这些配置变更本身,是无法被单元测试进行保障的。因而任何引入的变更都可能造成难以察觉的质量问题。
技术实现思路
为了解决上述技术问题,提供了根据本专利技术的一种基于调试器的单元测试系统及方法。根据本专利技术的第一方面,提供了一种基于调试器的单元测试系统。该系统包括:测试定义模块,用于定义包括元数据信息、单元测试对象、单元测试内容的执行脚本;翻译模块,用于解析执行脚本,将所述执行脚本转换产生操纵脚本、工作指示代码序列和引导脚本;以及执行模块,用于载入所述引导脚本的相应功能,载入执行脚本序列,通过基于执行操纵脚本、工作指示代码序列进行单元测试,调用测试的返回值与预置量进行比较判断,得出测试是否成功的结论。在一些实施例中,所述执行脚本定义包括测试控制指令、目标测试对象信息、测试执行步骤、测试环境、测试失败条件预置量、测试结果、测试前环境准备、测试后环境清理的执行逻辑。在一些实施例中,所述单元测试对象包括:目标程序的单元、文件、动态加载的组件、格式溢出代码。在一些实施例中,所述测试定义模块,还用于定义插桩代码。在一些实施例中,所述测试定义模块包括:词法解析单元,用于将所述执行脚本解析为标记序列,同时清洗源程序,清理包括注释、空格、空行的信息;语法分析单元,用于根据脚本定义,将所述标记序列组织为语法树。在一些实施例中,所述翻译模块包括:元数据解析单元,用于基于所述执行脚本解析元数据信息;对象解析单元,用于基于所述执行脚本解析目标测试对象的绝对路径,建立工作指示代码序列并写入相应加载指令;内容解析单元,用于基于所述执行脚本解析单元测试内容,产生操纵脚本和引导脚本。在一些实施例中,所述内容解析单元包括:逻辑生成子单元,用于建立引导脚本,所述引导脚本包括测试前环境准备、测试后环境清理、调用调试器进行单元测试、判定调试器进行的单元测试是否成功并向调用者反馈结论的逻辑;代码生成子单元,用于建立调试器操纵脚本,所述操纵脚本用于设定单元测试流程及被测试系统代码调用,生成包括目标被测试系统的函数的调用、动态分配结构体和类、指定变量名、指定全部变量状态、提供结果判断及安插桩代码模式的操纵指令序列。在一些实施例中,所述执行模块包括:载入单元,用于初始化测试环境,载入所述引导脚本的相应功能,载入执行脚本序列;执行单元,用于使用调试器功能,基于所述操纵脚本中的操纵指令序列依据设定的单元测试流程执行单元测试,将返回值和数据变量值存入内存和寄存器中;判断单元,用于通过基于内存和寄存器中的返回值和数据变量,与测试失败条件预置量进行比较,通过结果通讯管道将测试结果返回给引导脚本,若成功,输出成功标识,若失败,输出失败标识,并向所述结果通讯管道中输出用户定义字符串的测试结果;其中,所述预置量包括测试目标内部函数预期返回值、预期测试目标内部数据变量、动态加载模块函数调用预期返回值、外部脚本调用预期返回值;清理单元,用于基于所述执行脚本中定义的测试后环境清理的执行逻辑进行测试后环境清理。在一些实施例中,所述单元测试流程包括顺序流程、分支流程、循环流程。在一些实施例中,所述执行单元包括:用于使用操纵指令序列安插桩代码。根据本专利技术的第二方面,提供了一种基于调试器的单元测试方法,包括:定义包括元数据信息、单元测试对象、单元测试内容的执行脚本;通过解析所述执行脚本,将所述执行脚本转换产生操纵脚本、工作指示代码序列和引导脚本;以及载入所述引导脚本的相应功能,载入执行脚本序列,通过基于执行操纵脚本、工作指示代码序列进行单元测试,调用测试的返回值与预置量进行比较判断,得出测试是否成功的结论。在一些实施例中,所述执行脚本定义包括测试控制指令、目标测试对象信息、测试执行步骤、测试环境、测试失败条件预置量、测试结果、测试前环境准备、测试后环境清理的执行逻辑。在一些实施例中,所述单元测试对象包括:目标程序的单元、文件、动态加载的组件、格式溢出代码。在一些实施例中,还包括,定义插桩代码。在一些实施例中,还包括:将所述执行脚本解析为标记序列,同时清洗源程序,清理包括注释、空格、空行的信息;根据脚本定义,将所述标记序列组织为语法树。在一些实施例中,所述解析执行脚本包括:基于所述执行脚本解析元数据信息;基于所述执行脚本解析目标测试对象的绝对路径,建立工作指示代码序列并写入相应加载指令;基于所述执行脚本解析单元测试内容,产生操纵脚本和引导脚本。在一些实施例中,所述解析单元测试内容包括:建立引导脚本,所述引导脚本包括测试前环境准备、测试后环境清理、调用调试器进行单元测试、判定调试器进行的单元测试是否成功并向调用者反馈结论的逻辑;建立调试器操纵脚本,所述操纵脚本用于设定单元测试流程及被测试系统代码调用,生成包括目标被测试系统的函数的调用、动态分配结构体和类、指定变量名、指定全部变量状态、提供结果判断及安插桩代码模式的操纵指令序列。在一些实施例中,还包括:初始化测试环境,载入所述引导脚本的相应功能,载入执行脚本序列;使用调试器功能,基于所述操纵脚本中的操纵指令序列依据设定的单元测试流程执行单元测试,将返回值和数据变量值存入内存和寄存器中;通过基于内存和寄存器中的返回值和数据变量,与测试失败条件预置量进行比较,通过结果通讯管道将测试结果返回给引导脚本,若成功,输出成功标识,若失败,输出失败标识,并向所述结果通讯管道中输出用户定义字符串的测试结果;其中,所述预置量包括测试目标内部函数预期返回值、预期测试目标内部数据变量、动态加载模块函数调用预期返回值、外部脚本调用预期返回值;基于所述执行脚本中定义的测试后环境清理的执行逻辑进行测试后环境清理。在一些实施例中,所述单元测试流程包括顺序流程、分支流程、循环流程。在一些实施例中,还包括:使用操纵指令序列安插桩代码。通过使用本专利技术的系统和方法,使用调试器作为中间手段,在执行过程中,动态的变更软件系统的执行流;可以方便的在现有C、C++代码基础上进行操作,无需直接改动现有代码即可增加自动化单元测试系统,以改善代码质量。对源码树结构无依赖,并能保证其引入过程没有对关键函数及数据结构造成影响。并有能力对各工程组成代码单元的输入进行控制,并根据配置,判定其代码单元的输出是否符合预期。附图说明为了更清楚地说明本专利技术的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为根据本专利技术实施例的基于调试器的单元测试系统的框图;图2为根据本专利技术实施例的基于调试器的单元测试系统的测试定义模块的框图;图3为根据本文档来自技高网...

【技术保护点】
一种基于调试器的单元测试系统,其特征在于,包括:测试定义模块,用于定义包括元数据信息、单元测试对象、单元测试内容的执行脚本;翻译模块,用于解析执行脚本,将所述执行脚本转换产生操纵脚本、工作指示代码序列和引导脚本;以及执行模块,用于载入所述引导脚本的相应功能,载入执行脚本序列,通过基于执行操纵脚本、工作指示代码序列进行单元测试,调用测试的返回值与预置量进行比较判断,得出测试是否成功的结论。

【技术特征摘要】
1.一种基于调试器的单元测试系统,其特征在于,包括:测试定义模块,用于定义包括元数据信息、单元测试对象、单元测试内容的执行脚本;翻译模块,用于解析执行脚本,将所述执行脚本转换产生操纵脚本、工作指示代码序列和引导脚本;以及执行模块,用于载入所述引导脚本的相应功能,载入执行脚本序列,通过基于执行操纵脚本、工作指示代码序列进行单元测试,调用测试的返回值与预置量进行比较判断,得出测试是否成功的结论。2.根据权利要求1所述的系统,其特征在于,所述执行脚本定义包括测试控制指令、目标测试对象信息、测试执行步骤、测试环境、测试失败条件预置量、测试结果、测试前环境准备、测试后环境清理的执行逻辑。3.根据权利要求1所述的系统,其特征在于,所述单元测试对象包括:目标程序的单元、文件、动态加载的组件、格式溢出代码。4.根据权利要求1所述的系统,其特征在于,所述测试定义模块,还用于定义插桩代码。5.根据权利要求1所述的系统,其特征在于,所述测试定义模块包括:词法解析单元,用于将所述执行脚本解析为标记序列,同时清洗源程序,清理包括注释、空格、空行的信息;语法分析单元,用于根据脚本定义,将所述标记序列组织为语法树。6.根据权利要求1所述的系统,其特征在于,所述翻译模块包括:元数据解析单元,用于基于所述执行脚本解析元数据信息;对象解析单元,用于基于所述执行脚本解析目标测试对象的绝对路径,建立工作指示代码序列并写入相应加载指令;内容解析单元,用于基于所述执行脚本解析单元测试内容,产生操纵脚本和引导脚本。7.根据权利要求6所述的系统,其特征在于,所述内容解析单元包括:逻辑生成子单元,用于建立引导脚本,所述引导脚本包括测试前环境准备、测试后环境清理、调用调试器进行单元测试、判定调试器进行的单元测试是否成功并向调用者反馈结论的逻辑;代码生成子单元,用于建立调试器操纵脚本,所述操纵脚本用于设定单元测试流程及被测试系统代码调用,生成包括目标被测试系统的函数的调用、动态分配结构体和类、指定变量名、指定全部变量状态、提供结果判断及安插桩代码模式的操纵指令序列。8.根据权利要求1至7任一项所述的系统,其特征在于,所述执行模块包括:载入单元,用于初始化测试环境,载入所述引导脚本的相应功能,载入执行脚本序列;执行单元,用于使用调试器功能,基于所述操纵脚本中的操纵指令序列依据设定的单元测试流程执行单元测试,将返回值和数据变量值存入内存和寄存器中;判断单元,用于通过基于内存和寄存器中的返回值和数据变量,与测试失败条件预置量进行比较,通过结果通讯管道将测试结果返回给引导脚本,若成功,输出成功标识,若失败,输出失败标识,并向所述结果通讯管道中输出用户定义字符串的测试结果;其中,所述预置量包括测试目标内部函数预期返回值、预期测试目标内部数据变量、动态加载模块函数调用预期返回值、外部脚本调用预期返回值;清理单元,用于基于所述执行脚本中定义的测试后环境清理的执行逻辑进行测试后环境清理。9.根据权利要求8所述的系统,其特征在于,所述单元测试流程包括顺序流...

【专利技术属性】
技术研发人员:李林哲吴宇生关墨辰张栗伟
申请(专利权)人:北京安天电子设备有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1