CppDepend功能详细介绍

本节将会对上一节中提到的CppDepend的功能做一个详细介绍。

1. CQLinq:代码查询

CppDepend允许通过基于LINQ查询的CQLinq查询代码。例如,下面的CQLinq查询功能为匹配与所有具有30行以上代码的Public Methods:

方法匹配

创建新的CppDepend项目时,将提供120个默认查询和规则。编写CQLinq查询和约束很简单,因为它是C#LINQ语法,且CppDepend提供了一个CQLinq编辑器,它支持:

  • 代码完成/智能感知,
  • 实时编译错误说明,
  • 集成工具提示文档。
CQLinq编写

此外,一旦查询被编译,它将立即执行,其结果能很好地得到显示和浏览:

显示查询结果

可以使用CQLinq编写强大且详细的查询和规则,如下所示:

CQLinq查询编写

可以编写(或甚至生成)较短的CQLinq查询,以获得有关代码库的问题的立即答案:
如:代码分层正确吗?

demo

自上次发行版本以来,哪些方法已被重构?

demo

10种最复杂的方法是什么?

demo

哪些方法分配一个特定字段?

demo

哪些复杂的方法没有做足够的注释?

demo

当CQLinq查询返回某个结果时,也可以自动警告。这样的CQLinq代码查询的实际上是一个代码规则,如:

我不希望我的用户界面层直接依赖于DataBase层:

demo

MyProject1和MyProject2中的方法不应该有30行以上的代码:

demo

静态字段不应命名为m_XXX(自定义命名约定):

demo

不应该删除Public methods以避免API破坏:

demo

2. Smart Technical Debt Estimation:智能技术债务估算

技术债务由嵌入每个规则源代码内的C#LINQ公式估计。这使得这些估计都易于根据需求定制。

warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 10
select new { 
   m,
   m.CyclomaticComplexity,
   Debt = (3*(m.CyclomaticComplexity -10)).ToMinutes().ToDebt(),
   AnnualInterest = (m.PercentageCoverage == 100 ? 10 : 120).ToMinutes().ToAnnualInterest()
}

用户不必编写这些债务查询查询,因为它们是通过单击仪表板中的值和菜单生成的:

Dashboard的使用

市场上最快的工具: 由于开发人员的时间是非常宝贵的,所以我们使CppDepend非常快速:即使是对非常大的代码库应用数百个规则,也只需几秒钟就可以在Visual Studio中每次编译后重新估计技术债务。
100%可定制: 不仅可以自定义债务估算的各个方面,还可以定制债务呈现。债务价值可以通过货币金额而不是人身时间来估计,所有阈值都可以通过CppDepend项目属性面板进行点击调整。

自定义债务估算面板

优点:
严格的代码质量控制在开发过程中无摩擦的整合。
随着时间的推移,开发人员将接受有关规则的教育,并且正确的决策将尽早被采纳。
由于自动和持续地检查质量,重点关注最近的变化,无论是在Visual Studio还是DevOps中,团队都会建立更好的代码。
高管可以控制质量回报。


3. Quality Gates:质量门

质量门是对代码质量的检查,必须在发布之前执行,质量门可以被视为软件质量的通过/失败标准。
CppDepend提出了十多个默认质量门,它们与技术债务金额、代码覆盖率、特别严重的问题有关。

质量门

当某些标准未被验证时, 可以将质量门(Gates)用做构建失败。


4. In-Depth Issues Management:深层次问题管理

作为静态分析器,CppDepend可能会发现影响真实世界代码库的数百甚至数千个问题。

在Visual Studio中突出显示最近的代码更改,应该在提交任何代码到源代码控件之前修复。即使在到达源服务器之前,它们也可以被修复。因此,代码质量仍然受到控制,没有重大的前期投资。

具体来说,对于所有全局数字(问题数量,违反规则数量,债务估计...),仪表板还显示了这些数字自基线以来的差异。数字本身可以被单击来生成针对问题集的C#LINQ查询。这些查询的结果将以智能和可浏览的方式呈现相关问题。

这种灵活的方法带来几个好处:

  • 您可以从基线以来的新问题进行过滤。
  • 查询匹配的问题可以通过代码元素或规则分组。
  • 对于每个问题,估算成本估算,因此对业务的影响被称为债务和年度利益或严重程度。
  • 有关问题集的查询可以进行细化和保存,以确定首先要解决的问题。
  • 通过单击,可以从Visual Studio和VS Team Services CppDepend扩展中的问题跳转到源代码。
功能展示
功能展示
功能展示

5. Code Quality Metrics:代码质量指标

有很多方法来测量代码库。最常见的方式是计算代码行数。该指标粗略估计了开发代码库所付出的努力。它还允许您通过精确定位fat方法和类来获得质量水平。
CppDepend计数代码行数。
它还带有80多个其他代码指标。其中一些与代码组织(类或命名空间的数量,类中声明的方法的数量...)有关,另外一些与代码质量(复杂性,注释的百分比,参数数目,内聚力)有关,还有一些与代码的结构有关(哪些类型是最常用的,继承的深度...)。


