美文网首页
CppDepend功能详细介绍

CppDepend功能详细介绍

作者: 安公子_ | 来源:发表于2017-07-24 14:16 被阅读0次

    本节将会对上一节中提到的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:介绍完毕。

    相关文章

      网友评论

          本文标题:CppDepend功能详细介绍

          本文链接:https://www.haomeiwen.com/subject/yqdbkxtx.html