首页 / 专利库 / 软件 / 软件包 / 软件组件 / 一种嵌入式软件动态缺陷检测方法

一种嵌入式软件动态缺陷检测方法

阅读:889发布:2024-01-10

专利汇可以提供一种嵌入式软件动态缺陷检测方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种精确的嵌入式 软件 动态 缺陷 检测方法,包括测试代理端模 块 和客户端模块,两部分通过网络进行通信。测试代理运行于目标机上,检测被测程序,对所需要的数据和信息进行 采样 提取,并通过网络发送给客户端。测试代理分为采样模块和测试代理模块,采样模块以Linux 内核 模块的形式加载到内核空间中,对PMU寄存器进行操作,对指令地址进行采样;测试代理模块负责代理内核模块与客户端进行交互,接收客户端的 请求 与配置等,对内核模块做出相应的设置,并从内核模块中读取样本数据发送给客户端。客户端以Eclipse 插件 的形式开发并集成到GDIX嵌入式软件测试平台中。本发明通过测试代理端模块和客户端模块提供嵌入式软件动态缺陷检测服务,并实时在线地进行测试结果数据的处理和显示。,下面是一种嵌入式软件动态缺陷检测方法专利的具体信息内容。

1.一种嵌入式软件动态缺陷检测方法,由客户端和测试代理端两部分共同协作完成,所述客户端设置在开发机中,测试代理端设置在目标机中,客户端和测试代理端通过网络进行通信,使得测试代理端所采集的样本数据通过网络实时发送给客户端进行分析并实时更新显示;
所述测试代理端包括用于采集和统计样本数据的采样和进行样本数据传送的测试代理模块;
其特征在于:所述采样模块分为PMU配置模块、中断处理模块、控制模块、proc文件系统接口、配置表以及样本缓存;
所述PMU配置模块是基于微处理支持的PMU硬件单元,封装PMU硬件单元的操作细节,提供抽象访问接口供上层调用;
所述中断处理模块是对系统运行时发生的多种硬件事件中断进行捕获处理,对引起这些事件的指令地址进行采样,组织为样本并存入样本缓存;
所述控制模块通过proc文件系统接口与测试代理模块进行交互,接收事件配置信息,经过配置表映射为PMU事件码,通过PMU配置模块写入PMU事件选择单元,通过proc文件系统接口返回样本缓存中的样本数据信息;
所述proc文件系统接口是测试代理模块和采样模块进行交互的接口,采样模块通过它向测试代理模块提供样本数据访问接口,同时,测试代理模块把它作为采样模块的配置接口;
所述配置表是一个便于查找的哈希表结构,维护事件配置信息和PMU硬件单元事件码的对应关系;
所述样本缓存采用循环队列来表示,用于存放中断处理模块生成的样本数据信息,供测试代理模块通过proc文件系统接口读取并发送给开发机的客户端;
所述测试代理模块包括Slave pool、连接分配器、工作线程与服务进程
所述Slave pool是一个专为测试代理模块实现的进程池,Slave pool通过Domain Socket同服务进程通信,传递socket句柄,并了解它们的状态;
所述连接分配器负责监听服务端口,接收连接请求并调用Slave pool的接口对请求进行分配和管理;
所述工作线程通过proc文件系统接口从采样模块的样本缓存中读取测试样本数据信息,并通过客户端连接socket发送给客户端;
所述服务进程与客户端进行交互,并且操作与工作线程共享的数据,当它接收到连接分配器发送过来的与客户端连接的socket句柄后,服务进程进入一个循环中,对该句柄select并进行超时处理,同时进行与客户端交互、对共享数据的操作;
所述客户端包括数据收集器和数据处理模块,数据收集器为客户端接收样本数据,并交给数据处理模块进行数据的处理解析,数据处理模块按照设定的解析算法对数据进行分析处理,并更新GUI上相应的组件。
2.根据权利要求1所述的嵌入式软件动态缺陷检测方法,其特征在于所述测试代理端运行于目标机的嵌入式操作系统或目标板中。
3.根据权利要求2所述的嵌入式软件动态缺陷检测方法,其特征在于所述采样模块运行于嵌入式Linux的内核空间中,进行缺陷样本数据采集,并提供接口供测试代理模块进行配置和读取。
4.根据权利要求2或3所述的嵌入式软件动态缺陷检测方法,其特征在于所述测试代理模块运行于嵌入式Linux的用户空间中,监听特定端口,并提供嵌入式缺陷检测测试服务,与发起连接的客户端进行交互,读取采样模块采集的样本数据,通过网络实时发送给客户端。
5.根据权利要求1所述的嵌入式软件动态缺陷检测方法,其特征在于所述客户端以Eclipse插件的形式运行于开发机中,并通过网络同测试代理模块进行交互,将控制命令或者经过交叉编译工具链编译的可执行文件发送给目标机的测试代理模块。
6.根据权利要求1或5所述的嵌入式软件动态缺陷检测方法,其特征在于所述数据收集器和数据处理模块从测试代理端收集二进制格式的数据,并对接收到的二进制数据进行格式的转换,包括对字节序进行调整,将小端字节序的数据转化为大端字节序的Java结构,并保存在内存中。
7.根据权利要求1所述的嵌入式软件动态缺陷检测方法,其特征在于所述开发机还设置有符号解析器,为客户端插件提供符号解析服务。
8.根据权利要求7所述的嵌入式软件动态缺陷检测方法,其特征在于所述客户端以Eclipse插件的形式开发并集成到GDIX嵌入式软件测试平台中,按照模型-视图-控制三层模式进行设计,并且整个客户端以插件的形式运行于JRE之上;
所述模型层为客户端提供基本的数据模型,包括进行符号解析需要的地址信息、分析字节流数据转化的结构化符号信息以及更新GUI所需的渲染信息;
所述控制层控制客户端与测试代理端的网络连接、发送和接收网络数据、对接收的字节流数据进行分析以及渲染;
所述展示层在对数据进行显示,其利用Eclipse的扩展点机制,对Eclipse进行扩展,以插件的形式来实现。

