梅 磊 劉先博
(中國電子科技集團38所,合肥,230000)
Klocwork在軍用軟件測試中的應用
梅 磊 劉先博
(中國電子科技集團38所,合肥,230000)
文摘:分析在軟件測試工作中出現的大量重復性工作,引用軟件工程化管理的自動化測試思維,自主定制測試腳本,在Windows系統及國產麒麟操作系統下使用Klocwork測試工具進行自動化測試設計、實現和應用,通過在項目開發過程中定期循環交替進行Klocwork的全面檢查,發現集成測試和系統測試所不能發現的問題,提高項目代碼的質量,降低整個測試過程的成本。
靜態分析;靜態測試;軟件工程化。
隨著我國國防實力的穩步提升以及軍用裝備信息化建設要求的提高,對軍用裝備軟件系統的要求也越來越高,其安全性與穩定性已成為裝備研發過程的重中之重。然而,在軍用軟件開發期間,由于人為因素引入的錯誤,隱藏了許多難以發現的缺陷。通過使用多種專用的軟件代碼靜態分析工具,既可以有效提高我們測試人員的測試效率,又可以即時的、準確的分析源代碼,識別軟件中嚴重的安全性缺陷和質量缺陷,延長復雜軟件的生命周期。有效地使用軟件靜態分析工具實現對軍用軟件問題的發掘與探索、提高軟件測試工作的質量和效率已經成為軟件測試領域的應用熱點。
Klocwork軟件是Klocwork公司基于專利技術分析引擎開發、綜合了近年來各種最先進的靜態分析技術而形成的一款具有很多突出特征的靜態分析工具,利用其專利技術能發現全面且詳細的軟件缺陷種類,它支持現行市面常用的編程語言(如C、C++和Java等)。同時,還支持多種度量以及代碼規范的檢查,可以通過設置相應的閾值,提高檢測效率。特別針對C/C++語言引用的非法指針、內存泄漏、數組越界及緩沖區溢出等缺陷的檢測擁有不俗的表現。該工具對軟件架構、編程規則的違反情況提供可視化的架構分析及優化建議,并與多種主流的IDE開發環境進行集成,可持續為大型及超大型(上千萬代碼行)軟件項目提供測試支持。
1.1 工作內容
由于Klocwork的測試環境通常不直接向用戶提供自動測試框架或者腳本,而往往要借助于集成開發環境或腳本來實現自動化測試。通常測試前,首先就要明確被測軟件的測試環境,在被測軟件和測試工具中建立穩固的聯系,這樣才能順利保證靜態分析工作的進行。
Klocwork是一種基于Client/Server架構的源代碼靜態分析工具,支持多語言、多平臺的各類集成開發環境。同時,利用On The Fly技術可以在配置完成后瞬間開始進行分析,并且可以拖拽式地生成測試報告,極大地提高和方便測試人員在本地查看、修改代碼中的錯誤。在外場的開發人員和測試人員也可以非常方便地利用Klocwork的這一特點,應用Trace Back技術來對發現的問題繼續追溯,對Bug的發現和管理也提供了一種新的思路。如果在遇到外場軟件項目開發周期緊張的情況下,測試人員可用便攜式測試設備在實裝環境下完成軟件的靜態分析工作,然后將測試數據注入本地測試分析數據庫內,以供每位測試人員對測試結果進行分析和整理,極大地改善了測試環境的局限性,提高了外場測試工作的靈活性。
Klocwork的代碼靜態分析環境結構如圖1所示。
在當前版本的Klocwork分析界面中,工具將找到的缺陷明確分為致命(critical)、嚴重(severe)、錯誤(error)和非預期(unexpected)等10個等級,并且對于各類問題都有明確、詳細的解釋與說明。同時,對于發現的每個問題,通過簡易的操作便可追溯到具體的代碼行,直觀、簡潔地對問題進行分析與修改。特別是,作為嚴重影響軟件正常工作、在日常測試工作中最為重視的致命性錯誤,Klocwork將空指針引用、緩沖區溢出、數組越界、內存泄漏等19類錯誤列入其中,并針對每類典型錯誤都列舉了實例,便于操作人員的理解和使用。
Klocwork可以對當前我國軍用雷達裝備的軟件系統研發平臺及環境提供完整的支持。其主要特點包括:多語言——C、C++、匯編等;多平臺——Windows、Linux等;支持多種編譯器——ARM系列、TI系列、WinderRiver系列、Microsoft Visual C++、Green Hills系列等;支持的集成開發環境——Microsoft Visual Studio 6.0及以上、Tornado 2.0及以上、Visual DSP++5.0及以上、QT4.8.0及以上等。
1.2 工作流程
針對基于Klocwork搭建的自動化測試流程必須基于各種編輯器的命令行操作界面方式來設計,同時按照測試人員的測試需求,軟件模塊的優先級,以及不同程度下軟件代碼的復雜程度,通過設計和編寫符合要求的自動化測試腳本來實現靜態分析的自動化測試過程。在命令行界面編譯模式下的Klocwork測試工作流程如圖2所示。
Klocwork測試工作主要有以下幾個步驟。
a)打開安裝路徑E∶KlocworkServer 10.0config的文件夾中kwfilter.conf文件,查看當前Klockwork命令是否支持被測軟件的編譯器。
b)運行make-f Makefile clean來清理陳舊的構建,或手動刪除已生產的目標文件。
c)使用被測軟件的編譯器在相匹配的編譯環境中對被測軟件進行編譯。
d)啟動KMC服務功能,并創建項目,設置項目屬性,同時添加被測軟件源代碼文件。
e)開始測試執行階段,利用kwinject命令來獲取編譯過程信息:kwinject C∶Program Files (x86)Analog DevicesVisualDSP 5.0gmake-378"-f dsp3.mak dsp3_Debug。
f)通過kwbuildproject命令來分析被測軟件源代碼:kwbuildproject--urlhttp∶//localhost∶8080/my_project-o my_tables kwinject.out。
g)待工具分析結束后,將分析結果上傳至服務器,如kwadmin--url http∶//server2∶8080/ load my_project my_tables。
h)登陸http∶//localhost∶8080/即可查看靜態分析結果。
Klocwork對于不同編譯環境下的分析執行過程雖然大同小異,但仍存在一定程度上的差異。因此,導致編譯過程或分析過程出現錯誤,而無法正常得到靜態分析結果。以下將從當前軍用軟件常用開發平臺(Windows、基于linux平臺開發的軍用軟件逐漸轉向使用國產麒麟系統)來分別描述在不同平臺下,配合不同類型的集成開發環境,Klocwork的靜態測試過程。
由于歷史原因使得國內很多的軍用軟件開發環境仍是基于Windows系統,即基于Windows系統開發而來的軟件在日常的測試工作中還是占了很大一個部分,因此靈活地使用Klocwork對這類程序進行靜態分析就顯得尤為重要。下面將以Windows系統下基于DSP++5.0開發環境的軍用軟件靜態測試過程為例,詳細描述此類軟件的靜態分析過程。基于Windows系統的靜態分析環境見表1。

