使用了Coverity代码静态检测工具。功能很强大,超乎我的期望。主要功能如下:

  1. 列出不会被执行到的代码
  2. 列出没被初始化的类成员变量
  3. 列出没有被捕获的异常
  4. 列出没有给出返回值的return语句
  5. 某个函数虽然有返回值,但调用该函数的地方没有用到它的返回值,这也会被列出来
  6. 列出没有被回收的new出来的对象
  7. 列出没有被关闭的句柄
  8. 精确定位到代码行,并提供逐层展开函数的功能
  9. 列出可能的数值类型溢出。例如,无符号int数做 ++ 操作,可能导致int溢出,都会被检测到。
  10. 什么地方该用&位运算,而不应该用|位运算,都能定位出来并作出建议
  11. ostream在一个函数中被修改了格式,但退出该函数之后没有将ostream恢复成先前的格式,也会被检测到
  12. ……

貌似程序中的所有可能分支,所有new出来的对象何时被销毁,所有可能的异常是否被代码捕获,它都能扫描到。真不简单啊。

我用到的Coverity是部署在企业内部的,通过https页面的方式向程序员报告扫描的安全隐患。

具体的安全隐患页面很专业。但有个缺点,点击一个security issue list中的一个item进入子页面,而后再点浏览器的返回按钮后,不能返回先前的页面,而是返回所有security issue list的第一个list页面,在这点上,用户体验很糟糕,因为本来出来的列表就很长了,看的很晕了,返回页面又不是先前的页面,导致很多时间都花费在重新找寻先前的list页面上了。

解决办法:

  1. 点击扫描列表上的"File"列标签,将扫描出来的列表按照文件排序,然后点击右上角的某个按钮,导出成.csv格式文件。
  2. 用Excel打开.csv文件,添加一列,记录状态,比如:Done, In progress, Cannot decide 等等。
  3. 按照.csv文件条目的顺序自上而下挨个处理。每做完一个条目,就更新对应的.csv文件中对应行的新加列。
  4. 注意,每当要处理下一个条目时,从.csv文件中copy出该条目的ID号,粘贴到Coverity页面的右上角的搜索栏中,搜索,并进入具体页面。这样做,可以免除上面提到的“因条目过多导致前进后退时迷失方向”的问题。

按照这样的方法,处理完所有的条目,会得到一个完整的条目状态列表。如果有未解决的条目的话,接下来就只关注这些条目。不会出现条目遗漏,也不会因条目过多而迷失方向。即安全又节省时间。

Coverity多次检测同样的代码(两次之间,被检测的代码有改动),不会覆盖先前的报告,即第一次检测得到的report item number还是有效的,不会被新的report item覆盖,搜索它仍然可以查看先前检测出来的问题。

其实Coverity检测也是有缺陷的,毕竟它只是个辅助工具,不能完全达到人的水平,有时报的问题其实不是问题。例如,它可能报告有个指针pNext在没有在被赋值或被赋值为NULL的情况下做pNext++操作存在风险,其实这个pNext指针在pNext=NULL下面的一个while循环中被赋值了,于是,这个报告可以被忽略。像这样的误报,目前还没找到方法有效地过滤掉。

附:

CERT C Secure Coding Standard

CERT C++ Secure Coding Standard

Coverity C++ checkers of CERT C++ Secure Coding Standard

===================================

转自:http://www.broadskytech.com/tabid/90/ArticleID/117/Default.aspx

 

产品名称:Coverity源代码缺陷分析工具
产品型号:Coverity

源代码缺陷分析工具

Coverity Static Analysis

 

Coverity公司是由一流的斯坦福大学的科学家于2002年成立的,产品核心技术是1998年至2002年在斯坦福大学计算机系统实验室开发的,用于解决一个计算机科学领域最困难的问题,在2003年发布了第一个能够帮助Linux、FreeBSD等开源项目检测大量关键缺陷的系统,Coverity是唯一位列IDC前10名软件质量工具供应商的静态分析工具厂商,被第三方权威调查机构VDC评为静态源代码分析领域的领导者,市场占有率处于绝对领先地位。

美国Coverity公司提供最先进的和可配置的用于检测软件缺陷和安全隐患的静态源代码分析解决方案,Coverity将基于布尔可满足性验证技术应用于源代码分析引擎,分析引擎利用其专利的软件DNA图谱技术和meta-compilation技术,综合分析源代码、编译构建系统和操作系统等可能使软件产生的缺陷,Coverity是第一个能够快速、准确分析当今的大规模(几百万、甚至几千万行的代码)、高复杂度代码的工具,Coverity解决了影响源代码分析有效性的很多关键问题:构建集成、编译兼容性、高误报率、有效的错误根源分析等。

产品功能

Coverity Static Analysis (也称Prevent)是检测和解决C、C++、Java和C#源代码中最严重的缺陷的领先的自动化方法。通过对您的构建环境、源代码和开发过程给出一个完整的分析,Prevent建立了获得高质量软件的标准。

