馬萌 谷偉 趙煜
摘要:靜態分析是軟件測試的最初階段,充分有效的靜態分析可以顯著降低軟件測試成本、提高軟件質量。介紹了Klocwork檢查工具在中標麒麟操作系統中的詳細檢查步驟與檢查腳本、對檢查出來的缺陷的處理,以及Klocwork工具在軍用軟件靜態分析中的安裝過程及使用步驟。典型案例表明,Klocwork檢查有助于及時發現并解決C/C++軟件源代碼的各種缺陷,從而提高軟件質量和安全性。
關鍵詞:麒麟操作系統;靜態分析;Klocwork工具
中圖分類號:TP316文獻標志碼:A文章編號:1008-1739(2019)20-58-3

0引言
近年來,特別是“微軟黑屏”事件和“棱鏡門”事件給信息安全敲響了警鐘,各種信息安全事件頻繁發生。硬件設備國產化和軟件自主可控是實現信息安全亟需解決的問題,尤其在信息安全要求較高的應用領域,例如軍事、國防及保密領域已經普遍采用國產操作系統作為研究與應用平臺,其中中標麒麟操作系統已經成為國產化自主可控的主流操作系統。因此,自主可控操作系統的廣泛應用已經是軟件發展的大趨勢。
隨著軟件規模和復雜性的大幅度提升,軟件質量可靠性的問題日益突出,我國大力開展相關軟件的研發工作,軟件測試是保證軟件質量的關鍵技術之一,同時也是軟件開發過程中的一個重要環節。軍用軟件的安全性要求比較特殊,質量標準要求高,給軟件測試和質量保證帶來相當大的難度。軟件測試過程中,靜態分析是首先需要執行的,對軟件質量起到舉足輕重的作用,進行高效靜態分析是系統測試需要考慮的首要問題[1]。
1靜態分析及Klocwork工具
靜態分析(模塊測試)測試軟件設計的最小單位解決軟件在語法、格式或邏輯等方面的差錯以及是否符合功能要求。這個階段更多關注程序的實現細節,需要從程序的內部結構出發設計測試用例,也是軟件測試過程中最早期的測試活動。主要依據程序源代碼的詳細設計說明書,測試者需要了解該模塊的I/O條件和模塊的邏輯結構。靜態分析主要采用白盒測試用例,輔助以黑盒測試的測試用例,使之對任何合理的和不合理的輸入都能鑒別和響應。靜態分析主要包括模塊接口測試、局部數據結構測試、路徑測試、錯誤處理測試和邊界條件測試5個任務。
Klocwork工具是Klocwork公司綜合應用近幾年最先進的多種靜態分析技術,基于其專利分析引擎技術,開發的測試工具,是一款非常優秀的靜態分析工具[2],主要特點有:①發現軟件缺陷的種類覆蓋廣,既包括安全漏洞缺陷,又包括軟件質量缺陷,同時還能對變成規則、軟件架構的違反情況進行分析;②支持多種開發語言,可分析Java和C++/C程序;③可以對軟件的各種度量進行分析;④可以全面地分析軟件,既可以對可視化軟件進行優化、分析,又能對軟件的缺陷進行分析;⑤可以對千萬行級代碼的超大程序進行分析;⑥可以對多種主流IDE開發環境提供集成。除此以外,Klocwork還可以針對軟件運行時的錯誤,識別數組越界、非法指針引用、非法浮點數操作、不可迭代碼及無限循環等問題。
2基于中標麒麟操作系統的Klocwork檢查
2.1中標麒麟操作系統
中標麒麟操作系統是一款面向桌面應用的圖形化操作系統,針對X86及龍芯、申威、眾志、飛騰等國產CPU平臺進行自主研發,提供性能最優的操作系統。通過進一步對硬件外設適配器的支持、對桌面應用的移植優化和對應用場景解決方案的構建,完全滿足項目支撐。系統除給出基本功能外,還可以根據客戶的具體要求,針對特定軟硬件環境,提供定制化解決方案,實現性能化和個性化功能定制[3]。中標麒麟操作系統是國家重大專項的核心組成部分,是民用、軍用“核高基”項目桌面操作系統的重要研究成果,成功通過了多個國家權威部門的測評,為實現操作系統領域“自主可控”的戰略目標做出了重大貢獻,在國產操作系統領域市場占有率穩居第一。
2.2 Klocwork的安裝
中標麒麟操作系統安裝Klocwork,即Linux/Unix系統下安裝Klocwork,分為3步:
第1步:安裝服務器。與Windows系統不同,Windows直接下載安裝包,點擊安裝包,按照提示完成安裝。麒麟操作系統安裝服務首先需要檢查文件執行權限,如果沒有執行權限,需要使用chmod命令修改權限,然后執行安裝命令安裝klocwork Server,命令為:
第2步:安裝加密狗驅動。對使用加密狗作為License服務認證標識的情況下,應正確安裝加密狗驅動(要使用root用戶來安裝),具體步驟如下:
①找到驅動程序文件Sentinel_LDK_RedHat_and_SuSE_ RPM_Run-time_Installer.tar.gz,解壓縮;
②到驅動程序目錄下,執行安裝程序:cd Sentiel_LDK_ RedHat_and_SuSE_RPM_Run-time_Installer Rmp-ivh aksusbd-1.16-1.i386.rpm;
③裝完驅動之后,插上USB加密狗,看到USB加密狗上的小燈亮起,表示驅動已經裝好;
④運行驗證程序,以驗證驅動是正確的。
第3步:檢查安裝文件執行權限。如果沒有執行權限,請使用chmod命令修改權限,執行安裝命令安裝Klocwork User。
2.3執行Klocwork檢查
麒麟操作系統與Windows有一定區別,麒麟操作系統不分硬盤,所有文件都是在home目錄下,其他的步驟和Windows大同小異,具體步驟為(以下步驟以Project為具體項目名稱,Project/project-Debug為項目路徑,Pro為創建在瀏覽器中的項目名稱),具體步驟如圖1所示。
第1步:cd到*.pro工程所在的路徑下執行qmake,即cmd中執行d:\qttstt>qmake,也可直接在項目中重新構建項目,允許工程編譯中出現警告,但不能有錯誤,這是測試整個項目的必備前提,否則靜態分析沒有任何意義。
第2步:插入加密狗啟動服務,包括啟動license服務、數據庫服務、Web服務和分析引擎服務,linux/unix下啟動服務和Windows命令行啟動方式一致,啟動服務命令:kwservice-r
第3步:使用make clean刪除產生的目標文件或手動刪除除bin, makefile以外的文件。
第4步:執行kwinject mingw32-make -f Makefile,生成kwinject.out文件。開發環境如果使用mingw32,按照上述口令執行,如果報mingw32 is not executable錯誤,需在系統環境變量中添加mingw32-make.exe路徑,如果使用VS編譯器,則使用kwinject nmake -f makefile命令。
第5步:在服務端建立分析項目(可登陸瀏覽器查看項目創建是否成功):/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表示輸出參數,執行此命令后,會輸出分析結果到table目錄中,-f表示強制輸出到-o指定的目錄;如果該目錄不為空,則清除目錄重新使用。
第7步:加載數據到數據庫:/home/Project/klocwork/server/ bin/kwadmin --url http://localhost:8080 load Pro table。
第8步:登陸瀏覽器查看分析結果。在瀏覽器中輸入http://localhost:8080,登陸頁面后輸入用戶名,密碼為空,頁面上將打開項目列表,選擇要查看的項目,點擊Reports,進入報告頁面,點擊Issues,進入缺陷列表頁面即可。

