去年6月份的时候,CppDepend的一位技术社区经理(technical community manager)突然发邮件联系我,赠送了我一份license,并邀请我体验下他们的C++静态分析工具,也就是CppDepend。

在这款软件的官方网站上,我们可以看到使用CppDepend可以帮助我们做些什么:

    • 1. 提高代码质量
    • 2. 可以使用CQLinq来自动化Review代码
    • 3. 帮我们做代码重构

      废话不多说,我直接使用它对我自己的项目Capo(https://github.com/mutouyun/capo)做一次简单的静态分析,来直观的感受下CppDepend的功能。

      首先,我们打开CppDepend的主界面(运行VisualCppDepend.exe),创建一个新项目:

      然后在弹出的对话框里给新项目起个好名字,之后选择OK:

      这时,刚刚打开的项目里没有任何分析数据,我们需要先给它指定一个项目。可以直接通过Visual Studio的项目文件建立分析数据。

      它可以支持从VC6一直到VS2013的全系列项目文件。
      在导入了项目之后,我们直接点击它左上角的“运行”按钮,即可进行静态分析,及生成报告了:

      左边的按钮仅进行静态分析,而右边的按钮还将自动生成一份报告。
      需要注意的是,CppDepend基于Clang,和我们平时编译C++代码时一样,只有cpp文件中实际产生效果了的代码才会参与分析。

      在分析结束后,我们就可以看到CppDepend针对有效代码给出的报告了。
      在上图靠右边的任何一个数据,以及右下方的指标都是可编辑的。比如,我们可以选择Code Quality -> Methods with too many local variables,这时显示出来的内容如下:

      注意显示界面左上角的小窗口,其中给出的CQLinq即为此项指标的检测代码:

      1. // <Name>Methods with too many local variables</Name>
      2. warnif count > 0 from m in JustMyCode.Methods where
      3. m.NbVariables > 15
      4. orderby m.NbVariables descending
      5. select new { m, m.NbVariables }
      6. // Methods where NbVariables > 8 are hard to understand and maintain.
      7. // Methods where NbVariables > 15 are extremely complex
      8. // and should be split in smaller methods.
      9. // See the definition of the Nbvariables metric here
      10. // <a target=_blank href="http://www.cppdepend.com/Metrics.aspx#Nbvariables">http://www.cppdepend.com/Metrics.aspx#Nbvariables</a>

      即当一个方法中的local variable数量大于15时,将给出一条“Methods with too many local variables”的Rule Violate。其中的注释也说明了为何这条规则要限制数量不能大于15。

      除了上面介绍的内容之外,CppDepend还有自动生成依赖图(Dependency Graph)和依赖矩阵(Dependency Matrix)等很不错的功能。
      更多详细的功能可以直接访问官方网站(http://www.cppdepend.com/GettingStarted.aspx)获取相关的帮助文档。

      软件除了界面上有一些绘图的小bug,以及Graph里对鼠标滚轮和指针的支持不大方便之外,其它的体验方面还算不错。
      实际项目中,使用CppDepend配合其强大的CQLinq自定义功能,可以方便的自动化检查项目代码规范,同时还可以给出各种具体的性能指标,确实是一款非常实用的工具。

http://blog.csdn.net/markl22222/article/details/43989609

一款C++静态分析工具 —— CppDepend的更多相关文章

  1. C/C++代码静态分析工具调研

    C/C++代码静态分析工具调研 摘自:https://www.jianshu.com/p/92886d979401 简述 静态分析(static analysis)是指在不执行代码的情况下对其进行分析 ...

  2. 代码静态分析工具——splint的学习与使用

    引言 最近在项目中使用了静态程序分析工具PC-Lint,体会到它在项目实施中带给开发人员的方便.PC-Lint是一款针对C/C++语言.windows平台的静态分析工具,FlexeLint是针对其他平 ...

  3. C++代码静态分析工具splint

    1.引言 最近在项目中使用了静态程序分析工具PC-Lint, 体会到它在项目实施中带给开发人员的方便.PC-Lint是一款针对C/C++语言.windows平台的静态分析工具,FlexeLint是针对 ...

  4. 开源静态分析工具androguard体验

    原文链接:http://blog.csdn.net/xbalien29/article/details/21885297 虽然在windows端免费版的IDA.VTS等工具都可用来静态分析,但相对来说 ...

  5. 代码静态分析工具-splint的学习与使用[转]

    代码静态分析工具--splint的学习与使用[转] 引言 最近在项目中使用了静态程序分析工具PC-Lint,体会到它在项目实施中带给开发人员的方便.PC-Lint是一款针对C/C++语言.window ...

  6. PHP代码静态分析工具PHPStan

    最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下.可能是自己粗心大意,或者说php -l检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PH ...

  7. 10款html5开发工具,实用+好用

    利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具让你在网页中搭建特效.动画.视频.音频等诸多功能,为你节省更多开发时 ...

  8. 面向系统管理员的10款Linux GUI工具 (转自51cto)

    如果你是名系统管理员,现已到了Linux非知道不可的地步.如果你在更庞大的环境下工作,更是如此.许多企业组织已迁离了一切都借助点击式GUI来管理的Windows.幸好,Linux也有许多GUI工具可以 ...

  9. 转载:开发者眼中最好的 22 款 GUI 测试工具

    对于很多同学来说gui程序的测试是一个难点,所以我从网上转载了一篇关于gui测试的一篇文章,里面罗列的很多工具,大家可以尝试一下学习学习. 英文原文:22 best GUI testing tools ...

随机推荐

  1. 库函数strlen源码重现及注意问题

    首先直接上源码: size_t strlen (const char * str) { const char *eos = str; while(*eos++); return(eos - str - ...

  2. 有了bootstrap,为什么还要做amaze ui

    1.Bootstrap介绍Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加 ...

  3. Maven管理Android项目1

    maven-android-plugin网站:https://code.google.com/p/maven-android-plugin/wiki/GettingStarted   android ...

  4. Ghost win7 系统安装(虚拟机)

    1.将Ghost.iso添加到数据存储iso文件中,启动虚拟机,根据相关提示,文件格式化系统硬盘,完成操作后关机: 2.进入BIOS,设置从CDROM启动系统(否则系统会提示找到引导文件): 3.将系 ...

  5. 【OpenGL游戏开发之三】OpenGl核心函数库汇总

    OpenGl核心函数库 glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测功能 glA ...

  6. Android各层推荐开发书籍及参考资料

    Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...

  7. item Collaborative Filtering

    算法步骤: 1.计算物品相似度 2.根据用户购买记录,推荐相似物品   物品相似度定义: A.    购买i的人里面,有多少比例购买了j    缺点(推荐系统需要能挖掘长尾信息,此处若j很热门,则w趋 ...

  8. Qt开发初步,循序渐进,preRequest for 蓝图逆袭

    1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;

  9. 微软Code Hunt答案(00-05)——沉迷娱乐的我

    昨天看到微软出的网游Code Hunt.o(∩_∩)o...哈哈,还不好好玩一吧,个人感觉不是一个模块比一个模块难的,Code Hunt是按功能划分.所以不要怕自己做不来.由于不同人特长不一样. 像A ...

  10. CSS中zoom和scale的区别

    zoom和scale这两个东西都是用于对元素的缩放,但两者除了兼容性之外还有一些不同的地方.zoom缩放会将元素保持在左上角,而scale默认是中间位置,可以通过transform-origin来设置 ...