文章目录
本文适合不了解代码静态检查的初学者或者犹豫是否将项目接入静态检查的人阅读
tgwadm是云网关组转发模块的agent组件,其主要功能有配置下发、与报文转发进程交互等功能。最新版本由于将其重构,代码变化很大,单纯靠有限时间内的人肉测试以及codereview,可以发现的问题有限,故尝试接入公司内部代码检查平台来检查代码中的比如死锁、内存问题等常见但难以发现的问题。
静态代码分析
静态代码分析是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
在C++项目开发过程中,因为其为编译执行语言,语言规则要求较高,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。所以C++ 静态代码分析工具能够帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省开发成本。
静态代码分析工具的优势 :
- 自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
- 帮助代码设计人员更专注于分析和解决代码设计缺陷。
- 减少在代码人工检查上花费的时间,提高软件可靠性并节省开发成本。
带着问题来看:静态分析找到的Bug中,有多少是能够在Code Review(代码审查)、自验证或系统测试过程被发现的?
本组项目使用的是公司内部的代码检查平台,包括Coverity、Klocwork、PyLint等检查工具,支持的工具列表如下:
由于本组主要开发语言为C/C++,经过一段时间试用,综合对比后,个人认为最适合本组而且又最好用的就是Coverity。
Coverity
Coverity公司是由一流的斯坦福大学的科学家于2002年成立的,产品核心技术是1998年至2002年在斯坦福大学计算机系统实验室开发的,用于解决一个计算机科学领域最困难的问题,在2003年发布了第一个能够帮助Linux、FreeBSD等开源项目检测大量关键缺陷的系统,Coverity是唯一位列IDC前10名软件质量工具供应商的静态分析工具厂商,被VDC评为静态源代码分析领域的领导者。
Coverity做了近15年,才基本做到精确(基本的意思是还有大概15%的误报率,当然这个数字在业内可以说是顶尖的)。
Coverity主要从以下四个方面来对代码进行分析
- 编译器告警
- 编码规范
- 静态分析
- 数据流分析
具体数据可以参考WeTest团队的一篇《C++代码质量扫描主流工具深度比较》文章,地址看最后的参考
下面看下使用Coverity扫描本项目的告警情况,用数据说话
静态检查告警案例
静态检查问题总览
优先级分类:
严重缺陷分类: