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