程序静态分析解决方案

上传人:油条 文档编号:1575200 上传时间:2017-06-26 格式:PDF 页数:24 大小:2.19MB
返回 下载 相关 举报
程序静态分析解决方案_第1页
第1页 / 共24页
程序静态分析解决方案_第2页
第2页 / 共24页
程序静态分析解决方案_第3页
第3页 / 共24页
程序静态分析解决方案_第4页
第4页 / 共24页
程序静态分析解决方案_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《程序静态分析解决方案》由会员分享,可在线阅读,更多相关《程序静态分析解决方案(24页珍藏版)》请在金锄头文库上搜索。

1、 库博 V2.7 程序静态分析 解决方案 北京大学软件工程国家 工程 研究中心 北京北大软件工程发展有限公司 Cobot 1. COBOT简介 库博 是由北京北大软件工程发展有限公司和北京大学软件工程国家工程研究中心联合研发的一种 C/C+程序静态分析工具,采用 基于专利技术分析引擎开发 的 具有自主知识产权 静态分析框架, 综合运用了多种最先进的静态分析技术 ,第一时间发现代码的问题,自动识别质量缺陷、安全漏洞、架构问题,并 可以 进行软件度量及规则的定制化分析、质量报表的模板定制。 库博与一般的源代码分析工具不同,一般的源代码分析工具只能分析纯静态的代码问题,如编码规则检测、架构检查等。而

2、库博可以分析 运行时缺陷 (语义缺陷) ,库博的代码分析是通过算法全路径 , 遍历每条可执行路径,发现传统意义上只有通过动态测试才能发现的代码缺陷,如内存泄漏、空指针解引用等问题。还能分析代码中存在的 安全漏洞 ,如数组越界、缓冲区溢出等。 1.1 工具的特点 库博相比于其他国产静态分析工具的主要特点 如 下 : 1) 更强大的语法词法分析: 能够在编译不通过的情况下进行检测,分析,并提示编译缺少的文件,但仍不影响整体检测 。 2) 更多的缺陷检测类型 :支持更多的运行时缺陷的检测,相比于国外领先工具(如 Klocwork) 具有相似的误报率 (15%左右 )及更低的漏报率 (相对漏报率约20

3、%以下, 能够发现若干 Klocwork 不能发现的或遗漏的缺陷 )。 3) 更多的在线用户 :由于库博采用 B/S 的模式,所以部署一套系统 , 可支持多用 户同时在线检测,只需在用户管理中配置相应的用户 。 4) 更完善的缺陷确认机制 :在缺陷检测完毕后,能够快速定位缺陷发生的行数,并且库博提供变量的定义处、函数的定义处以及函数被调用点的自动定位等功能 ,并以统计图方式 显示 各等级缺陷 。 5) 更加快速检测 :百万行代码可在 1 小时之内检测完毕 。 6) 更加易用 :在检测项配置阶段,能够自动给出每种检测配置项的解释及用例 ,并能按照用户的要求配置结果输出模板,并支持 WPS 等国产

4、办公软件 。 7) 分析的缺陷全面、准确 ,综合统计准确率达 90%以上。 8) 强大的适应性 ,能分析上千万行代码,并支持复杂的编译环境。 9) 能够与程序版本库进行同步 ,实现代码的自动更新检测。 10) 支持多核、多 CPU 平行分析 , 支持多服务器分布式分析。 Cobot 11) 支持国产化信息环境 ,如中标麒麟操作系统、金山 WPS 等 。 12) 能够为用户“ 量身定制” 各类编码规则 及语义缺陷 ,并且自动生成各类报表和文档 。 13) 支持嵌入式编译器的配置 并内置 Keil,CCS 等编译器默认字节长度选项 14) 检测结果的误报过滤, 用户发现某个缺陷的误报可以标注,二次

5、检测时该缺陷会被过滤 1.2 支持 标准 1) 国际标准 MISRA C2004 英国 汽车工业 软件可靠性 联会 C 语言标准 MISRA C+ 2008 英国 汽车工业 软件可靠性 联会 C+语言标准 2) 国家标准: GJB 53692005 航天型号 C 语言安全子集 GJB 8114 C/C+语言编程安全子集 GB/T 28169 2011 嵌入式软件 C 语言编码规范 3) 行业标准: 921 C-2007 载人航天 921 工程 C 语言安全子集 CRSC-2014 高速铁路某研究院 C 语言安全子集 ( COBOT 开发定制) BACC-2008 总装 某 中心 C 语言安全子

