前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++静态代码扫描哪家强?

C++静态代码扫描哪家强?

作者头像
WeTest质量开放平台团队
修改2018-10-29 17:51:06
6.1K0
修改2018-10-29 17:51:06
举报

为了保证游戏程序正常运行,就要在开发的各个环节为代码“体检”,发现并扫除“病症”。静态代码分析是一种常用的“体检”方式,也是保证代码质量的重要手段。 1. 什么是静态代码分析? 静态代码分析是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

在C++项目开发过程中,因为其为编译执行语言,语言规则要求较高,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。所以C++ 静态代码分析工具能够帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省开发成本。

静态代码分析工具的优势 :

  • 自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
  • 帮助代码设计人员更专注于分析和解决代码设计缺陷。
  • 减少在代码人工检查上花费的时间,提高软件可靠性并节省开发成本。

2. 业界主流扫描工具概况 目前市场上的C++ 静态代码分析工具种类繁多且各有千秋,接下来主要介绍WeTest推出的TScanCode代码检查工具(TSC)和两种主流C++静态代码分析工具(cppcheck、coverity)。从功能、效率、易用性等方面进行分析比较,以帮助 C++开发和测试人员更清晰静态代码分析工具的工作效果、适用场景和扩展空间,同时在其对应项目特征中选择合适的工具应用到项目开发环节中。 以下为工具在各方面的对比数据。

在数据展示方面,TSC通过WeTest(http://wetest.qq.com/)平台进行管理和展示,形成代码质量管理闭环。coverity可用web端的结果展示,但无法自行管理问题流,需要进行二次开发; cppcheck则缺少web端结果展示。 3. 检查规则大比拼 代码质量问题可大致分为以下几大类:

各个工具在上述大类的规则分布上如下:

TSC针对互联网产品开发修复原则,重点针对致命和逻辑类问题,相对传统、军事、安全领域,并不关注编码规范及编译错误。coverity作为商业化软件,在付费后添加规则上,达到覆盖率最全面,除致命和逻辑类规则外,还有大量编码规范、安全和针对其他语言(如java,C#)的规则。cppcheck作为开源工具,应用范围广泛,根据开源社区场景搜集,在各方面都有规则添加,但场景较为粗犷,场景虽多,但有效率有待提高。 TSC针对网络游戏定制,选取了影响游戏代码最核心的规则,对游戏代码中的严重问题进行筛选,可以有效的发现问题。这有助于集中整个开发团队力量解决核心问题,保证游戏的敏捷开发和快速迭代。 通过对样本代码的实际检测和对比,可以进一步得出三个工具在一些关键规则上的详细比较(测试结果,仅作参考)。 空指针问题 TSC相对于另外两款工具,可以发现更多的空指针问题,并且准确率与coverity接近。

越界问题 在越界规则上,TSC的表现介于coverity和cppcheck之间,已经具备场景识别能力。

未初始化问题 coverity初始化检查场景覆盖比TSC和cppcheck要全;TSC为保持准确率,规则覆盖上比较保守;而cppcheck存在比较严重的误报问题。

内存泄露问题 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存,从而造成了内存浪费的情况。内存泄漏是静态下很难检测的一种错误,当前各工具主要是从代码写法上检查内存分配和释放是否配对使用。 从对比结果来看,三个工具能力差异不大,TSC虽然发现有效内存泄露问题最多,但误报也相对较高。

逻辑错误规则 逻辑错误:指可能存在的逻辑问题,如if不同分支内容相同,在switch内缺少break等,对指针使用sizeof进行空间分配等问题。这类问题很容易造成游戏逻辑缺陷,产生各种影响平衡性、经济系统等核心系统的bug。 在逻辑错误的识别上,TSC相比于另外两款工具有较为突出的优势。

其他能力方面,TSC具备与商用软件coverity同样的宏扩展能力,可以对代码中的宏进行有效扩展,从而发现宏配置问题。与此同时,TSC增加了一些coverity没有的函数检查规则,例如可疑数组下标使用等。同时剔除了诸多低价值的无效规则,减少结果检查带来的人力成本。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯WeTest 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档