基于缺陷模式的静态分析方法和工具与流程

文档序号:12801957阅读:291来源:国知局
基于缺陷模式的静态分析方法和工具与流程

本发明涉及源代码分析领域,尤其涉及一种基于缺陷模式的静态分析方法和工具。



背景技术:

当前,我国软硬件基础设施,包括处理器、操作系统、甚至关键应用软件(如数据库、应用服务器)等,大多依赖于国外技术。“棱镜门”事件深刻表明:软硬件基础平台不自主,安全防护体系便形同虚设。为响应中央军委提出“大力推进自主可控信息系统建设,摆脱信息技术受制于人的局面”的要求,国家先后发布了一系列政策文件,强力推进国产自主化建设应用。

自主可控平台采用国产龙芯、飞腾芯片架构,运行基于linux的中标麒麟操作系统。由于wintel环境下底层操作指令、硬件环境及系统开发环境与自主可控平台下存在较大差异。如windows平台与linux平台间底层操作指令的不同,intel芯片与国产龙芯、飞腾芯片架构的不同,原来在政府、各企事业单位研制的基于windows集成开发环境的各类应用系统,存在与linux平台开发环境不兼容等问题,造成原有应用软件在自主可控服务器及自主可控终端无法直接运行。

在进行自主可控应用软件的迁移改造或重构工作中,已经形成的信息化建设的成果不能由于自主可控而全部丢弃,而如果因自主可控而导致信息化水平的大幅后退也是用户不能接受的,因此需要有相应的手段能够将基于wintel环境下研制的各类信息化软件在自主可控平台上完成顺利迁移改造或快速的重建。

因此迫切需要一种源代码评估方法,用于快速评估软件系统进行自主可控平台迁移的可行性,并对迁移前的准备做出指导,实现应用系统的兼容性检查,完成对应用系统的自主可控迁移评估和指导等工作。



技术实现要素:

本发明一种基于缺陷模式的程序静态分析方法,包括:预编辑程序的缺陷模式;遍历文件,找到所需分析的文件;对源程序进行逐行扫描,去除无需分析的代码;进行缺陷分析,调用该缺陷模式与去除代码后的程序进行匹配,如果匹配成功,则说明该文件存在该缺陷。

根据本发明的基于缺陷模式的程序静态分析方法的一实施例,其中,遍历文件,找到所需分析的文件,包括:通过读取用户指定的源程序所在目录,获取该目录下所有文件,进行遍历,根据需要分析的问题类型对文件进行过滤。

根据本发明的基于缺陷模式的程序静态分析方法的一实施例,其中,对源程序进行逐行扫描得到的信息包括类名、所属包、引用包、数据成员及其所属类型、成员方法及其参数个数、参数类型与返回值。

根据本发明的基于缺陷模式的程序静态分析方法的一实施例,其中,该缺陷模式存储在数据库中,进行缺陷分析之前根据需要分析的文件类型、缺陷类型,从数据库中读取。

根据本发明的基于缺陷模式的程序静态分析方法的一实施例,其中,得到调用该缺陷模式与该去除代码后的程序进行匹配的结果后,按照缺陷模式,对于每个缺陷模式,汇总该缺陷模式匹配成功的文件,每个文件中该缺陷模式匹配成功的次数及其所在行数。

本发明一种基于缺陷模式的静态分析工具,其中,包括:分析引擎以及知识模式数据库模块;该知识模式数据库模块用于存储程序的缺陷模式;该分析引擎用于遍历文件,找到所需分析的文件;对源程序进行逐行扫描,去除无需分析的代码;以及从该知识模式数据库模块调用该缺陷模式并与去除代码后的程序进行匹配。

本发明的有益效果在于,本发明一种基于缺陷模式的静态分析方法和工具,可以实现应用系统的兼容性检查,对迁移前的准备做出指导,对应用系统的自主可控迁移进行评估和指导。

附图说明

图1所示为本发明基于缺陷模式的静态分析工具的模块图;

图2所示为本发明基于缺陷模式的静态分析工具的工作流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

图1所示为本发明基于缺陷模式的静态分析工具的模块图,如图1所示,分析工具2包括:分析引擎3以及知识模式数据库模块5。

参考图1,知识模式数据库模块5用于存储缺陷模式。进行缺陷分析之前需要根据需要分析的文件类型、缺陷类型,从数据库中读取。缺陷模式加载成功后,会存储为缺陷模式数据模型,用于缺陷分析。

分析引擎3用于通过读取用户指定的源程序所在目录,获取该目录下所有文件。遍历该目录下所有的文件和文件夹,根据需要分析的问题类型对文件进行过滤,例如分析java语言和sql语言的缺陷需要关注扩展名为“.java”的源程序文件,分析javascript语言需要关注扩展名为“.js”的源程序文件,同时需要跳过第三方的库文件。将所有关注的文件基本信息汇总,形成文件信息的数据模型。分析引擎3还用于对对源程序进行逐行扫描,去除无需分析的代码,此处过滤掉了以“//”开头的单行注释;以“/*”开始并且以“*/”结尾的多行区块注释;以“@”开头的声明语句;单独成行的括号,包括小括号“()”,中括号“[]”和大括号“{}”,以及空行。同时,分析源代码。对于“.java”文件,分析得到java类的基本信息,包括类名、所属包、引用包、数据成员及其所属类型、成员方法及其参数个数、参数类型与返回值。最后将经过分析的源代码及相关信息存储到文件模型中,以后用于缺陷分析。分析引擎3根据文件模型和缺陷模式数据模型,进行缺陷分析。首先遍历文件模型,对于每个文件模型,遍历缺陷模式数据模型,将文件模型的源代码文件内容与缺陷模式数据模型中的定义的缺陷形式进行匹配,进行模型匹配,如果匹配成功,则说明该文件存在该缺陷。最后,把缺陷匹配信息存储为数据模型。并基于数据模型,生成分析结果。分析结果按照缺陷模式区分,对于每个缺陷模式,汇总该缺陷模式匹配成功的文件,每个文件中该缺陷模式匹配成功的次数及其所在行数。对于每个缺陷模式,还会列出针对性的解决建议,用户可以根据解决建议进行源代码的修改。

