QAC中文网站 > 热门推荐 > QAC如何按文件查看复杂度指标 QAC复杂度统计与源码结构不一致如何复查
教程中心分类
QAC如何按文件查看复杂度指标 QAC复杂度统计与源码结构不一致如何复查
发布时间:2026/10/28 16:52:33

  一个文件看起来只有几个判断,QAC报告中的复杂度却不低;另一个文件写了不少条件分支,统计结果反而更小。遇到这种差异,需要先看清指标名称和统计对象。函数圈复杂度、嵌套深度和文件函数数量分别描述不同内容,宏展开及条件编译也会改变分析器实际处理的代码。

  一、QAC如何按文件查看复杂度指标

 

  按文件查看,通常是先选定源文件,再检查其中各函数的指标。STCYC属于函数级圈复杂度,不能把文件行数、告警数量直接当作它的对应值。

 

  1、分析文件并生成指标报告

 

  ①打开QAC工程,在【Files】面板中选中目标源文件,核对目录,避免选到测试目录或其他模块中的同名文件。

 

  ②右键选择【Analyze Selected File(s)】,等待分析完成,检查文件是否存在解析失败或结果过期标记。

 

  ③保持文件选中,打开【Report】→【Generate report for selected files】,在报告生成窗口选择CRR代码审查报告。

 

  ④保留【Open Report Location】,点击【OK】,打开本次生成的报告,查找目标文件及函数指标明细。

 

  CRR用于汇总文件、函数和类的指标及诊断;需要进一步整理原始指标时,可以生成MDR指标数据报告。MDR输出XML,适合按文件路径、函数和指标代码提取数据,不是普通告警清单。

 

  2、区分指标原值和文件汇总值

 

  ①在报告中记录函数名及STCYC数值,结合ST MIF对应的实际指标代码STMIF查看最大嵌套深度。

 

  ②查看STFNC核对文件内识别出的函数数量,再与报告中的函数条目对应。

 

  ③若自行按文件整理结果,明确采用最大值、平均值还是超限函数数量,并保留函数明细。

 

  例如,一个文件包含三个函数,STCYC分别为2、4、12。最大值是12,平均值是6,合计为18,这三个数字表达的含义不同。比较两份报告前,应确认双方采用相同汇总方式;平均值较低,也不能据此忽略复杂度较高的单个函数。

 

  二、QAC复杂度统计与源码结构不一致如何复查

 

  复查可以从一个有疑问的函数开始。先确认结果对应当前代码,再检查预处理后的函数体,通常比直接重算整个工程更容易找到原因。

 

  1、排除旧结果和不完整报告

 

  ①保存源文件,在【Files】面板查看分析状态;出现时钟标记时,将鼠标移到文件上查看过期原因。

 

  ②右键重新执行【Analyze Selected File(s)】,检查分析过程中是否存在头文件缺失、语法解析失败等问题。

 

  ③重新生成报告,核对生成时间、工程配置及文件路径,并确认没有启用【Ignore Dependencies】跳过依赖检查。

 

  启用【Ignore Dependencies】后生成的报告会标记为Draft,内容可能不完整。若函数列表已经缺项,应先处理分析失败,不能把缺失条目当作复杂度为0。

  2、检查宏展开和条件编译

 

  ①打开【Analyze】→【Open Analysis Settings】,勾选【Generate Preprocessed Source for Analyzed Files】。

 

  ②重新分析目标文件,在【Files】面板右键选择【Open preprocessed.i】;需要更新预处理文件时,先执行【Generate/Regenerate preprocessed.i】。

 

  ③在预处理源码中搜索目标函数,核对实际保留的条件分支,以及宏调用展开后增加的判断或循环。

 

  ④对照原文件中的条件编译区域,确认哪些代码在当前宏定义下没有参与分析。

 

  源码里一次宏调用,展开后可能包含多个控制分支;相反,未启用的功能分支不会以原样进入当前分析。此时差异应从构建配置解释,不能只数原文件中的if、for或case。

 

  3、比较文件实际使用的分析选项

 

  ①打开【Project Properties】,检查【Analysis】中的分析组件及相关选项。

 

  ②分别选中目标目录和源文件,在【Analysis Options】中查看是否设置了单独的文件或目录选项。

 

  ③对照真实编译记录,检查宏定义、头文件搜索路径、强制包含文件及编译器兼容配置。

 

  ④如果工程配置来自构建提取,更新构建信息后重新同步,再分析目标文件。

 

  相同文件在不同产品配置中,可能启用不同代码路径。只比较项目级设置还不够,目录和文件级选项也可能影响最终分析输入。出现包含文件版本不一致时,还需核对搜索顺序,确认实际读取的是哪份头文件。

 

  三、如何确认复杂度差异的具体来源

 

  配置核对完成后,可以用小范围对照验证指标变化。测试应放在独立副本中,避免为核对数字而改动正式业务代码。

 

  1、用简单函数核对指标含义

 

  ①新建测试文件,先保留一个只有顺序语句的普通函数,分析后记录STCYC。

 

  ②加入一个简单if判断,再次分析并记录变化,暂时不加入宏、复合逻辑条件和条件编译。

 

  ③再增加第二个独立if,随后改成两层嵌套if,分别比较STCYC与STMIF。

 

  对于这种简单结构,两个独立判断与两层嵌套判断可以具有相同圈复杂度,但嵌套深度不同。源码看起来更深,并不意味着STCYC一定更高。涉及switch、逻辑运算符等结构时,应继续对照所用分析组件的指标定义。

 

  2、将异常函数缩小到可复现范围

 

  ①复制存在疑问的函数及必要声明,保留原有分析选项,在测试副本中确认差异仍能出现。

 

  ②每次只替换一处宏调用或删减一段控制结构,重新分析并记录指标变化。

 

  ③找到引起变化的位置后,保存源码、预处理文件、指标报告和分析配置,写明对应关系。

 

  如果副本无法复现,回查遗漏的头文件、宏和文件级选项;如果同样输入下仍无法解释,则可将这些材料交给技术支持进一步核查。

  总结

 

  安排重构时,开发人员更需要知道哪个函数值得优先处理,以及修改后是否降低了理解和测试难度。一份带有函数明细、代码版本和配置说明的指标记录,能让评审讨论落到具体位置,也方便下一次修改后继续比较。对于暂时不能拆分的函数,这些记录同样有助于安排针对性的测试和复查。希望这些操作能帮助大家更顺利地使用QAC复杂度数据。如果有指标分析、工程配置等方面的需求,欢迎联系咨询。

176 5129 0128