【技术实现步骤摘要】
本专利技术涉及通信
,具体涉及一种代码覆盖测试方法、装置和系统。
技术介绍
代码覆盖测试,指的是用测试的方法来运行代码,并统计在测试中,监控运行到了(即被覆盖)的代码的测试方法。其目的是为了确保测试能覆盖尽量多的代码,以提高测试的可靠性。代码覆盖有多种评判方法,代码行覆盖就是其中的一种,即一种好的代码覆盖测试方法,应该确保测试能覆盖尽量多的代码行,并明确获知已覆盖的和未覆盖的代码行。现有的代码覆盖测试方法主要有两种,如下:1、编译器支持:在编译代码的时候,通过指定特殊的编译参数,编译器会生成一个特殊版本的二进制文件,这个二进制文件在每个可执行的代码基本块中插入了特殊的指令,这些特殊的指令会完成一定的功能来记录这个代码基本块已经被执行过了,比如,一般可以通过写一个文件来记录代码的覆盖信息。2、编译时插入桩代码:首先,需要获得被测试程序的源代码,其次,在编译之前,对该源代码进行扫描,并在正确的位置插入桩代码。其中,桩代码是一种代码片段,能够完成某种记录功能,记录下本行代码被执行到了。该方案一般也是通过写一个文件来记录代码的覆盖信息。在对现有技术的研究和实践过程中,本专利技术的专利技术人发现,现有的这两种方案的测试代码的二进制文件都发生了实质性改动,因此,测试的可靠性不佳。
技术实现思路
本专利技术实施例提供一种代码覆盖测试方法、装置和系统,可以提高测试的可靠性,不但适用于普通的应用程序,而且 ...
【技术保护点】
一种代码覆盖测试方法,其特征在于,包括:获取源代码编译后产生的二进制文件和符号表;根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的函数的位置;在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所述二进制文件加载到内存中的映像设置调试点;根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息;利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行。
【技术特征摘要】
1.一种代码覆盖测试方法,其特征在于,包括:
获取源代码编译后产生的二进制文件和符号表;
根据所述符号表对所述二进制文件进行解析,以确定每个源代码所定义的
函数的位置;
在所述二进制文件被加载到内存但未被执行时,根据所述函数的位置为所
述二进制文件加载到内存中的映像设置调试点;
根据所述调试点确定执行过的代码基本块,并在内存中记录执行过的代码
基本块的相关信息;
利用所述符号表将所述代码基本块的相关信息转换成代码行信息,以获得
测试所覆盖的代码行。
2.根据权利要求1所述的方法,其特征在于,所述根据所述调试点确定执
行过的代码基本块,并在内存中记录执行过的代码基本块的相关信息,包括:
在调试中断,且确定所述中断是因所述调试点的设置而产生时,对引起所
述中断的调试点的后面的代码进行指令解码,直至发现跳转点;
将引起所述中断的调试点与所述跳转点之间的代码作为一个执行过的代
码基本块,将执行过的代码基本块的相关信息记录在在内存中的基本块信息表
中。
3.根据权利要求1所述的方法,其特征在于,所述将执行过的代码基本块
的相关信息记录在在内存中的基本块信息表中,包括:
将执行过的代码基本块的相关信息记录在在不分页内存中的基本块信息
表中。
4.根据权利要求2或3所述的方法,其特征在于,
所述根据所述函数的位置为所述二进制文件加载到内存中的映像设置调
试点,包括:根据所述函数的位置,在所述二进制文件加载到内存中的映像中
的每个函数的开头位置插入一条调试中断指令;
所述在调试中断,且确定所述中断是因所述调试点的设置而产生时,对引
起所述中断的调试点的后面的代码进行指令解码,直至发现跳转点,包括:在
调试中断,且确定所述中断是因插入的调试中断指令而产生时,对引起所述中
\t断的调试中断指令的后面的代码进行指令解码,直至发现跳转指令。
5.根据权利要求4所述的方法,其特征在于,若所述跳转指令为解码得到
的,则所述发现跳转指令之后,还包括:
若所述跳转指令为直接跳转指令,则在确定所述基本块信息表中不存在以
所述跳转指令的跳转目的为开始地址的代码基本块时,在所述跳转指令所对应
的跳转目的位置插入一条调试中断指令;
若所述跳转指令为间接跳转指令,则将所述跳转指令替换为一条调试中断
指令。
6.根据权利要求4所述的方法,其特征在于,所述将执行过的代码基本块
的相关信息记录在在内存中的基本块信息表中之后,还包括:
删除所述插入的调试中断指令。
7.根据权利要求1至3任一项所述的方法,其特征在于,所述代码基本块
的相关信息包括代码基本块的开始地址和结束地址,则所述利用所述符号表将
所述代码基本块的相关信息转换成代码行信息,以获得测试所覆盖的代码行,
包括:
利用所述符号表将所述代码基本块的开始地址和结束地址转换成代码行
信息,以获得测试所覆盖的代码行...
【专利技术属性】
技术研发人员:谭文,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。