CN104375941A - 可执行程序测试用例集二进制代码覆盖率自动化评估方法 - Google Patents
可执行程序测试用例集二进制代码覆盖率自动化评估方法 Download PDFInfo
- Publication number
- CN104375941A CN104375941A CN201410758886.6A CN201410758886A CN104375941A CN 104375941 A CN104375941 A CN 104375941A CN 201410758886 A CN201410758886 A CN 201410758886A CN 104375941 A CN104375941 A CN 104375941A
- Authority
- CN
- China
- Prior art keywords
- fundamental block
- executable program
- binary code
- code coverage
- coverage rate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 87
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000011511 automated evaluation Methods 0.000 title abstract 3
- 238000004458 analytical method Methods 0.000 claims abstract description 33
- 230000008569 process Effects 0.000 claims abstract description 29
- 230000003068 static effect Effects 0.000 claims abstract description 15
- 238000001914 filtration Methods 0.000 claims abstract description 5
- 230000008878 coupling Effects 0.000 claims description 5
- 238000010168 coupling process Methods 0.000 claims description 5
- 238000005859 coupling reaction Methods 0.000 claims description 5
- 238000005516 engineering process Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 201000004569 Blindness Diseases 0.000 description 1
- 241000219793 Trifolium Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000035800 maturation Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种可执行程序测试用例集二进制代码覆盖率自动化评估方法,包括:第一步骤,执行对具有二进制代码表达形式的可执行程序的静态分析,在静态分析中,将二进制代码表达形式通过反汇编转换为汇编指令表达形式,随后对具有汇编指令表达形式的可执行程序进行基本块划分;第二步骤,利用测试用例执行程序过程的动态分析,在动态分析中执行插桩处理以捕获执行轨迹,并在插桩处理中执行过滤操作以进行基本块过滤以去除可执行程序的外部指令;第三步骤,利用可执行程序的虚拟内存地址通过匹配第一步骤的静态分析结果与第二步骤的动态分析结果来评估测试用例集的二进制代码覆盖率。
Description
技术领域
本发明涉及计算机领域,更具体地说,本发明涉及一种可执行程序的测试用例集二进制代码覆盖率自动化评估方法。
背景技术
代码覆盖是通过人工或工具生成的测试用例能够让被测程序达到或执行的过程状态的数量,这是研究人员在测试领域进行开拓性研究的一个重要概念。代码覆盖率是一种用于描述通过测试用例对程序进行测试所达到的程度的度量。它是软件开发以及测试人员经常用来决定针对应用程序的测试是否充分的依据之一,也是评估测试质量的重要指标。
可执行程序指加载到内存中可以完成指定任务的文件。可执行程序由二进制代码构成,包含文件的基本信息以及可执行的指令集合。可执行程序由源代码通过编译器生成。源代码需要先通过编译操作生成目标代码,再将目标代码进行链接操作后得到可执行程序。
通常情况下,对程序的测试用例集代码覆盖率的评估需要在拥有源代码的基础上,在源代码中添加调试代码以获取测试用例执行时的测试用例集代码覆盖信息。在实际工作中,由于可能存在商业机密,软件的源代码并非公开,测试人员无法直接对软件的源代码进行测试,这极大限制了面向源代码的测试用例集代码覆盖技术的使用。另外,源代码的测试用例集代码覆盖情况和由源代码生成的可执行程序的测试用例集二进制代码覆盖情况并不一定相同。这是由于由源代码生成可执行程序的过程中,编译器可能对其进行了编译优化,修改了其中某些代码的语义。因此,在需要评估可执行程序的测试用例集二进制代码覆盖率的场合下,不能用源代码覆盖率替代。因而可执行程序的测试用例集二进制代码覆盖相关技术的研究对实际测试工作来说是很有需要的。
对可执行程序的测试用例集二进制代码覆盖率评估有较大难度,目前尚未有系统的方法进行指导。传统的测试用例集代码覆盖率评估更多的面向源代码层面,源代码层面的代码覆盖率分析依赖于编程语言。例如,目前较为成熟的面向C、C++的代码覆盖率评估的工具或商业软件:基于gcc调试信息的Gcov工具、Lcov工具;IBM面向单元测试的覆盖率测试工具PureCoverage等。目前面向Java的代码覆盖率评估工具或商业软件:印度的Raghu等研究人员开发的JavaCode Coverage工具;Cenqua公司商业化Java测试工具Clover等。可执行程序的测试用例集二进制代码覆盖率评估依赖于形成可执行程序的二进制代码,人工解读二进制代码较为困难,一般转换成语义相同的可读语言,如汇编指令。目前尚未出现通过分析汇编指令评估测试用例集代码覆盖率的自动化系统方案或成熟的工具支持。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种可执行程序的测试用例集二进制代码覆盖率自动化评估方法,其能够结合针对可执行程序的静态分析与动态分析,自动化评估测试用例集的二进制代码覆盖率。
为了实现上述技术目的,根据本发明,提供了一种可执行程序测试用例集二进制代码覆盖率自动化评估方法,包括:
第一步骤:执行对具有二进制代码表达形式的可执行程序的静态分析,在静态分析中,将二进制代码表达形式通过反汇编转换为汇编指令表达形式,随后对具有汇编指令表达形式的可执行程序进行基本块划分;
第二步骤:利用测试用例执行程序过程的动态分析,在动态分析中执行插桩处理以捕获执行轨迹,并在插桩处理中执行过滤操作以进行基本块过滤以去除可执行程序的外部指令;
第三步骤:利用可执行程序的虚拟内存地址通过匹配第一步骤的静态分析结果与第二步骤的动态分析结果来评估测试用例集的二进制代码覆盖率。
优选地,第一步骤中的基本块划分包括:对通过反汇编转换得到的汇编文件进行一次顺序扫描,寻找基本块的入口和基本块的出口,并记录基本块信息,所述基本块信息包括基本块的入口以及基本块的出口。
优选地,基本块的入口是基本块的第一条汇编指令,基本块的出口是基本块的最后一条汇编指令。
优选地,在第二步骤中,过滤操作包括:对于测试用例执行过程覆盖到的每一个基本块,如果基本块的入口虚拟内存地址处于可执行程序的内部指令范围,则记录基本块信息作为执行轨迹的一部分。
优选地,如果基本块的入口虚拟内存地址不处于可执行程序的内部指令范围,则丢弃该基本块信息而不记录基本块信息作为执行轨迹的一部分。
优选地,第一步骤得到的可执行程序的基本块信息以键值对形式存储;第二步骤中得到的执行轨迹中的基本块信息以键值对形式存储;而且在第三步骤中通过将第一步骤得到的可执行程序的基本块信息的键值对与第二步骤中得到的执行轨迹中的基本块信息的键值对进行对比统计来确定程序运行过程中覆盖的基本块。
源码语义并非等价于编译后发布的可执行程序的指令语义,可执行程序的测试用例集二进制代码覆盖率评估相对于面向源代码的评估更能体现测试用例集代码覆盖的真实情况。因此,本发明的该方法相对于传统面向源代码的代码覆盖率评估有更高的准确性。该方法能确定由测试用例驱动程序执行的代码覆盖情况。本发明设计二进制代码覆盖率评估的流程,并将其自动化。该方法的评估结果提供了分析测试用例质量的必要数据,从而可进一步分析以提高测试用例的质量。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1示意性地示出了根据本发明优选实施例的可执行程序测试用例集二进制代码覆盖率自动化评估方法的流程框架图。
图2示意性地示出了根据本发明优选实施例的采用的划分基本块实例图。
需要说明的是,附图用于说明本发明,而非限制本发明。注意,表示结构的附图可能并非按比例绘制。并且,附图中,相同或者类似的元件标有相同或者类似的标号。
具体实施方式
为了使本发明的内容更加清楚和易懂,下面结合具体实施例和附图对本发明的内容进行详细描述。
本发明提出了一种可执行程序10的测试用例集二进制代码覆盖率评估流程,采用匹配可执行程序的静态分析结果与测试用例集参与的动态分析结果评估二进制代码覆盖率。
图1示意性地示出了根据本发明优选实施例的可执行程序测试用例集二进制代码覆盖率自动化评估方法的流程框架图。如图1所示,根据本发明优选实施例的可执行程序测试用例集二进制代码覆盖率自动化评估方法涵盖如下三个步骤:
第一步骤S1:执行对具有二进制代码表达形式的可执行程序10的静态分析,在静态分析中,将二进制代码表达形式通过反汇编S10转换为汇编指令表达形式,随后对具有汇编指令表达形式的可执行程序10(即,汇编文件)进行基本块划分S11(例如,根据基本块的定义对可执行程序10进行基本块划分);
第二步骤S2:利用测试用例20执行程序过程的动态分析,在动态分析中执行插桩处理S20以捕获执行轨迹,并在插桩处理S20中执行过滤操作S21以进行基本块过滤以去除可执行程序10的外部指令;
第三步骤S3:利用可执行程序10的虚拟内存地址通过匹配第一步骤S1的静态分析结果与第二步骤S2的动态分析结果来评估测试用例集的二进制代码覆盖率。
下面将描述本发明的具体实施示例。
在具体实施例中,第一步骤S1中的对可执行程序的静态分析包括:
反汇编:
对可执行程序的静态分析是指在不运行可执行程序的状态下(即离线状态)对可执行程序的内容进行分析。可执行程序的内容是二进制代码。二进制代码难以分析,通常将二进制代码的表达形式通过反汇编技术转换为汇编指令的表达形式。将可执行程序进行静态分析的效率依赖于反汇编技术的准确度与速度。反汇编技术较为成熟,目前较为主要的两种反汇编算法是线性扫描反汇编和递归下降反汇编,也有结合两种算法的改进算法。采用成熟的反汇编技术将可执行程序的二进制代码转换为可分析的汇编指令。
基本块划分:
基本块是程序顺序执行的语句序列,其中只有一个入口和一个出口,入口就是块的第一个语句,出口就是块的最后一个语句。对一个基本块来说,执行时只从其入口进入,从其出口退出。根据定义,程序正常执行到某个基本块时,会将基本块中包含的指令毫无例外的顺序执行一遍,因此覆盖了该基本块就等于覆盖了基本块中包含的所有指令。可执行程序的汇编指令数量庞大,这将影响测试用例代码覆盖的评估效率。将汇编指令集合根据基本块定义以基本块为单位划分程序可以大大提高评估效率。
在具体实施例中,基本块划分方法可以包括:对通过反汇编技术得到的汇编文件进行一次顺序扫描,寻找基本块的入口(基本块的第一条汇编指令)与出口(基本块的最后一条汇编指令),并记录基本块的入口、出口、块长度(指令数量)等信息。
图2示出了划分基本块实例图。
在具体实施例中,以下三种指令可以作为基本块的入口:
代码片段标签(_start,_main等出现在代码片段前的标志)的下一条指令。
CALL指令在指令顺序流的下一条指令。
1.跳转语句在指令顺序流的下一条指令。
在具体实施例中,以下四种指令可以作为基本块的出口:
1.代码片段的最后一条指令。
2.CALL指令。
3.跳转指令。
4.返回指令。
在具体实施例中,第二步骤S2中利用测试用例执行程序过程的动态分析可以包括:
(a)插桩处理S20:
插桩是在执行过程中或完成链接操作后的程序中插入额外的代码以获得程序在执行时行为的信息的技术。采用插桩技术可以获取测试用例执行程序过程中的代码覆盖情况。目前二进制代码插桩技术较为成熟,且有开源或半开源工具支持,如Dyninst、Pin、Valgrind等。对可执行程序的插桩一般过程如下:
1.初始化插桩引擎,将参数输入到引擎中,参数包括可执行程序、用例信息等。
2.将自定义插桩函数注册到插桩例程中。
3.确定二进制代码中调用插桩例程的位置。
4.向引擎注册一个结束函数,在可执行程序执行结束完毕时调用该函数。
5.启动插桩引擎。
以基本块为单位检测测试用例执行可执行程序时的代码覆盖情况,即记录测试用例执行可执行程序过程中覆盖的基本块信息,插桩粒度为指令级。自定义插桩函数伪代码如下:
程序执行某条指令后,首先判断当前执行的汇编指令类型,如该类型属于基本块的出口指令类型,则将该指令的下一条指令作为下一个基本块的入口。然后保存当前基本块的信息,继续执行程序。整个过程在程序执行过程中迭代执行,被记录的基本块是程序执行过程中覆盖的基本块。基本块信息以键值对存储,键为基本块的入口指令地址,值为基本块其他信息的组合:包括基本块的出口地址、基本块大小、基本块的编号以及被覆盖的次数等。
(b)基本块过滤的过滤操作S21:
可执行程序在执行过程中可能会执行到动态链接库指令或系统调用指令。动态链接库是可以被多个程序共享的程序模块,其中封装了一些可以被共享的资源或例程,其链接方式是动态的。系统调用是运行在用户空间的程序向操作系统请求更高权限的服务的方式,它将应用程序的请求传给内核,调用相应的内核函数完成所需的处理,把处理结果返回给应用程序。两种指令并非可执行程序的内部指令,执行过程中记录这些指令将会影响代码覆盖率评估的准确性。因此,需要过滤执行过程中遇到的动态链接库指令或系统调用指令,可通过这些指令的特殊地址进行过滤。
以Linux32位操作系统为例,对于每一个进程,操作系统都会为其分配4GB的虚拟内存,而并不是真实的物理内存。在相同环境下,每个进程内存分配是相对固定的。因此,可以根据指令地址分辨指令属于程序的内部指令还是外部指令。例如,虚拟内存地址中,0xc0000000-0xFFFFFFFF地址区段为内核空间,程序在系统调用后就在内核空间中执行。0x00000000-0xbFFFFFFF地址区段为用户空间,其中有一块内存映射区,区中包含载入的动态链接库指令。执行程序载入的动态链接库地址分布于0xb7000000–0xb8000000这个区段。可执行程序代码段起始地址为0x08048000,代码段的大小不固定。从0x08048000内存地址开始连续分配的内存段依次是代码段、数据段、BSS段、堆,堆的内存地址不超过0x40000000。在所有执行指令中根据内存地址的范围就可以分辨出该程序的代码段指令,作为内部指令。而不再这个地址范围内的指令则为执行程序的外部指令,可过滤。
过滤操作S21在插桩处理S20中执行:对于测试用例执行过程覆盖到的每一个基本块,如果基本块的入口虚拟内存地址处于可执行程序的内部指令范围则记录基本块信息作为执行轨迹的一部分,否则丢弃该基本块信息。
在具体实施例中,第三步骤S3中的测试用例集二进制代码覆盖率评估可包括:
可执行程序通过第一步骤S1生成的汇编文件中,汇编指令地址为虚拟内存地址。测试用例通过第二步骤S2获取执行过程中覆盖的指令,其指令地址也是虚拟内存地址。同一个程序无论处于未执行状态还是执行状态,为其分配的4GB(或其它适当大小的)虚拟内存空间中指令地址分布是固定的。利用这一特点,可将对可执行程序由上述两个步骤获取的指令信息通过虚拟内存地址的匹配取得代码覆盖信息,进而评估测试用例的代码覆盖率。
第一步骤S1得到的可执行程序的基本块信息以键值对形式存储;第二步骤S2中得到的执行轨迹中的基本块信息以键值对形式存储;而且在第三步骤中通过将第一步骤S1得到的可执行程序的基本块信息的键值对与第二步骤S2中得到的执行轨迹中的基本块信息的键值对进行对比统计来确定程序运行过程中覆盖的基本块(即,程序执行结束后在第三步骤S3中通过键值对的对比统计可以确定程序运行过程中覆盖过哪些基本块)。
二进制代码层面可计算两种覆盖率:基本块覆盖率和指令集覆盖率。设用例在可执行程序的执行过程中覆盖的基本块集合与指令集合分别为BBcover,,可执行程序的基本块集合与指令集合分别为,,则基本块覆盖率及指令集覆盖率的计算公式如下:
其中,第一步骤S1可以得到可执行程序的所有内部指令的基本块信息,其中包括每个基本块包含的指令数量;第二步骤S2中记录测试用例执行过程中覆盖的基本块。对每个基本块按正整数编号,记第i个基本块所包含的指令数量为。则公式中的可以通过以下公式得到。同样的方法可以计算出[Instcover]。
由第一步骤S1得到BBtotal,每个基本块所包含的指令数量,然后通过第二步骤S2执行测试用例获取测试用例覆盖的基本块信息,统计后得到BBcover。根据上述公式计算出测试用例的代码覆盖率BBC和INC。
对于测试用例集合的代码覆盖率评估,将测试用例集中每个测试用例的基本块覆盖信息进行合并。对每个基本块都按正整数编号,可以根据它们的编号区分不同的基本块,进而基本块的覆盖情况可以用整数集合表示。因此,对于用例集合的基本块覆盖情况就可以通过整数集合之间的逻辑运算表示。例如某个二进制代码一共有500个基本块,对基本块编号后的基本块集合BBtotal={1,2,3,...,499,500}。用例A执行该二进制代码后覆盖了5个基本块,设覆盖的基本块集合BBcover:A={1,2,4,8,200};用例B执行该二进制代码后覆盖了7个基本块,设覆盖的基本块集合BBcover:B={1,3,4,16,32,64,200}。用例A与用例B一共覆盖了9个不同的基本块,即BBcover:A∪BBcover:B={1,2,3,4,8,16,32,64,200};它们都覆盖了3个同样的基本块,即BBcover:A∩BBcover:B={1,4,200}。对于用例集A{a1,a2,a3,...,an},其基本块的覆盖集合。通过BBC或INC的计算公式可得到用例集合A的二进制代码覆盖率。
【具体实例】
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将描述本发明方案的应用实施例,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的代码覆盖率评估方法可以获得对可执行程序进行测试的测试用例集的二进制代码覆盖率信息。通过该方案开发的系统可以将二进制代码覆盖率的评估流程自动化。系统导入可执行程序进行静态分析,然后导入测试用例集,测试用例集在系统中执行该程序后可得到相应的二进制代码覆盖率评估结果。
以linux系统的某个ELF格式程序x为例。对程序x进行反汇编,得到x程序的反汇编文件。扫描反汇编文件,以本发明描述的基本块划分准则划分出500个基本块,令基本块集合为Cx,将这些基本块按照整数编号每个基本块均包含2条指令。测试用例集Sx包含两个测试用例s1和s2。通过插桩得到两个测试用例各自的基本块覆盖情况将通过静态分析得到的Cx与通过动态分析得到的s1、s2的基本块覆盖情况进行匹配,采用公式计算得到BBCs1=1.0%,BBCs2=0.8%,INCs1=1.0%,INCs2=0.8%。测试用例集的基本块覆盖情况 通过公式计算得到BBCsx=1.2%,INCsx=1.2%。最终通过本发明获得测试用例集Sx的二进制代码覆盖率:基本块覆盖率为1.2%,指令集覆盖率为1.2%。
该发明可应用于模糊测试中。模糊测试是测试用例导向的测试方法,其实现容易,但由于测试用例生成的数量和质量的限制,模糊测试方法存在比较明显的缺陷。模糊测试生成测试用例的策略盲目性较大,测试用例在代码覆盖方面的多样性不能保证,不能确定大量的测试用例是否有效;执行模糊测试时,存在不能确定模糊测试何时终止的问题。采用该技术评估测试用例覆盖率可作为指导模糊测试生成高覆盖率测试用例的量化标准,作为评价模糊测试质量的重要依据,并且能克服当前几个模糊测试仍然存在的问题。例如对于x程序通过模糊测试生成的用例集合Sx,若设置某次模糊测试终止条件为测试用例集基本块覆盖率1.0%,因为Sx的基本块覆盖率大于这个条件,模糊测试可以终止。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
此外,需要说明的是,除非特别指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (6)
1.一种可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于包括:
第一步骤:执行对具有二进制代码表达形式的可执行程序的静态分析,在静态分析中,将二进制代码表达形式通过反汇编转换为汇编指令表达形式,随后对具有汇编指令表达形式的可执行程序进行基本块划分;
第二步骤:利用测试用例执行程序过程的动态分析,在动态分析中执行插桩处理以捕获执行轨迹,并在插桩处理中执行过滤操作以进行基本块过滤以去除可执行程序的外部指令;
第三步骤:利用可执行程序的虚拟内存地址通过匹配第一步骤的静态分析结果与第二步骤的动态分析结果来评估测试用例集的二进制代码覆盖率。
2.根据权利要求1所述的可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于,第一步骤中的基本块划分包括:对通过反汇编转换得到的汇编文件进行一次顺序扫描,寻找基本块的入口和基本块的出口,并记录基本块信息,所述基本块信息包括基本块的入口以及基本块的出口。
3.根据权利要求1或2所述的可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于,基本块的入口是基本块的第一条汇编指令,基本块的出口是基本块的最后一条汇编指令。
4.根据权利要求1或2所述的可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于,在第二步骤中,过滤操作包括:对于测试用例执行过程覆盖到的每一个基本块,如果基本块的入口虚拟内存地址处于可执行程序的内部指令范围,则记录基本块信息作为执行轨迹的一部分。
5.根据权利要求1或2所述的可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于,如果基本块的入口虚拟内存地址不处于可执行程序的内部指令范围,则丢弃该基本块信息而不记录基本块信息作为执行轨迹的一部分。
6.根据权利要求1或2所述的可执行程序测试用例集二进制代码覆盖率自动化评估方法,其特征在于,第一步骤得到的可执行程序的基本块信息以键值对形式存储;第二步骤中得到的执行轨迹中的基本块信息以键值对形式存储;而且在第三步骤中通过将第一步骤得到的可执行程序的基本块信息的键值对与第二步骤中得到的执行轨迹中的基本块信息的键值对进行对比统计来确定程序运行过程中覆盖的基本块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410758886.6A CN104375941B (zh) | 2014-12-11 | 2014-12-11 | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410758886.6A CN104375941B (zh) | 2014-12-11 | 2014-12-11 | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104375941A true CN104375941A (zh) | 2015-02-25 |
CN104375941B CN104375941B (zh) | 2017-09-22 |
Family
ID=52554876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410758886.6A Active CN104375941B (zh) | 2014-12-11 | 2014-12-11 | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104375941B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868107A (zh) * | 2016-03-24 | 2016-08-17 | 航天科技控股集团股份有限公司 | 一种汽车仪表测试用例集生成方法 |
CN106844221A (zh) * | 2017-03-10 | 2017-06-13 | 深圳航天科技创新研究院 | 一种实现虚拟验证系统覆盖率分析的方法 |
CN107391375A (zh) * | 2017-07-25 | 2017-11-24 | 北京计算机技术及应用研究所 | 执行c25汇编语言时获取语句和分支覆盖率的方法 |
CN107678967A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
TWI617983B (zh) * | 2016-12-19 | 2018-03-11 | 聯發科技股份有限公司 | 代碼覆蓋率處理方法 |
CN108563580A (zh) * | 2017-12-27 | 2018-09-21 | 贵阳忆芯科技有限公司 | 介质接口控制器微码执行路径提取方法 |
CN108920954A (zh) * | 2018-06-28 | 2018-11-30 | 中国科学院软件研究所 | 一种恶意代码自动化检测平台及方法 |
US10248554B2 (en) | 2016-11-14 | 2019-04-02 | International Business Machines Corporation | Embedding profile tests into profile driven feedback generated binaries |
CN111881039A (zh) * | 2020-07-24 | 2020-11-03 | 广州大学 | 模糊测试的种子处理、模糊测试方法、系统和存储介质 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN117785671A (zh) * | 2023-12-13 | 2024-03-29 | 北京水木羽林科技有限公司 | 一种基于inline-hook patch的x86黑盒收集覆盖率方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
US20110107307A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Collecting Program Runtime Information |
CN104123218A (zh) * | 2013-04-23 | 2014-10-29 | 腾讯科技(深圳)有限公司 | 一种代码覆盖测试方法、装置和系统 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
-
2014
- 2014-12-11 CN CN201410758886.6A patent/CN104375941B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101464829A (zh) * | 2007-12-18 | 2009-06-24 | 珠海金山软件股份有限公司 | 确定代码覆盖率的方法、测试装置 |
US20110107307A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Collecting Program Runtime Information |
CN104123218A (zh) * | 2013-04-23 | 2014-10-29 | 腾讯科技(深圳)有限公司 | 一种代码覆盖测试方法、装置和系统 |
CN104199773A (zh) * | 2014-09-03 | 2014-12-10 | 腾讯科技(深圳)有限公司 | 获取代码覆盖信息的方法及装置 |
Non-Patent Citations (1)
Title |
---|
姚伟平等: "二进制代码覆盖率评估系统的设计与实现", 《计算机工程与设计》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868107A (zh) * | 2016-03-24 | 2016-08-17 | 航天科技控股集团股份有限公司 | 一种汽车仪表测试用例集生成方法 |
US10248554B2 (en) | 2016-11-14 | 2019-04-02 | International Business Machines Corporation | Embedding profile tests into profile driven feedback generated binaries |
TWI617983B (zh) * | 2016-12-19 | 2018-03-11 | 聯發科技股份有限公司 | 代碼覆蓋率處理方法 |
CN108205495A (zh) * | 2016-12-19 | 2018-06-26 | 联发科技股份有限公司 | 代码覆盖率处理方法 |
CN106844221A (zh) * | 2017-03-10 | 2017-06-13 | 深圳航天科技创新研究院 | 一种实现虚拟验证系统覆盖率分析的方法 |
CN107391375A (zh) * | 2017-07-25 | 2017-11-24 | 北京计算机技术及应用研究所 | 执行c25汇编语言时获取语句和分支覆盖率的方法 |
CN107678967A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
WO2019071929A1 (zh) * | 2017-10-09 | 2019-04-18 | 武汉斗鱼网络科技有限公司 | 单元测试覆盖率生成方法、装置、可读存储介质及设备 |
CN108563580A (zh) * | 2017-12-27 | 2018-09-21 | 贵阳忆芯科技有限公司 | 介质接口控制器微码执行路径提取方法 |
CN108563580B (zh) * | 2017-12-27 | 2024-02-23 | 贵阳忆芯科技有限公司 | 介质接口控制器微码执行路径提取方法 |
CN108920954A (zh) * | 2018-06-28 | 2018-11-30 | 中国科学院软件研究所 | 一种恶意代码自动化检测平台及方法 |
CN108920954B (zh) * | 2018-06-28 | 2020-08-04 | 中国科学院软件研究所 | 一种恶意代码自动化检测平台及方法 |
CN111881039A (zh) * | 2020-07-24 | 2020-11-03 | 广州大学 | 模糊测试的种子处理、模糊测试方法、系统和存储介质 |
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN116775127B (zh) * | 2023-05-25 | 2024-05-28 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN117785671A (zh) * | 2023-12-13 | 2024-03-29 | 北京水木羽林科技有限公司 | 一种基于inline-hook patch的x86黑盒收集覆盖率方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104375941B (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104375941A (zh) | 可执行程序测试用例集二进制代码覆盖率自动化评估方法 | |
Pereira et al. | SPELLing out energy leaks: Aiding developers locate energy inefficient code | |
CN100442245C (zh) | 用于分析运行时存储器访问错误的方法和系统 | |
EP3387536B1 (en) | Method and device for non-intrusively collecting function trace data | |
CN104156311B (zh) | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 | |
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
US20080028378A1 (en) | Utilizing prior usage data for software build optimization | |
CN102063328B (zh) | 一种用于检测中断驱动型程序数据竞争的系统 | |
CN111756575A (zh) | 存储服务器的性能分析方法及装置、电子设备 | |
CN109145534B (zh) | 针对软件虚拟机保护的反混淆系统及方法 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN107526970B (zh) | 基于动态二进制平台检测运行时程序漏洞的方法 | |
CN103679038B (zh) | 并行程序共享数据类漏洞的检测方法及系统 | |
CN110419031B (zh) | 用于微控制器程序的代码覆盖范围跟踪 | |
CN103218297A (zh) | 测试数据的筛选方法及装置 | |
JPH0748182B2 (ja) | プログラム・エラー検出方法 | |
CN113836023B (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
Pheng et al. | Dynamic data structure analysis for Java programs | |
CN107247663B (zh) | 一种冗余变异体识别方法 | |
Taniguchi et al. | JTDog: a gradle plugin for dynamic test smell detection | |
US20130152053A1 (en) | Computer memory access monitoring and error checking | |
CN114996111A (zh) | 一种配置项对软件系统性能影响的分析方法及系统 | |
CN112162921B (zh) | 一种工业自动化测试与控制系统 | |
Zimmerle et al. | Reactive-based complex event processing: An overview and energy consumption analysis of cep. js | |
Wang et al. | Non-intrusive structural coverage for objective caml |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |