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的注釋方式。