一种基于嵌入式软件的静态检测方法及其系统的制作方法

文档序号:6375790阅读:218来源:国知局
专利名称:一种基于嵌入式软件的静态检测方法及其系统的制作方法
技术领域
本发明涉及软件检测技术领域,特别是涉及一种基于嵌入式软件的静态检测方法及其系统。
背景技术
嵌入式系统发展到目前 ,广泛应用于自动化控制、军事技术、工业控制、科学研究、医学研究、交通管理、人工智能等系统环境中。嵌入式系统中,硬件是核心,软件是灵魂,嵌入式软件在整体系统中处于关键地位。如何在尽量缩短开发周期的条件下,保证嵌入式软件的质量、可靠性、安全性等,成为了一个备受关注的课题。因此,嵌入式软件测试的重要性日关出。在嵌入式软件开发过程中,代码中存在的错误发现越晚,则维护代价越高,所以,尽早地发现并解决代码中存在的错误,对控制嵌入式软件的开发成本及保证嵌入式软件质量至关重要。静态检测是在不运行程序的情况下,对源代码结构进行分析发现潜在错误,能够在开发阶段发现源码中存在的问题,这对于控制嵌入式软件开发周期及降低数字家嵌入式软件维护成本具有重要的意义。目前已存在也存在针对C进行静态检测的工具,有的基于命令行工作,比如Splint, CPPCheck,容易产生较多警告信息,其中一些为误报信息,容易淹没正常错误信息,检测结果不易查看。有的价格昂贵,比如QAC/C++、PC-Lint> LDRA及PolySpace,对于小成本嵌入式项目来说,测试成本难以接受,难于推广。另外,现有的静态检测技术在检测过程中仅考虑控制流信息,没有考虑数据流分析,对某些错误无法检测;没有对路径别名进行分析,会产生许多误报信息。现有的免费静态检测工具基于命令行工作,无法直观定位违规路径信息,不方便开发人员根据检测结果对源码中存在的错误问题进行修改。总体来说现有技术存在以下不足
1)检测过程仅使用控制流信息,没有集合数据流信息,某些错误无法检测;
2)没有对路径别名进行分析,会产生误报信息;
3)没有对违反规则的执行路径定位,检测结果不能被其他工具利用。

发明内容
为了克服现有技术的不足,本发明的一个技术目的是提供一种使用方便,能够很好实现对源文件进行检测的基于嵌入式软件的静态检测方法。为了克服现有技术的不足,本发明的另一个技术目的是提供一种使用方便,能够很好实现对源文件进行检测的基于嵌入式软件的静态检测方法。为实现上述技术目的,本发明采用的技术方案如下
一种基于嵌入式软件的静态检测方法,包括以下步骤
对源文件结构进行分析,生成控制流、数据流信息的步骤;
对规则文件进行解析的步骤;根据解析产生的规则约束字符串构造正则表达式的步骤;
根据正则表达式、控制流、数据流信息执行规则匹配的步骤;
如果发现匹配条目,则对违反检测规则的语句及控制流路径进行记录,进行封装,将封装产生的检测结果,然后进行分析显示。优选地,所述执行规则匹配,还包括在规则匹配过程更新路径别名信息的步骤。优选地,更新路径别名信息具体为根据动态内存分配、动态内存释放及指针变量赋值操作时更新路径别名信息。优选地,还包括通过预设的敏感资源检测库对源文件进行敏感检测的步骤。
优选地,所述规则匹配为在GMPLE图上执行匹配操作,根据检测规则的复杂程 度,执行相应程度的规则检测。为实现上述第二个技术目的,本发明采用的技术方案如下
一种基于嵌入式软件的静态检测系统,包括
用于负责向GCC插件框架注册需监听的插件事件,GCC插件框架在监听的插件事件产生后会调用预先定义的回调函数的事件注册模块;
负责对源代码进行解析生成控制流,数据依赖,GIMPLE图等信息的结构信息生成模
块;
基于GIMPLE图完成检测工作,结合控制流及数据依赖信息进行检测的规则检测模块; 负责对规则文件进行解析建立规则链的所述规则解析模块;
对规则的模式字符串进行处理生成正则表达式正则表示式构建模块;
负责在GMPLE图上执行匹配操作,根据检测规则的复杂程度,执行相应程度的规则检测的规则匹配模块;
对路径别名进行分析处理的模块,动态内存分配,动态内存释放及指针变量赋值操作均影响路径别名分析关系,当检测过程遇到上述操作语句时,路径别名分析模块更新路径别名信息的路径别名分析模块;
对静态检测结果采用统一格式进行封装,针对每条匹配结果,封装保存详细违规信息及违规路径对应的路径条件信息的匹配结果封装模块。优选地,还包括针对嵌入式软件对敏感资源泄漏的特点,静态检测工具预定义了一系列资源泄露检测规则的保存库预定义规则库。与现有技术相比,本发明的优点在于
本发明通过客户端模块和检测执行端模块结合数据流信息对嵌入式软件执行静态检测,并能对路径别名进行分析,减少误报信息。


