Understand软件中文网站 > 新手入门 > Understand怎么进行代码度量分析 Understand代码度量结果异常如何检查
教程中心分类
Understand怎么进行代码度量分析 Understand代码度量结果异常如何检查
发布时间:2026/08/27 11:04:32

  Understand完成项目分析后,可以直接统计代码行数、函数复杂度、嵌套深度、类耦合等度量数据,也能按函数、文件、类和项目层级查看汇总结果。代码度量比较适合用来找体量较大的文件、复杂函数和耦合集中的模块,但这些数值依赖Understand已经识别到的源码实体。项目文件缺失、宏配置不对或者选错度量层级,都可能让结果和人工检查出现明显差异。

  一、Understand怎么进行代码度量分析

 

  Understand内置了多类代码度量指标,可以从Metrics Browser查看具体数据,也可以借助Treemap观察复杂度集中位置。分析时先确定对象层级,再选择对应指标,避免把函数值和文件汇总值放在一起比较。

 

  1、在Metrics Browser查看度量数据

 

  ①打开已经完成Analyze的Understand项目。

 

  ②进入【Metrics】→【Browse Metrics】。

 

  ③在实体列表中选择准备分析的【File】【Function】【Class】等对象。

 

  ④在度量列中查看【CountLine】【CountLineCode】【Cyclomatic】【MaxNesting】等数据。

 

  ⑤点击列标题,可以按照对应数值排序。

 

  ⑥要找复杂度偏高的函数,可以选择函数实体后按【Cyclomatic】从高到低排列。

 

  ⑦要检查源码体量,则查看【CountLineCode】或【CountStmt】。

 

  ⑧双击目标实体,回到对应源码位置继续检查。

 

  同一个指标并不一定适用于所有实体。例如【Cyclomatic】主要针对函数和方法,到了文件或项目层级,Understand通常会显示【AvgCyclomatic】【MaxCyclomatic】【SumCyclomatic】这类汇总数据。

 

  2、查看圈复杂度和嵌套深度

 

  圈复杂度适合检查函数内部控制分支是否过多,嵌套深度则可以辅助判断代码层级是不是过深。

 

  ①在【Metrics Browser】中筛选【Function】或【Method】。

 

  ②添加或显示【Cyclomatic】列。

 

  ③同时查看【MaxNesting】。

 

  ④找到数值较高的函数。

 

  ⑤双击函数进入源码。

 

  ⑥检查其中的【if】【for】【while】【switch】等控制结构。

 

  ⑦如果项目采用不同的复杂度算法,进入【Project】→【Configure Project】→【Metrics】。

 

  ⑧找到【Complexity】相关设置,检查当前使用的是【Normal】【Strict】【Modified】还是其他复杂度方式。

 

  【Strict】一类计算方式会把条件表达式里的逻辑运算考虑进去,所以同一个函数切换复杂度算法后,数值可能发生变化。做版本对比时应保持算法设置一致。

 

  3、用Metrics Treemap找复杂代码区域

 

  工程文件较多时,逐行看表格不够直观,可以先用Treemap定位异常区域。

 

  ①进入【Metrics】→【Metrics Treemap】。

 

  ②选择当前准备查看的代码范围。

 

  ③设置方块大小对应的度量,例如【CountLineCode】。

 

  ④再把颜色映射到【Cyclomatic】或其他复杂度指标。

 

  ⑤观察面积较大的区域,找到代码量集中的模块。

 

  ⑥再查看复杂度颜色较明显的函数或文件。

 

  ⑦点击对应节点,继续进入实体详情。

 

  ⑧回到【Metrics Browser】查看该对象的具体数值。

 

  Treemap适合做定位,不适合直接拿颜色判断代码质量。真正要处理哪个函数,还要回到具体指标和源码结构里看。

 

  二、Understand代码度量结果异常如何检查

 

  度量数字明显偏大、偏小或者同一份源码换个项目结果就不一样时,先检查项目分析数据。Metrics使用的是项目数据库里的实体,如果源码没有解析完整,后面的度量也会受到影响。

  1、先确认项目文件有没有漏掉

 

  ①进入【Project】→【Configure Project】。

 

  ②打开【Files】配置。

 

  ③检查主要源码目录是否都已经加入项目。

 

  ④确认.c、.cpp、.h等文件没有被错误排除。

 

  ⑤项目近期增加过新目录时,把对应目录补进文件列表。

 

  ⑥保存配置后执行【Analyze Changed Files】。

 

  ⑦改动范围较大时重新执行完整Analyze。

 

  ⑧回到【Metrics Browser】重新查看文件数和代码行数。

 

  如果项目少分析了一个源码目录,【CountDeclFile】【CountDeclFunction】和代码行数都会一起减少,这时单独调整Metrics设置没有作用。

 

  2、检查Missing Includes和Undefined Macros

 

  C/C++工程中,头文件和条件编译配置不完整,对度量结果影响比较明显。

 

  ①进入【Project】→【Improve Project Accuracy】。

 

  ②打开【Missing Includes】。

 

  ③查看当前找不到的头文件。

 

  ④进入项目C++配置,把缺少的Include目录补进去。

 

  ⑤再打开【Undefined Macros】。

 

  ⑥对照原工程编译参数填写实际使用的宏和值。

 

  ⑦保存后重新Analyze项目。

 

  ⑧检查之前显示异常的函数、类和文件度量是否变化。

 

  某段代码受宏控制时,Understand使用的宏值不同,参与分析的代码内容也会跟着变化。代码行数、函数数量和复杂度因此出现差异,并不一定是度量功能本身算错。

 

  3、检查比较的是不是同一种指标

 

  有时看起来像数据异常,其实是拿不同层级的指标互相比了。

 

  ①在【Metrics Browser】确认当前实体类型。

 

  ②函数层级查看【Cyclomatic】。

 

  ③文件层级查看【AvgCyclomatic】【MaxCyclomatic】或【SumCyclomatic】。

 

  ④不要把一个函数的Cyclomatic和整个文件的SumCyclomatic直接比较。

 

  ⑤检查代码行数时,区分【CountLine】和【CountLineCode】。

 

  ⑥前者会统计物理行,后者更偏向实际代码行。

 

  ⑦项目做历史对比时,确保两次导出的指标名称保持一致。

 

  指标名称相近,但计算对象不同,结果差很多很正常。做表格统计时,把Metric ID一起保留下来会更容易核对。

 

  三、度量配置修改后怎么确认结果正常

 

  调整源码范围、宏或度量设置后,可以选几段容易人工核对的代码做验证,再扩大到整个工程。

 

  1、拿单个函数做人工核对

 

  ①选择一个结构比较清楚的函数。

 

  ②在【Metrics Browser】查看它的【Cyclomatic】。

 

  ③打开对应源码。

 

  ④数一下主要判定结构,例如【if】【while】【for】和【switch】。

 

  ⑤再检查当前项目使用的复杂度算法。

 

  ⑥如果数值差异明显,确认函数里是否存在条件宏或未解析代码。

 

  ⑦修正项目配置后重新Analyze。

 

  ⑧再次查看同一函数的度量值。

 

  2、重新导出度量结果做对照

 

  ①进入【Metrics】→【Browse Metrics】。

 

  ②选择需要保留的指标列。

 

  ③执行度量数据导出。

 

  ④保存为CSV后记录当前项目版本。

 

  ⑤配置调整后重新分析。

 

  ⑥再次导出同一组指标。

 

  ⑦对照【CountLineCode】【CountDeclFunction】【Cyclomatic】等数据变化。

 

  命令行环境也可以使用【und metrics】生成项目度量数据。长期做版本比较时,固定同一组指标和项目配置,会比每次手工挑选不同字段更容易判断代码变化。

  总结

 

  Understand代码度量结果要和项目实际代码对应,前提是源码范围、编译条件和分析配置没有明显缺口。发现行数、函数数量或复杂度异常时,可以先从项目文件和解析状态查起,再确认使用的指标层级和计算方式。度量数据适合帮助定位值得检查的代码区域,具体是否需要调整,还要结合源码结构和项目规范判断。如需进一步了解Understand代码度量、复杂度分析与度量异常排查方法,欢迎联系咨询。

135 2431 0251