表1 基于Windows平臺的靜態分析環境
具備靜態分析測試環境后,按照如圖3所示流程進行配置,并進行分析執行過程。
a)打開Visual DSP++的IDE,導入被測軟件Pro_1的項目文件,并進行編譯。
b)在CMD運行模式下,測試DSP++編譯器的可用性:gmake-378-h。
c)將當前工作路徑轉換至Pro_1源代碼所在路徑E:mcfx_4dspPro_1。
d)Clean項目Pro_1的生成文件,并用命令行對源代碼重新進行編譯:gmake-378-f Pro_1.mak Pro_1_Debug“.constant_object_parameter.c”。
e)編譯通過后,再次執行Clean操作,并使用kwinject命令重新獲取編譯過程信息:kwinjectgmake-378-fPro_1.mak Pro_1_Debug,編譯結束后,在Pro_1的根目錄下生成kwinject.out的文件。
f)在Klocwork中創建Pro_1項目ksadmin-url http∶//localhost∶8080/create-project mcfx_4dsp_1。
g)對Pro_1使用kwbuildproject命令進行分析:kwbuildproject-urlhttp∶//localhost∶8080/mcfx _4dsp_3-o my_tables kwinject.out,同時在Pro_1根目錄下生成my_tables文件夾。
h)向服務器數據庫上傳本次分析結果:kwadmin-urlhttp∶//localhost∶8080/loadmcfx_4dsp _3 my_tables。
i)登陸服務器客戶端,查看靜態分析結果。
近年來,隨著網絡技術和信息技術的飛速發展,網絡技術和信息技術安全已經與我國政治、經濟、國防、文化等公共安全密不可分。而我國操作系統市場在以往一直被微軟的Windows壟斷,所以推動國產操作系統的發展也是國家重要的發展方向。中標麒麟(GeoKylin)操作系統是目前國內安全級別最高的操作系統,并且可以為各類用戶提供全方位的應用安全保護,可以為軍用軟件提供更加安全、可靠的運行環境。基于中標麒麟系統的靜態分析環境見表2。