说明书全文

一种嵌入式软件动态缺陷检测方法

技术领域

[0001] 本发明属于嵌入式软件测试领域,具体涉及一种基于嵌入式软件动态缺陷检测的方法。技术背景
[0002] 在数字家电领域,嵌入式系统需要支持大量的高清视频和音频的播放,提供高清视听娱乐和信息服务。那么嵌入式软件势必存在大量编码、解码等CPU运算,成为CPU消耗型软件,因此运行时的效率成为提高嵌入式软件性能的关键问题之一。
[0003] 在嵌入式系统中,各种资源相对非常有限,嵌入式软件跟硬件结合紧密,编写高效的嵌入式软件,需要考虑很多跟硬件相关的问题,例如,如何高效地利用RAM、如何合理地使用I/O端口等。然而,许多问题跟目标系统的硬件环境紧密相关,开发人员很难或者根本无法凭借静态编码来解决,如由数据的非局部性而造成的数据缓存频繁缺失、由于编译器和处理器流线等因素造成的分支预测失效等等,这些事件的产生却能够影响嵌入式软件的运行效率。分支预测失效将造成流水线的冲洗,浪费大量的时钟周期,无法发挥微处理器乱序执行的效能;由于处理器频率存储器访问速度之间的差异,数据缓存缺失将造成对相对慢速的存储器的大量访问,降低运行效率;等等。
[0004] 这些影响指令执行效率的缺陷问题通过静态地对代码进行检查是无法消除的,它们可能不是由代码本身引起的,而是由于编译或硬件特性的改变而产生,对于不同的硬件平台、不同的编译器工具链,问题都会有所区别,没有一个统一的、静态的方法来解决,只能通过动态的方式,在软件运行的过程中去统计和定位出现缺陷的关键之处,从而使开发人员能够针对检测的结果去优化代码的实现,减少或消除缺陷所带来的影响,提高嵌入式软件的运行效率。
[0005] 目前,对于动态缺陷检测技术的研究并不多见。有使用I/O-EFA对软硬件平台本身的故障的一种检测,对于与硬件相关的软件缺陷问题,并不能很好地解决;有源代码插桩技术,能够发现软件中的异常行为,但是对于不可预见的异常行为,以及与硬件相关问题的检测,有很大的局限性;有开源软件OProfile,但是它需要Linux内核的支持,在编译内核的过程中需要指定OProfile选项,并且它需要等到被测程序运行完毕以后,才能得到测试结果,无法进行实时的在线测试。

