美文网首页
0基础——c/c++程序的测试笔记(二)

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

作者: ayusong870 | 来源:发表于2020-02-26 21:45 被阅读0次

    要点

    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,依次代表:最大函数深度、平均函数深度、平均圈复杂度、函数数目。这几个指标看名字基本就知道意思,这里不再赘述。

    相关文章

      网友评论

          本文标题:0基础——c/c++程序的测试笔记(二)

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