陳瑩 趙玉麗
南京萊斯電子設備有限公司 江蘇 南京 210000
QT是面向對象的應用跨平臺的C/C++語言工具包,QT應用程序設計方法遵循面向對象的編程方法。編寫QT應用程序的主要方法是基于已有的QT類進行編寫用戶類。它既可以開發GUI程序,也可以開發非GUI程序,比如控制臺工具和服務器。QT擁有很多的窗口部件,如按鈕、菜單、滾動條和應用程序窗口等,這些窗口部件組合起來可以創建很多種用戶界面[1]。
QT開發環境能夠跨平臺運行,目前支持的平臺系統有:Linux(32位、64位)(包括中標麒麟平臺),MacOSX以及Windows平臺。它提供給應用程序開發者建立圖形用戶界面所需的功能。QT很容易擴展,并且允許真正的組件編程。QT利用signal/slot(信號/槽)機制實現對象之間的通信。signal和slot沒有構成一一對應的關系,同一個signal可以連接很多個slot,多個signal也可以與某一個slot相連。雖然signal/slot機制比回調函數的速度緩慢,但緩慢速度并不明顯。特別是在嵌入式系統中這些signal和slot使用不多的場合,這種速度上的損失可以忍受,并且該種機制具有簡明性和靈活性[2]。開發團隊在對應的集成和測試中若能有效發現違反編碼規則的問題、軟件代碼缺陷和存在的安全隱患漏洞,如:內存及資源管理錯誤、內存泄漏、空指針引用、未初始化的變量、未經驗證的用戶輸入、數組邊界采用不可信數據,可以大大降低系統后續風險,同時減少嚴重經濟損失甚至災難事故的發生概率[3-5]。應用源代碼分析工具Klocwork,不需設計測試用例,也不需運行程序,就能夠快速檢測出Windows、Linux操作系統下C、C++、Java語言代碼漏洞、代碼設計缺陷,并同時可生成詳細、全面的缺陷修復率以及其他關鍵軟件度量的報告。
通常情況下,Klocwork可以通過新建一個測試項目,輸入項目名,選擇文件類型,并選擇要分析的dsw或dsp工程名,然后在valid configurations欄下面選擇debug選項,鉤選生成測試報告,從而完成測試項目的生成。
代碼審查的具體方法為:
將qmake、nmake加入環境變量,或可修改Kwcc-config.xml加入頭文件的路徑,以消除分析錯誤防止分析結果不準確。
如果這個項目是第一次分析,就在Klocwork上創建一個新項目,使用命令為kadmincreate-project<my-project-name>,如果不是第一次分析的,就不用再次創建新項目了,使用原來創建的項目名即可。
導入kb文件,命令為:kwadmin import- config <myproject-name>QT 4.6.2kb
打開VS命令窗口,執行命令,如D:QTQT5.3inqmake.exe,執行成功后,會在.pro工程目錄下生成makefile、makefile.debug、makefile.release三個文件。在VS命令窗口中,執行kwinject nmake -f makefile.release命令,可以在.pro文件目錄下看到有.out文件生成,打開生成的.out文件,可以查看到正確的版本號和相關的.out信息[6]。
(1)執行nmake -f makefileclean命令
在VS命令窗口中,執行nmake -f makefile clean命令,可以根據輸入調試信息查看默認用的哪個makefile。例如,nmake -f Makefile.release clean
(2)使用klocwork分析QT項目
使用Klocwork分析QT項目的命令為 kwbuildproject
-project<my-project-name>-f-o tables kwinject.out,此步驟即build文件。
(3)將分析后的項目結果導入數據庫
將分析后的項目結果導入數據庫的命令為:kwadmin load<my-project-name>tables,此時可進入Klocwork start page中進入 project list里查看.pro工程的問題列表。
但是Klocwork Insight版本對QT的支持并不完全,比如針對QT4.7和QT5.4等開發環境,無法生成對應的out文件,目前缺少可以直接進行廣泛代碼審查的測試腳本。下面就在實踐中總結的通過命令行方式進行代碼審查的腳本方法進行探討。
(1)創建工程,創建檢查工程需要執行如下指令
. /K10 /server /bin/kwadmin-urlhttp://安裝Klocwork工具的服務器IP地址: 8080 create -project,可以通過瀏覽器網頁檢查工程創建情況,登錄http://localhost:8080/輸入用戶名Administrator 密碼為空,查看工程創建情況。
1)編譯生成中間文件
cd到工程目錄下,找到Makefile文件,執行makeclean命令; 執行kwinject -o Myproject.out make生成out文件。
2)分析中間文件
kwbuildproject-add-analysis-options=--lef-planner-inmemory-project Myproject-o tables -f kwinject.out。
執行命令后,到工程目錄下,生成tables目錄成功。
3)生成報告
執行命令 kwadmin load Myproject tables。
4)查看報告
登錄 http://localhost:8080/查看工程,點擊工程選擇 issues列表,查看問題描述。
(1)創建工程,創建檢查工程需要執行如下指令
. /K10 /server /bin/kwadmin-urlhttp://安裝Klocwork工具的服務器IP 地址: 8080 create - project,可以通過瀏覽器網頁檢查工程創建情況,登錄http://localhost:8080/輸入用戶名Administrator密碼為空,查看工程創建情況[7]。
(2)編譯生成中間文件
1)cd到QT安裝路徑下,…mingw491-32in,執行qmake.exe命令。
2)cd到工程路徑下,執行clean命令:…mingw32-make -f Makefile.Debugclean。
3)執行kwinjectmingw32-make-f Makefile.Debug生成out文件。
(3)分析中間文件
kwbuildproject add-analysis-options=--lef-planner-in-memory--project Myproject -o tables -f kwinject.out。
執行命令后,到工程目錄下,生成tables目錄成功。
(4)生成報告
執行命令 kwadmin load Myproject tables。
(5)查看報告
登錄 http://localhost:8080/查看工程,點擊工程選擇issues列表,查看問題描述。
通過腳本對QT環境下的代碼審查,可適用于各通用平臺,且不需要生成中間過程out文件,方法簡便易行。確認是源代碼問題,修改源代碼后重新合入版本庫,啟動新一輪的Klocwork檢查;根據新的檢查結果確認代碼缺陷是否已經被解決,已經解決掉的缺陷呈現狀態為前一次檢查出來的缺陷數量減少。確認是誤報的缺陷,登錄Klocwork檢查的WebUI方面完成誤報缺陷的屏蔽,屏蔽成功之后分析結果的缺陷數也會減少[8-9]。
某公司有個軟、硬件結合的大型開發項目。分別在Windows 7 操作系統、QT環境下安裝Klocwork進行代碼檢查。對該模塊進行檢查的掃描結果如下表所示。查結果報告中給出了模塊的告警數量,并詳細列舉了缺陷的類型與缺陷定位。開發工程師通過登錄檢查的WebUI頁面檢查結果報告,對產品源代碼進行分析和處理,將缺陷歸零,有效提高了代碼質量。

檢查的掃描結果表
工作實踐表明Klocwork檢查有助于及時發現并解決QT開發環境下軟件源代碼的各種缺陷,便于產品主管了解工作進度和解決存在的問題,進一步提升產品質量。
本文設計了廣泛適用于通用平臺的Klocwork代碼審查工具的腳本,并通過QT4.7/QT5.4開發環境的適應舉例闡明了該腳本的易用性和可行性。在klocwor代碼審查實踐的基礎上,對klocwork如何支持QT開發環境下的.pro文件問題審查進行了詳細的分析說明,從而對軟件開發人員和測試人員有較好的參考價值。