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

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