一种代码覆盖测试方法、装置和系统制造方法及图纸

技术编号:10574597 阅读:109 留言:0更新日期:2014-10-29 09:38
本发明专利技术实施例公开了一种代码覆盖测试方法、装置和系统。本发明专利技术实施例采用获取源代码编译后产生的二进制文件和符号表,并根据该符号表对二进制文件进行解析,以确定每个源代码所定义的函数的位置,然后在该二进制文件被加载到内存但未被执行时,根据函数的位置为该二进制文件加载到内存中的映像设置调试点,根据该调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息,最后利用符号表将该代码基本块的相关信息转换成代码行信息,从而获得测试所覆盖的代码行。该方案可以提高测试的可靠性。

【技术实现步骤摘要】

本专利技术涉及通信
,具体涉及一种代码覆盖测试方法、装置和系统
技术介绍
代码覆盖测试,指的是用测试的方法来运行代码,并统计在测试中,监控运行到了(即被覆盖)的代码的测试方法。其目的是为了确保测试能覆盖尽量多的代码,以提高测试的可靠性。代码覆盖有多种评判方法,代码行覆盖就是其中的一种,即一种好的代码覆盖测试方法,应该确保测试能覆盖尽量多的代码行,并明确获知已覆盖的和未覆盖的代码行。现有的代码覆盖测试方法主要有两种,如下:1、编译器支持:在编译代码的时候,通过指定特殊的编译参数,编译器会生成一个特殊版本的二进制文件,这个二进制文件在每个可执行的代码基本块中插入了特殊的指令,这些特殊的指令会完成一定的功能来记录这个代码基本块已经被执行过了,比如,一般可以通过写一个文件来记录代码的覆盖信息。2、编译时插入桩代码:首先,需要获得被测试程序的源代码,其次,在编译之前,对该源代码进行扫描,并在正确的位置插入桩代码。其中,桩代码是一种代码片段,能够完成某种记录功能,记录下本行代码被执行到了。该方案一般也是通过写一个文件来记录代码的覆盖信息。在对现有技术的研究和实践过程中,本专利技术的专利技术人发现,现有的这两种方案的测试代码的二进制文件都发生了实质性改动,因此,测试的可靠性不佳。
技术实现思路
本专利技术实施例提供一种代码覆盖测试方法、装置和系统,可以提高测试的可靠性,不但适用于普通的应用程序,而且适用于包括驱动程序的操作系统内核程序,避免测试时系统蓝屏和死机情况。一种代码覆盖测试方法,包括:获取源代码编译后产生的二进制文件和符号表;根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的函数的位置;在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所述二进制文件加载到内存中的映像设置调试点;根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息;利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行。一种代码覆盖测试装置,包括:获取单元,用于获取源代码编译后产生的二进制文件和符号表;解析单元,用于根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的函数的位置;设置单元,用于在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所述二进制文件加载到内存中的映像设置调试点;处理单元,用于根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息;转换单元,用于利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行。一种通信系统,包括本专利技术实施例提供的任一种代码覆盖测试装置。本专利技术实施例采用获取源代码编译后产生的二进制文件和符号表,并根据该符号表对二进制文件进行解析,以确定每个源代码所定义的函数的位置,然后在该二进制文件被加载到内存但未被执行时,根据函数的位置为该二进制文件加载到内存中的映像设置调试点,根据该调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息,最后利用符号表将该代码基本块的相关信息转换成代码行信息,从而获得测试所覆盖的代码行。由于该方案只在二进制文件加载到内存中的映像设置调试点,并不对二进制文件本身作实质性改动,因此,可以保证实际发布运行的代码编译出的二进制文件和测试所用的二进制文件是同一个文件,大大提高了测试的可靠性,而且,由于设置的是调试点,所以对代码运行的实质影响也极小。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例提供的代码覆盖测试方法的流程图;图2本专利技术实施例提供的代码覆盖测试方法的另一流程图;图3是本专利技术实施例提供的代码覆盖测试装置的结构示意图;图4是本专利技术实施例提供的终端的结构示意图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供一种代码覆盖测试方法、装置和系统。以下分别进行详细说明。实施例一、本专利技术实施例将从代码覆盖测试装置的角度进行描述,该代码覆盖测试装置具体可以集成在终端中,该终端具体可以为智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面3)播放器、膝上型便携计算机和台式计算机等等。一种代码覆盖测试方法,包括:获取源代码编译后产生的二进制文件和符号表,根据该符号表对二进制文件进行解析,以确定每个源代码所定义的函数的位置,在该二进制文件被加载到内存但未被执行时,根据函数的位置为该二进制文件加载到内存中的映像设置调试点,根据该调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息;利用符号表将该代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行。如图1所示,具体流程可以如下:101、获取源代码编译后产生的二进制文件和符号表。其中,该二进制文件和符号表可以由编译器对需要进行测试的源代码进行编译后得到,即其中,二进制文件指的是源代码编译以后得到的二进制可执行文件。102、根据步骤101获取到的符号表对二进制文件进行解析,以确定每个源代码所定义的函数的位置,其中,该函数的位置指的是函数在编译之后的实际位置。103、在二进制文件被加载到内存但未被执行时,根据函数的位置为二进制文件加载到内存中的映像设置调试点。例如,具体可以根据函数的位置,在二进制文件加载到内存中的映像中的每个函数的开头位置插入一条调试中断指令。即在每个跳转点上设置调试点,比如在每个跳转点上插入一条调试中断指令。此时,保存该位置上原有的内容,以便后续可以恢复原样。104、根本文档来自技高网...