6. Explore Existing Architecture:架构浏览

了解代码库的元素如何相互依赖是至关重要的信息。思考层应如何交互,创建界面和事件以避免具体类之间的依赖关系。

随着代码库的增长,越来越多的时间用于管理和分析依赖关系。如果重构这段代码,全局会有什么影响?这个层是否允许直接访问数据库?如果该代码调用此方法,会不会不小心冻结UI线程?

CppDepend提供了几个可以进行有效的依赖关系管理的工具。几秒钟内,就可以知道如果重构一个类,代码中的哪个部分将受到影响,可以建议是否意外创建了层次依赖关系违规,可以精确地确定代码中哪一部分依赖于特定的层组件,可以列出和给定方法联系的方法...

示例
示例
示例
示例

7. Trend Monitoring:趋势监控

CppDepend允许创建趋势图。趋势图是在分析时间随时间记录的趋势指标值。默认情况下,超过50种趋势指标可用,可以轻松创建自己的趋势指标。

趋势图

趋势图显示在CppDepend仪表板上。默认情况下有一些趋势图可供显示:

  • 代码行,
  • 违反规则数量和代码规则违规的数量,
  • 各种代码质量指标的最大和平均值,
  • 第三方使用。
    趋势图可以定制,并且可以轻松创建自己的趋势图,以显示默认趋势指标和/或自定义趋势指标。


    定制趋势图

使用CppDepend测量代码库趋势带有许多灵活的子功能:

  • 代码行,
  • 趋势图可以创建和定制,
  • 新趋势指标可以通过CQLinq查询编写。
新趋势查询

可以在主要的CppDepend UI和报告中显示和分析趋势图。


8.Diagnostics:诊断

CppDepend操作使用CQlinq易于浏览的所有Clang诊断程序。Clang提供了数百个诊断。

  • 未使用的代码,
  • 不推荐使用,
  • 演员问题,
  • 转换问题,
  • 比较问题,
  • OpenMP问题。
诊断

9. Diagrams:图

CppDepend输出几种图表:


Tren Charts
互斥与不稳定(Abstracness vs. Instability)
Treemap Metric
Dependencies Matrix:依赖矩阵
Dependencies Graph:依赖图

10.Compare Builds and Code Diff:比较构建和代码差异

在软件开发中,产品不断发展。因此,开发人员和架构师必须注意代码库中的修改。现代源代码存储库处理增量开发。他们可以列举2个版本的源代码文件之间的区别。

CppDepend可以告诉你2个版本之间有什么变化,但它不仅仅是简单的文本比较。它可以区分注释更改和代码更改,添加/删除的内容以及刚修改的内容。

使用CppDepend,可以看到代码指标如何发展,是否知道组件之间的耦合是否增加。

一旦破坏兼容性更改出现,CppDepend也可以连续检查修改以提醒用户。

仪表板比较2个版本的POCO
选择代码在两个版本之间更改的方法列表

11. Detect Dependency Cycle:检测依赖循环

保持代码库整洁的最简单方法是避免其组件之间的依赖循环。组件可用于将大量代码分割成更小和可理解的部分。如果依赖关系周期涉及N个分量,则这些N个分量代表单个超分量。实际上,N个较小的组件的好处就会丢失:任何组件都可能被任何其他组件的改变潜在地破坏,不能单独测试组件与N-1个其他组件的隔离,最后,所有N个组件必须在一起进行版本化和部署。

无论认为组件是类、命名空间、项目还是组合,CppDepend都会检测它们之间的依赖关系。它还可以帮助您找到正确的方式来摆脱特定的依赖关系周期。一旦依赖关系周期被删除,CppDepend可以在一个周期被意外创建的情况下持续检查你的代码库来警告你。

检测依赖循环

12. Generate Custom Reports From your Build Process:从构建过程生成自定义报告

CppDepend可以通过CppDepend.Console.exe分析源代码和C ++ Projects。每次分析代码库时,CppDepend都会生成一个可以通知开发状态的报告。可以自定义报告中显示的部分,甚至可以提供自己的XSL表格以进行完全自定义。

还可以构建自己的一套CQLinq约束,这些约束将在每个分析时进行检查。每次违反约束时,报告将提醒用户。此功能使自动设计和质量回归测试成为现实。
CppDepend制作的标准报告:

标准报告

报告示例:


END:介绍完毕。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,244评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,973评论 4 60
  • 犹如满园的梨花刹那间绽放 仿佛寂静中传来天籁般的歌唱 如此美好 如此神奇 又是如此地让人痴迷 因为爱你 我的眼眸里...
    伊清欢阅读 172评论 0 2
  • 我们总是期盼付出能得到对方的回应.爱终究都是自私的.开始计较谁爱得比较多就渐渐在感情里失去自我了. 要相信深爱的人...
    程十八阅读 482评论 0 0