創提部落格
希望我們能與您分享和探討成長中的點點滴滴
使用Helix QAC對OpenHarmony程式碼做靜態分析
分享到
Helix QAC是一款權威的C/C++程式碼合規性靜態分析工具,適用於對程式碼的規範性和可靠性有較高要求的軟體系統。針對任何C/C++程式碼都可以使用Helix QAC來做靜態分析,找出程式碼中不符合編碼規範的語法問題,提高軟體整體編碼品質,優化編碼開發習慣。本文對面向全場景、全連接、全智慧時代的Harmony OS的開源專案OpenHarmony程式碼進行靜態分析。
測試環境介紹
整個測試環境搭建在VMware Workstation虛擬機器上,虛擬機器分配4核心,4GB記憶體,安裝Ubuntu Server 20.10作業系統,使用最新的Helix QAC 2021.2 for Linux,使用MobaXterm終端軟體,SSH連接到虛擬機器,圖形介面通過SSH轉發到MobaXterm自帶的X Server,顯示出圖形化介面。OpenHarmony程式碼使用的是gitee上最新的master分支程式碼(截至2021年9月),使用內置示例工程wifi-iot專案,對wifi-iot專案做靜態分析。
開發環境的配置
安裝好Ubuntu server系統和Helix QAC 2021.2靜態測試工具之後,就可以開始開發環境的配置。按照官方文檔教程,通過apt安裝必要的庫和工具,使用官方文檔推薦的“通過repo+https”方式下載原始程式碼到虛擬機器中。下載完成後,在shell裡面輸入hb set命令,設置當前的程式碼的根目錄,以及要編譯的項目,在這裡選擇程式碼中內置的wifiiot_hispark_pegasus項目。
選擇完成後,開發相關的環境配置完成,接下來嘗試編譯原始程式碼,輸入hb build命令,就可以開始構建編譯原始程式碼了。
這一步的目的是確保原始程式碼能夠正確編譯,沒有任何編譯錯誤,也就代表程式碼的開發環境配置完成。
測試環境的配置
使用Helix QAC對程式碼進行靜態分析時,必要的前置條件就是確保程式碼可以完全編譯成功,沒有任何編譯錯誤,只有這樣才能保證靜態分析的結果是可信的。在上一步已經驗證程式碼是可以完全正確編譯的,接下來就可以打開Helix QAC,創建一個靜態分析專案,對程式碼進行靜態分析。輸入./qagui,就可以打開Helix QAC的圖形化介面。
整個靜態分析的過程均可以在圖形化介面中完成,同時也提供了命令列的操作方式,便於和CI系統集成,在整個專案開發週期內,持續不斷確保高標準程式碼品質。
創建一個靜態分析的專案
到菜單Project->Create New Project,打開測試環境創建嚮導。
打開之後,根據實際需要設置專案的目錄和專案名稱。
根據實際使用的編譯器,選擇編譯器對應的CCT,在這裡,OpenHarmony中的wifi-iot項目是由riscv32-unknow-elf-gcc編譯器編譯的,在這裡選擇riscv32-unknow-elf-gcc編譯器對應的CCT。
導入項目程式碼
項目創建完成,就可以導入程式碼,對程式碼做靜態分析。在這裡可以通過同步的方式,導入程式碼。
功能表Project->Synchronize,打開同步配置視窗,輸入專案程式碼根目錄,再輸入編譯命令,就可以導入原始程式碼。同步需要對專案做rebuild,所以要事先清除,編譯命令輸入hb clean && hb build,點擊Synchronize,會自動調用編譯命令對程式碼完整編譯,同時監控編譯過程,把所有編譯到的檔都導入到Helix QAC靜態分析專案中。
同步完成後,可以看到被添加進Helix QAC靜態分析專案的原始檔案。
靜態分析程式碼以及分析結果
點擊分析按鈕,就可以對專案中所有的程式碼進行靜態分析,在這裡使用MISRA C 2012 規則,對程式碼的編碼規範做檢查。分析完成可以看到結果以及分析之後的數量。
針對當前程式碼版本的OpenHarmony程式碼,經過Helix QAC的靜態分析,使用MISRA C 2012編碼規範,總共發現了違反MISRA C 2012 規則的數量是63222,其中違反MISRA C 2012 Mandatory的數量是356,違反MISRA C 2012 Requird數量是39481。違反MISRA C 2012 Advisory的數量是27538。違反Mandatory分類和required分類的程式碼需要做出更正,違反Advisory分類的程式碼,可以根據需要做出修正。Helix QAC還可以自動生成報告,這裡對於當前的分析結果生成一份程式碼審查報告(Code Review Report,CRR)。
以下是報告截圖(部分)