发明内容

[0006] 本发明的目的在于克服目前相关工具无法进行动态实时缺陷检测,测试结果精度不高的不足,提出了一种精确的嵌入式软件动态缺陷检测方法。
[0007] 为了实现发明目的,采用的技术方案如下:
[0008] 一种嵌入式软件动态缺陷检测方法,分为客户端和测试代理端两部分,所述客户端设置在开发机中,测试代理端设置在linux目标机中,客户端和测试代理端通过网络进行通信,使得测试代理端所采集的样本数据通过网络实时发送给客户端进行分析并实时更新显示。
[0009] 上述技术方案中,所述测试代理端运行于目标机端的嵌入式操作系统或目标板中。其包括用于采集和统计样本数据的采样和进行样本数据传送的测试代理模块。
[0010] 所述采样模块运行于嵌入式Linux的内核空间中,是测试代理端的核心部分,负责缺陷样本数据的采集,并提供接口供测试代理模块进行配置和读取,分为PMU配置模块、中断处理模块,控制模块,proc文件系统接口,配置表以及样本缓存。
[0011] 所述PMU配置模块是基于微处理支持的PMU硬件单元,封装PMU硬件单元的操作细节,提供抽象访问接口供上层调用;
[0012] 所述中断处理模块是对系统运行时发生的多种硬件事件中断进行捕获处理,对引起这些事件的指令地址进行采样,组织为样本并存入样本缓存;
[0013] 所述控制模块通过proc文件系统与测试代理模块进行交互,接收事件配置信息,经过配置表映射为PMU事件码,通过PMU配置模块写入PMU事件选择单元,通过proc文件系统接口,返回样本缓存中的样本数据信息;
[0014] 所述proc文件系统接口是内核空间和用户空间进行交互常用的接口,也是测试代理模块和采样模块进行交互的接口。采样模块通过它向测试代理模块提供样本数据访问接口,同时,测试代理模块把它作为采样模块的配置接口;
[0015] 所述配置表属于内核的共享结构,是一个便于查找的哈希表结构,维护事件配置信息和PMU硬件单元事件码的对应关系;
[0016] 所述样本缓存采用循环队列来表示,用于存放中断处理模块生成的样本数据信息,供测试代理模块通过proc文件系统接口读取并发送给开发机的客户端。
[0017] 所述测试代理模块运行于嵌入式Linux的用户空间中,负责监听特定端口,提供嵌入式缺陷检测测试服务,与发起连接的客户端进行交互,读取采样模块采集的样本数据,通过网络实时发送给客户端。测试代理模块包括Slave pool,连接分配器,工作线程与服务进程
[0018] 所述Slave pool是一个简单的、专为测试代理模块实现的进程池,Slave pool通过Domain Socket同服务进程通信,传递socket句柄,并了解它们的状态;
[0019] 所述连接分配器负责监听服务端口,接收连接请求并调用Slave pool的接口对请求进行分配和管理;
[0020] 所述工作线程通过proc文件系统接口从采样模块的样本缓存中读取测试样本数据信息,并通过客户端连接socket发送给客户端;
[0021] 所述服务进程负责与客户端进行交互,并且操作与工作线程共享的数据。当它接收到连接分配器发送过来的与客户端连接的socket句柄后,服务进程进入一个循环中,对该句柄select并进行超时处理,同时进行与客户端交互、对共享数据的操作。
[0022] 所述客户端以Eclipse插件的形式运行于软硬件资源丰富的宿主端开发机中,并通过网络同测试代理模块进行交互,将控制命令或者经过交叉编译工具链编译的可执行文件发送给目标机端的测试代理模块,客户端包括数据收集器和数据处理模块,数据收集器负责为客户端接收样本数据,交给数据处理模块进行数据的处理解析。数据处理模块按照一定的解析算法对数据进行分析处理,更新GUI上相应的组件。在开发机中,同样运行着符号解析器,为客户端插件提供符号解析服务。
[0023] 所述数据收集器和数据处理模块从测试代理端收集数据,同时,对接收到的二进制数据进行格式的转换,主要是对字节序进行调整,将小端字节序的数据转化为大端字节序的Java结构,并保存在内存中。
[0024] 本发明通过客户端和测试代理端对嵌入式软件进行了实时在线的动态缺陷检测,并且能将测试数据动态直观地显示给测试用户。附图说明
[0025] 图1为交叉测试模型。
[0026] 图2为嵌入式软件动态缺陷检测的框架图。
[0027] 图3为测试代理模块框架图。
[0028] 图4为采样模块结构图。
[0029] 图5为客户端框架图。
[0030] 图6为客户端符号解析服务器功能图。
[0031] 图7为客户端控制层数据处理的过程图。
[0032] 具体实施方法
[0033] 下面结合附图对本发明做进一步的说明。
[0034] 本发明为了实现实时在线的缺陷检测,采用基于交叉测试的测试模式,如图1所示,测试工具运行在软硬件配置丰富的宿主机上,它对被测程序进行处理后,使其运行在软硬件资源相对缺乏的目标机上,产生测试信息,并通过一定的通信连接由测试代理传输到宿主机上,由测试工具接收并显示测试结果。
[0035] 本发明中的嵌入式软件动态缺陷检测工具总体框架图如图2所示。设计上遵循交叉测试模式,分为客户端和测试代理端,客户端运行于开发机,测试代理端分为测试代理模块和内核采样模块。客户端以eclipse插件的形式运行在开发机JRE环境中,采用SWT/JFACE进行GUI设计。开发人员对程序交叉编译完毕后,可以用客户端将可执行文件上传给测试代理端,并告知测试代理端需要对哪些缺陷事件进行检测。测试代理模块接收可执行文件并将其作为子进程运行,同时将各种必需的配置信息通过字符设备接口写入内核模块中。内核模块通过字符设备接收配置信息,并且对微处理器的PMU硬件单元进行读写,根据配置信息进行各种寄存器进行配置、开始/停止PMU中断等操作;PMU中断处理负责进行具体的采样工作,对中断发生时所保存的用户态栈进行采样,提取其中的pc寄存器值,组织成样本数据结构保存到样本缓存中。测试代理模块进行完配置后,通过字符设备对样本缓存进行读取,并实时发送给客户端数据接收模块。客户端将这些样本数据进行解析,得到一系列的指令地址以及事件,通过调用地址解析服务,将指令地址与具体的源代码行进行对应,并生成渲染信息,交付给渲染模块。渲染模块对GUI进行更新,让开发人员能够从源代码中直观地获得动态缺陷事件的信息。
[0036] 测试代理端运行于目标机的嵌入式操作系统或目标板中。其包括用于采集和统计样本数据的采样模块和进行样本数据传送的测试代理模块。测试代理模块负责代理内核模块与客户端进行交互,接收客户端的请求与配置等,对内核模块做出相应的设置,并从内核模块中读取样本数据发送给客户端。它的结构如图3所示。包括Slave pool、连接分配器、工作线程与服务进程,所述连接分配器为Dispatcher处理请求和请求队列。
[0037] 当Dispatcher接收一个客户端连接后,从客户端接收其所请求的服务类型,并生成request结构,放入请求队列中,并开始对队列中已有的请求进行调度,取出一个request交给Slave pool进行处理。Slave pool根据接收的Request类型,生成相应的服务进程,由于本发明所针对的是缺陷检测,所述的服务进程也是缺陷检测服务进程。缺陷检测服务进程只有一种服务状态,即缺陷检测服务。
[0038] 服务进程负责与客户端进一步交互,处理具体的服务请求。对于缺陷检测来说,有既定的如下服务流程:
[0039] (1)接收客户端发送的缺陷事件,将其转换为PMU能够识别的事件编码后,写入采样模块的op_conf接口;
[0040] (2)接收客户端发送的经过交叉编译的可执行文件,保存在目标机的本地文件系统中;
[0041] (3)接收客户端发送的数据请求命令,将上一步接收的可执行文件作为被测子进程启动,并把它的pid写入采样模块的op_ctr接口;
[0042] (4)启动工作线程。等待客户端发送命令,同时通过注册SIGCHLD信号处理函数,等待被测子进程结束。当被测子进程结束时,在信号处理函数中,向采样模块的op_ctr设备写入0,停止采样模块的工作。
[0043] 由于服务进程需要等待被测子进程的结束,以便停止采样模块的工作,通过向op_ctr写入0来完成,该操作需要对内核样本缓存进行冲洗,可能引起睡眠,等待op_data的读取进程来唤醒。如果服务进程既负责停止采样模块,同时也负责读取样本数据,则将产生死,服务进程可能会一直处于睡眠状态。Linux下线程是以独立的调度单元而存在的,因此工作线程的读取操作会唤醒服务进程,从而正常工作。
[0044] 测试代理端的采样模块以Linux内核模块的形式加载到内核空间中,对PMU寄存器进行操作,对指令地址进行采样。其结构如图4所示。
[0045] 采样模块加载时在/dev下建立三个字符设备。提供用户空间进程与模块的交互接口,模块负责对被测程序的指令地址采样,所得地址和缺陷事件的结构被称为样本,放置在样本缓存中。测试代理工作进程对这些设备进行读写时,可能引起阻塞而睡眠。在采样模块中共有两个等待队列:wait_for_read和sync_queue。当进程通过op_data设备读取样本缓存、但缓存为空时,进程将在wait_for_read队列上进行睡眠,直到中断处理模块将新的样本加入缓存使缓存为非空状态时,将唤醒睡眠的进程,使进程读取样本数据;当进程试图使采样模块停止采样时,需要对op_ctr进行写操作,此时需要对样本缓存进行冲洗,使缓存中剩余的样本全部被读取。若缓存非空,则需要在sync_queue上进行睡眠,直到缓存为空,则由读取进程唤醒sync_queue上睡眠的进程,对缓存进行冲洗。采样模块中还维护了一个配置表,模块将用户空间传来的对模块的配置信息转换为对PMU进行读写的配置信息后,存放在配置表中。
[0046] 客户端模块以Eclipse插件的形式开发并集成到GDIX嵌入式软件测试平台中,如附图5所示,按照MVC模式,即模型-视图-控制(Model-View-Control)模式进行设计,并且整个客户端以插件的形式运行于JRE之上。在开发机Linux系统上,同时运行着符号解析器,为客户端插件提供符号解析服务。开发人员将源代码利用交叉编译工具链编译成为可执行文件,并通过对视图层的操作传递给测试代理,以及发送配置信息后,便可从工程视图中打开源文件到编辑区,直观地看到源代码上对于缺陷事件的标记情况。
[0047] 模型层为客户端提供了几个基本的数据模型,包括进行符号解析需要的地址信息、分析字节流数据转化的结构化符号信息以及更新GUI所需的渲染信息;
[0048] 在控制层,客户端控制与测试代理端的网络连接、发送和接收网络数据、对接收的字节流数据进行分析以及渲染。在分析渲染的过程中,需要对地址符号进行解析,将指令地址与源文件以及代码行进行对应,才能帮助开发人员找到问题所在;其中,在客户端把符号解析模块独立成符号解析器,通过本地网络与客户端通信,符号解析服务器与客户端控制层的交互如图6所示,当控制层的渲染模块需要对获取的样本中的指令地址进行解析时,如果映射表尚未取得,则连接符号解析服务器,并将所需要解析的可执行文件所在路径告知服务器。后者对相应路径上的ELF可执行文件进行读取,获得在其中记录的地址——代码行映射的调试信息,符号解析服务器将映射关系存储为(地址,文件名,行号)三元组的数组,发送给客户端渲染模块使用。图7清楚地说明了控制层数据处理的过程,采取三个线程、两级缓存进行协作的好处在于,缓解网络数据的收集、分析和渲染之间的速度差异,使得网络访问以及GUI响应更加流畅迅速。
[0049] 展示层在MVC模式中负责对数据进行显示。它利用Eclipse的扩展点机制,对Eclipse进行扩展,以插件的形式来实现功能。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