CN106294163A - 一种轻量级的代码分支覆盖率检测方法 - Google Patents
一种轻量级的代码分支覆盖率检测方法 Download PDFInfo
- Publication number
- CN106294163A CN106294163A CN201610664607.9A CN201610664607A CN106294163A CN 106294163 A CN106294163 A CN 106294163A CN 201610664607 A CN201610664607 A CN 201610664607A CN 106294163 A CN106294163 A CN 106294163A
- Authority
- CN
- China
- Prior art keywords
- branch
- code
- test
- array
- covering 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.)
- Pending
Links
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
-
- 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/3688—Test management for test execution, e.g. scheduling of test suites
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
本发明是一种轻量级的代码分支覆盖率检测方法,属于软件测试领域。本方法统计被测代码的分支总数N,在被测函数的入口插入代码,定义数组branch[N/K+1],K为机器字长;在每个分支i插入代码branch[i/K]|=1<<(i%K);在被测函数的出口插入代码,输出数组branch的值;输入测试用例集合,执行测试代码,在测试完成后,统计数组branch中所有元素对应二进制位中1的个数n,获得代码分支覆盖率为n/N。本发明使用1个比特位即可记录1个分支的执行情况,数据量被大幅度的压缩,减少了内存资源的占用,仅在测试程序运行完毕后一次性输出记录结果,大幅度提高测试的执行速度,减少测试的数据量。
Description
技术领域
本发明属于软件测试领域,具体是指一种轻量级的代码分支覆盖率检测方法。
背景技术
白盒测试是软件测试的一种重要的测试方法,在白盒测试中,主要有以下几种代码覆盖率:语句覆盖、分支覆盖(也称判定覆盖)、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
在语句覆盖和分支覆盖中,我们关心的是每一条语句或者每一条分支是否被执行过,因此需要一种检测方法来解决这一情况。
发明内容
本发明提供了一种轻量级的代码分支覆盖率检测方法,可以检测每一条语句或分支在测试中是否被执行过,完成在白盒测试中语句覆盖率和分支覆盖率的检测。
本发明提供的轻量级的代码分支覆盖率检测方法,实现步骤如下:
步骤1,输入被测试函数的代码,统计代码中的分支总数N,并对各分支进行编号0,1,…,N-1。
步骤2,在被测函数的入口插入代码,定义数组branch[N/K+1],并设置数组中的元素均为0。K表示机器字长。
步骤3,对于每个分支i,插入代码:branch[i/K]|=1<<(i%K)。i=0,1,…,N-1。
其中,branch是整型数组;|是按位或运算符,a|=b表示将变量a和b按位或运算后的结果赋值给变量a;<<是左移位运算符,c<<d的结果是将变量c对应的二进制位向左移动d位,右边空缺部分补0。
步骤4,在被测函数的出口插入代码,输出数组branch[N/K+1]的值。
步骤5,输入测试用例集合,执行测试代码,在测试完成后,统计数组branch[N/K+1]中所有元素对应的二进制位为1的个数n,获得代码分支覆盖率为n/N。
本发明的优点与积极效果在于:
(1)在本发明中,使用1个比特位即可记录1个分支的执行情况,数据量被大幅度的压缩,减少了内存资源的占用。
(2)在实际分支中需要插桩的代码非常简单,只需要将分支对应的比特位置1即可。在测试程序运行过程中,不进行数据输出工作,测试程序运行完毕后,再一次性输出记录结果,这样不仅可以大幅度提高测试的执行速度,而且可以大大减少测试的数据量,减少了后期数据给分析的工作量。
(3)由于在测试程序执行的过程中,并不产生数据的输出,所以对于同一个程序测试输出结果是固定的,不会随着测试程序的输入数据规模的扩大而变大。
附图说明
图1是本发明提供的代码分支覆盖率检测原理图;
图2是本发明的代码分支覆盖率检测方法整体流程图;
图3是采用本发明方法在求最大值算法中的实际执行流程图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明可以遵照所述原理由软件编码实现。其工作原理如图1所示。
图1中直角矩形表示测试过程中的数据,圆角矩形表示各种处理和操作。代码的覆盖率检测需要输入两种数据,分别是被测代码和测试所使用的用例集。设置有中间数据测试结果产生,经过最后的分析和计算,即可产生本次测试的分支覆盖率。
图1中①是对被测代码的初步处理,对被测代码进行静态分析,对每一个分支和跳转进行编号,编号从0开始,设记录的分支和跳转的总数为N。下面将分支和跳转统称为分支。
图1中②表示对被测代码的插桩操作,这是本发明的关键操作。本发明只使用1个比特位来记录每个分支的执行情况。比如以32位机器为例,即K=32,使用数组branch[N/32+1]即可完成所需要的记录,数组元素的类型是32位的整型。对于分支编号为i的分支,插入代码
branch[i/32]|=1<<(i%32),
branch是整型数组,每个元素可以记录32个分支的执行情况。这段代码意义就是找到分支对应的比特位,并对其进行置1操作,即将第i%32位置1。下面详细说明这段代码每一步的操作。
(1)i/32是做除法,并且结果保留整数,比如33/32的结果是1。
(2)|是按位或运算符,a|b的结果是将变量a和b的每一个二进制位进行对应位的或运算,比如3(二进制是00000011)和5(二进制是00000101),3|5的结果是7(二进制00000111)。a|=b等同于a=a|b。即将a|b的结果赋值给变量a。
(3)<<是左移位运算符,c<<d的结果是将变量c对应的二进制位向左移动d位,右边空缺部分补0。比如1<<2的结果是4,即将二进制00000001左移2位的结果是二进制00000100。这样上面的代码1<<(i%32)的意思是得到了标号为i的分支对应比特位的位置,比如i=33,1<<(i%32)得到的结果是2。其中的%表示模运算,即求余数。
例如,i=1时,1/32的值是0,对应的代码是branch[0]|=2,将branch数组下标为0的元素第2位置为1,2的二进制是00000010,右数第二位是1。当i=33时,33/32的值是1,对应的代码是branch[1]|=2,是将branch数组下标为1的元素的第2位置为1。对于32位机器,在用二进制表示时为32个比特位,上面是以8位二进制来举例说明的。
这样只要相应的分支执行过后,此分支对应的比特位就会被置1。最后,在函数的每个出口,插入代码,将本函数的branch数组的值全部输出,供下一步计算使用。
图1中③表示执行插桩后的被测代码,执行结束后,可以获得每个函数的branch数组的值。
图1中④表示对于branch数组的进一步计算。具体方法是统计数组branch的所有元素对应二进制位中1的个数n,最终可以得到代码的分支覆盖率BRC=n/N。
图2为本发明的轻量级的代码分支覆盖率检测方法的整体流程示意图,各步骤如下。
步骤1,输入被测试函数的代码,统计代码中的分支总数N,并对各分支进行编号0,1,…,N-1。
步骤2,在被测函数的入口插入代码,用于定义数组branch[N/32+1],并设置数组中的元素均为0。
步骤3,对于每个分支i,插入代码:branch[i/32]|=1<<(i%32)。i=0,1,…,N-1。
步骤4,在被测函数的出口插入代码,用于输出数组branch[N/32+1]的值。
步骤5,输入测试用例集合,执行测试代码,在测试完成后,统计数组branch[N/32+1]中比特位为1的个数n,获得代码分支覆盖率为n/N。
图3是以求最大值算法为例,展示了对代码插桩后的流程图。图中黑色的框图表示原被测代码的执行过程,带点虚线的框图表示根据本发明原理,插入的代码执行流程。因为本例中分支总数较少,为了表示方便,以branch变量代替了原理中的branch数组,基本原理是保持不变的。如图3所示,设置变量branch,初始值为0,在求最大值的过程中一共有4个分支,标号分别为0,1,2,3。当执行某个分支时,例如branch|=1<<1,则将变量branch的第1位置为1。
本发明方法先统计分支的个数,再设置相应的数组branch,然后使用数组branch中的每个元素的比特位来记录分支的执行情况,理论上使用了最少的变量,对于像在开发板或者单片机等内存资源稀缺的环境中,这样做是意义重大的。而且,在每次分支执行的时候,只要对相应的比特位进行置位操作就可以,没有信息的输出。因为计算操作比输出操作要快得多,这样不仅大大加快了执行速度,而且对于输出信息的统计计算也非常简单。相对于直观的统计方法,本发明降低了内存的使用量,同时避免了频繁的输出操作,如果使用在分支中输出信息,将会大大增加程序的运行速度,而且对于输出信息的计算统计也比较本发明的方法复杂。
Claims (1)
1.一种轻量级的代码分支覆盖率检测方法,其特征在于,实现步骤如下:
步骤1,输入被测函数的代码,统计被测代码的分支总数N,并对各分支进行编号0,1,…,N-1;
步骤2,在被测函数的入口插入代码,定义数组branch[N/K+1],并设置数组中的元素均为0;K表示机器字长;
步骤3,对于每个分支i,插入代码:branch[i/K]|=1<<(i%K),i=0,1,…,N-1;
其中,branch是整型数组;|是按位或运算符,a|=b表示将变量a和b按位或运算后的结果赋值给变量a;<<是左移位运算符,c<<d的结果是将变量c对应的二进制位向左移动d位,右边空缺部分补0;
步骤4,在被测函数的出口插入代码,输出数组branch[N/K+1]的值;
步骤5,输入测试用例集合,执行测试代码,在测试完成后,统计数组branch[N/K+1]中所有元素对应的二进制位为1的个数n,获得代码分支覆盖率为n/N。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610664607.9A CN106294163A (zh) | 2016-08-12 | 2016-08-12 | 一种轻量级的代码分支覆盖率检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610664607.9A CN106294163A (zh) | 2016-08-12 | 2016-08-12 | 一种轻量级的代码分支覆盖率检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106294163A true CN106294163A (zh) | 2017-01-04 |
Family
ID=57670350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610664607.9A Pending CN106294163A (zh) | 2016-08-12 | 2016-08-12 | 一种轻量级的代码分支覆盖率检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294163A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107463491A (zh) * | 2017-06-28 | 2017-12-12 | 努比亚技术有限公司 | 一种终端软件测试方法、待测终端及计算机可读存储介质 |
CN109460357A (zh) * | 2018-10-19 | 2019-03-12 | 北京新能源汽车股份有限公司 | 一种代码覆盖率的测试方法、装置和设备 |
CN110209582A (zh) * | 2019-05-31 | 2019-09-06 | 口碑(上海)信息技术有限公司 | 代码覆盖率的统计方法及装置、电子设备、存储介质 |
CN111221721A (zh) * | 2018-11-27 | 2020-06-02 | 中国移动通信集团上海有限公司 | 一种单元测试案例自动化录制和执行方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110289488A1 (en) * | 2010-05-24 | 2011-11-24 | Fujitsu Limited | Generating Test Sets Using Intelligent Variable Selection and Test Set Compaction |
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
CN105224460A (zh) * | 2015-10-23 | 2016-01-06 | 浪潮电子信息产业股份有限公司 | 一种基于插装技术统计测试覆盖率的方法 |
-
2016
- 2016-08-12 CN CN201610664607.9A patent/CN106294163A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110289488A1 (en) * | 2010-05-24 | 2011-11-24 | Fujitsu Limited | Generating Test Sets Using Intelligent Variable Selection and Test Set Compaction |
CN102419731A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | C语言嵌入式软件插桩及动态测试覆盖率信息提取方法 |
CN105224460A (zh) * | 2015-10-23 | 2016-01-06 | 浪潮电子信息产业股份有限公司 | 一种基于插装技术统计测试覆盖率的方法 |
Non-Patent Citations (1)
Title |
---|
李跃飞等: "飞行控制软件测试中的插桩技术", 《北京航空航天大学学报》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107463491A (zh) * | 2017-06-28 | 2017-12-12 | 努比亚技术有限公司 | 一种终端软件测试方法、待测终端及计算机可读存储介质 |
CN109460357A (zh) * | 2018-10-19 | 2019-03-12 | 北京新能源汽车股份有限公司 | 一种代码覆盖率的测试方法、装置和设备 |
CN109460357B (zh) * | 2018-10-19 | 2021-10-29 | 北京新能源汽车股份有限公司 | 一种代码覆盖率的测试方法、装置和设备 |
CN111221721A (zh) * | 2018-11-27 | 2020-06-02 | 中国移动通信集团上海有限公司 | 一种单元测试案例自动化录制和执行方法及装置 |
CN111221721B (zh) * | 2018-11-27 | 2023-09-05 | 中国移动通信集团上海有限公司 | 一种单元测试案例自动化录制和执行方法及装置 |
CN110209582A (zh) * | 2019-05-31 | 2019-09-06 | 口碑(上海)信息技术有限公司 | 代码覆盖率的统计方法及装置、电子设备、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294163A (zh) | 一种轻量级的代码分支覆盖率检测方法 | |
Liffiton et al. | On finding all minimally unsatisfiable subformulas | |
CN106055450B (zh) | 一种二进制日志解析方法及装置 | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN105159828B (zh) | 源代码级的上下文敏感性检测方法 | |
KR102013582B1 (ko) | 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법 | |
CN102385552A (zh) | 样本剖析报告的动态计算 | |
CN102402479A (zh) | 用于静态分析的中间表示结构 | |
CN106445890A (zh) | 数据处理方法 | |
CN111324781A (zh) | 一种数据分析方法、装置及设备 | |
Lohrey et al. | Bounded MSC communication | |
Alhazov et al. | Variants of small universal P systems with catalysts | |
CN104750608A (zh) | 一种程序中基于动态符号执行的自动错误定位方法 | |
CN117077586B (zh) | 一种电路设计的寄存器传输级资源预测方法、装置及设备 | |
CN110347610B (zh) | 一种嵌入式代码调试系统及方法 | |
CN105678083A (zh) | 一种具有单比特频数检测和块内频数检测的快速检测方法 | |
CN101859276B (zh) | 一种基于层次切片的回归测试用例选择方法 | |
Fan et al. | Nfgen: Automatic non-linear function evaluation code generator for general-purpose mpc platforms | |
Zengler et al. | Encoding the Linux kernel configuration in propositional logic | |
CN110968518A (zh) | 自动化测试日志文件的分析方法及装置 | |
CN106802866A (zh) | 一种Android程序的执行路径的还原方法 | |
CN101361278B (zh) | 奇偶校验位生成电路、计数电路以及计数方法 | |
Perrone | A formal scheme for avoiding undecidable problems. Applications to chaotic behavior characterization and parallel computation | |
CN106933665A (zh) | 预测mpi程序运行时间的方法 | |
US20220129254A1 (en) | Optimization method, optimization system for computer programming code and electronic device using the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170104 |
|
WD01 | Invention patent application deemed withdrawn after publication |