6、集 ( COBOT 开发定制) 1.3 支持的重要的缺陷 空指针解引用 释放非堆内存 缓冲区溢出 内存泄漏、资源泄漏 释放未分配内存 注入缺陷 线程死锁 不可达代码 未经验证的用户输入 使用未初始化变量 返回局部变量 DNS 欺骗 使用释放后的内存 不良代码风格 弱加密 内存重复释放 非法计算 数组越界 全部覆盖 Klocwork 10.0 所能够检测的缺陷。尤其是在一些 1-2 级严重程度较高的缺陷检测,库博的漏报率更低。 Cobot 2. 系统 架构 库博检测系统分为 5 个层次,检测服务主要运行在 Apache Tomcat 服务器中。 系统架构如图 1 所示。 图 1 库博系统架构 1

7、) 预处理层:其主要作用与编译器中的前端类似,主要的输入为 C/C+ 程序的源程序 ,在此步骤中,需要对 C/C+工程中的编译配置 (例如 :makefile,VS 中的工程文件 )进行分析,获取正确的编译选项以及编译配置数据。然后,COBOT 对于程序的词法、语法分析,最后产生抽象语法树的 AST 对象封装作为基本分析的输入。 2) 基本分析层:本层主要以抽象语法树为输入,进行调用关系分析、控制流分析 、 以及 数 据流 分 析, 其中 数 据流 分析 主 要需 要 进行 到达 定 值(Reaching-Definition)分析 ,以产生定义 -使用链。此外,利用上述分析,产生初步的值依赖

8、图,作为程序的表达。 3) 精度提高层:本层主要两个目的,其一是创建精化值依赖图提供分析数据。其二,为后面的自动检测提供分析数据。 本层主要包括三类分析: a) 指向分析、别名分析。指向分析在该项目中采用的是流不敏感基于联合的指向分析方法。而别名分析包括两种,第一种是需求驱动的可能别名分析,该分析是流不敏感,上下文敏感的另一种则是我们实现的,需求驱动的必然别名分析,同样是一种流不敏感,路径敏Cobot 感,上下文敏感的分析技术。 b) 区间分析、八面体分析。区间分析主要是为精化值依赖图,通过计算变量的范围,从而得到分支可能的布尔值,去掉不可达路径,是值依赖图更为精确。而区间分析无法表达变量之间

9、的关系,所以在数值型缺陷的计算中,例如,数组越界、缓冲区溢出等,容易产生漏报、误报,由此对于此类缺陷,我们采用了八面体分析,分析主要采用 Apron 开源框架。 c) 对于函数间分析,主要依靠值依赖图对函数间调用的表达,因为值依赖图是上下文敏感的。 4) 自动检测层,是缺陷发现的过程,从缺陷模式库中取得某种缺陷,然后通过对值依赖图遍历,取得相应的信息带入某缺陷模式 ,进而将缺陷模式转换为布尔可满足式,然后通过数学工具进行约束求解的计算。首先,模式的定义采用 XML 的形式,除了缺陷模式库中内置的 138 种缺陷,用户可自定义语义缺陷。在缺陷约束提取的过程中, COBOT 根据缺陷模式的描述对图

10、进行前向或者后向遍历,得到相应的边的守卫信息,以带入缺陷模式,进行分析计算,对于布尔可满足性的计算,我们采用 SMT-Solver。 5) 工具层:主要负责用户接口,库博主要提供 IDE 插件、库博 IDE、命令行调用及采用 WSDL 的方式提供 WebService 服务等四种方式进行检测服务。 IDE插件库博支 持主流的 Eclipse、 Visual Studio 08、 10 等主流开发环境。库博 ID做为 B/S 的方式客户端,以浏览器的方式进行用户检测服务,提供更加完善的检测、度量以及统计功能。 3. 主要功能 库博提供一个全闭环的静态代码检测的周期 , 主要功能 包括了被检文件同

