0基础——c/c++程序的测试笔记(二)

2020-02-26  本文已影响0人  ayusong870

要点

Understand代码分析工具

Understand是一款非常强大的代码静态分析工具,堪称神器。这款软件具有强大的代码静态分析功能,并且可以绘制各种流程图。
由于安装很简单,在此就不说了,直接进入工程配置讲解。

创建项目

  1. File -> New -> Project


    选择工程路径
    选择语言
    添加代码文件
  2. Next -> Finish 工程创建完毕


    界面
  3. Understand的搜索功能非常逆天


    搜索功能

层级关系视图

  1. Butterfly:如果两个实体间存在关系,就显示这两个实体间的调用和被调用关系;


    Butterfly关系视图
  2. Depended On By:谁调用了该文件;


    Depended On By
  3. UML描述


    image.png
  4. 菜单 Metrics -> Browser Metrics 查看代码量度


    代码度量数据
  5. Understand还有很多功能,这里就不太详细的去介绍了。

Source Monitor 代码质量分析工具

现在介绍另一个代码质量分析工具Source Monitor,与Understand相比,Understand更倾向于帮助用户阅读代码,而Source Monitor更倾向于帮助用户查看代码质量分析结果。

  1. File -> New Project 新建工程
  2. 选择语言C++


    选择源代码语言
  3. 选择工程目录


    选择目录
  4. 添加源代码


    添加源代码
  5. 一直下一步,中间默认即可,直到点击确定,软件对代码质量计算完成


    Baseline
  6. 该图汇总了代码质量信息,双击Baseline可以查看更详细的结果,这里最终选择Player.cpp查看Player的信息。
    Player.cpp检查结果
  7. 这里显示Player.cpp的代码计算结果,包括类的代码质量汇总,类的每一个函数的代码质量,代码深度和语句数量的关系。比较有亮点的是绘制了雷达图与三维柱状图,红线是当前的代码质量值,在绿色范围内说明代码质量较高。由于当前的测试代码非常简单,显然质量是高的。
  8. 下面介绍一下这些个参数指标都是什么意思:
    (1)Lines,代表此文件代码的行数(包括空行);
    (2)Statements,代表此文件所拥有的语句数;在C++中,语句是以分号结尾的。分支语句if,循环语句for、while,跳转语句goto都被计算在内,预处理语句#include、#define和#undef也被计算在内,对其他的预处理语句则不作计算,在#else和#endif、#elif和#endif之间的语句将被疏忽;
    (3)%Branches,完整的写法是Percent Branch Statements,代表分支语句占语句数目的比例。这里的“分支语句”指的是使程序不顺序履行的语句,包括if、else、for、while、break、continue、goto、switch、case、default和return。需要注意的是,do不被计算在内,由于其对应的while已计算了。另外,异常处理的catch也被作为1个分支计算;
    (4)%Comments,完整的写法是Percent Lines with Comments,代表注释的比例。该值是注释行(包括/……/和//……形式的注释)占总行数的比例。一般公司会对每一个文档的header或footer部份进行特殊的声明注释,可以在工程属性中设置过滤,不计算在内;
    (5)Class Defs,代表类的个数。包括class,struct和template在内的个数;
    (6)Methods/Class,完整的写法是Methods per Class,代表平均每一个类的方法数。即包括内联和非内联的,template函数在内的类方法数除以所有类的个数;
    (7)Avg Stmts/Method,完整的写法是Average Statements per Method,代表平均每一个函数包括的语句数目。由总的函数语句数目除以函数数目得到该值;
    (8)Complexity,代表圈复杂度。圈复杂度是1个函数可履行路径的数目,以下语句为圈复杂度的值贡献1:if/else/for/while语句,3元运算符语句,if/for/while判断条件中的"&&"或“||”,switch语句,后接break/goto/return/throw/continue语句的case语句,catch/except语句等。对应有最大圈复杂度(Max Complexity)和平均圈复杂度(Avg Complexity);
    (9)后面的几个指标:Max DepthAvg DepthAvg ComplexityFunctions,依次代表:最大函数深度、平均函数深度、平均圈复杂度、函数数目。这几个指标看名字基本就知道意思,这里不再赘述。
上一篇下一篇

猜你喜欢

热点阅读