静态源代码分析允许我们在软件开发生命周期的早期阶段发现和修复缺陷,节省数以百万计的相关成本。Prevent是业界标准,因为只有Coverity理解和掌握静态源代码分析技术所具有的严格的要求。

l Coverity了解构建系统——Prevent通过在操作系统流程这个层次监测您的构建系统来获得每一个操作的清晰视图,展现您的软件。

l Coverity了解源代码——Prevent 检测比当今市场上任何其他工具都更多的源代码信息;代码的结构、含义和意图都被用来揭示其中的严重的错误和不安全性。

l Coverity了解开发者——Prevent 通过一个客户化的工作流、功能强大的分析器和易于使用的工具,能够使缺陷在几分钟内被定位,解决缺陷。

平台支持:

目标机平台:PowerPC,ARM,MIPS,x86,SPARC,XScale,SH,Codefire,SH,ST 20,8051,

TI DSP C3000/C6000/C55x/C54x, Motorola 68HC05/68HC11, Freescale 68HC08/HCS08/68HC12/HCS12X, Renesas M16C/H8/M32C,

C51/C166/C251等;

嵌入式操作系统:VxWorks,Embedded Linux,QNX,RTEMS,ucOS,WinCE,Windows Embedded,PalmOS,Symbian, pSOS、Nucleus、ThreadX, INTEGRITY、OSE,UCLinux,国产OS等等;

主机平台:Apple Mac OS X 10.4,Cygwin,FreeBSD,HPUX,Linux,Mac OS X , NetBSD(2.0) ,Solaris Sparc ,Solaris X86,Windows等;

支持的编译器:ARM ADS/RVCT,Freescale Codewarrior ,GNU C/C++ ,Green Hills

HP aCC,i-Tech PICC,IAR,Intel C/C++ ,Marvell MSA ,Microsoft Visual C++,QNX ,Renesas ,Sun C/C++ ,TI Code Composer ,Wind River,

支持任何其他的ANSI C兼容的编译器.

产品特点及优势

Coverity产品专长于准确的查找最严重和最难检测的缺陷,具有以下优势:

精确性——Coverity Prevent的特别之处在于查找精确,具有业界最低的误报率(小于15%)。当许多其他的源代码分析产品以很高的误报率使得其不可用时,Coverity的虚假路径裁剪、统计分析和其它创新减少了误报的产生。附加的配置和微调能够进一步减少误报率。

分析的深度——Coverity Prevent提供过程间数据流分析和统计分析,评审整个程序的交互和所有的可能的路径。Coverity Prevent检查企业特定的APIs和标志使用中的不一致性,精确的检测QA、安全评审和现场会发生的缺陷。

分析的广度——Coverity Prevent采用查找最严重的错误的最先进的技术,提高您的产品的质量和安全性。Coverity Prevent可以检测严重的问题,例如系统崩溃、内存泄漏、内存错误、不确定行为、并发缺陷和安全性问题。

低拥有成本——Coverity Prevent无缝的与您已有的环境集成,能够快速部署和配置。

可扩展——Coverity Prevent使您能够在我们的强大的分析引擎上创建定制的检查器,来满足您的开发组织和代码的特定需求。您可以设置定制的规则,来强化编码标准或者检测代码中的错误。

强大的可配置性——Coverity Prevent能够快速的分析您的代码,不需要写测试用例。通常百万行的代码仅需要几个小时,其他的工具需要几天,甚至几个星期来分析大规模代码。

广泛的平台支持——Coverity Prevent支持最广泛的编译器和硬件平台,可最大化的满足用户多平台的测试要求。

以 C/C++为例

Prevent 分析引擎使得缺陷检测检查器拥有源代码最精确的描述。

Prevent 针对C/C++的分析引擎

引擎 功能
路径流程引擎 通过构建一个表示经过每一个函数的所有的路径的图表分析您代码中的每个函数的控制流
数据追踪引擎 用于分析从程序中每个路径中的声明收集的所有的整型和布尔型等数据
统计引擎 用于分析您的代码作为一个整体的行为特征
过程间调用总结引擎 一个主要的创新,使得Prevent 可以执行整个程序的分析,分析文件间和模块间的任何层次的复杂的调用链
类型流程引擎 用于提高C++分析中依赖于类层次关系的报告的结果的精度
虚假路径引擎 用于分析每个分支条件,以确定在当前路径它将是真、假或不确定
加速引擎 保存横越每个路径时的每个缺陷分析所收集的信息;消除冗余路径,不需要横越任何不必要的路径来找到最多的缺陷
数据传播引擎 把过程间调用总结引擎产生的所有总结和数据追踪引擎记录的所有数据汇总起来,是Coverity特有的、上下文敏感的过程间分析能力的关键
增量分析引擎 通过缓存分析数据来提高性能,以便后续的分析仅需要包含变化的数据
能够发现的C/C++缺陷(部分) C/C++安全性问题(部分)