3結果分析與處理
實際測試需要投入大量時間和精力,測試工作同樣也可以采用開發和實用工具,即自動測試工具。采用自動測試工具不但能提高測試效率還能模擬許多人工無法模擬的真實場景。
測試工具在問題處理方面也有很大優勢,在現實測試項目中,有些項目在測試過程中會出現軟件偶然死機或其他不易復現的問題,對待此類問題,測試和開發人員都很難排查問題所在,運用測試工具,即可測出此類問題,并對問題進行修復,例如在測試中要刪除某個模塊,軟件突然異常退出,然后重復很多次現象仍難以復現。針對此現象,使用KLocwork工具進行代碼走查,分析代碼走查結果,可以找到解決辦法。
目前軟件測試工具主要有Klocwork,QAC,Testbed及C++Test,測試效率如表1所示,其中Klocwork在發現重要缺陷和致命缺陷檢測率高于其他3個測試工具。QAC分析偏重編碼風格[5]、冗余代碼及函數類型等編碼規則方面的審查;Klocwork側重于內存泄露和空指針引用等方面;Testbed傾向于發現代碼本身不符合編碼規則的問題;而C++Test更側重于發現變量未初始化和資源泄露等代碼結構問題[6]。

4結束語
使用測試工具的目的是提高軟件測試的效率和軟件測試的質量,手工測試可以發現新缺陷,自動化測試主要用于發現舊缺陷,軟件測試需要手動測試與自動測試相結合。在軟件開發的任意階段都可以借助測試工具及時發現錯誤,對軟件的成本控制及軟件開發效率的提升都非常有幫助。鑒于測試工具功能的日益完善,軟件開發人員對其依賴程度逐漸增加,工具也有片面性及漏報、誤報,僅僅依賴靜態分析還不夠,還需要進行動態測試。動態測試與靜態測試相結合,從而提高測試的有效性。
參考文獻
[1]梅磊,劉先博.Klocwork在軍用軟件測試中的應用[J].航天標準化,2017(3):38-42,47.
[2]羅春雷,于紅增,盧華斌.自動化技術在Klocwork測試中的應用[J].無線電工程,2010,40(1):44-47.
[3]史黎黎,牛賓.基于Linux系統的即時通信軟件開發[J].無線電工程,2015,45(8):94-98.
[4] Mark F.軟件測試自動化技術與實例詳解[M].北京:電子工業出版社,2000.
[5]梁倩,張熠.一種基于QAC和Klocwork軟件的靜態測試方法[J].計算機與網絡,2012,38(10):58-60.
[6]周元哲.軟件測試[M].北京:清華大學出版社,2013.