11、步(上传),检测 项配置, 缺陷检测及软件度量 , 检测结果输出定位以及检测结果确认。 在每个环节库博均具有 区别于其他工具的特色之处 如 图 1 所示 。 Cobot 图 1 库博 主要功能 1) 在文件同步阶段,支持多种上传方式, 如: 多文件上传,文件夹上传,压缩包上传,与版本管理服务器自动同步等方式 , 方便用户以适合本单位的形式进行代码同步 。 2) 在检测项配置阶段,支持根据 缺陷 严重 程度 等级 进行勾选 并支持缺陷 描述 及实例代码 的查看 ,方便用户理解要检测的缺陷的内容 。 3) 在缺陷检测及度量阶段,支持国际国内主流的缺陷分析及度量且检测效果达到国际先进水平 。 4)

12、在检测结果输出阶段,支持结果模板的定制及国内外主要办公软件的格式 ,例如 可以微软 excel格式或 WPS 格式导出检测结果。 5) 在结果确认阶段,支持主要 , 的代码辅助查看功能,帮助用户快速确认缺陷 ,此外还包括历史缺陷信息的查询 3.1 文件同步 支持以下四种方式导入待测试文件 单文件 文件夹 压缩包 ( ZIP,RAR,GZ,7Z 等常用格式) 与版本管理的 同步( SVN、 CVS、 GIT 等 ) 1) 支 持用户选择某个文件夹的方式 , 进行 多个 文件导入,以免用户多次选Cobot 择文件 过于繁琐 , 提高效率和灵活性 。如下图所示。 图 3 文件夹导入 2) 支持用户导

13、入文件压缩包,方便用户在火狐等不支持 html5 的浏览器上使用 。 图 4 导入文件压缩包 3) 支持 与 版本管理服务器 (SVN,GIT, CVS)同步多个项目 的文件 , 设定资源库地址, 导入文件 ,进行检测。 被测试代码改变后 只需在库博点击更 新即可 。 图 5 通过 svn 导入文件 4) 支持编译器配置功能,在项目名称处鼠标右击,选择项目属性,进行编译器相关配置。 Cobot Cobot 编译器配置功能 ,可 进行 各种 系统宏、 数据类型 、标识符 的 设置 ,便于兼容嵌入式 工程Cobot 的检测。 3.2 检测项配置 3.2.1 规则检测 配置 库博提供编码规则检测功能

14、,支持国内外主要的编码标准,相比同类产品具有更低的误报及漏报率,内置的标准主要如下所示: 4) 国际标准 MISRA C-2004( 141 条) 5) 国家标准 GJB 5369 ( 138 条) GB/T 28169 ( 152 条) 6) 行业标准 921 C-2007(163 条 ) CRSC-2014(218 条高铁 ) BACC-2008(67 条航天 ) 合计 879 条 C 语言规则的检测 7) C+标准 支持 MISRA C+( 201 条 ) 用户可选择并配置检测规则,配置时可看到规则的严重等级、详细解释和样例代码。 Cobot 图 6 选择执行的标准 3.2.2 语义 检

15、测 配置 库博提供强大的代码质量缺陷和安全漏洞分析。自动化缺陷检测功能易于使用,内置的缺陷库配置灵活,缺陷结果具有图形化展示,以帮助开发人员快速确认缺陷。 库博能够分析 C/C+代码,生成代码问题报告,内置的检查器约 80 余种,能够检测 140 余种类型的缺陷。 使用 配置语义 检测 时, 可 同时查 看到语义的严重等级、详细解释和样例代码、样例结果,如下图所示。 图 7 语义检测 配置项的选择 Cobot 3.3 缺陷检测及软件度量 库博根据工程配置文件(例如 makefile、 vsproject)找到 c/c+文件间 的依赖关系,生成更为完整的抽象语 法树,形成更为精确地检测结果;同时,库博还支持对编译不通过的工程 的检测 及单文件或片段检测 。这是库博与其他检测工具相比的特色之一。 3.3.1 编译不通过下的缺陷检测 被测试的文件编译 通过 和 不通过时,库博 都能 正常地进行规则与缺陷检测,并且还能在输出区提示用户缺少的头文件。 当用户把缺失的头文件放入到指定位置后,库博可以进行更为精确地检测。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号