并发

  • 死锁
  • 错误使用的阻塞调用

性能下降

  • 内存泄漏
  • 文件句柄泄漏
  • 定制的内存和网络资源泄漏
  • 数据库连接泄漏

导致崩溃的缺陷

  • 空指针引用
  • 释放后引用
  • 多次释放
  • 不正确的内存分配
  • 不匹配的数组新建/删除

不正确的程序行为

  • 逻辑错误导致的死代码
  • 未初始化变量
  • 负数的无效引用

不正确的APIs使用

  • STL使用错误
  • API错误处理

Coverity代码静态检测工具介绍相关推荐

  1. 代码静态检测工具cppcheck简介

    cppcheck是一款小型的代码缺陷静态检查工具,支持C.C++代码,作为编译器的一种补充检查方式,不同于C/C++编译器等其他众多分析工具,它不检测代码的语法错误,只检查编译器检查不出来的BUG类型 ...

  2. Cppcheck--C/C++代码静态检测工具

    官网: http://cppcheck.net/ cppcheck 是一个静态代码检查工具,支持c, c++ 代码:作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查. 执行的 ...

  3. Coverity 代码静态安全检测

    最近公司在推行代码Security检查,使用了Coverity代码静态检测工具.功能很强大,超乎我的期望.主要功能如下: 列出不会被执行到的代码 列出没被初始化的类成员变量 列出没有被捕获的异常 列出 ...

  4. coverity代码检测工具介绍_微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...

  5. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  6. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

  7. 一些代码静态检查工具的简介

    1.KLOCWORK: 适用语言:C, C++, JAVA 是否开源:否, 是否需要编译:是 作用:代码静态检查工具.用于高效检测软件缺陷和安全隐患,提供优秀的静态源代码分析解决方案.软件号称是业界领 ...

  8. 静态检测工具STATIC以及静态分析的必要性

    这一篇向大家介绍的是我司静态检测工具STATIC以及静态分析的必要性.欢迎各位技术大牛发表自己的看法呀! 正常运行的软件就是完美的软件吗? 下图是漫威电影<黑豹>中给小编留下很深印象的场面 ...

  9. 内存检测_Android native内存检测工具介绍

    点击上方蓝字关注我们噢~ 检测工具不仅可以在验证时发现安全问题,也可以在运用场景中阻断安全问题的发生,对于安全问题检测和攻击拦截非常友好,当然安全检测功能会消耗一定的系统性能.本文将对已集成的部分检测 ...

  10. swift/dart代码规范检查工具介绍

    swift/dart代码规范检查工具介绍 简介: 本篇主要介绍swift和dart代码规范检查工具,以及他们的工作原理,操作过程,代码规范规则. 1 swift代码检查工具-swiftlint 1.1 ...

最新文章

  1. 【 MATLAB 】信号处理工具箱之波形产生函数 gauspuls
  2. python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎
  3. 团队项目-个人博客-4.20
  4. 乐观锁与悲观锁及应用举例
  5. RecyclerView复用item导致数据混乱
  6. c语言打不开h文件,说那个“mem.h”头文件打不开 怎么改啊 高手们帮帮忙
  7. 取余运算(信息学奥赛一本通-T1326)
  8. 企业库(V4.1)入门学习手记
  9. mysql官网下载下来的免安装版怎么配置_Windows下的免安装版MySQL配置
  10. [20170604]12c Top Frequency histogram补充.txt
  11. dwr框架java解析excel_dwr poi java 将excel 导出到客户端
  12. C++数据库编程简介
  13. 再也不用花一天时间做ppt了
  14. 为什么我要建立自己的公众号?
  15. 数字图像处理王慧琴课后答案_数字图像处理课后题答案
  16. 实例011:养兔子 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  17. @RequestBody、 @RequestParam 、 @PathVariable 和 @Vaild 注解
  18. Scrapy 爬虫框架(基础)
  19. 大数据信息资料采集:刘润公众号历史商业评论文章采集评论搜集
  20. 分解质因数-Pollard‘s Rho

热门文章

  1. 机械工程师CAD2016
  2. Ubuntu20.04更换软件源
  3. PowerDesigner安装教程
  4. web下拉菜单代码html,简单的单级下拉菜单实现_html/css_WEB-ITnose
  5. 智能网联V2X全球发展现状以及V2X平台设计简介
  6. DirectX修复工具的详细使用步骤介绍
  7. 【从Northwind学习数据库】数据更新
  8. 图及其应用实验报告 c语言,图的应用 实验报告
  9. hd4400 显卡opencore 下的 8个苹果问题解决方法
  10. 安卓 文本框怎么贴近边缘_【安卓,iOS】全网最火的充电提示音教程来啦