CN106294163A - 一种轻量级的代码分支覆盖率检测方法 - Google Patents

一种轻量级的代码分支覆盖率检测方法 Download PDF

Info

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
Application number
CN201610664607.9A
Other languages
English (en)
Inventor
李超
史晓华
王斐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN201610664607.9A priority Critical patent/CN106294163A/zh
Publication of CN106294163A publication Critical patent/CN106294163A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test 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。
CN201610664607.9A 2016-08-12 2016-08-12 一种轻量级的代码分支覆盖率检测方法 Pending CN106294163A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 浪潮电子信息产业股份有限公司 一种基于插装技术统计测试覆盖率的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
李跃飞等: "飞行控制软件测试中的插桩技术", 《北京航空航天大学学报》 *

Cited By (6)

* Cited by examiner, † Cited by third party
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