表2 基于麒麟平臺的靜態分析環境
由于麒麟系統基于linux內核,與Windows系統下使用Klocwork進行靜態分析的過程會有異同,而且更加繁瑣。為了能夠縮減配置的步驟,提高開展靜態分析的效率,我們利用系統提供的命令,編寫靜態分析腳本,部分腳本如下所示:
“#####功能:klocwork自動分析項目腳本
#************被測軟件參數************
#被測軟件名稱
project_name="Pro_2"
#被測軟件makefile文件路徑
project_path=/home/Project Case/Pro_2/exe
#********klocwork安裝的參數***********
#klocwork安裝目錄
kloc_dir=$HOME/klocwork
#klocwork server
KWSRV=http∶//localhost∶8080
#*****************************
……
#Create a project
kwadmin--url$KWSRVcreate-project $project_name
……
#Analyze the project
clean_tables_dir$tables_directory
mkdir$tables_directory
kwbuildproject--url$KWSRV/$project_name-f-o$tables_directory kwinject.out
……”。
在使用過程中應特別要注意的是,在使用前,需要將被測軟件參數中的項目名稱和路徑修改為Pro_2對應的項目信息。若為初次使用,必須要設置Klocwork安裝的參數,而且項目名稱、路徑均不能使用中文。腳本自動執行完成后,系統會將靜態分析結果自動上傳至測試數據服務器以供測試人員使用。
對某軍用軟件項目4種主流測試工具(Pro_1、Pro_2經過Klocwork、QAC、Testbed、C++Test)進行靜態分析測試,測試效率與測試結果統計分別見表3、表4。表3為幾種主流測試工具對同一項目測試后的統計時間;表4為工程項目經過測試后得到的缺陷級別、缺陷類型及缺陷個數的統計結果。
由表3可以得出,對于項目Pro_1的靜態測試工作,4種測試工具所用時間差距不大,基本可忽略不計。其中Klocwork由于省略了測試類型人工選擇的過程,所耗時間最短,擁有較高的測試效率,而Testbed由于測試類型較多,所以花費的時間最長。后期,選用更大代碼量的項目Pro_2來進行靜態分析,從測試結果來看,Klocwork自動化測試方法的優越性便體現出來,成為唯一一個在1h以內完成測試分析的工具。因此,對于軟件項目而言,代碼量越大,Klocwork的自動化測試過程所體現的優越性會越明顯。

表3 主流靜態分析工具測試效率比較

表4 主流靜態分析工具測試結果比較
表4列舉了4種測試工具發現的10種同類問題及個數的統計結果,而對于個別只被其中某一種或兩種工具檢測到的問題,此次則未列入其中。
由結果可以得出,在此次靜態分析測試過程中,Klocwork共發現了70個問題缺陷,雖然問題總數稍少于QAC,但其中所包含的致命缺陷(19)和重要缺陷(18)均為4種工具中發現個數最多的。而這也恰恰是我們針對軟件靜態分析最為重視的地方,因為這些問題的存在不僅會導致軟件程序的易讀性、維護性等方面出現問題,特別情況下,還可能導致出現程序死機、異常退出等嚴重狀況。同時,Klocwork工具所發現的缺陷更多的是一類比較隱秘、不易發現的問題,如數組越界、資源泄漏等,都容易造成不可意料的經濟損失和安全隱患。
各類代碼靜態分析工具均有各自的側重點。如:QAC分析偏重編碼風格、冗余代碼、函數類型等編碼規則方面的審查;Klocwork軟件則側重于內存泄露、空指針引用等靜態分析方面;Testbed傾向于發現代碼本身不符合編碼規則的問題;而C++Test能夠很好地發現變量未初始化和資源泄露等各類代碼結構的問題。因此,在日常工作中,通常會將各種測試工具配合使用,取長補短,不僅能提高代碼靜態分析的覆蓋率,而且能很好的提高測試效率、拓展測試的深度與廣度,這種方式也逐漸成為大多數軟件測評機構的選擇之一。
直接針對代碼進行靜態分析可以在系統測試前找到很多問題、大幅度減少在系統測試時發現問題以及修復問題的時間,最終提高軟件測試環節的效率。在項目開發過程中定期循環交替進行Klocwork的全面檢查,能夠發現集成測試和系統測試所不能發現的問題,不斷提高項目代碼的質量,降低整個測試過程的人力成本、時間成本。這對于軍用軟件較高產品成熟度的要求顯得尤為重要,也使得自動化測試工具Klocwork的廣泛使用,已然成為當前普遍的應用趨勢。
[1]尹浩,于秀山.程序設計缺陷分析與實踐[M].北京∶電子工業出版社,2011.
[2]蔡建平.嵌入式軟件測試實用技術[M].清華大學出版社,2010.
[3]黎連業,王華,李淑春.軟件測試與測試技術[M].清華大學出版社,2009.[4]許育誠.軟件測試與質量管理[M].電子工業出版社,2004.
[5]杜會斌,吳曉娟,周旭.自動測試在軍事電子技術中的應用[J].無線電工程,2005,35(9).
[6]MARK,FWESTER.軟件測試自動化技術與實例詳解[M].電子工業出版社,2000.
[7]路曉麗,等.軟件測試技術[M].機械工業出版社,2007.
[8]Cem Kaner,Jack Falk,Hung Quoc Nguyen.計算機軟件測試[M].機械工業出版社,2005.
[9]呂云翔,王洋,肖咚.軟件測試案例教程[M].機械工業出版社,2011.
[10]梅爾斯.軟件測試的藝術[M].機械工業出版社,2006.
梅磊(1987年—),碩士,軟件系統研究部助理工程師,研究領域:軟件測試、軟件工程化。