美文网首页
coverity 代码检查

coverity 代码检查

作者: 火山脚下 | 来源:发表于2020-03-13 09:25 被阅读0次

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

    列出不会被执行到的代码
    列出没被初始化的类成员变量
    列出没有被捕获的异常
    列出没有给出返回值的return语句
    某个函数虽然有返回值,但调用该函数的地方没有用到它的返回值,这也会被列出来
    列出没有被回收的new出来的对象
    列出没有被关闭的句柄
    精确定位到代码行,并提供逐层展开函数的功能
    列出可能的数值类型溢出。例如,无符号int数做 ++ 操作,可能导致int溢出,都会被检测到。
    什么地方该用&位运算,而不应该用|位运算,都能定位出来并作出建议
    ostream在一个函数中被修改了格式,但退出该函数之后没有将ostream恢复成先前的格式,也会被检测到
    ……
    貌似程序中的所有可能分支,所有new出来的对象何时被销毁,所有可能的异常是否被代码捕获,它都能扫描到。真不简单啊。

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

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

    解决办法:

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

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

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

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

    相关文章

      网友评论

          本文标题:coverity 代码检查

          本文链接:https://www.haomeiwen.com/subject/epefshtx.html