馬萌 谷偉 趙煜
摘要:靜態(tài)分析是軟件測試的最初階段,充分有效的靜態(tài)分析可以顯著降低軟件測試成本、提高軟件質(zhì)量。介紹了Klocwork檢查工具在中標麒麟操作系統(tǒng)中的詳細檢查步驟與檢查腳本、對檢查出來的缺陷的處理,以及Klocwork工具在軍用軟件靜態(tài)分析中的安裝過程及使用步驟。典型案例表明,Klocwork檢查有助于及時發(fā)現(xiàn)并解決C/C++軟件源代碼的各種缺陷,從而提高軟件質(zhì)量和安全性。
關(guān)鍵詞:麒麟操作系統(tǒng);靜態(tài)分析;Klocwork工具
中圖分類號:TP316文獻標志碼:A文章編號:1008-1739(2019)20-58-3
0引言
近年來,特別是“微軟黑屏”事件和“棱鏡門”事件給信息安全敲響了警鐘,各種信息安全事件頻繁發(fā)生。硬件設(shè)備國產(chǎn)化和軟件自主可控是實現(xiàn)信息安全亟需解決的問題,尤其在信息安全要求較高的應(yīng)用領(lǐng)域,例如軍事、國防及保密領(lǐng)域已經(jīng)普遍采用國產(chǎn)操作系統(tǒng)作為研究與應(yīng)用平臺,其中中標麒麟操作系統(tǒng)已經(jīng)成為國產(chǎn)化自主可控的主流操作系統(tǒng)。因此,自主可控操作系統(tǒng)的廣泛應(yīng)用已經(jīng)是軟件發(fā)展的大趨勢。
隨著軟件規(guī)模和復(fù)雜性的大幅度提升,軟件質(zhì)量可靠性的問題日益突出,我國大力開展相關(guān)軟件的研發(fā)工作,軟件測試是保證軟件質(zhì)量的關(guān)鍵技術(shù)之一,同時也是軟件開發(fā)過程中的一個重要環(huán)節(jié)。軍用軟件的安全性要求比較特殊,質(zhì)量標準要求高,給軟件測試和質(zhì)量保證帶來相當大的難度。軟件測試過程中,靜態(tài)分析是首先需要執(zhí)行的,對軟件質(zhì)量起到舉足輕重的作用,進行高效靜態(tài)分析是系統(tǒng)測試需要考慮的首要問題[1]。
1靜態(tài)分析及Klocwork工具
靜態(tài)分析(模塊測試)測試軟件設(shè)計的最小單位解決軟件在語法、格式或邏輯等方面的差錯以及是否符合功能要求。這個階段更多關(guān)注程序的實現(xiàn)細節(jié),需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例,也是軟件測試過程中最早期的測試活動。主要依據(jù)程序源代碼的詳細設(shè)計說明書,測試者需要了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu)。靜態(tài)分析主要采用白盒測試用例,輔助以黑盒測試的測試用例,使之對任何合理的和不合理的輸入都能鑒別和響應(yīng)。靜態(tài)分析主要包括模塊接口測試、局部數(shù)據(jù)結(jié)構(gòu)測試、路徑測試、錯誤處理測試和邊界條件測試5個任務(wù)。
Klocwork工具是Klocwork公司綜合應(yīng)用近幾年最先進的多種靜態(tài)分析技術(shù),基于其專利分析引擎技術(shù),開發(fā)的測試工具,是一款非常優(yōu)秀的靜態(tài)分析工具[2],主要特點有:①發(fā)現(xiàn)軟件缺陷的種類覆蓋廣,既包括安全漏洞缺陷,又包括軟件質(zhì)量缺陷,同時還能對變成規(guī)則、軟件架構(gòu)的違反情況進行分析;②支持多種開發(fā)語言,可分析Java和C++/C程序;③可以對軟件的各種度量進行分析;④可以全面地分析軟件,既可以對可視化軟件進行優(yōu)化、分析,又能對軟件的缺陷進行分析;⑤可以對千萬行級代碼的超大程序進行分析;⑥可以對多種主流IDE開發(fā)環(huán)境提供集成。除此以外,Klocwork還可以針對軟件運行時的錯誤,識別數(shù)組越界、非法指針引用、非法浮點數(shù)操作、不可迭代碼及無限循環(huán)等問題。
2基于中標麒麟操作系統(tǒng)的Klocwork檢查
2.1中標麒麟操作系統(tǒng)
中標麒麟操作系統(tǒng)是一款面向桌面應(yīng)用的圖形化操作系統(tǒng),針對X86及龍芯、申威、眾志、飛騰等國產(chǎn)CPU平臺進行自主研發(fā),提供性能最優(yōu)的操作系統(tǒng)。通過進一步對硬件外設(shè)適配器的支持、對桌面應(yīng)用的移植優(yōu)化和對應(yīng)用場景解決方案的構(gòu)建,完全滿足項目支撐。系統(tǒng)除給出基本功能外,還可以根據(jù)客戶的具體要求,針對特定軟硬件環(huán)境,提供定制化解決方案,實現(xiàn)性能化和個性化功能定制[3]。中標麒麟操作系統(tǒng)是國家重大專項的核心組成部分,是民用、軍用“核高基”項目桌面操作系統(tǒng)的重要研究成果,成功通過了多個國家權(quán)威部門的測評,為實現(xiàn)操作系統(tǒng)領(lǐng)域“自主可控”的戰(zhàn)略目標做出了重大貢獻,在國產(chǎn)操作系統(tǒng)領(lǐng)域市場占有率穩(wěn)居第一。
2.2 Klocwork的安裝
中標麒麟操作系統(tǒng)安裝Klocwork,即Linux/Unix系統(tǒng)下安裝Klocwork,分為3步:
第1步:安裝服務(wù)器。與Windows系統(tǒng)不同,Windows直接下載安裝包,點擊安裝包,按照提示完成安裝。麒麟操作系統(tǒng)安裝服務(wù)首先需要檢查文件執(zhí)行權(quán)限,如果沒有執(zhí)行權(quán)限,需要使用chmod命令修改權(quán)限,然后執(zhí)行安裝命令安裝klocwork Server,命令為:
第2步:安裝加密狗驅(qū)動。對使用加密狗作為License服務(wù)認證標識的情況下,應(yīng)正確安裝加密狗驅(qū)動(要使用root用戶來安裝),具體步驟如下:
①找到驅(qū)動程序文件Sentinel_LDK_RedHat_and_SuSE_ RPM_Run-time_Installer.tar.gz,解壓縮;
②到驅(qū)動程序目錄下,執(zhí)行安裝程序:cd Sentiel_LDK_ RedHat_and_SuSE_RPM_Run-time_Installer Rmp-ivh aksusbd-1.16-1.i386.rpm;
③裝完驅(qū)動之后,插上USB加密狗,看到USB加密狗上的小燈亮起,表示驅(qū)動已經(jīng)裝好;
④運行驗證程序,以驗證驅(qū)動是正確的。
第3步:檢查安裝文件執(zhí)行權(quán)限。如果沒有執(zhí)行權(quán)限,請使用chmod命令修改權(quán)限,執(zhí)行安裝命令安裝Klocwork User。
2.3執(zhí)行Klocwork檢查
麒麟操作系統(tǒng)與Windows有一定區(qū)別,麒麟操作系統(tǒng)不分硬盤,所有文件都是在home目錄下,其他的步驟和Windows大同小異,具體步驟為(以下步驟以Project為具體項目名稱,Project/project-Debug為項目路徑,Pro為創(chuàng)建在瀏覽器中的項目名稱),具體步驟如圖1所示。
第1步:cd到*.pro工程所在的路徑下執(zhí)行qmake,即cmd中執(zhí)行d:\qttstt>qmake,也可直接在項目中重新構(gòu)建項目,允許工程編譯中出現(xiàn)警告,但不能有錯誤,這是測試整個項目的必備前提,否則靜態(tài)分析沒有任何意義。
第2步:插入加密狗啟動服務(wù),包括啟動license服務(wù)、數(shù)據(jù)庫服務(wù)、Web服務(wù)和分析引擎服務(wù),linux/unix下啟動服務(wù)和Windows命令行啟動方式一致,啟動服務(wù)命令:kwservice-r
第3步:使用make clean刪除產(chǎn)生的目標文件或手動刪除除bin, makefile以外的文件。
第4步:執(zhí)行kwinject mingw32-make -f Makefile,生成kwinject.out文件。開發(fā)環(huán)境如果使用mingw32,按照上述口令執(zhí)行,如果報mingw32 is not executable錯誤,需在系統(tǒng)環(huán)境變量中添加mingw32-make.exe路徑,如果使用VS編譯器,則使用kwinject nmake -f makefile命令。
第5步:在服務(wù)端建立分析項目(可登陸瀏覽器查看項目創(chuàng)建是否成功):/home/Project/klocwork/server/bin/kwadmin --url http://localhost:8080 create-project Pro。
第6步:分析項目:/home/Project/klocwork/server/bin/ kwbuildproject--url http://localhost:8080/ Pro-f-o table kwinject. out,-o表示輸出參數(shù),執(zhí)行此命令后,會輸出分析結(jié)果到table目錄中,-f表示強制輸出到-o指定的目錄;如果該目錄不為空,則清除目錄重新使用。
第7步:加載數(shù)據(jù)到數(shù)據(jù)庫:/home/Project/klocwork/server/ bin/kwadmin --url http://localhost:8080 load Pro table。
第8步:登陸瀏覽器查看分析結(jié)果。在瀏覽器中輸入http://localhost:8080,登陸頁面后輸入用戶名,密碼為空,頁面上將打開項目列表,選擇要查看的項目,點擊Reports,進入報告頁面,點擊Issues,進入缺陷列表頁面即可。
3結(jié)果分析與處理
實際測試需要投入大量時間和精力,測試工作同樣也可以采用開發(fā)和實用工具,即自動測試工具。采用自動測試工具不但能提高測試效率還能模擬許多人工無法模擬的真實場景。
測試工具在問題處理方面也有很大優(yōu)勢,在現(xiàn)實測試項目中,有些項目在測試過程中會出現(xiàn)軟件偶然死機或其他不易復(fù)現(xiàn)的問題,對待此類問題,測試和開發(fā)人員都很難排查問題所在,運用測試工具,即可測出此類問題,并對問題進行修復(fù),例如在測試中要刪除某個模塊,軟件突然異常退出,然后重復(fù)很多次現(xiàn)象仍難以復(fù)現(xiàn)。針對此現(xiàn)象,使用KLocwork工具進行代碼走查,分析代碼走查結(jié)果,可以找到解決辦法。
目前軟件測試工具主要有Klocwork,QAC,Testbed及C++Test,測試效率如表1所示,其中Klocwork在發(fā)現(xiàn)重要缺陷和致命缺陷檢測率高于其他3個測試工具。QAC分析偏重編碼風格[5]、冗余代碼及函數(shù)類型等編碼規(guī)則方面的審查;Klocwork側(cè)重于內(nèi)存泄露和空指針引用等方面;Testbed傾向于發(fā)現(xiàn)代碼本身不符合編碼規(guī)則的問題;而C++Test更側(cè)重于發(fā)現(xiàn)變量未初始化和資源泄露等代碼結(jié)構(gòu)問題[6]。
4結(jié)束語
使用測試工具的目的是提高軟件測試的效率和軟件測試的質(zhì)量,手工測試可以發(fā)現(xiàn)新缺陷,自動化測試主要用于發(fā)現(xiàn)舊缺陷,軟件測試需要手動測試與自動測試相結(jié)合。在軟件開發(fā)的任意階段都可以借助測試工具及時發(fā)現(xiàn)錯誤,對軟件的成本控制及軟件開發(fā)效率的提升都非常有幫助。鑒于測試工具功能的日益完善,軟件開發(fā)人員對其依賴程度逐漸增加,工具也有片面性及漏報、誤報,僅僅依賴靜態(tài)分析還不夠,還需要進行動態(tài)測試。動態(tài)測試與靜態(tài)測試相結(jié)合,從而提高測試的有效性。
參考文獻
[1]梅磊,劉先博.Klocwork在軍用軟件測試中的應(yīng)用[J].航天標準化,2017(3):38-42,47.
[2]羅春雷,于紅增,盧華斌.自動化技術(shù)在Klocwork測試中的應(yīng)用[J].無線電工程,2010,40(1):44-47.
[3]史黎黎,牛賓.基于Linux系統(tǒng)的即時通信軟件開發(fā)[J].無線電工程,2015,45(8):94-98.
[4] Mark F.軟件測試自動化技術(shù)與實例詳解[M].北京:電子工業(yè)出版社,2000.
[5]梁倩,張熠.一種基于QAC和Klocwork軟件的靜態(tài)測試方法[J].計算機與網(wǎng)絡(luò),2012,38(10):58-60.
[6]周元哲.軟件測試[M].北京:清華大學(xué)出版社,2013.