CN102243609A - 一种基于嵌入式软件的测试分析方法及系统 - Google Patents
一种基于嵌入式软件的测试分析方法及系统 Download PDFInfo
- Publication number
- CN102243609A CN102243609A CN2011101604039A CN201110160403A CN102243609A CN 102243609 A CN102243609 A CN 102243609A CN 2011101604039 A CN2011101604039 A CN 2011101604039A CN 201110160403 A CN201110160403 A CN 201110160403A CN 102243609 A CN102243609 A CN 102243609A
- Authority
- CN
- China
- Prior art keywords
- pitching pile
- source code
- code
- identification information
- test
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明适用于软件测试领域,提供了一种基于嵌入式软件的测试分析系统和方法,该方法包括以下步骤:对经过编译器预编译的源代码进行插桩;根据所述预编译的源代码的插桩结果生成插桩标识数据库;监控并采集目标板上可执行目标代码的运行结果,对所述可执行目标代码的运行结果进行处理生成测试数据,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成;对所述插桩标识数据库和所述测试数据进行关联对比和分析,得到测试分析结果。本发明较好的解决了纯软件测试工具的存在的膨胀率过高等问题,且测试分析对象多样化。
Description
技术领域
本发明属于软件测试领域,尤其涉及一种基于嵌入式软件的测试分析方法及系统。
背景技术
随着计算机硬件技术的进步和元件质量逐步提高,元件的集成量也大大增加,从而使嵌入式设备的硬件性能得到了极大的提高;与此同时,通过采用成熟的商用嵌入式操作系统,使整个系统运行在一个高性能的、可靠的软件平台上,为实现各种大型的复杂的应用打下了良好的基础。面对系统复杂性的增加,自然需要功能强大、性能稳定的嵌入式应用软件与之相适应。所以,在嵌入系统开发中软件的代码量也越来越大,电子类产品的代码量以每两年就翻一翻的速度增长。同时,系统又要求应用要精简高效、稳定可靠,这使得软件的开发在整个系统开发中所占的重要性越来越高,开发时间也越来越长,软件的质量对产品的最终质量起到了决定性的作用。因此,迫切需要一种工具能够在软件开发的单板阶段、集成阶段、系统阶段等各阶段,对嵌入式系统的软件进行实时在线的测试与分析,以保证系统的性能和稳定可靠性。
市面上流行的测试工具大致分为普通纯软件的测试工具和纯硬件的测试工具。其中,普通纯软件的测试工具采用的是软件打点技术,即在被测代码中插入一些函数,主要在函数的入口、出口处,以及分支等地,插入特定的函数,以便计算函数执行的时间,利用这些函数来实现测试数据的生成,同时将测试数据送到目标板系统的共享内存中。并在目标系统中运行一个预处理任务,完成这些测试数据的预处理,然后将处理后的数据,通过目标机的网口或串口上送回到主机上,进行后续的分析。通过这个过程,测试者得以知道程序当前的运行状态。
从此分析可知,纯软件的测试工具,需借助于用户的目标处理器来完成,即需要占用目标板上的资源。同时,纯软件的测试工具的测试原理,有两个必然存在的特点——插桩函数和预处理任务。分析:由于插入了插桩函数和预处理任务的存在,使系统的代码增大,更严重的是这些代码会对系统的运行效率有很大的影响(超过50%)。同时,函数本身要有它的实现过程,它要完成数据的生成和暂存,而且这些函数在它的实现过程中,还可能被其他优先级更高的中断程序所中断。预处理任务需要占用目标系统CPU处理时间、共享内存和通信通道完成数据的处理、数据的上送。由于这些弊端的存在,当采用纯软件测试工具对目标系统进行测试时,用户目标系统是在一种不真实的环境下运行的,我们所捕获的数据也是不够精确的。采用纯软件的测试工具有以下不足:
缺陷1:插入的是函数,本身要有实现过程,同时需要完成测试数据的生成和暂存,而且实现过程中,还易被其他优先级更高的中断程序所中断。
缺陷2:做覆盖率分析的时候,因为要大量打点,而打点过多就会影响系统的运行,所以只能做单元覆盖率分析且单元的程序量不能太大。
缺陷3:没有对内存分配进行分析和检查的能力。
纯硬件测试工具以逻辑分析仪为例,逻辑分析仪通过双端口标志寄存器,当代码执行时,双端口标志寄存器同时对执行的代码置1,通过对代码是否置1,来判断程序当前运行的状况。分析:当系统打开缓存(CACHE)时,取一条指令则对此代码置1。而这条指令并不一定执行。采用纯硬件的测试工具有以下不足:
缺陷1:当CACHE打开我们会采用指令预取技术,从外存中读取一段代码到一级CACHE中,这时逻辑分析仪就会报告这些代码已经被执行了,但实际上被送到CACHE中的代码可能根本没有被命中。为了避免这种误差必须把CACHE关闭掉,而CACHE关掉就不是系统真实的运行环境了,有时甚至会由于CACHE关闭而导致系统无法正常运行。
缺陷2:没有对内存分配进行分析和检查的能力。
综上,现有技术通过软件或硬件测试工具进行嵌入式软件测试时,存在着:代码膨胀率过高、容易被中断,占有的硬件板资源较多,测试精度和准确率不高,测试分析对象不够多样化等等的问题。
发明内容
本发明实施例的目的在于提供一种基于嵌入式软件的测试分析方法,旨在解决现有技术进行嵌入式软件测试分析时,膨胀率过高,容易被中断,占有的硬件板资源较多,测试精度和准确率不高,测试分析对象不够多样化的问题。
本发明实施例是这样实现的,一种基于嵌入式软件的测试分析方法,包括以下步骤:
对经过编译器预编译的源代码进行插桩;
根据所述预编译的源代码的插桩结果生成插桩标识数据库;
监控并采集目标板上可执行目标代码的运行结果,对所述可执行目标代码的运行结果进行处理生成测试数据,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成;
对所述插桩标识数据库和所述测试数据进行关联对比和分析,得到测试分析结果。
进一步地,所述对源代码进行插桩的步骤具体为:
确定插桩位置和插桩内容,根据所述插桩位置在完成预编译的源代码中插入插桩内容;
所述插桩位置包括至少一个插桩点,所述插桩内容为赋值语句,所述根据所述预编译的源代码的插桩结果生成插桩标识数据库的步骤具体为:
根据所述插桩点和赋值语句生成对应的插桩标识信息;
根据所述插标识信息生成插桩标识数据库。
进一步地,所述监控并采集所述目标板上所述可执行目标代码的运行结果步骤具体为:
当监控到所述目标板上的信号时,通过捕获所述目标板可执行目标代码的运行结果并保存;
所述对可执行目标代码的运行结果进行处理生成测试数据的步骤具体为:
对所述可执行目标代码的运行结果进行保存,预处理,生成测试数据上传。
进一步地,所述插桩内容为赋值语句。
进一步地,当所述源代码为程序文件时,所述程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个;所述插桩标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息;所述测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
本发明实施例的另一目的在于提供基于嵌入式软件的测试分析系统,包括:
插桩器,用于对经过编译器预编译的源代码进行插桩;
插桩标识数据库生成单元,用于根据所述插桩器对所述预编译的源代码的插桩结果生成插桩标识数据库;
软件探针及采集单元,用于从目标板上监控并采集可执行目标代码的运行结果,对所述可执行目标代码的运行结果进行处理生成测试数据并保存,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成;
结果分析器,根据所述插桩标识数据库生成单元生成的插桩标识数据库和软件探针及采集单元保存的测试数据对源代码的测试结果进行关联对比和分析,得到测试分析结果。
进一步地,所述插桩标识数据库包括标识信息,所述标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息,所述测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
进一步地,所述插桩器进一步包括:
驱动模块,用于调用所述编译器进行编译处理;
执行模块,用于确定插桩位置和插桩内容,根据所述插桩位置在所述编译器完成预编译的源代码中插入插桩内容;
所述插桩位置包括至少一个插桩点,所述插桩内容为赋值语句,所述插桩标识数据库生成单元进一步包括:
第一处理模块,根据所述执行模块确定的插桩位置和插值内容生成对应的插桩标识信息;
第二处理模块,根据所述第一处理模块生成的插桩标识信息生成插桩标识数据库。
进一步地,所述软件探针及采集单元进一步包括:
监控模块,用于监控所述目标板的信号;
采集模块,用于在所述监控模块监控到所述目标板的信号时,捕获所述目标板上可执行目标代码的运行结果并保存。
进一步地,所述当所述源代码为程序文件时,所述程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个。
本发明实施例,通过对经过编译器预编译的源代码进行插桩,根据预编译的源代码的插桩结果生成插桩标识数据库,监控并采集目标板上可执行目标代码的运行结果,对可执行目标代码的运行结果进行处理生成测试数据,可执行目标代码由插桩后的源代码经过编译器编译、链接生成,对插桩标识数据库和测试数据进行关联对比和分析,得到测试分析结果,实现了内存调用分析,满足降低代码膨胀率、避免中断,占有较小硬件板上资源的同时提高测试精度和准确率的要求,且测试分析对象多样化。
附图说明
图1是本发明实施例提供的基于嵌入式软件测试分析方法的流程图;
图2是本发明一个示例提供的基于嵌入式软件测试的流程图;
图3是本发明另一个示例提供的内存插桩示意图;
图4是本发明实施例提供的基于嵌入式软件测试分析系统的工作原理图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例,提供一种基于嵌入式软件的测试分析方法,通过对经过编译器预编译的源代码进行插桩,从目标板上监控并采集可执行目标代码的运行结果,对可执行目标代码的运行结果进行处理生成测试数据并保存,根据插桩标识数据库和测试数据对源代码的测试结果进行对比和分析,得到测试分析结果。
如图1示出了为本发明实施例,提供的嵌入式软件测试分析方法的流程图。
在步骤S101中,对经过编译器预编译的源代码进行插桩。
本发明实施例支持对C语言以及51、ARM、PPC、68K等汇编语言的插桩。可以对一个文件,也可以对一个目录下的文件进行插桩。
步骤S101步骤具体为:
确定插桩位置和插桩内容,根据插桩位置在完成预编译的源代码插入插桩内容。
现实应用中,插桩位置包括至少一个插桩点,在本发明实施例中,软件探针的植入要做到紧凑精干,才能保证信息收集的全面无冗余,同时减少代码的膨胀率。通常将程序基于“块”结构基本划分。按照块结构的划分,插桩的位置位于预编译的源代码以下几处:a.程序的第一条语句;b.分支语句的开始;c.循环语句的开始;d.下一个入口语句之前的语句;e.程序的结束语句;f.分支语句的结束;g.循环语句的结束;h.在内存调用函数的定义处。除此之外,根据覆盖测试要求的不同,除了上面所说的几种情况外,插桩的位置也会随着覆盖测试要求的不同有所变化。具体不再详述。
在本发明优选实施例中,插桩内容为赋值语句,插入赋值语句也能够对代码进行覆盖率跟踪分析,同时,由于赋值语句在汇编时也是一条语句,且执行的时间非常短,避免了被其它的中断请求所中断,效率高。另外,根据不同的测试要求插入不同的软件探针,采用相应的插桩策略插在不同的关键位置,也可减少代码的膨胀率,保证程序执行的效率。
其中,编译器和源代码由待测源代码对应的提供商提供。
在步骤S102中,根据预编译的源代码的插桩结果生成插桩标识数据库。
具体应用时,插桩位置包括至少一个插桩点,插桩内容为赋值语句,步骤S102步骤具体为:
根据插桩点和赋值语句生成对应的插桩标识信息;
根据插标识信息生成插桩标识数据库。
其中,插桩标识信息记录了插桩的相关信息,例如插桩位置信息,在本发明实施例中,插桩标识信息以文件信息进行保存,为了便于与测试数据进行关联、比较、分析管理使用,插桩完成后,根据生成的多个插桩标识信息对应的文件自动构建插桩标识数据库。
在步骤S103中,监控并采集目标板上可执行目标代码的运行结果,对可执行目标代码的运行结果进行处理,生成测试数据。
其中,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成,目标板上由待测源代码对应的厂商提供。
步骤S103中监控并采集目标板上可执行目标代码的运行结果步骤具体为:
当监控到目标板上的信号时,到目标板上捕获相应的目标代码执行结果,并保存。
步骤S103中对可执行目标代码的运行结果进行处理,生成测试数据的步骤具体为:
对可执行目标代码的运行结果进行预处理,生成测试数据,然后上传回结果分析器。
在步骤S104中,对插桩标识数据库和测试数据进行关联对比和分析,得到测试分析结果。
在本发明实施例中,采用图形化分析目标板上代码的运行状况。主要包括:文件代码注释等静态详细信息,统计信息。文件的调用关系。函数的静态调用、动态调用关系。具体为:
1)文件代码注释统计:显示插桩文件数,每个文件的代码行,注释行,空格行等静态信息。
2)文件调用:图形化显示文件动态、静态调用关系。当动态显示的时候,执行过的文件将变成亮色。
3)函数调用:树状结构直观地显示函数动态、静态调用关系。当动态显示的时候,执行过的函数将变成亮色。
其中,当源代码为程序文件时,程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个;插桩标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息;测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
图2示出了本发明一个示例提供的嵌入式软件测试的处理流程。
作为本发明的一个示例,该示例使用C/C++语言进行编写,软件测试工作流程具体如下:
在步骤S201中,对源代码进行预编译。
在步骤S202中,对预处理后的源代码进行插桩,生成.idb文件,作为插桩标识数据库保存。
源代码插桩技术,是第一个核心步骤和关键技术。是为全面分析源代码做标记的。例如:
本发明实施例支持对C语言以及51、ARM、PPC、68K等汇编语言的插桩。同时可以对一个文件进行插桩,也可以对一个目录下的所有文件进行插桩。
按照插桩策略,确定插桩位置和插桩内容后,根据插桩位置在完成预编译的源代码中插入插桩内容。
现实应用中,插桩位置包括至少一个插桩点,在本发明实施例中,软件探针的植入要做到紧凑精干,才能保证信息收集的全面无冗余,同时减少代码的膨胀率。通常将程序基于“块”结构基本划分。按照块结构的划分,插桩的位置位于预编译的源代码以下几处:a.程序的第一条语句;b.分支语句的开始;c.循环语句的开始;d.下一个入口语句之前的语句;e.程序的结束语句;f.分支语句的结束;g.循环语句的结束;h.在内存调用函数的定义处。除此之外,根据覆盖测试要求的不同,除了上面所说的几种情况外,插桩的位置也会随着覆盖测试要求的不同有所变化。
在本发明优选实施例中,插桩内容为赋值语句,由于赋值语句在汇编时也是一条语句,执行时间非常短,避免了被其它的中断请求所中断,效率高。另外,根据不同的测试要求插入不同的软件探针,采用相应的插桩策略,插在不同的关键位置,可减少代码的膨胀率,保证程序执行的效率。
根据插桩位置和插桩内容(赋值语句)生成对应的插桩标识信息;根据插标识信息对应的文件自动构建插桩标识数据库。便于与后续测试数据进行关联、比较、分析管理使用。
在步骤S203中,将经过插桩后的源代码进行统一编译链接生成.out文件,作为可执行目标码。
在步骤S204中,将可执行目标码,下载到目标板上运行。
在每一个插桩点插入赋值语句后的源代码,经过编译链接生成目标代码,下载到目标板上运行时,对应会生成一个特定的信号,这个信号可被软件探针捕获到。
在步骤S205中,监控到目标板上的运行程序运行到插桩点时,从目标板上采集相应的运行结果数据,暂存、预处理,生成测试数据,之后将测试数据通过局域网,发送到的工作后台的结果分析器中。
在步骤S206中,通过结果分析器,根据得到的测试数据,结合插桩标识数据库中的.idb文件格式中的数据,进行关联比较分析,得到测试结果。
图3是本发明另一个示例提供的内存插桩示意图。
在用户应用程序的内存调用函数等处,利用插桩器,进行插桩即打上内存标记,然后将插桩后的应用程序,再与原C/C++内容封装程序,以及任务钩子程序(任务监控执行程序)经过编译器进行统一的编译,之后经链接器进行链接完成。
在本示例中,结果分析器用于测试分析,以swich,while,do-while,for几种语法结构的插桩为例,它们都支持条件判定,在每个条件表达式的布尔表达式处植入软件探针,进行变量跟踪取值,可确定其被覆盖情况。同时在内存调用函数处还进行了相应的插桩而了解内存的调用及分配情况。以及代码流跟踪。
本发明实施例,通过源代码级追踪,控制流追踪,以及高级追踪三种模式,来追踪嵌入式软件的运行情况。最大追踪深度可达百万条源代码级程序,其中:
高级追踪:显示的是实时系统(Real-time operating system,RTOS)的事件和函数的进入退出,并给出一个程序流程的大框图;
控制流追踪:增加了可执行函数中每一条分支语句的显示;
源代码级追踪:增加了对被执行的全部语句的显示。
在以上三种模式下,均会显示详细的内存分配情况,包括在哪个源代码文件的哪一行,哪一个函数调用了内存的分配或释放,被分配的内存的大小和指针,被释放的内存和指针,出现的内存错误等。
图4示出了为本发明提供的基于嵌入式软件的测试分析系统的工作原理。为了便于说明,仅示出了与本发明实施例的相关部分。该基于嵌入式软件的测试分析系统可以是内置于嵌入式设备的软件单元、或者作为独立的挂件集成到嵌入式设备的应用系统中。
在本发明实施例中,基于嵌入式软件的测试分析系统包括:插桩器41、插桩标识数据库42、软件探针及采集单元43和结果分析器44。源代码45、编译器46和目标板47由待测源代码对应的提供商提供。
基于嵌入式软件的测试分析系统实现嵌入式软件测试分析的具体过程如下:编译器46首先对源代码45进行预编译,插桩器41对经过编译器46预编译的源代码进行插桩,并将插桩后的源代码再次发送给编译器46,编译器46对插桩后的源代码再次进行完整编译和链接处理得到可执行目标代码,将可执行目标代码下载到目标板47,插桩标识数据库生成单元42根据插桩器41对预编译的源代码的插桩结果,生成相应的插桩标识数据库;软件探针及采集单元43从目标板47上监控并采集可执行目标代码的运行结果,同时对运行结果进行处理生成测试数据并保存上传给结果分析器44;结果分析器44根据插桩标识数据库42中的插桩标识内容与软件探针及采集单元43上传的测试数据,进行关联比对,从而对源代码的测试结果进行比较分析,得到测试分析结果。
在本发明一个实施例中,插桩器41进一步包括:
编译驱动模块,用于调用编译器46实现对源代码进行预编译,以及对插桩后的源代码再次进行完整的编译;
执行模块,用于确定插桩的具体位置和插桩的具体内容,根据插桩位置,在预编译完成后的源代码中,按照插桩策略,插入具体的插桩内容。
在本发明实施例中,插桩标识数据库生成单元42进一步包括:
第一处理模块,根据执行模块确定的插桩位置和插桩内容,生成对应的插桩标识信息;
第二处理模块,根据第一处理模块生成的插桩标识信息,生成插桩标识数据库。
在本发明实施例中,软件探针及采集单元43进一步包括:
监控模块,用于监控目标板47上的信号;
采集模块,用于在监控模块监控到目标板47的信号出现时,捕获目标板47上出现的对应的数据,即可执行目标代码运行的实际数据。
软件探针及采集单元43还可以包括:预处理模块,用于对采集模块采集的数据进行暂存,做预处理,然后上传回主机。
软件探针及采集单元43与主机的连接方式为internet连接。
其中,插桩标识数据库42包括标识信息,标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息。测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
当源代码为程序文件时,程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个。本发明实施例中的基于嵌入式软件的测试分析系统可实现多个程序文件的并行处理。
在本发明的一优选实施例中,基于嵌入式软件的测试分析系统包括插桩器,插桩内容为赋值语句,插桩器把插入的标记送入一个数据库文件中生成一个插桩标识数据库暂存起来,以备为以后分析时调用。插桩位置包括至少一个插桩点。这类赋值语句经过编译链接生成可执行目标代码运行到目标板上时,由于赋值语句在汇编时也是一条语句,且执行的时间非常短,避免了被其它的中断请求所中断,效率高。
在本发明另一优选实施例中,软件探针及采集单元43包括至少一个软件探针,即信号捕获器,用于从目标板47上监视信号,在监视到信号时,对数据进行捕获,为生成测试数据进行采集工作。
在本发明该优选实施例中,编译器46和硬件目标板47由待测源代码对应的提供商提供的,基于嵌入式软件的测试分析系统,实现测试分析的过程具体如下:
首先,系统的插桩器的编译驱动模块,调用编译器46对源代码进行预编译,然后再对源代码进行插桩,接着编译驱动模块再次调用原有的编译器46,对插桩后的源代码进行编译以及链接,生成可执行目标代码,在对预编译的源代码进行插桩的同时,插桩标识数据库生成单元42根据预编译的源代码的插桩所有相关信息,生成相应的插桩标识数据库42;
然后,可执行目标代码通过编译器46被下载到目标板上47运行;
这样,在软件探针及采集单元43从目标板47上监控到插桩生成的特定的信号的同时,从目标板47上采集对应的可执行目标代码的运行结果数据,保存可执行目标代码的运行结果数据,并对其进行预处理,生成测试数据,然后上传测试数据到主机上管理平台的集成开发环境(Integrated Development,IDE)中,交给结果分析器44处理;
最后,结果分析器44将插桩标识数据库42中的数据与软件探针及采集单元采集到的测试数据进行关联对比分析,得到测试分析结果。
由此,可得知当前程序的运行状态。并可完成对被测嵌入式软件的高级覆盖率分析,内存分析和大容量的代码跟踪等。
普通的纯软件测试工具,因为采用了普通的打点插桩技术,会导致源代码的膨胀率较高,影响源代码真实的运行,同时占用硬件板上资源进行预处理任务,这需要占用目标硬件板系统的CPU处理时间、共享内存和通信通道来完成数据的处理、数据的上送等,从而使得测试结果可信度低;同时无法对内存分配进行分析检查。
而普通的纯硬件测试工具,因为采用了普通的总线采样数据机制,会导致数据不准甚至是错误的。同时也无法对内存分配进行分析检查。
本发明实施例的基于嵌入式软件的测试分析系统,采用基于插入赋值语句和生成相应的插桩标识数据库的源代码插桩技术,插入的不是一个函数,而是一条赋值语句,在汇编时也是一条语句,所以执行时间非常短,同时避免了被其它的中断请求所中断。同时,采用软件探针及采集单元,较少占用目标板上的资源进行存放测试数据和运行额外的预处理任务等,因此,对被测系统的影响降到最低,对CPU的影响小于10%,代码膨胀率小于15%。本系统支持多种开发语言及OSE/VxWorks/QNX/Linux等多种嵌入式操作系统平台。
综上,本发明实施例,能对被测程序进行全面深度的测试分析,通过本发明实施例,提供的嵌入式软件测试分析系统,能够实现的功能包括:
1)覆盖率分析:可提供源代码级(函数级),以及总体的覆盖情况。是一种完全的交互式工具,可以在对系统进行操作的同时,追踪覆盖率的情况。可打开源代码文件,显示执行过的代码和分支。提供插桩文件、函数的汇总覆盖率信息等。覆盖率信息包括:程序实际执行的所有内容。以不同颜色区分已运行和未运行的代码。可跟踪大量函数,特别是多分支的情况,特别适合测试大型的嵌入式软件。其中高级覆盖率分析功能,可以把简单语句覆盖功能,扩展为决策覆盖以及条件决策覆盖功能。
2)内存调用分析:能对内存分配和调用进行分析和检查。能分析显示有多少字节的存储器,被分配给了程序的哪一个函数。这样,就不难发现那些函数,占用了较多的存储空间,以及那些函数没有释放相应的存储空间。通过本发明可以观察到存储器的所有分配情况。因此,随着程序的运行,存储器的动态变化情况(增加/减少),可以统计出所有的内存的分配情况。故随着程序的运行,能指出存储器分配的错误,并可同时看到其对应的源程序的内容。
3)代码流跟踪:可以按源代码级追踪,控制流追踪,以及高级追踪三种模式,来追踪嵌入式软件的运行情况。最大追踪深度可达百万条源代码级程序,其中:
高级追踪:显示的是RTOS的事件和函数的进入退出,并给出一个程序流程的大框图;控制流追踪:增加了可执行函数中每一条分支语句的显示;源代码级追踪:增加了对被执行的全部语句的显示。在以上三种模式下,均会显示详细的内存分配情况,包括在哪个源代码文件的哪一行,哪一个函数调用了内存的分配或释放,被分配的内存的大小和指针,被释放的内存和指针,出现的内存错误等。
4)测试报告生成:提供详细的,图形化的,融合测试结果的报告,可让用户看到完整的测试结果。
本发明实施例,从纯软件的测试工具那里吸取了软件打点技术并进行改善,即简化插入内容,插桩内容为赋值语句,由于赋值语句在汇编时也是一条语句,执行时间非常短,避免了被其它的中断请求所中断,效率高。另外,根据不同的测试要求插入不同的软件探针,采用相应的插桩策略,插在不同的关键位置,可减少代码的膨胀率,保证程序执行的效率。同时构建相应的插桩标识数据库。利用较少的目标硬件板系统的CPU、共享内存和通信通道来完成数据的预处理、上传。因此,本发明实施例是在线动态实时的系统级测试与分析的白盒工具,在同样的处理能力下,可以做到精确的数据观察。使得测试的准确性和效率得到较大提升。
针对现有的普通的纯软件或纯硬件嵌入式测试工具,以及本发明设计的软嵌入式测试工具,对三者的测试性能进行对比分析,详见下表:
表1本发明技术与现有技术的测试性能对比
可以看到,与现有技术相比,本发明设计的嵌入式软件测试工具,具有较明显的优势。
本发明实施例,通过构建出特殊纯软件的嵌入式软件测试分析系统,实现了降低代码膨胀率、避免中断,占有较小硬件板的资源同时,提高测试精度和准确率的目标要求,且测试分析对象多样化。为用户提供了实时在线动态测试的高效率解决方案,能够适应从单元级、集成级,直到系统级等各个阶段的应用。可应用领域包括电子通讯、航空航天、兵器船舶等多个行业各类企业的嵌入式软件开发测试。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于嵌入式软件的测试分析方法,包括以下步骤:
对经过编译器预编译的源代码进行插桩;
根据所述预编译的源代码的插桩结果生成插桩标识数据库;
监控并采集目标板上可执行目标代码的运行结果,对所述可执行目标代码的运行结果进行处理生成测试数据,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成;
对所述插桩标识数据库和所述测试数据进行关联对比和分析,得到测试分析结果。
2.如权利要求1所述的方法,其特征在于,所述对源代码进行插桩的步骤具体为:
确定插桩位置和插桩内容,根据所述插桩位置在完成预编译的源代码中插入插桩内容;
所述插桩位置包括至少一个插桩点,所述插桩内容为赋值语句,所述根据所述预编译的源代码的插桩结果生成插桩标识数据库的步骤具体为:
根据所述插桩点和赋值语句生成对应的插桩标识信息;
根据所述插标识信息生成插桩标识数据库。
3.如权利要求2所述的方法,其特征在于,所述监控并采集所述目标板上所述可执行目标代码的运行结果步骤具体为:
当监控到所述目标板上的信号时,捕获所述目标板的可执行目标代码的运行结果并保存;
所述对可执行目标代码的运行结果进行处理生成测试数据的步骤具体为:
对所述可执行目标代码的运行结果进行保存,预处理,生成测试数据上传。
4.如权利要求2所述的方法,其特征在于,所述插桩内容为赋值语句。
5.如权利要求1所述的方法,其特征在于,当所述源代码为程序文件时,所述程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个;所述插桩标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息;所述测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
6.一种基于嵌入式软件的测试分析系统,包括:
插桩器,用于对经过编译器预编译的源代码进行插桩;
插桩标识数据库生成单元,用于根据所述插桩器对所述预编译的源代码的插桩结果生成插桩标识数据库;
软件探针及采集单元,用于从目标板上监控并采集可执行目标代码的运行结果,对所述可执行目标代码的运行结果进行处理生成测试数据并保存,所述可执行目标代码由插桩后的源代码经过所述编译器编译、链接生成;
结果分析器,根据所述插桩标识数据库生成单元生成的插桩标识数据库和软件探针及采集单元保存的测试数据对源代码的测试结果进行关联对比和分析,得到测试分析结果。
7.如权利要求6所述的系统,其特征在于,所述插桩标识数据库包括标识信息,所述标识信息包括:覆盖率标识信息、内存标识信息、代码流标识信息、测试报告标识信息,所述测试分析结果包括以下内容:覆盖率分析结果、内存调用信息、代码流跟踪结果、测试报告。
8.如权利要求6或7所述的系统,其特征在于,所述插桩器进一步包括:
驱动模块,用于调用所述编译器进行编译处理;
执行模块,用于确定插桩位置和插桩内容,根据所述插桩位置在所述编译器完成预编译的源代码中插入插桩内容;
所述插桩位置包括至少一个插桩点,所述插桩内容为赋值语句,所述插桩标识数据库生成单元进一步包括:
第一处理模块,根据所述执行模块确定的插桩位置和插值内容生成对应的插桩标识信息;
第二处理模块,根据所述第一处理模块生成的插桩标识信息生成插桩标识数据库。
9.如权利要求6所述的系统,其特征在于,所述软件探针及采集单元进一步包括:
监控模块,用于监控所述目标板的信号;
采集模块,用于在所述监控模块监控到所述目标板的的信号时,捕获所述目标板上可执行目标代码的运行结果并保存。
10.如权利要求6所述的系统,其特征在于,所述当所述源代码为程序文件时,所述程序文件至少为一个,程序文件为多个时程序文件的保存路径至少为一个。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101604039A CN102243609A (zh) | 2011-06-15 | 2011-06-15 | 一种基于嵌入式软件的测试分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101604039A CN102243609A (zh) | 2011-06-15 | 2011-06-15 | 一种基于嵌入式软件的测试分析方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102243609A true CN102243609A (zh) | 2011-11-16 |
Family
ID=44961676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101604039A Pending CN102243609A (zh) | 2011-06-15 | 2011-06-15 | 一种基于嵌入式软件的测试分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102243609A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102916741A (zh) * | 2012-11-06 | 2013-02-06 | 索尔思光电(成都)有限公司 | 一种光模块硬件在线测试方法 |
CN103019865A (zh) * | 2012-12-28 | 2013-04-03 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN103019944A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于代码注入方式的测试方法和装置 |
CN103164306A (zh) * | 2013-03-25 | 2013-06-19 | 北京经纬恒润科技有限公司 | 一种测试逻辑的生成方法及装置 |
CN103593285A (zh) * | 2013-10-17 | 2014-02-19 | 北京控制工程研究所 | 一种基于判定识别的图像类软件单元测试方法 |
CN105095087A (zh) * | 2015-08-31 | 2015-11-25 | 武汉启明联创信息科技有限公司 | 一种基于权限操作的软件测试系统和方法 |
CN105260305A (zh) * | 2015-10-15 | 2016-01-20 | 珠海格力电器股份有限公司 | 嵌入式程序运行时cpu监控调试方法 |
CN106155900A (zh) * | 2015-04-17 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种代码测试监测方法、装置及设备 |
CN108415836A (zh) * | 2018-02-23 | 2018-08-17 | 清华大学 | 利用应用程序检测计算机系统性能变化的方法和系统 |
CN110059009A (zh) * | 2018-04-13 | 2019-07-26 | 百度(美国)有限责任公司 | 用于测试代码文件的方法和装置 |
CN110119819A (zh) * | 2019-05-06 | 2019-08-13 | 北京长城华冠汽车科技股份有限公司 | 一种数据预定处理方法、装置及其存储介质 |
CN110187884A (zh) * | 2019-06-04 | 2019-08-30 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110196801A (zh) * | 2018-02-24 | 2019-09-03 | 武汉斗鱼网络科技有限公司 | 一种基于代码覆盖率的测试方法及装置 |
CN110389895A (zh) * | 2019-06-14 | 2019-10-29 | 平安科技(深圳)有限公司 | 终端测试方法、装置、计算机设备和存储介质 |
CN110532185A (zh) * | 2019-08-29 | 2019-12-03 | 中国工商银行股份有限公司 | 测试方法、装置、电子设备和计算机可读存储介质 |
CN113238801A (zh) * | 2021-05-17 | 2021-08-10 | 上海中通吉网络技术有限公司 | 快递扫描信息采集方法、装置和系统 |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
CN114327491A (zh) * | 2022-03-07 | 2022-04-12 | 深圳开源互联网安全技术有限公司 | 源码插桩方法、装置、计算机设备和存储介质 |
CN118035045A (zh) * | 2024-04-11 | 2024-05-14 | 广东为辰信息科技有限公司 | 一种基于qnx系统的系统调用检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408862A (zh) * | 2007-10-12 | 2009-04-15 | 李周 | 一种嵌入式系统测试方法 |
US20100131930A1 (en) * | 2008-11-21 | 2010-05-27 | International Business Machines Corporation | Selective Code Coverage Instrumentation |
CN102053906A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于收集程序运行时信息的系统和方法 |
-
2011
- 2011-06-15 CN CN2011101604039A patent/CN102243609A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408862A (zh) * | 2007-10-12 | 2009-04-15 | 李周 | 一种嵌入式系统测试方法 |
US20100131930A1 (en) * | 2008-11-21 | 2010-05-27 | International Business Machines Corporation | Selective Code Coverage Instrumentation |
CN102053906A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于收集程序运行时信息的系统和方法 |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102916741A (zh) * | 2012-11-06 | 2013-02-06 | 索尔思光电(成都)有限公司 | 一种光模块硬件在线测试方法 |
CN103019865A (zh) * | 2012-12-28 | 2013-04-03 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN103019865B (zh) * | 2012-12-28 | 2015-07-15 | 北京神州绿盟信息安全科技股份有限公司 | 虚拟机监控方法和系统 |
CN103019944A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于代码注入方式的测试方法和装置 |
CN103164306A (zh) * | 2013-03-25 | 2013-06-19 | 北京经纬恒润科技有限公司 | 一种测试逻辑的生成方法及装置 |
CN103164306B (zh) * | 2013-03-25 | 2015-05-20 | 北京经纬恒润科技有限公司 | 一种测试逻辑的生成方法及装置 |
CN103593285A (zh) * | 2013-10-17 | 2014-02-19 | 北京控制工程研究所 | 一种基于判定识别的图像类软件单元测试方法 |
CN103593285B (zh) * | 2013-10-17 | 2016-03-02 | 北京控制工程研究所 | 一种基于判定识别的图像类软件单元测试方法 |
CN106155900A (zh) * | 2015-04-17 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种代码测试监测方法、装置及设备 |
CN105095087A (zh) * | 2015-08-31 | 2015-11-25 | 武汉启明联创信息科技有限公司 | 一种基于权限操作的软件测试系统和方法 |
CN105260305A (zh) * | 2015-10-15 | 2016-01-20 | 珠海格力电器股份有限公司 | 嵌入式程序运行时cpu监控调试方法 |
CN105260305B (zh) * | 2015-10-15 | 2018-09-07 | 珠海格力电器股份有限公司 | 嵌入式程序运行时cpu监控调试方法 |
CN108415836A (zh) * | 2018-02-23 | 2018-08-17 | 清华大学 | 利用应用程序检测计算机系统性能变化的方法和系统 |
CN108415836B (zh) * | 2018-02-23 | 2020-12-01 | 清华大学 | 利用应用程序检测计算机系统性能变化的方法和系统 |
CN110196801A (zh) * | 2018-02-24 | 2019-09-03 | 武汉斗鱼网络科技有限公司 | 一种基于代码覆盖率的测试方法及装置 |
CN110059009A (zh) * | 2018-04-13 | 2019-07-26 | 百度(美国)有限责任公司 | 用于测试代码文件的方法和装置 |
CN110059009B (zh) * | 2018-04-13 | 2023-06-27 | 百度(美国)有限责任公司 | 用于测试代码文件的方法和装置 |
CN110119819A (zh) * | 2019-05-06 | 2019-08-13 | 北京长城华冠汽车科技股份有限公司 | 一种数据预定处理方法、装置及其存储介质 |
CN110187884B (zh) * | 2019-06-04 | 2020-10-27 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110187884A (zh) * | 2019-06-04 | 2019-08-30 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110389895A (zh) * | 2019-06-14 | 2019-10-29 | 平安科技(深圳)有限公司 | 终端测试方法、装置、计算机设备和存储介质 |
CN110532185A (zh) * | 2019-08-29 | 2019-12-03 | 中国工商银行股份有限公司 | 测试方法、装置、电子设备和计算机可读存储介质 |
CN110532185B (zh) * | 2019-08-29 | 2023-09-19 | 中国工商银行股份有限公司 | 测试方法、装置、电子设备和计算机可读存储介质 |
CN113238801A (zh) * | 2021-05-17 | 2021-08-10 | 上海中通吉网络技术有限公司 | 快递扫描信息采集方法、装置和系统 |
CN114253862A (zh) * | 2021-12-29 | 2022-03-29 | 湖南泛联新安信息科技有限公司 | 一种hdl代码仿真覆盖率异步事件驱动自动分析方法 |
CN114327491A (zh) * | 2022-03-07 | 2022-04-12 | 深圳开源互联网安全技术有限公司 | 源码插桩方法、装置、计算机设备和存储介质 |
CN114327491B (zh) * | 2022-03-07 | 2022-06-21 | 深圳开源互联网安全技术有限公司 | 源码插桩方法、装置、计算机设备和存储介质 |
CN118035045A (zh) * | 2024-04-11 | 2024-05-14 | 广东为辰信息科技有限公司 | 一种基于qnx系统的系统调用检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102243609A (zh) | 一种基于嵌入式软件的测试分析方法及系统 | |
CN102222041A (zh) | 一种基于嵌入式软件的测试分析系统及方法 | |
CN101408862B (zh) | 一种嵌入式系统测试方法 | |
US9417859B2 (en) | Purity analysis using white list/black list analysis | |
US9274923B2 (en) | System and method for stack crawl testing and caching | |
US8938729B2 (en) | Two pass automated application instrumentation | |
US8826254B2 (en) | Memoizing with read only side effects | |
CN104850411B (zh) | 存储系统基准评测程序生成方法及装置 | |
WO2014074161A1 (en) | Determination of function purity for memoization | |
CN101833500A (zh) | 一种基于Agent的嵌入式软件智能测试方法 | |
CN104156311B (zh) | 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法 | |
CN102222035A (zh) | 基于符号执行技术的软件行为检测系统及检测方法 | |
CN101354675A (zh) | 一种嵌入式软件动态内存检测的方法 | |
US20100275185A1 (en) | System and Method for High Performance Coverage Analysis | |
CN115357515B (zh) | 一种多核系统的调试方法、装置、计算机设备及存储介质 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN110633199A (zh) | 用于支持智能合约的区块链的测试装置、方法及介质 | |
CN114116455A (zh) | 一种面向开源基础组件库的集群化模糊测试方法及装置 | |
CN112612697A (zh) | 一种基于字节码技术的软件缺陷测试定位方法及系统 | |
US11520682B2 (en) | Code coverage method for embedded system on chip | |
CN111611158A (zh) | 一种应用性能分析系统及方法 | |
CN113392032B (zh) | 一种api发现的方法、确定测试覆盖率的方法及装置 | |
CN113535545A (zh) | 一种用于程序动态分析的二进制插桩方法 | |
CN110096888A (zh) | 一种加快验证及分析smm安全隐患的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20111116 |