QAC中文网站 > 新手入门 > QAC MISRA检查怎么开启 QAC MISRA违规项怎么筛选
QAC MISRA检查怎么开启 QAC MISRA违规项怎么筛选
发布时间:2026/06/29 18:26:47

  QAC的MISRA检查应当怎样开启,以及QAC的MISRA违规项应该怎样筛选,关键之处不在于把项目导入后仅仅运行一次分析就结束,而在于要先弄清楚项目的语言、编译配置、MISRA版本和规则集这几项是否彼此匹配。Perforce QAC这个工具支持C和C++的静态分析,也支持MISRA规则检查,官方资料里也说明它覆盖了MISRA C与MISRA C++的多个版本,包括MISRA C:2023、MISRA C++:2023等规则体系。

  一、QAC MISRA检查怎么开启

 

  在开启MISRA检查之前,先要把工程的各项配置做准确。QAC并不是只读取源文件就足够了,它还需要去理解头文件的路径、宏定义、编译器的类型以及目标平台的差异。如果这些基础的配置没有弄对,后面报出来的MISRA违规项当中,就比较容易掺杂进来大量的无效告警。

 

  1、先建立分析工程

 

  把需要检查的源代码导入QAC工程以后,要去确认源码目录、头文件目录、编译选项和宏定义都已经配置得完整了。在嵌入式项目里,常常存在着大量的条件编译,如果宏定义给漏掉了,那么工具所看到的代码路径,就和真实的编译路径不一样了,MISRA的结果自然就会产生偏差。

 

  2、选择MISRA规则集

 

  在【Coding Standards】当中,去选择项目所要求的MISRA版本,比如MISRA C:2012、MISRA C:2023,或者MISRA C++相关的规则集。这一步,要和客户的要求、项目上的合规计划以及开发用的语言保持一致。不能出现项目要求的是MISRA C:2012,工具里面却选了另外一个版本的情况;也不可以把C和C++的规则混在一起使用。规则的版本要是不一致,那么到了后面,违规的数量、规则的编号,还有偏离的记录,就都会对不上了。

 

  3、运行静态分析

 

  等配置都做完了以后,再去执行项目的分析。头一回做分析的时候,建议去运行一次完整的扫描,不要只分析少量的文件。完整的扫描可以把头文件、全局符号、跨文件依赖,还有项目层级上的规则问题,都暴露出来,这样也方便在后面建立基线的结果。

 

  二、QAC MISRA违规项怎么筛选

 

  当MISRA的违规项出来以后,不要一开始就按照数量去追求清零。更加合理的做法,是先按照规则的严重程度、代码的位置、是不是与安全相关、以及是不是可以修复,来分层次地处理。Perforce的说明当中也提到,QAC的界面提供了严重程度的过滤器,消息的等级和MISRA规则的分组之间,也是存在对应关系的,在筛选的时候,要注意规则本身所包含的合规含义。

 

  1、先按等级筛选

 

  应该优先去查看那些高等级的消息、强制类规则、必需类规则,还有出现在核心模块当中的违规项。比如说,和未定义行为、指针的访问、类型的转换、数组越界、控制流的异常有关的问题,通常来讲,要比普通格式类的问题更早去处理。

  2、再按模块筛选

 

  按照文件、组件、责任人,或者功能模块来过滤违规项,可以让问题的分派变得更加清楚。比如,在驱动层,重点要去看硬件的访问、指针和类型转换;在应用层,重点要去看控制流、接口的返回值和异常的路径。不要把所有的违规项都混在一个大列表里面去处理,不然的话,就很难往前推进。

 

  3、区分修复和偏离

 

  有一部分违规,是可以通过对代码进行调整来解决的,比如把显式的类型转换补充完整、把复杂的表达式拆分开来、增加边界的检查;还有一部分,则可能是因为硬件寄存器、编译器的扩展、第三方的代码这些原因,需要去走偏离的流程。能够修复的就先进行修复,确实修复不了的,再让它进入偏离,不要把这个偏离的流程,当成是一种可以成批清理告警的方法。

 

  三、QAC MISRA检查结果怎么整理

 

  QAC的检查结果,最后是要服务于代码的整改和合规审查的。仅仅导出一份违规的清单,还是不够的,还需要能够说明,哪些问题已经得到了修复,哪些问题已经走了偏离,又有哪些问题仍然在处理的当中。

 

  1、建立问题分类表

 

  在【MISRA违规清单】里面,要把规则的编号、文件的位置、问题的说明、责任人、处理的方式和当前的状态,都记录下来。这张表不用写得过于复杂,但是它要能够支撑评审。比如,同一条规则在多个文件里面重复出现的情况,可以进行归类处理;位于安全相关路径里的违规项,要单独地标注出来,不能和普通工具函数里的问题放在同一个优先级上面。

 

  2、保留偏离依据

 

  对于那些不能修复的违规项,需要把偏离的原因、风险的分析、替代的措施、验证的记录,还有审批的结论,都保留下来。特别是涉及到指针、类型转换、宏定义、硬件寄存器访问的这些场景,不能只写上“项目需要”或者“历史代码原因”这么简单。

 

  3、定期复查基线

 

  在规则集升级、代码进行了重构,或者编译器发生切换以后,原来的QAC结果,是有可能产生变化的。项目组需要定期地去复查历史的违规项和偏离项,去确认已经关闭的问题,没有再一次出现,也要确认过去批准过的偏离,现在是不是依然还成立。

  总结

 

  总结起来,QAC MISRA检查怎么开启,QAC MISRA违规项怎么筛选,可以按照“先配好工程环境、再选择MISRA规则集、执行完整的分析、按等级和模块进行筛选、最后整理整改和偏离记录”这样的顺序来做。QAC MISRA检查的重点,并不是生成一份告警的列表,而是要把违规项,转化成可以修复、可以评审、可以追溯的质量问题。当规则的版本、编译的配置还有筛选的口径,都统一了以后,后面的整改效率,还有合规的材料,都会变得更加稳定。

读者也访问过这里:
135 2431 0251