-
代码插桩
2019-05-19 09:33:16【转载】http://wiki.dzsc.com/info/5081.html 代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试 来说又是至关重要的。在对CodeTeST 中插桩技术研究的基础上,以G...https://blog.csdn.net/woshidujian19881029/article/details/6558260
【转载】http://wiki.dzsc.com/info/5081.html
- 代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试 来说又是至关重要的。在对CodeTeST 中插桩技术研究的基础上,以GCC 作为开发平台,应用并实现了新的插装器,采用增加一个词法语法分析器的方法,提高了插桩的效率。经过实验证明新的插装器具有代码膨胀率小,插桩速度块的优 点,在一定程度上做到了高效插桩。
代码插桩概述
-
在实现覆盖测试的过程中,往往需要知道某些信息,如:程序中可执行语句 被执行(即被覆盖)的情况,程序执行的路径,变量的引用、定义等。要想获取这类信息,需要跟踪被测程序的执行过程,或者是由计算机在被测程序执行的过程中 自动记录。前者需要人工进行,效率低下且枯燥乏味;后者则需要在被测程序中插入完成相应工作的代码,即代码插桩技术。如今大多数的覆盖测试工具 均采用代码插桩技术。
在对普通应用的软件进行测试时,由于现在电脑的配置越来越高,电脑的运行速度越来越快,代码插桩所 引起的问题还不是很明显或者说是在可以接受的范围之内。但是对于嵌入式软件来说这却是致命的问题。因为嵌入式软件的系统资源有限(内存较小、I/O 通道较少等),过大的代码膨胀率将使得程序不能在嵌入式系统中运行;同时嵌入式软件通常具有很强的实时性,程序的输出只在有限的时间内有效,迟到的“正确 的”结果是无用的甚至会变成错误的、有害的。
代码插桩技术会破坏程序的时间特性等,导致软件执行的错误。因此我们需要更高效的代码插桩技术来完成覆盖测试,尤其是嵌入式软件的覆盖测试。
代码插桩方式比较
-
由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。
(1)目标代码插桩的前提是对目标代码进:
行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和操作系统相关,和具体的编程语 言及版本无关,所以得到了广泛的应用,尤其是在需要对内存进行监控的软件中。但是由于目标代码中语法、语义信息不完整,而插桩技术需要对代码词法语法的分 析有较高的要求,故在覆盖测试工具中多采用源代码插桩。
(2)源代码插桩是在对源文件进行完整的:
词法分析和语法分析的基础上进行的,这就保证对源文件的插桩能够达到很高的准确度和针对性。但是源代码插桩需要接触到源代码,使得工作量较大,而且随着编码语言和版本的不同需要做一定的修改。在后面我们所提到的程序插桩均指源代码插桩。
代码插桩设计
-
(1)插桩位置:
探针的植入要做到紧凑精干,才能保证在做到收集的信息全面而无冗余,减少代码的膨胀率。因此,在确定插桩位置时,要将程序划分,基本的划分方法是基于“块”结构。
按照块结构的划分,探针的植入位置有以下几种情况:
a. 程序的第一条语句;b. 分支语句的开始;c. 循环语句的开始;d. 下一个入口语句之前的语句;e. 程序的结束语句;f. 分支语句的结束;g. 循环语句的结束;除此之外,根据覆盖测试要求的不同,插桩的位置除了上面所说的几种情况外,也会随着覆盖测试要求的不同有所变化。
(2)插桩策略:
插桩策略是解决“如何插”的问题。传统的插桩策略是在所有需要插桩的位置插入探针,在程序运行过程 收集所有可能用到得程序信息,将其写入数据库进行分析和处理。这种方法对于大型的程序来说,将会造成相当大的工作量,效率很低,且会造成很大的代码膨胀 率。而我们会根据不同的测试要求,每次插入不同的探针,采用相应的插桩策略,这样就减少了代码的膨胀率,保证了程序执行的效率。下面简单介绍几种探针的插 桩策略。
语句覆盖探针(基本块探针):在基本块的入口和出口处,分别植入相应的探针,以确定程序执行时该基本块是否被覆盖。
分支覆盖探针:C/C++语言中,分支由分支点确定。对于每个分支,在其开始处植入一个相应的探针,以确定程序执行时该分支是否被覆盖。
条件覆盖探针:C/C++语言中,if, swich,while, do-while, for 几种语法结构都支持条件判定,在每个条件表达式的布尔表达式处植入探针,进行变量跟踪取值,以确定其被覆盖情况。
根据不同测试要求采用不用的插桩策略 ,每次在不同的位置植入相应的探针,使得每次只是植入有限的探针,这就更大大减少了代码的膨胀率和插桩的速度。
-
覆盖测试中高效代码插桩技术的研究
2020-10-25 03:56:47代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试来说又是至关重要的。文章在对CodeTeST 中插桩技术研究的基础上,以GCC 作为开发平台,应用并实现了新的插装器,采用增加一个词法语法... -
嵌入式系统/ARM技术中的覆盖测试中高效代码插桩技术的研究
2020-11-04 09:11:46摘要:代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试来说又是至关重要的。文章在对CodeTest 中插桩技术研究的基础上,以GCC 作为开发平台,应用并实现了新的插装器,采用增加一个词... -
代码插桩【转载】
2011-06-21 11:59:00【转载】http://wiki.dzsc.com/info/5081.html 代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试来说又是至关重要的。在对CodeTeST 中插桩技术研究的基础上,以GCC ...【转载】http://wiki.dzsc.com/info/5081.html
- 代码插桩是实现覆盖测试的关键技术之一,而高效的插桩技术对于嵌入式软件的测试 来说又是至关重要的。在对CodeTeST 中插桩技术研究的基础上,以GCC 作为开发平台,应用并实现了新的插装器,采用增加一个词法语法分析器的方法,提高了插桩的效率。经过实验证明新的插装器具有代码膨胀率小,插桩速度块的优 点,在一定程度上做到了高效插桩。
代码插桩概述
-
在实现覆盖测试的过程中,往往需要知道某些信息,如:程序中可执行语句 被执行(即被覆盖)的情况,程序执行的路径,变量的引用、定义等。要想获取这类信息,需要跟踪被测程序的执行过程,或者是由计算机在被测程序执行的过程中 自动记录。前者需要人工进行,效率低下且枯燥乏味;后者则需要在被测程序中插入完成相应工作的代码,即代码插桩技术。如今大多数的覆盖测试工具 均采用代码插桩技术。
在对普通应用的软件进行测试时,由于现在电脑的配置越来越高,电脑的运行速度越来越快,代码插桩所 引起的问题还不是很明显或者说是在可以接受的范围之内。但是对于嵌入式软件来说这却是致命的问题。因为嵌入式软件的系统资源有限(内存较小、I/O 通道较少等),过大的代码膨胀率将使得程序不能在嵌入式系统中运行;同时嵌入式软件通常具有很强的实时性,程序的输出只在有限的时间内有效,迟到的“正确 的”结果是无用的甚至会变成错误的、有害的。
代码插桩技术会破坏程序的时间特性等,导致软件执行的错误。因此我们需要更高效的代码插桩技术来完成覆盖测试,尤其是嵌入式软件的覆盖测试。
代码插桩方式比较
-
由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。
(1)目标代码插桩的前提是对目标代码进:
行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和操作系统相关,和具体的编程语 言及版本无关,所以得到了广泛的应用,尤其是在需要对内存进行监控的软件中。但是由于目标代码中语法、语义信息不完整,而插桩技术需要对代码词法语法的分 析有较高的要求,故在覆盖测试工具中多采用源代码插桩。
(2)源代码插桩是在对源文件进行完整的:
词法分析和语法分析的基础上进行的,这就保证对源文件的插桩能够达到很高的准确度和针对性。但是源代码插桩需要接触到源代码,使得工作量较大,而且随着编码语言和版本的不同需要做一定的修改。在后面我们所提到的程序插桩均指源代码插桩。
代码插桩设计
-
(1)插桩位置:
探针的植入要做到紧凑精干,才能保证在做到收集的信息全面而无冗余,减少代码的膨胀率。因此,在确定插桩位置时,要将程序划分,基本的划分方法是基于“块”结构。
按照块结构的划分,探针的植入位置有以下几种情况:
a. 程序的第一条语句;b. 分支语句的开始;c. 循环语句的开始;d. 下一个入口语句之前的语句;e. 程序的结束语句;f. 分支语句的结束;g. 循环语句的结束;除此之外,根据覆盖测试要求的不同,插桩的位置除了上面所说的几种情况外,也会随着覆盖测试要求的不同有所变化。
(2)插桩策略:
插桩策略是解决“如何插”的问题。传统的插桩策略是在所有需要插桩的位置插入探针,在程序运行过程 收集所有可能用到得程序信息,将其写入数据库进行分析和处理。这种方法对于大型的程序来说,将会造成相当大的工作量,效率很低,且会造成很大的代码膨胀 率。而我们会根据不同的测试要求,每次插入不同的探针,采用相应的插桩策略,这样就减少了代码的膨胀率,保证了程序执行的效率。下面简单介绍几种探针的插 桩策略。
语句覆盖探针(基本块探针):在基本块的入口和出口处,分别植入相应的探针,以确定程序执行时该基本块是否被覆盖。
分支覆盖探针:C/C++语言中,分支由分支点确定。对于每个分支,在其开始处植入一个相应的探针,以确定程序执行时该分支是否被覆盖。
条件覆盖探针:C/C++语言中,if, swich,while, do-while, for 几种语法结构都支持条件判定,在每个条件表达式的布尔表达式处植入探针,进行变量跟踪取值,以确定其被覆盖情况。
根据不同测试要求采用不用的插桩策略 ,每次在不同的位置植入相应的探针,使得每次只是植入有限的探针,这就更大大减少了代码的膨胀率和插桩的速度。
-
插桩
2016-10-15 22:37:49因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。 目标代码插桩 目标代码插桩的前提是对目标代码进行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和操作系统相关,和具体的编程...目标代码插桩
目标代码插桩的前提是对目标代码进行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和操作系统相关,和具体的编程语言及版本无关,所以得到了广泛的应用,尤其是在需要对内存进行监控的软件中。但是由于目标代码中语法、语义信息不完整,而插桩技术需要对代码词法语法的分析有较高的要求,故在覆盖测试工具中多采用源代码插桩。源代码插桩
-
程序插桩
2016-07-27 09:14:04程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。目标代码插桩由于程序插桩技术是在被测程序中插入探针,然后通过探针的执行来获得程序的控制流和数据流信息,以此来实现测试的目的。因此,根据探针插入的时间可以分为目标代码插桩和源代码插桩。
目标代码插桩
目标代码插桩的前提是对目标代码进行必要的分析以确定需要插桩的地点和内容。由于目标代码的格式主要和操作系统相关,和具体的编程语言及版本无关,所以得到了广泛的应用,尤其是在需要对内存进行监控的软件中。但是由于目标代码中语法、语义信息不完整,而插桩技术需要对代码词法语法的分析有较高的要求,故在覆盖测试工具中多采用源代码插桩。源代码插桩
源代码插桩是在对源文件进行完整的词法分析和语法分析的基础上进行的,这就保证对源文件的插桩能够达到很高的准确度和针对性。但是源代码插桩需要接触到源代码,使得工作量较大,而且随着编码语言和版本的不同需要做一定的修改。在后面我们所提到的程序插桩均指源代码插桩。程序插桩
是借助往被测程序中插入操作,来实现测试目的的方法。 程序插桩的基本原理是在不破坏被测试程序原有逻辑完整性的前提下,在程序的相应位置上插入一些探针。这些探针本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用。通过探针的执行并输出程序的运行特征数据。基于对这些特征数据的分析,揭示程序的内部行为和特征。 -
React前端功能测试覆盖率统计-插桩
2020-10-28 17:47:45而对于功能测试的测试覆盖率,肯定是需要进行代码插桩然后统计代码执行的密度,进行覆盖率统计,而插桩的库主流的就是istanbul 一,对于node项目 可以使用istanbul-middleware来进行插桩以及覆盖率统计,可以参考... -
测试中的插桩技术
2011-03-05 23:04:00插桩的概念:插桩就是在代码中插入一段我们自定义的代码。 插桩的目的:由于我们插入的代码会一起被编译到可执行文件中,所以可执行文件在运行过程中必然会执行我们插入的自定义代码,这样我们... -
软件测试-二进制插桩
2014-09-08 16:10:59关键词:插桩,软件测试 二进制插桩作用 1. 程序运行时拦截,在运行时向程序注入我们自己的代码。 2. 调试程序 3. Tracing and logging, 分析函数调用关系图,api覆盖数据。 4. 提取数据,从程序中... -
GCC Coverage代码分析-GCC插桩前后汇编代码对比分析
2011-05-27 00:16:00本博客(http://blog.csdn.net/livelylittlefish)贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正... 加入覆盖率测试选项的汇编代码分析3.1 计数桩代码分析3.2 构造函数桩代码分析3.3 数据结构分析3. -
星云精准测试对安卓底层驱动代码的测试案例分析
2019-12-02 16:48:50Android原生底层驱动应用面极广,但一直没有很好的办法...在本文中,我们可以清晰地查看到如何进行技术对接的每一步,比如如何使用星云精准测试进行代码插桩、实现测试用例与采集底层驱动运行代码的数据追溯、对最终... -
代码覆盖率测试
2008-12-04 17:40:00代码覆盖测试概括: 一般来讲,会分为插桩,执行和报告三个过程。 代码覆盖率测试常用的统计数据: 1. 行覆盖率 2. 分支覆盖率 代码覆盖率的作用: 1. 清晰的知道哪些代码未被测试过,和developer商量在... -
使用EMMA统计Java代码功能测试覆盖率
2015-09-25 16:31:151. emma的安装部署 2. 插桩 3. 统计? -
程序插桩-实例
2017-06-06 20:31:14本文主要介绍插装的实例,在测试分类下已经简单介绍了程序插装的基本概念以及插装的位置,更多知识可以查看程序插装相关文献,现将整个插装的流程通过一段C语言程序进行实例说明。 注:还处于学习阶段,实例较简单,... -
jacoco-1-java代码测试覆盖率之本地环境初体验
2020-10-25 15:50:00前言 ...那么本次主要使用对java代码进行覆盖率统计,比如A测试攻城狮在功能测试时/接口测试时,实际覆盖测试了多少java代码,可以作为一个评判。 jacoco官网地址:http://www.eclemma.org(有墙) ... -
获取Android代码测试覆盖率详解
2016-07-22 09:19:12Pre 假定APK所在包为... Step 1 插桩 首先下载EmmaInstrument.rar,解压后包含四个文件: EmmaInsrumentation.javaFinishListener.javaInstrumentedActivity.javaSMSInstrumentedReceiver.java -
白盒测试
2020-07-03 13:35:361. 逻辑覆盖法 语句覆盖(弱覆盖/最常见): 判定覆盖(弱覆盖): 条件覆盖(弱覆盖): 判定-条件覆盖: 条件组合覆盖: 2. 基本路径测试法 (1) 程序控制流图: ...目标代码插桩法 源代码插桩法 黑盒测试和白盒测试比较 -
方案设计:基于IDEA插件开发和字节码插桩技术,实现研发交付质量自动分析
2021-02-23 09:58:38作者:小傅哥 ... 沉淀、分享、成长,让自己和他人都能有所收获!???? ...如何保证代码质量?...一般我们都会要求研发在开发代码的过程中编写单元测试,验证自己的代码逻辑。如果最终单元测试覆盖度不足,可 -
代码安全检视方法有_代码覆盖率测试-分析未被覆盖的几种情况
2021-01-06 08:10:02一 先简要说一下测试步骤1 修改项目底包(openjdk8-apm / jdk8-apm, tomcat8.5-openjdk8-apm/ tomcat8.5-jdk8-apm)-为插桩服务2 PAAS上配置B项目环境变量CCT(CCT不为空),相当于启动覆盖测试。3 ... -
基于遗传算法的分支覆盖测试用例自动生成的示例代码
2018-12-12 17:53:14研一时候上智能优化算法课程,因为论文需要,通过遗传算法的代码自己改写的。通过插桩的方式,自动生成分支覆盖的测试用例,用来判断三角形的类型。 -
嵌入式系统原理与设计第9章 嵌入式软件测试基础.ppt
2020-01-20 09:48:32目标机 宿主机 源代码 插桩器插桩 数据处理程序或软件 编译后的源码 插桩后的源码 编译器编译 生成数据 编译后的源码 触发桩程序 网线串口USB 串口JTAG 循环 图9-8 插桩测试原理图 本节提要 1 2 3 嵌入式软件的质量... -
AOSP>设计>测试(第二节)测试开发工作流
2021-02-09 14:56:45测试第二节 测试开发工作流一、概览测试类型测试用例准则二、简单配置示例设置三、复杂配置目标准备器测试类四、插桩测试概览主要概念步骤总结自插桩测试(示例)确定源代码所在的位置清单文件简单配置文件复杂配置... -
Android sdk插桩集成到第三方app
2018-12-15 17:34:57在实际应用中,如需要把自己的APM或者sdk等代码集成加入第三方应用,来测试对比竞品调研。对于大批量地修改Smali语法, -
ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时
2020-04-07 08:57:49提交了多少代码、提交了多少方法、有单元测试吗、影响了那些流程链路、有没有夹带上线。 大部分时候这些问题的汇总都是人为的方式进行提供,以依赖相信研发为主。剩下的就需要依赖有经验的测试进行白盒验证。所以... -
jacoco收集探针结果时机_周为、翟帅-进化的覆盖率——代码实时染色系统.pdf
2020-12-31 10:53:18进化的覆盖率-实时代码染色蚂蚁金服 - 周为,翟帅覆盖率是什么代码覆盖是软件测试中的一...代码插桩 编译器插桩后代码运行覆盖率数据蚂蚁金服覆盖率的作用形成质量指标 发现测试死角 找到历史废弃代码了解测试情况 ... -
【集成测试覆盖率实践】tomcat+jenkins+cobertura显示代码覆盖率
2019-11-02 11:55:47文章目录1 基础知识了解1.1 代码覆盖率及常用工具对比1.2 cobertura原理2 环境安装准备2.1 tomcat安装2.2 maven安装2.3 jenkins安装2.4 jenkins需要的插件2.5 jenkins job配置3 cobertura实践3.0 下载cobertura3.1 ... -
软件测试自动化特点_软件测试自动化需要什么软件
2019-12-17 20:49:402 动态测试工具 动态测试主要采用插桩的方式即向代码生成的可执行文件中插入一些监测代码运行框架程序统计程序运行时的数据可以针对所有类的成员函数进行测试也可以只针对类的公共接口函数进行测试代表有JtestC++... -
白盒测试学习
2020-04-14 15:49:35动态测试3.1 逻辑覆盖测试3.2 基本路径测试法3.2.1 基本路径测试法步骤3.2.2 基本路径测试方法1、基本路径测试中的图形矩阵工具2、程序插桩法4. 其他方法4.1 域测试4.2 符号测试4.3 Z路径覆盖测试4.4 程序变异5. ...