一种单元测试方法及其装置制造方法及图纸

技术编号:2821351 阅读:258 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种单元测试方法及其装置,用于实现对软件系统的单元测试,所述软件系统包括被测试模块,其特征在于,该方法包括:步骤一,根据所述被测试模块设计生成相应的测试模块,并对所述被测试模块、所述测试模块进行编译生成一执行文件;步骤二,运行所述执行文件,通过动态打桩完成所述被测试模块与所述测试模块的挂接,执行测试;及步骤三,修改编译策略,去除对所述测试模块的编译,生成发布版本。采用本发明专利技术保持待测试代码的完整性,减小测试版本和发布版本的行为的差异性,方便测试代码集中管理,使集成测试更容易,大大增强了单元测试理论的实践可用性。

【技术实现步骤摘要】

本专利技术涉及软件测试技术,特别是涉及一种单元测试方法及其装置。技术背景单元测试是软件开发中质量保证的重要环节。单元测试包括以下几个过程1) 、根据被测试模块设计相应的测试模块,测试模块包括测试逻辑和测 试接口,测试逻辑需要构造被测试模块的环境变量,设计测试用例,其中桩函 数是最主要的一种环境变量;而测试接口则是某一个测试的入口 ;2) 、修改被测试模块,使被测试模块可以引用测试模块中的桩函数,通 常采用额外全局变量或者宏判别是否引用桩函数还是原来功能函数;3) 、编译修改过的被测试模块和测试模块,生成可执行目标运行文件;4) 、运行目标可执行文件,启动测试模块;测试模块通过不同的环境变 量组合(测试逻辑负责实现),完成对被测试模块的测试;5) 、发布最后版本时,去掉测试模块,修改被测试模块,去除不必要的 针对测试的相关修改,重新编译生成可执行文件。在上述过程中,需要两次修改被测试模块,第一次修改被测试模块是为了 实现与测试模块的关联,传统的方法是使用宏开关或控制变量,最后在测试完 毕后,需要再次修改被测试模块,去除冗余的代码,这样带来一些弊端1) 、采用静态打桩或编译期打桩,原有被测试模块被修改,发布版本又 需要修改回来,单元测试结果的可信性、准确性都受到一定程度影响;2) 、被测试模块的测试代码和实际发布代码混合在一起,给代码版本管 理带来不便。
技术实现思路
本专利技术所要解决的技术问题在于提供一种单元测试方法及其装置,用于在不修改测试代码时减小测试版本和发布版本的差异。为了实现上述目的,本专利技术提供了一种单元测试方法,用于实现对软件系 统的单元测试,所述软件系统包括被测试模块,包括步骤一,根据所述被测试模块设计生成相应的测试模块,并对所述被测试 模块、所述测试模块进行编译生成一执行文件;步骤二,运行所述执行文件,通过动态打桩完成所述被测试模块与所述测 试模块的挂接,执行测试;步骤三,修改编译策略,去除对所述测试模块的编译,生成发布版本。 所述的单元测试方法,其中,所述步骤二中,由所述测试模块的桩函数进行动态打桩完成所述被测试模块与所述测试模块的挂接。所述的单元测试方法,其中,所述步骤二中,所述桩函数根据一相应描述符的信息控制所述被测试模块与所述测试模块之间的跳转条件和相互联系,所述描述符的信息包括跳转前后序言代码、控制数据。所述的单元测试方法,其中,所述步骤二中,还包括在动态打桩时将所 述跳转前后序言代码、所述控制数据保存至所述描述符的歩骤。所述的单元测试方法,其中,所述步骤二中,还包括在进行动态打桩之 前,由被测试函数调用原功能函数,并将原功能函数的第一条指令替换为跳转 指令,跳转至所述桩函数的序言中的步骤。所述的单元测试方法,其中,所述步骤二中,由所述跳转前后序言代码完 成所述原功能函数向所述桩函数的序言的跳转。所述的单元测试方法,其中,所述步骤二中,还包括由所述桩函数的序 言通过调用一条件函数判断是执行所述桩函数还是返回至所述原功能函数继续执行的步骤,若所述条件函数返回TRUE,则执行所述桩函数,否则返回至所述原功能函数继续执行。所述的单元测试方法,其中,所述步骤二中,由所述条件函数根据由所述 桩函数的路径控制函数得到的路径参数判断是执行所述桩函数还是返回至所 述原功能函数继续执行。所述的单元测试方法,其中,所述步骤二中,还包括在所述执行测试完 成后,删除打桩的步骤。为了实现上述目的,本专利技术提供了一种单元测试装置,用于实现对软件系统的单元测试,所述软件系统包括被测试模块,该装置包括一生成编译模块,根据所述被测试模块生成相应的测试模块,并对所述被测试模块、所述测试模块进行编译生成一执行文件;一动态打桩模块,用于运行所述执行文件,通过动态打桩完成所述被测试模块与所述测试模块的挂接,执行测试;及一版本生成模块,用于修改编译策略,去除对所述测试模块的编译,生成 发布版本。相比于现有测试方法和装置,本专利技术的主要优点在于1) 、保持待测试代码的完整性运行期间代码调用更换,不用因为名称问题而修改待测试的代码;保持测 试代码的完整性;尽量减小测试版本和发布版本的行为的差异性。2) 、测试代码集中管理测试代码全部集中在一起,测试代码的去留简单易行,测试代码便于统一 管理,版本具有更好的可控性。3) 、使集成测试更容易所有单元的单元测试代码可以同时存在,在系统运行期间,可以根据需要 有选择的进行部分或者全部单元的测试,使集成测试变得方便灵活。4) 、增强单元测试理论的实践可用性实现了动态打桩功能后,可以将动态打桩工具集成到自动化测试环境,使 得单元测试更加便于使用。附图说明图1是本专利技术的桩函数调用关系及路径; 图2是本专利技术的单元测试流程图; 图3是本专利技术的bootstrap实现流程图; 图4是本专利技术的stub_prelude实现流程图; 图5是本专利技术的单元测试装置结构图。具体实施方式以下结合附图和具体实施例对本专利技术进行详细描述,但不作为对本专利技术的限定。下面以PowerPC CPU为例,详细说明本专利技术动态打桩的实现方法,如图1 所示,是本专利技术的桩函数调用关系及路径,图2描述了本专利技术的单元测试流程 图;在说明实现方法之前,先说明一下使用方法,使用时分几个步骤al)进行打桩,形式如下install一stub(B, stub—B, NULL);最后的参数NULL为条件函数—condition(),在执行桩函数之前,通过 —condition()函数来判断是执行桩函数stub—B()还是回到原功能函数B()继续执 行;a2)桩函数的路径控制函数path—ctrlCpath),通过路径参数jath,桩函数 stub—B()返回不同的值,同时缺省的—condition()函数可以根据此参数来判断是否返回原功能函数BO;a3)执行被测试函数A();a4)判断返回结果,确认测试结论;a5)删除打桩动作remov^stub(stub—B)。运行时动态函数替换的一般原则是,被测试函数AO调用原功能函数B0, 原功能函数B()的第一条指令被替换为跳转指令,跳转到桩函数stub一B()的序 言stub_prelude中,然后在序言stub_prelude中调用描述符中的信息 —conditional()判断是执行桩函数stub—B()还是继续执行原功能函数B(),如果 —conditional()返回TRUE(非0),那么继续运行桩函数代码,如果—conditional) 返回FALSE (0),那么fallback运行原功能函数B()的代码。增加—conditional() 主要是考虑到用户可能有一些特别的需求,希望在特定情况下(如jath()无法 控制的特殊情况),能够临时回避桩函数stub一B()而调用原功能函数B()。在install—stub()之后,被测试函数A()调用原功能函数B()的情况变化,见 图1所示。针对每个桩替换,都存在一个相应的描述符,在install—stub()时需要保存 如下信息到描述符bl) —orig函数地址(B地址),以便以后恢复指令;b2) —stub函数地址(stub—B地址),—stub函数地址之后将作为描述符数 组的关键字来使用;描述符数组是指所有测试模块的桩函数stub—B()的本文档来自技高网...

【技术保护点】
一种单元测试方法,用于实现对软件系统的单元测试,所述软件系统包括被测试模块,其特征在于,包括: 步骤一,根据所述被测试模块设计生成相应的测试模块,并对所述被测试模块、所述测试模块进行编译生成一执行文件; 步骤二,运行所述执行文件,通过动态打桩完成所述被测试模块与所述测试模块的挂接,执行测试; 步骤三,修改编译策略,去除对所述测试模块的编译,生成发布版本。

【技术特征摘要】

【专利技术属性】
技术研发人员:王云峰
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

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

1