CppDepend功能详细介绍

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

1. CQLinq:代码查询

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

CppDepend功能详细介绍_第1张图片
方法匹配

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

  • 代码完成/智能感知,
  • 实时编译错误说明,
  • 集成工具提示文档。
CppDepend功能详细介绍_第2张图片
CQLinq编写

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

CppDepend功能详细介绍_第3张图片
显示查询结果

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

CppDepend功能详细介绍_第4张图片
CQLinq查询编写

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

CppDepend功能详细介绍_第5张图片
demo

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

CppDepend功能详细介绍_第6张图片
demo

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

CppDepend功能详细介绍_第7张图片
demo

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

CppDepend功能详细介绍_第8张图片
demo

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

CppDepend功能详细介绍_第9张图片
demo

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

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

CppDepend功能详细介绍_第10张图片
demo

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

CppDepend功能详细介绍_第11张图片
demo

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

CppDepend功能详细介绍_第12张图片
demo

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

CppDepend功能详细介绍_第13张图片
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()
}

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

CppDepend功能详细介绍_第14张图片
Dashboard的使用

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

CppDepend功能详细介绍_第15张图片
自定义债务估算面板

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


3. Quality Gates:质量门

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

CppDepend功能详细介绍_第16张图片
质量门

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


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

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

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

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

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

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

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

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

  • 应用指标,
  • 项目指标,
    指标空间指标,
  • 类型指标,
  • 方法指标,
  • 指标在字段,
  • Halstead指标。

6. Explore Existing Architecture:架构浏览

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

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

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

CppDepend功能详细介绍_第20张图片
示例
CppDepend功能详细介绍_第21张图片
示例
CppDepend功能详细介绍_第22张图片
示例
CppDepend功能详细介绍_第23张图片
示例

7. Trend Monitoring:趋势监控

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

CppDepend功能详细介绍_第24张图片
趋势图

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

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


    CppDepend功能详细介绍_第25张图片
    定制趋势图

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

  • 代码行,
  • 趋势图可以创建和定制,
  • 新趋势指标可以通过CQLinq查询编写。
CppDepend功能详细介绍_第26张图片
新趋势查询

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


8.Diagnostics:诊断

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

  • 未使用的代码,
  • 不推荐使用,
  • 演员问题,
  • 转换问题,
  • 比较问题,
  • OpenMP问题。
CppDepend功能详细介绍_第27张图片
诊断

9. Diagrams:图

CppDepend输出几种图表:


CppDepend功能详细介绍_第28张图片
Tren Charts
CppDepend功能详细介绍_第29张图片
互斥与不稳定(Abstracness vs. Instability)
CppDepend功能详细介绍_第30张图片
Treemap Metric
CppDepend功能详细介绍_第31张图片
Dependencies Matrix:依赖矩阵
CppDepend功能详细介绍_第32张图片
Dependencies Graph:依赖图

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

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

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

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

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

CppDepend功能详细介绍_第33张图片
仪表板比较2个版本的POCO
CppDepend功能详细介绍_第34张图片
选择代码在两个版本之间更改的方法列表

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

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

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

CppDepend功能详细介绍_第35张图片
检测依赖循环

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

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

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

CppDepend功能详细介绍_第36张图片
标准报告

报告示例:

  • Poco 1.7.8 Report
  • Quantlib 1.9.2 Report
  • CppCheck Report
  • Doom 3 Report
  • SQLite Report

END:介绍完毕。

你可能感兴趣的:(CppDepend功能详细介绍)