图I为静态检测工具框架 图2为静态检测工具检测执行端框架 图3为GIPMLE图构建流程 图4为正则表达式构建流程 图5为路径别名分析模块流程 图6为路径条件信息格式图.
具体实施例方式下面结合附图和具体实施方式
对本发明作进一步详细的说明。应当理解,此处所描述的具体实施例仅仅用于解释发明,并不用于限定实用新型。本发明为了实现可视化的嵌入式软件的静态检测,客户端以Eclipse插件的形式运行于开发机JRE环境中,采用JFACE/SWT进行GUI设计,提供图形化规则文件编辑支持,测试人员完成源文件编辑工作后,可对源文件执行静态检测,客户端发送命令通知检测执行端开始静态检测。检测执行端接收客户端发送的开始检测命令,首先对源文件结构进行分析,生成控制流、数据流信息,调用规则解析模块对规则文件进行解析,根据解析产生的规则约束字符串构造正则表达式。在正则表达式、控制流程图、数据流程图正确构建的基础 上,控制器调用规则匹配模块执行规则匹配,规则匹配过程更新路径别名信息,如果发现匹配条目,则对违反检测规则的语句及控制流路径进行记录,并通过匹配结果封装模块进行封装,将封装产生的检测结果发送给客户端供后者分析显示。客户端对检测结果进行分析、映射,根据检测结果更新GUI,让开发人员能够直观地查看静态检测结果,直观查看规则违反情况,如图I所示。本发明为了结合数据流信息及路径别名信息实现嵌入式软件的静态检测,检测执行端以GCC插件形式开发,执行实际静态检测工作,框架图如图2所示,控制器调用插件事件注册模块完成GCC插件事件注册,当对源文件结构进行分析,插件事件产生,插件框架回调函数完成结构信息的生成工作,主要生成GMPLE图、控制流程、数据流等结构信息。GIMPLE图是基于基本块及各基本块相邻边构建的,结构信息生成模块遍历每个基本块,遍历基本块内每条GMPLE语句,以GMPLE语句信息创建图结点并连接结点之间的边,最终完成GIMPLE图构建工作,详细构建流程如图3所示。另一方面,控制器调用规则解析模块解析规则文件,根据规则模式字符串构建正则表达式,如图4所示,规则匹配模块负责在GMPLE图上执行匹配操作,根据规则的简易程度,分别调用相应的检测方式完成实际检测工作,检测过程中更新路径别名信息,路径别名分析模块对路径别名进行分析处理,动态内存分配,动态内存释放及指针变量赋值操作均影响路径别名分析关系,当检测过程遇到上述操作语句时,路径别名分析模块更新路径别名信息,路径别名分析模块流程如图5所示,如果存在匹配结果,即存在违反静态检测规则的执行路径,调用匹配结果封装模块生成客户端可识别的结果数据,供客户端读取解析,针对每条匹配结果,封装保存详细违规信息及违规路径对应的路径条件信息。违规路径采用如图6所示的格式进行保存,这样可以方便其他程序对路径信息重构。客户端是以Eclipse插件形式开发,按照MVC模式,即模型-视图-控制器(Model-View-Control)模式进行设计,并且整个客户端以Eclipse插件形式运行于Eclipse JRE之上。视图层在MVC模式中负责测试结果数据的显示。它利用Eclipse扩展点机制,对Eclipse进行扩展,以Eclipse插件的形式来实现测试结果显示,接受用户控制,Gimple匹配结果显示,源文件编辑及匹配映射等功能。在视图层,控制视图对测试进行控制,如选取被测试项目,选取被测试源文件,选取检测规则文件及开始执行静态检测等。同时,控制视图委托控制器完成文件发送功能,启动测试结果手机线程等待接受测试结果数据。测试结果显示视图则用于显示测试结果,如违反了哪条规则,哪些源代码语语句违反了这些规则和用户定义的规则警告信息等情况。控制层控制发送及接收数据,对接收的结果数据进行分析,并根据分析结果渲染视图层。在分析映射渲染过程中,需要完成结果数据GMPLE语句到源代码视图相应行数及GMPLE匹配视图中相应GMPLE结点的映射功能。模型层提供了客户端几个基本的数据模型, 包括匹配结果信息,匹配映射信息及用于更新视图层的渲染信息。
权利要求
1.一种基于嵌入式软件的静态检测方法,其特征在于,包括以下步骤 对源文件结构进行分析,生成GMPLE图、控制流、数据流信息的步骤; 对预设的规则文件进行解析的步骤; 根据解析产生的规则约束字符串构造正则表达式的步骤; 根据正则表达式 、控制流、数据流信息执行规则匹配的步骤; 如果发现匹配条目,则对违反检测规则的语句及控制流路径进行记录,进行封装,将封装产生的检测结果,然后进行分析显示。
2.根据权利要求I所述的基于嵌入式软件的静态检测方法,其特征在于,在执行规则匹配的步骤中,还包括在规则匹配过程更新路径别名信息的步骤。
3.根据权利要求2所述的基于嵌入式软件的静态检测方法,其特征在于,更新路径别名信息具体为进行动态内存分配、动态内存释放及指针变量赋值操作时,更新路径别名信肩、O
4.根据权利要求I所述的基于嵌入式软件的静态检测方法,其特征在于,还包括通过预设的敏感资源检测库对源文件进行敏感检测的步骤。
5.根据权利要求I所述的基于嵌入式软件的静态检测方法,其特征在于,所述规则匹配为在GMPLE图上执行匹配操作,根据检测规则的复杂程度,执行相应程度的规则检测。
6.一种基于嵌入式软件的静态检测系统,其特征在于,包括 用于负责向GCC插件框架注册需监听的插件事件,GCC插件框架在监听的插件事件产生后会调用预先定义的回调函数的插件事件注册模块; 负责对源代码进行解析生成控制流,数据依赖,GIMPLE图等信息的结构信息生成模块; 基于GIMPLE图完成检测工作,结合控制流及数据依赖信息进行检测的规则检测模块; 负责对规则文件进行解析建立规则链的所述规则解析模块; 对规则的模式字符串进行处理生成正则表达式正则表示式构建模块; 负责在GMPLE图上执行匹配操作,根据检测规则的复杂程度,执行相应程度的规则检测的规则匹配模块; 对路径别名进行分析处理的模块,动态内存分配,动态内存释放及指针变量赋值操作均影响路径别名分析关系,当检测过程遇到上述操作语句时,路径别名分析模块更新路径别名信息的路径别名分析模块; 对静态检测结果采用统一格式进行封装,针对每条匹配结果,封装保存详细违规信息及违规路径对应的路径条件信息的匹配结果封装模块。
7.根据权利要求6所述的基于嵌入式软件的静态检测系统,其特征在于,还包括针对嵌入式软件对敏感资源泄漏的特点,静态检测工具预定义了一系列资源泄露检测规则的保存库预定义规则库。
全文摘要
本发明提供一种基于嵌入式软件静态检测的方法,该方法解决了现有静态检测技术的不足,结合控制流、数据流信息及路径别名信息进行静态检测。该方法包括检测执行端模块和客户端模块,客户端提供图形化规则文件编辑支持,测试人员完成源文件编辑工作后,可对源文件执行静态检测,客户端发送命令通知检测执行端开始静态检测。检测执行端接收客户端发送的开始检测命令,对源文件结构进行分析,调用规则解析模块对规则文件进行解析,处理后产生匹配结果,并通过匹配结果封装模块进行封装,将封装产生的检测结果发送给客户端供后者分析显示。客户端对检测结果进行分析、映射,根据检测结果更新客户端,让开发人员能够直观地查看静态检测结果,直观查看规则违反情况。
文档编号G06F11/36GK102968367SQ20121030968
公开日2013年3月13日 申请日期2012年8月28日 优先权日2012年8月28日
发明者刘发贵, 贺南, 刘佳欣 申请人:华南理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1