Helix QAC所提供的四种抑制方式

创提信息
2021/11/29

分享到

今天我们要讨论的是Perforce的Helix QAC工具的错误抑制功能。Helix QAC提供了多种不同的抑制功能可以使用在不同的场景下。这些功能分为:
 
     • 透过注释的方式来抑制错误
 
     • 透过Baseline的方式来抑制错误
 
     • 透过Dashboard的方式来抑制错误
 
     • 透过#pragma的方式来抑制错误

 
我们会针对以上四种不同的抑制方法来进行讨论并了解在哪种情况下使用哪种抑制方式是比较建议的。

 
透过注释的方式来抑制错误


Helix QAC可以让使用者用C或C++的注释方式(例如使用/* */或是//) 来抑制错误。举例来说,用户可以透过下方的贴图看到,可以用注释的方法来抑制错误。


Helix QAC所提供的四种抑制方式-1.jpg

 
抑制的主要形式是PRQA S <错误号>。S代表 Suppression (抑制),而错误号基本上就是每条错误独有的一个ID编号。除此之外,还有其他的注释方法可以抑制某些区块或是某段Source Code的错误。例如下方图档所写的,可以使用EOF代表从492行的Code一直抑制到档案的最后一行(EOF = End of File),或使用 ++和-- 的方式来开启或者关闭抑制功能(例如0-9999 ++就是抑制所有出的错误号的功能开启)。


Helix QAC所提供的四种抑制方式-2.jpg

 
若是有需要写入一些额外的抑制的说明,用户也可以在抑制注释的后方写入‘#’符号来声明。


Helix QAC所提供的四种抑制方式-3.jpg


这个透过注释来抑制错误的方法是最通用的方式。使用这个方法的好处在于这个方式是非常弹性化的。使用者可以根据自己的需求来抑制一行或多行Source Code。当然这个方法唯一的坏处就是用户必须把这些注释写进Source Code里。有的时候,用户可能不想要把QAC的注释和自己本身的Project Code写一起,那么若是有这样的需求的话,我们可以再看下方的“透过Dashboard的方式来抑制错误”的说明。

 
透过BASLINE来抑制错误
 
这个方式是让用户可以把以前版本的错误抑制,并不会在下一个版本的分析结果出现。这个功能基本上可以让用户选择一个版本或时间点,把之前的错误抑制,只报告出之后的错误。这个抑制方法通常是适用于当用户在分析Legacy Code,或从别人那里继承过来的Code,或甚至透过这个方式,把需求修复的错误透过版本的方法来进行分类。举例来说Legacy或是继承来的Code,因为不是自己开发的,也无法修改,所以通常会透过这种抑制手段来把Legacy Code或第一版的错误先抑制住,然后只针对后续开发新增的Code来报告出需要修复的错误来。Baseline的功能会透过一个Diff的比较功能,来分辨出哪一些是新增和旧的Code,然后再套用抑制档案。以上说的Baseline是在本机上作比较。除此之外,Helix QAC也可以让用户设定版本管控工具的命令,来比较本机的版本和版本管控理里最新的版本,或透过Helix QAC Dashboard[QAC的一个报告系统同居],比较本机的版本和之前上传到Dashboard上的版本来做比较。不过不管使用哪一种版本,抑制的信息最后都会存放在一个*.sup的抑制档案。这个档案会放在Helix QAC Project目录下的一个prqa根目录里––可以在这个目录下搜寻的到。

 
透过DASHBOARD来抑制错误
 
Helix QAC让使用者可以在客户端连线到Dashboard并在第一次上传分析结果的时候创建一个Unified的Project。上传结果后,使用者可以透过浏览器连接到Dashboard,登录后,就可以看到上传的Project Code和分析结果。使用者可以在 Dashboard上进行抑制错误的动作。抑制以后,Dashboard会自己生成一个*.sup档案并保存起来。在这之后,任何客户端的Helix QAC使用者就可以连接到Helix QAC Dashboard,然后把这个*.sup的抑制档案下载下来。下载好以后,再次分析完就可以看到在Dashboard上做的抑制会直接套用。若是想要移除这些抑制,就需要到Helix QAC Project目录下的prqa目录里找到这个*.sup的抑制档案,然后把它移除掉即可。若有需要可以随时再从客户端下载一份*.sup。
 
Dashboard的好处除了在Code里看不到任何QAC的抑制注释以外,也可以透过这个用法确保所有客户端用的抑制设定都是一样的––因为所有的错误都是透过Dashboard来做统一管理的。使用者可以设定登录Dashboard的账号权限,确保只有有权限的人能做抑制,其他用户就只能看结果,或下载抑制档案来直接套用这个设定来进行分析。

 
透过#pragma来抑制错误
 
这个抑制方法是注释抑制的前身。这个功能目前还能用,但是有可能会在未来的版本会被移除。若是能的话,都会建制使用者直接使用注释抑制的手段而不是用这个#pragma的抑制方法。这个#pragma的错误抑制的方法是透过使用“#pragma PRQA_MESSAGE_OFF/ON”的语法,例如下方贴图所显示的。


Helix QAC所提供的四种抑制方式-4.jpg

 
若是用注释抑制的方法来达到同样的效果,基本上就会是如下方贴图所显示的。


Helix QAC所提供的四种抑制方式-5.jpg

 
最后,这个#pragma的抑制方法可以套用在宏的扩展上。举例来说:
 
       #pragma PRQA_MACRO_MESSAGES_OFF “mymacro”
 
上方的范例会抑制所有的错误在任何‘mymacro’的扩展上
 
      #pragma PRQA_MACRO_MESSAGES_OFF “mymacro” 3344
 
上方的范例只会抑制错误ID 3344在任何“mymacro” 的扩展上
 
我们今天讨论了Helix QAC能提供的4种抑制方法。我们可以从上方的说明了解到如何使用这些抑制错误的方法和建议在哪种情况下会套用哪一种方式会比较好。希望这篇文章能让大家更进一步地了解Helix QAC的注释方式。