【技术保护点】
一种代码覆盖测试方法,其特征在于,包括:获取源代码编译后产生的二进制文件和符号表;根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的函数的位置;在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所述二进制文件加载到内存中的映像设置调试点;根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息;利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行。

【技术特征摘要】
1.一种代码覆盖测试方法,其特征在于,包括:
获取源代码编译后产生的二进制文件和符号表;
根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的
函数的位置;
在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所
述二进制文件加载到内存中的映像设置调试点;
根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码
基本块的相关信息;
利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得
测试所覆盖的代码行。
2.根据权利要求1所述的方法,其特征在于,所述根据所述调试点确定执
行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息,包括:
在调试中断,且确定所述中断是因所述调试点的设置而产生时,对引起所
述中断的调试点的后面的代码进行指令解码,直至发现跳转点;
将引起所述中断的调试点与所述跳转点之间的代码作为一个执行过的代
码基本块,将执行过的代码基本块的相关信息记录在在内存中的基本块信息表
中。
3.根据权利要求1所述的方法,其特征在于,所述将执行过的代码基本块
的相关信息记录在在内存中的基本块信息表中,包括:
将执行过的代码基本块的相关信息记录在在不分页内存中的基本块信息
表中。
4.根据权利要求2或3所述的方法,其特征在于,
所述根据所述函数的位置为所述二进制文件加载到内存中的映像设置调
试点,包括:根据所述函数的位置,在所述二进制文件加载到内存中的映像中
的每个函数的开头位置插入一条调试中断指令;
所述在调试中断,且确定所述中断是因所述调试点的设置而产生时,对引
起所述中断的调试点的后面的代码进行指令解码,直至发现跳转点,包括:在
调试中断,且确定所述中断是因插入的调试中断指令而产生时,对引起所述中

\t断的调试中断指令的后面的代码进行指令解码,直至发现跳转指令。
5.根据权利要求4所述的方法,其特征在于,若所述跳转指令为解码得到
的,则所述发现跳转指令之后,还包括:
若所述跳转指令为直接跳转指令,则在确定所述基本块信息表中不存在以
所述跳转指令的跳转目的为开始地址的代码基本块时,在所述跳转指令所对应
的跳转目的位置插入一条调试中断指令;
若所述跳转指令为间接跳转指令,则将所述跳转指令替换为一条调试中断
指令。
6.根据权利要求4所述的方法,其特征在于,所述将执行过的代码基本块
的相关信息记录在在内存中的基本块信息表中之后,还包括:
删除所述插入的调试中断指令。
7.根据权利要求1至3任一项所述的方法,其特征在于,所述代码基本块
的相关信息包括代码基本块的开始地址和结束地址,则所述利用所述符号表将
所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行,
包括:
利用所述符号表将所述代码基本块的开始地址和结束地址转换成代码行
信息,以获得测试所覆盖的代码行...

【专利技术属性】
技术研发人员:谭文
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

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

1