本发明还提供了一种基于缺陷模式的静态分析方法,主要用于分析源程序语言为java语言和javascript语言。

缺陷模式划分为三大类别:java语言的缺陷模式、javascript语言的缺陷模式和sql语言的缺陷模式。

java语言的缺陷模式可以细分为系统调用缺陷模式、新建数组/容器对象缺陷模式、对象实例化缺陷模式。其中系统调用缺陷模式是指java程序中调用了系统相关的脚本或者可执行程序,由于自主可控平台运行基于linux的操作系统,原有在windows上调用的脚本或可执行程序在自主可控平台上不能运行。新建数组/容器对象缺陷模式、对象实例化缺陷模式涉及java的垃圾自动回收机制,java垃圾自动回收机制在自主可控平台上影响jvm运行效率,建议手动回收。

javascript语言的缺陷模式可以细分为方法调用缺陷模式、activex缺陷模式、对话框打开缺陷模式、页面跳转缺陷模式、页面元素获取缺陷模式。其中方法调用缺陷模式是指某些javascript方法,例如innertext,在ie中能正常工作,但是在自主可控平台的linux系统上没有ie浏览器,需要兼容firefox浏览器;activex缺陷模式是指在ie下,可以使用activex控件;firefox下,无法使用。activex控件技术仅限于windows平台,需要基于npapi或qtbrowserplugin,重新开发firefox插件。javascript语言相关的缺陷模式就是解决firefox浏览器兼容性的问题。

sql语言缺陷模式则是指内置函数缺陷模式。原有在windows平台开发的应用系统用到了sqlserver、mysql、oracle等数据库。自主可控平台需要运行国产数据库,如达梦数据库和神通数据库。两类数据库虽然都支持标准的sql语句,但是在内置函数上存在较大区别,sql语言缺陷模式的目的是解决数据库内置函数不兼容的问题。

本发明涉及一种基于缺陷模式的静态分析方法包括:

获取源程序

通过读取用户指定的源程序所在目录,获取该目录下所有文件。遍历该目录下所有的文件和文件夹,根据需要分析的问题类型对文件进行过滤,例如分析java语言和sql语言的缺陷需要关注扩展名为“.java”的源程序文件,分析javascript语言需要关注扩展名为“.js”的源程序文件,同时需要跳过第三方的库文件。将所有关注的文件基本信息汇总,形成文件信息的数据模型。

分析源程序

对源程序进行逐行扫描,去除无需分析的代码,此处过滤掉了以“//”开头的单行注释;以“/*”开始并且以“*/”结尾的多行区块注释;以“@”开头的声明语句;单独成行的括号,包括小括号“()”,中括号“[]”和大括号“{}”,以及空行。

同时,分析源代码。对于“.java”文件,分析得到java类的基本信息,包括类名、所属包、引用包、数据成员及其所属类型、成员方法及其参数个数、参数类型与返回值。最后将经过分析的源代码及相关信息存储到文件模型中,以后用于缺陷分析。

缺陷模式加载

将缺陷模式存储在数据库中。进行缺陷分析之前需要根据需要分析的文件类型、缺陷类型,从数据库中读取。缺陷模式加载成功后,会存储为缺陷模式数据模型,用于缺陷分析。

缺陷分析

基于步骤2生成的文件模型和步骤3生成的缺陷模式数据模型,进行缺陷分析。首先遍历文件模型,对于每个文件模型,遍历缺陷模式数据模型,将文件模型的源代码文件内容与缺陷模式数据模型中的定义的缺陷形式进行匹配,进行模型匹配,如果匹配成功,则说明该文件存在该缺陷。最后,把缺陷匹配信息存储为数据模型。

生成分析结果

基于步骤4生成的数据模型,生成分析结果。分析结果按照缺陷模式区分,对于每个缺陷模式,汇总该缺陷模式匹配成功的文件,每个文件中该缺陷模式匹配成功的次数及其所在行数。对于每个缺陷模式,还会列出针对性的解决建议,用户可以根据解决建议进行源代码的修改。

为了探索高效易用的扩展方式,从而降低用户的学习成本、快速增强工具的缺陷查找能力,本发明提出了一个支持半自动化扩展的代码缺陷静态分析方法,该方法具有以下特点:

根据迁移经验形成了针对自主可控平台的缺陷模式库。基于以前应用系统的迁移过程中遇到的问题和解决方法,归纳总结出来一套迁移经验库,并形成适用于自主可控平台应用系统代码静态分析的缺陷模式库,该库包含了对应用系统源码进行静态分析时所需要用到的缺陷模式描述,以及对于每个缺陷模式总结了建议的解决方法和解决所需工作量。

提供了缺陷模式库的“半自动化扩展”机制。提供了若干不同类型的“缺陷模式描述模板”。用户可以根据自身需要,选择适当的模板来快速增加缺陷模式。用户选择模板和填入必要信息,生成符合格式要求的“缺陷模式描述”,然后添加至缺陷模式库中。缺陷模式库的半自动扩展机制使用户免于手工编写代码,也不需要为描述缺陷模式而花费太多的精力学习某种语言。

本发明的有益效果在于,该方法可以实现应用系统的兼容性检查,对迁移前的准备做出指导,对应用系统的自主可控迁移进行评估和指导。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1