写代码这件事情,专业和不专业,其实就是对待代码的态度。
说说静态代码分析
程序静态分析(Program Static Analysis)可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量。还可以用于帮助软件开发人员快速理解文档残缺的大规模软件系统以及系统业务逻辑抽取等系统文档化等领域。 如开发20年以上的金融核心COBOL系统,动辄上千万行代码的系统规模。对于理解这样规模的系统,基于程序静态分析的辅助理解工具就能发挥积极作用。
百度百科-程序静态分析 https://baike.baidu.com/item/程序静态分析
现在我接触的大部分都是硬件类的公司吧,软件优化这种事情基本上是没啥必要的,不过就算退一步来说,虽然公司不需要,但你个人可以需要嘛。
为什么需要这东西的原因很简单,在嵌入式领域写代码的时候,或者说早期写代码的时候,大型程序代码编译与运行的效率不高,就像编译个基础 Windows 依赖库要半天一样。
面对越来越复杂的代码,越来越多人一起写的代码,那必然会存在很多缺陷考虑不到的地方,因为并不是每个人写代码都可以保持高度的注意力的,所以这时候就需要一些批量工具帮助我们做一些简单的检测,就像下图这样的检查。
任何一份专业的商业代码,未经密集检查是无法被合并到主要代码上的,这个是不可避免的,所以通常都会有一个人或者小组,专门 code review 接入的代码。
开源就没办法了,这种事情谁能负责呢,一般附带一份单元测试就已经不错了。
所以面对这样的代码,是有必要过一遍简单的静态分析,让自己过滤掉那些容易失误的地方,像类型转换、边界检查、指针越界等操作,使用推荐的逻辑保证代码无任何死角,上点 Windows 的完整规则。
CppCheck 与 VS 相比。
我一直在用 VS 做复杂代码分析,除了 IDE 的必要工具,我主要是需要它的 代码关系(文件、类)图、代码分析规则、集成测试框架 这些附加的代码辅助工具。
它代码分析的完整规矩效果如下,举个例子来说吧。
这些静态分析主要是针对语言层面的使用注意事项,对于专业的人来说,大多数时候是习惯了,但也不排除,一份代码在经历过各种改动后,就会忘记这些事情,这时候就需要这样的工具帮助我们简单整理整理。
而 CppCheck 是开源的工具,效果一般,但足够一般场合使用了,这种工具面向的客户群体不同,商业级的确实厉害,但开源也并不一定差呢,让我们看看效果,下面是一个在多线程编写代码的建议,还不错。
另外腾讯也曾经基于 CppCheck 做了一份工具叫 TscanCode ,使用效果如下图,还是比较好看的,相比之下还是 CppCheck 的专业一些。
看了一下还是蛮不错的。
比如我们很难去思考的除零错误,它这里就会很好的提示出来。
后记
没啥特别的,刚好用到了,就记录下来,好久没用了,现在一般也就用在一些开源转商业代码的阶段吧,之后就不会怎么用了,代码稳定后,基本没人会去动它的。
最后推荐一个 Source Insight 来阅读代码。