999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C++與Java軟件重量級靜態檢查

2016-02-23 06:28:56劉立康
計算機技術與發展 2016年8期

姜 文,劉立康

(西安電子科技大學 通信工程學院,陜西 西安 710071)

C++與Java軟件重量級靜態檢查

姜 文,劉立康

(西安電子科技大學 通信工程學院,陜西 西安 710071)

為了保證Windows環境下C/C++和Java軟件產品質量,對C/C++代碼和Java代碼進行靜態檢查非常重要。以SVN作為軟件配置管理工具,將重量級靜態檢查工具Coverity和Fortify集成到持續集成工具ICP-CI上,分別對C/C++代碼和Java代碼進行重量級靜態檢查。詳細敘述了Windows環境下軟件配置管理工具SVN客戶端安裝,SVN版本庫的代碼更新,對C/C++和Java代碼分別進行Coverity和Fortify編譯器的配置、編譯腳本編寫和在ICP-CI任務管理頁面上配置檢查任務。介紹了靜態檢查處理過程,分析了出現各種常見問題的原因并提出了相應的解決方案。給出了一個軟件產品中C/C++代碼模塊和Java代碼模塊的重量級靜態檢查應用案例。工作實踐表明,進行重量級靜態檢查有助于及時發現并解決C/C++和Java軟件源代碼的各種缺陷和安全漏洞,從而提高軟件產品的質量和安全性。

Windows操作系統;靜態檢查;持續集成;安全漏洞

0 引 言

Windows操作系統是具有圖形界面的操作系統,是完全的多任務操作系統,是使用最多且排名第一的操作系統。Windows操作系統提供功能強大的應用程序編程接口。目前在Windows環境下流行的軟件開發語言主要有C++、C#和Java。

在Windows環境下通常采用集成開發環境Visual Studio進行VC/C++、C#程序設計。VC編譯器[1-2]通常位于bin目錄中。cl.exe是VC/C++編譯器。編譯器產生通用對象文件格式(COFF)對象(.obj)文件。LINK.EXE是將通用對象文件格式(COFF)對象文件和庫鏈接起來以創建32位可執行(.exe)文件或動態鏈接庫(DLL)的32位工具。C#編譯器是csc.exe。

在Windows環境下通常采用Eclipse進行Java程序設計。Java編程需要下載安裝Java的軟件開發工具JDK[3-4],JDK目錄的bin文件夾中包含Java編譯器javac.exe和Java解釋器java.exe。Java源程序都是擴展名為.java的文本文件,編譯后生成可執行代碼,文件名與源文件名相同,擴展名為.class。運行java.exe來執行該Java程序。

在Windows環境下的軟件開發大部分都是基于C/C++語言和Java語言。為了保證基于軟件產品代碼質量,檢測軟件源代碼中存在的缺陷和安全漏洞[5-7]非常重要。文中采用CodeCC(Code Check Center)工具壓縮包進行檢測。工具壓縮包中包括靜態檢查工具Coverity[8-11]和Fortify[12-15],采用靜態檢查方法檢測源代碼的缺陷和安全漏洞,將檢查結果反饋給開發人員及時處理,從而提高軟件的質量和安全性。

1 重量級靜態檢查工具

靜態測試工具直接對代碼進行分析,不需要運行代碼,也不需要生成可執行文件。靜態測試工具一般是對代碼進行語法掃描,找出不符合編碼規范的地方,根據某種質量模型評價代碼的質量,生成系統的調用關系圖等。通常把Coverity和Fortify稱為重量級的靜態檢查工具。

1.1 Coverity Prevent

Coverity Prevent是由美國Coverity公司開發的一款高性能靜態檢查軟件。Coverity公司提供最先進的、可配置的、用于檢測軟件缺陷和安全隱患的靜態源代碼分析解決方案。將基于布爾可滿足性驗證技術應用于源代碼分析引擎,分析引擎利用其專利的軟件DNA圖譜技術和meta-compilation技術,綜合分析源代碼、編譯構建系統和操作系統等可能使軟件產生的缺陷。通過對構建環境、源代碼和開發過程給出一個完整的分析,建立了高質量軟件的標準。Coverity Prevent是第一個能夠快速、準確分析當今大規模(幾百萬甚至幾千萬行的代碼)、高復雜度代碼的工具。Coverity解決了影響源代碼分析有效性的很多關鍵問題:構建集成、編譯兼容性、高誤報率、有效的錯誤根源分析等。

Coverity Prevent的主要功能包括源代碼分析、缺陷管理、擴展工具(Coverity extend)、繪制軟件DNA圖譜。Coverity Prevent是檢測和解決C、C++、Java和C#源代碼中嚴重缺陷的領先自動化方法。在Windows環境下,Coverity Prevent支持集成開發環境Visual Studio,支持VC/C++編譯器和C#編譯器CSC.exe;支持集成開發環境Eclipse,支持Java編譯器javac.exe。

1.2 Fortify SCA

HP Fortify是目前全球最大的靜態源代碼檢測廠商。靜態代碼分析器Fortify SCA(Static Code Analyzer)是該公司開發的一款軟件源代碼缺陷靜態測試工具。采用數據流分析引擎、語義分析引擎、結構分析引擎、控制流分析引擎、配置分析引擎和特有的X-Tier跟蹤器,從不同的方面查看代碼的缺陷和安全漏洞。

Fortify SCA通過調用語言的編譯器或者解釋器把源代碼轉換成一種中間媒體文件*.nst(Normal Syntax Tree),對應用軟件的源代碼進行靜態分析。在分析過程中與它特有的軟件安全漏洞規則集進行全面的匹配、查找,從而將源代碼中存在的缺陷和安全漏洞掃描出來,并整理報告。掃描結果中不但包括詳細的安全漏洞的信息,還會有相關的安全知識的說明,同時提供修復意見。

Fortify SCA支持的編程語言多達17種,包括C、C++、C#、Java等,基本涵蓋了絕大多數的應用,具有相當廣泛的適用性。Fortify SCA廣泛的適用性使其適用于橫跨多種語言的開發和測試。在Windows環境下,Fortify SCA支持集成開發環境Visual Studio,支持VC/C++編譯器和C#編譯器CSC.exe;支持集成開發環境Eclipse,支持Java編譯器javac.exe。

2 軟件配置管理和持續集成工具

通常軟件產品在開發階段每天都要把源代碼合入版本庫中。為了保證軟件源代碼的質量,每周至少對合入版本庫的源代碼進行2~3次Coverity和Fortify檢查。手動執行腳本調用Coverity和Fortify工具生成編譯中間文件后,再上傳到分析中心耗時長、效率低,不能及時提供檢查結果。

2.1 基本的構建系統模型

現在通常采用持續集成工具來完成靜態檢查任務。持續集成[16]工具可以提供方便的集成平臺,可以設置定時任務,使Coverity和Fortify檢查任務能夠充分利用非工作時間完成編譯和靜態分析等比較耗時的執行過程,保證及時得到分析結果,方便開發人員根據檢查結果報告修改產品源代碼缺陷。圖1顯示了一個基本的構建系統視圖。

圖1 構建系統視圖

構建流程如下:

(1)軟件開發工程師編寫或修改代碼。

(2)開發工程師向軟件配置管理(SCM)系統的版本庫提交驗證通過的源代碼。

(3)持續集成工程師(CIE)編寫腳本和靜態檢查編譯器配置。

(4)持續集成工程師在持續集成工具的任務管理頁面上配置構建任務和靜態檢查任務。

(5)持續集成工程師制定構建定時任務(通常是非工作時間)自動進行集成構建。

(6)編譯中生成的中間文件上傳到靜態檢查分析中心并運行靜態分析工具。

(7)靜態檢查結果發送到持續集成工具。

(8)持續集成工具通過電子郵件向軟件產品經理和開發工程師及時反饋構建結果和靜態檢查結果。

(9)軟件開發工程師下載檢查報告及時處理存在的各種問題。

文中采用的軟件配置管理工具是SVN,持續集成工具是ICP-CI。由于使用的編譯環境是Windows,首先將集成了Coverity和Fortify工具的CodeCC工具的壓縮包CodeCC_Win32.zip拷貝到持續集成主控服務器與代理服務器的plugin目錄下解壓,再分別對Coverity和Fortify工具進行相關的編譯器配置,然后完成搭建構建工程。構建工程命名為:“產品名_版本號_CodeCheck”。

2.2 軟件配置管理工具SVN

2.2.1 Windows環境下的SVN客戶端安裝

ICP-CI服務器通常需要安裝SVN命令行工具和圖形SVN客戶端工具TortoiseSVN。安裝完成命令行工具和圖形客戶端工具之后,可以選擇安裝支持中文操作的軟件語言包。

完成SVN工具的安裝之后,可以根據配置管理工程師提供的產品代碼配置庫路徑,使用SVN客戶端工具的“SVN檢出(check out)”功能從配置庫下載代碼到代理服務器的指定路徑下。

2.2.2 SVN版本庫的代碼更新

持續集成工具ICP-CI需要在版本庫鎖庫之后完成源代碼更新,ICP-CI工具執行代碼更新時,需要編寫批處理腳本Code_Update.bat,把腳本配置在任務中。更新代碼的批處理腳本內容如下:

::配置需要更新代碼的視圖路徑

SET CodePath=D:/Code

::解除代碼視圖中的文件鎖定

svn cleanup % CodePath %

::更新代碼到視圖路徑

svn update % CodePath % --accept postpone

3 基于C/C++的靜態檢查

Windows環境下的C/C++程序設計通常采用Microsoft Visual Studio2010集成工具,但是也有一些老的軟件產品C/C++編程采用VC6.0集成工具。對C/C++代碼的靜態檢查需要處理兩種情況。

(1)Coverity編譯器配置。

軟件產品模塊進行Coverity檢查時,需要在模塊源代碼進行編譯的時候調用Coverity工具中的cov_configure命令。為了在編譯過程中成功調用cov_configure命令,需要完成編譯器的配置。

對于Windows環境下的C/C++程序,編譯器配置在tqeconfig.ini文件中。

編程使用的VC6.0編譯器配置內容如下:

msvc=D:ToolsMicrosoft Visual StudioVC98incl.exe

編程使用的Microsoft Visual Studio2010編譯器配置內容如下:

msvc=D:ToolsMicrosoft Visual Studio10.0VCincl.exe

在配置過程中需要注意的是,cl.exe為工具的安裝路徑,實際在配置過程中可以根據Microsoft Visual Studio工具的實際安裝路徑進行配置。

完成編譯器配置后,執行tqeconfig.bat文件,該文件如果執行成功,則將生成相應的配置文件保存在CodeCC oolcoverityconfig目錄下。在配置編譯器時需要注意tqeconfig.bat腳本的執行結果,當執行窗口中提示執行成功,配置的編譯器才能在CodeCC oolcoverityconfig目錄下生成對應編譯器的配置文件。

完成編譯器配置后,需要將持續集成主控服務器和代理服務器上的coverity工具路徑:pluginCodeCC oolcoverityin路徑添加到環境變量path中。

(2)Coverity編譯腳本編寫。

Coverity任務配置到ICP-CI上之后,通常由主控服務器將任務下發到代理服務器執行。執行Coverity任務需要編寫相應的編譯腳本,使Coverity任務執行時能夠調用cov-configure來編譯Microsoft Visual Studio的工程文件。

編程使用VC6.0,編譯腳本內容如下:

cd/d “D:CodeSecurity_Versionsalm_srcMake PC”

“D:ToolsMicrosoft Visual StudioCommonMSDev98BinMSDEV.exe” “Make PC.dsw” /make “Make PC -win32 RELAESE” /clean

“D:ToolsMicrosoft Visual StudioCommonMSDev98BinMSDEV.exe” “Make PC.dsw” /make “Make PC -win32 RELAESE” /rebuild

編程使用Microsoft Visual Studio2010,編譯腳本內容如下:

cd/d “D:CodeSecurity_VersionsCZLog”

“D:ToolsMicrosoft Visual Studio 10.0Common7IDEdevenv” “CZLog.sln” / clean

“D:ToolsMicrosoft Visual Studio 10.0Common7IDEdevenv” “CZLog.sln” /Rebuild “RELAESE | Win32”

(3)Fortify編譯器配置。

在Windows環境下,進行Fortify檢查也需要區分兩種不同的情況。

編程使用Visual Studio 2010時,首先需要在Visual Studio 2010 IDE上安裝HP Fortify插件HP_Fortify_SCA_and_Apps_4.00_windows_x86.exe,安裝過程如下所示:

·將D:ICP_CI_Windows_agentpluginsCodeCC ool下的fortify文件夾備份為fortify_bak,然后新建fortify目錄。

·雙擊HP_Fortify_SCA_and_Apps_4.00_windows_x86.exe進行安裝,安裝時將安裝路徑設置到在ICP_CI的CodeCC插件的如下路徑:D:ICP_CI_Windows_agentpluginsCodeCC oolfortify。

·在安裝過程中,需要選擇對應的VS版本,此處選擇“VS2010”。

·在安裝過程中,還需要選擇license,license文件需要選擇D:ICP_CI_Windows_agentpluginsCodeCC oolfortify_bakfortify.license,其他安裝彈出框選擇“next”即可,安裝完成之后將fortify_bak覆蓋到fortify文件夾下。

·安裝完成之后需要打開Visual Studio 2010軟件,查看插件是否已經安裝(Visual Studio 2010的菜單欄上有HP Fortify的選項即可)。

為了使Fortify工具可以識別和使用C/C++程序的編譯器,需要修改Fortify的配置文件,將C/C++程序的編譯器配置到CodeCC oolfortifycoreconfig目錄下的fortify-sca.properties文件中。

編程使用VC6.0和使用Visual Studio 2010的編譯器配置相同,如下所示:

com.fortify.sca.compilers.msdev=com.fortify.sca.util.compilers.DevenvAdapter

com.fortify.sca.compilers.devenv=com.fortify.sca.util.compilers.DevenvNetAdapter

com.fortify.sca.compilers.cl=com.fortify.sca.util.compilers.MicroSoftCompiler

com.fortify.sca.compilers.link=com.fortify.sca.util.compilers.MicrosoftLinker

編譯器配置完成之后,需要將持續集成主控服務器與代理服務器上的fortify工具路徑:pluginCodeCC oolfortifyin添加到環境變量path中。

(4)Fortify編譯腳本編寫。

進行代碼編譯時,需要將以前編譯生成的過程文件與目標文件全部刪除。Fortify工具通過跟蹤編譯器生成中間文件*.nst,如果編譯過程中以前的過程文件與目標文件沒有刪除,Fortify工具無法跟蹤編譯器生成正確的*.nst文件。

為了使Fortify工具通過跟蹤的方式編譯生成中間文件*.nst,需要根據軟件模塊重新編寫編譯腳本和makefile文件,在編譯腳本中嵌入fortify命令。在編譯過程中需要調用鉤子函數sourceanalyzer.exe文件,將編譯器和鏈接器都掛在鉤子上,從而生成中間文件*.nst。

編程使用VC6.0時fortify編譯腳本如下所示:

cd/d “D:CodeSecurity_Versionsalm_srcMake PC”

“D:ToolsMicrosoft Visual StudioCommonMSDev98BinMSDEV.exe” “Make PC.dsw” /make “Make PC -win32 RELAESE” /clean

sourceanalyzer -b alm_help_tool_build -clean

sourceanalyzer -b alm_help_tool_build touchless“D:ToolsMicrosoft Visual StudioCommonMSDev98BinMSDEV.exe” “Make PC.dsw” /make “Make PC -win32release” /rebuild

其中,sourceanalyzer表示Fortify工具的執行命令主體;build_id表示Fortify的工程名(不能與Fortify的關鍵字相同)。

編程使用Visual Studio 2010時fortify編譯腳本如下所示:

cd/d “D:CodeSecurity_VersionsCZLog”

“D:ToolsMicrosoft Visual Studio 10.0Common7IDEdevenv” “CZLog.sln” / clean

sourceanalyzer-b CZLog -Xmx1024M

sourceanalyzer -bCZLog touchless -Xmx1024M “D:ToolsMicrosoft Visual Studio 10.0Common7IDEdevenv” “CZLog.sln” /Rebuild “release | Win32”

由于Visual Studio提供的編譯器對fortify工具而言屬于標準編譯器,因此在編寫fortify腳本時需要對調用sourceanalyzer這個鉤子函數采用“無侵入”式集成[1-2]。“無侵入”集成對鉤子函數在調用時有固定格式,具體形式如下:

sourceanalyzer -b touchless make -f xxx.mak

(5)ICP-CI的任務管理頁面配置基于C/C++的檢查任務。

在ICP-CI的任務管理頁面的構建工程上配置CodeCC檢查任務,通常Coverity任務和Fortify任務同時配置。以基于C/C++的軟件模塊Alm為例來描述集成過程。配置Alm模塊的CodeCC任務時,在任務欄上選擇“CodeCC”任務。

對于Coverity任務,將Alm模塊的編譯腳本alm_help_update_coverity_build.bat和Alm模塊編譯腳本路徑配置到CodeCC任務類型頁面下的編譯腳本、編譯路徑中,選擇編譯類型為CL,并在任務選項欄添加“Coverity”任務。對于Fortify任務,將Alm模塊的Fortify編譯腳本alm_help_update_fortify_build.bat以及Alm模塊編譯腳本路徑配置到CodeCC任務的fortifyexecutable配置項中。最后在任務類型中添加“Fortify”任務。CZLog模塊在ICP-CI頁面上的檢查任務配置同上。

完成任務配置之后需要配置檢查結果的發送人列表,主送人為該模塊的開發工程師與持續集成工程師,抄送人為產品經理、各開發組長。

4 基于Java的靜態檢查

(1)Coverity編譯器配置。

對于Windows環境下的Java程序,將編譯器配置在tqeconfig.ini文件中。配置內容如下:java=D:Toolsjdkinjavac.exe。

配置過程也需要根據實際安裝路徑來完成。

完成編譯器配置后,執行tqeconfig.bat文件,該文件如果執行成功,則將生成相應的配置文件保存在CodeCC oolcoverityconfig目錄下。在配置編譯器時需要注意tqeconfig.bat腳本的執行結果,當執行窗口中提示執行成功,配置的編譯器才能在CodeCC oolcoverityconfig目錄下生成對應編譯器的配置文件。

完成編譯器配置后,需要將持續集成主控服務器和代理服務器上的coverity工具路徑:pluginCodeCC oolcoverityin路徑添加到環境變量path中。

(2)Coverity編譯腳本編寫。

執行Coverity任務時,需要編寫相應的編譯腳本,使Coverity任務執行時能夠調用cov-configure來編譯Java的工程文件。腳本內容如下:

(3)Fortify編譯器配置。

在Windows環境下,為了使Fortify工具可以識別和使用Java程序的編譯器,需要修改Fortify的配置文件,將Java程序的編譯器配置到CodeCC oolfortifycoreconfig目錄下的fortify-sca.properties文件中。

Java語言的編譯器配置如下所示:

com.fortify.sca.compilers.javac=com.fortify.sca.util.compilers.javacCompiler

編譯器配置完成之后,需要將持續集成主控服務器與代理服務器上的fortify工具路徑:pluginCodeCC oolfortifyin添加到環境變量path中。

(4)Fortify編譯腳本編寫。

進行代碼編譯時,需要將以前編譯生成的過程文件與目標文件全部刪除。Fortify工具通過跟蹤編譯器生成中間文件*.nst,如果編譯過程中以前的過程文件與目標文件沒有刪除,Fortify工具無法跟蹤編譯器生成正確的*.nst文件。

為了使Fortify工具通過跟蹤的方式編譯生成中間文件*.nst,需要根據軟件模塊重新編寫編譯腳本和makefile文件,在編譯腳本中嵌入fortify命令。在編譯過程中需要調用鉤子函數sourceanalyzer.exe文件,將編譯器和鏈接器都掛在鉤子上,從而生成中間文件*.nst。

fortify編譯腳本如下所示:

cd/d “D:CodeSecurity_Versions ao_src”

sourceanalyzer -b Nao -Xmx1024M ant -f “D:CodeSecurity_Versions ao_srcuild.xml”

其中,在調用鉤子函數sourceanalyzer時,加上-Xmx1024M指令是為了避免分析中間文件時因內存不足導致報內存溢出的錯誤,在實際操作過程中可以根據編譯生成中間文件的代理服務器的系統內存,自行設置這個值。如果代理服務器的內存不能滿足,可以考慮增加內存、更換內存較大的代理服務器來完成中間文件編譯。

(5)ICP-CI的任務管理頁面配置基于Java的檢查任務。

以基于Java的軟件模塊Nao為例來描述集成過程。配置Nao模塊的CodeCC任務時,在任務欄上選擇“CodeCC”任務。對于Coverity任務,將Nao模塊的編譯腳本build.xml和Nao模塊編譯腳本路徑配置到CodeCC任務類型頁面下的編譯腳本、編譯路徑中,選擇編譯類型為JAVAC,并在任務選項欄添加“Coverity”任務。對于Fortify任務,將Nao模塊的Fortify編譯腳本nao_fortify_build.bat以及Nao模塊編譯腳本路徑配置到CodeCC任務的fortifyexecutable配置項中。最后在任務類型中再添加“Fortify”任務。

完成任務執行腳本配置之后需要配置檢查結果的發送人列表,主送人為該模塊的開發工程師與持續集成工程師,抄送人為產品經理、各開發組長。

5 檢查結果分析和處理

5.1 CodeCC檢查處理過程

ICP-CI工具通常先對模塊做Coverity檢查,生成的中間文件壓縮包上傳到指定的分析服務器;接著對模塊做Fortify檢查,同樣將生成的中間文件壓縮包上傳到同一個分析服務器。此時ICP-CI的執行窗口顯示CodeCC任務成功并處于等待分析結果狀態。等待分析結果的時間長短取決于生成的中間文件的大小以及分析服務器的忙碌程度。

當分析服務器分析完畢,將模塊的分析結果回傳到ICP-CI工具,在ICP-CI工具的頁面上可以看到Coverity和Fortify工具各自的檢查結果。檢查結果包括模塊的缺陷數以及總缺陷數,缺陷級別。缺陷級別分為高、中、低3個級別。同時根據檢查模塊任務配置的郵件主送人和抄送人,給這些人發送郵件。郵件內容為該檢查模塊的Coverity和Fortify檢查日志與檢查結果下載路徑。

對檢查出來的各種問題,需要開發人員下載檢查結果文件,并對檢查結果與模塊源代碼進行分析。確認是源代碼問題,修改源代碼后重新合入版本庫,啟動新一輪的CodeCC檢查;根據新的檢查結果確認代碼缺陷是否已經被解決,已經解決掉的缺陷呈現的狀態為“Fixed”,呈現狀態為“new”缺陷數量減少。分析之后,確認是誤報的缺陷,從ICP-CI上顯示的Coverity和Fortify工具檢查結果頁面的“Ignore defects”鏈接進入由分析服務器指定的缺陷庫完成誤報缺陷的屏蔽,屏蔽之后的缺陷呈現為“Dismissed”狀態。當執行下一次CodeCC檢查時,分析結果的缺陷數也會減少。

5.2 CodeCC檢查失敗的分析和處理

進行CodeCC檢查時,難免會出現失敗的情況。CodeCC檢查失敗需要及時發現處理,根據已經失敗的模塊、構建工程頁面上提示失敗的信息和構建工程的詳細日志文件,來確定該模塊CodeCC檢查失敗的原因,并確定解決問題的方案。

5.2.1 Coverity或Fortify檢查在編譯階段出錯

在編譯階段出錯,查看對應的編譯日志可以發現各種問題(編譯器配置問題、編譯腳本問題或源代碼編譯錯誤等),導致在編譯階段Coverity或Fortify檢查報錯。

解決方法如下:

(1)在tqeconfig.ini中配置相應編譯器,并執行tqeconfig.bat文件完成配置,或在fortify-sca.properties文件中完成配置。

(2)根據日志所報編譯問題,重新編寫編譯模塊的編譯腳本。

(3)開發工程師定位模塊編譯錯誤,修改后的源代碼合入版本庫之后重新執行模塊的CodeCC檢查任務。

5.2.2 Coverity或Fortify檢查在分析階段出錯

在分析階段出錯,查看對應的分析日志可以發現大部分是分析服務器問題導致的執行失敗,通常表現為上傳中間文件壓縮包失敗、分析結果回傳失敗等。根據分析日志發現此類問題,需要聯系CodeCC工具運維工程師和相關人員解決分析服務器問題。

5.2.3 CodeCC檢查文件的比例問題

此類問題需要查看Coverity檢查的編譯日志文件build.log,在該文件的結尾部分查看模塊編譯檢查文件的百分比,如果模塊編譯的文件都完成檢查,那么檢查文件的百分比應該是100%。如果這個百分比值小于100%,需要查找錯誤。通常這些錯誤不是產品模塊的代碼編譯錯誤,而是Coverity檢查時產品模塊源代碼生成中間文件過程中與編譯器沖突導致的。為了提高檢查的文件比例,需要開發工程師與系統工程師進行分析,盡可能通過修改的源代碼進一步提高檢查文件的比例。

6 典型案例

某公司有一個軟、硬件結合的大型開發項目。采用的軟件配置管理工具為SVN,持續集成工具為ICP-CI。1臺主控服務器和8臺代理服務器參與CodeCC檢查。Windows操作系統的版本是Windows 7。采用Visual Studio 2010進行C++程序設計。采用Eclipse 3.6進行Java程序設計。采用的Coverity工具版本為6.5.3;Fortify工具版本為6.00.0096。集成到ICP-CI工具后,使用Shell腳本和ANT腳本完成對軟件模塊的Coverity檢查和Fortify檢查。

以C++的Alm模塊與CZLog模塊為例,對該模塊進行檢查的掃描結果如表1所示。

以Java的Nao模塊為例,對該模塊進行檢查的掃描結果如表2所示。

表1 對Alm工具進行Coverity檢查和Fortify檢查的掃描結果

表2 對Nao工具進行Coverity檢查和Fortify檢查的掃描結果

檢查結果報告中分別給出了Coverity檢查和Fortify檢查的告警級別、告警數量,并詳細列舉了缺陷的類型與種類。開發工程師通過下載檢查結果報告,對產品源代碼進行分析和處理。經過對Alm模塊和Nao模塊的代碼優化、重構以及誤報告警屏蔽,最終將Alm模塊和Nao模塊的告警數目清零,修正了模塊源代碼存在的缺陷,改進了模塊的源代碼質量。

工作實踐表明,重量級靜態檢查有助于及時發現并解決C/C++與Java軟件源代碼的各種缺陷,便于產品主管了解工作進度和解決存在的問題,進一步提升產品質量。

7 結束語

長期的工作實踐表明,在Windows環境下進行C/C++和Java軟件開發,Coverity和Fortify組成的重量級靜態檢查工具在開發過程中發揮了重要作用。檢查工具集成到持續集成工具ICP-CI,可以自動完成檢查,快速地向軟件開發人員反饋檢查結果,使軟件開發人員能夠及時修復源代碼的缺陷,同時也給項目管理提供了很好的保證。在軟件開發過程中做好靜態檢查工作將在很大程度上提高產品的質量,降低軟件開發的成本。

[1] 白 喬,左 飛.把脈VC++[M].北京:電子工業出版社,2009.

[2] 張立勇,劉 堅,陳 平.C/C++程序的靜態安全分析[J].系統工程與電子技術,2008,30(6):1155-1158.

[3] 張 峰.Java程序設計與項目實戰[M].北京:清華大學出版社,2011.

[4] 趙 平.JAVA源代碼靜態分析系統的設計與實現[D].長春:吉林大學,2013.

[5] Stiehm T,Gotimer G.Building security in using continuous integration[J].The Journal of Defense Software Engineering,2010,23(2):24-27.

[6] 路曉波.軟件開發過程中白盒測試方法和工具的研究及應用[D].南京:南京郵電大學,2012.

[7] 吳世忠,郭 濤,董國偉,等.軟件漏洞分析技術[M].北京:科學出版社,2014.

[8] Almossawi A,Lim K,Sinha T.Analysis tool evaluation:coverity prevent[R].[s.l.]:Carnegie Mellon University,2006.

[9] Coverity? 6.6deployment guide planning,installation,tuning,and supported platforms[R].[s.l.]:Coverity Inc,2013.

[10] Coverity? scan:2013 open source report[R].[s.l.]:Coverity Inc,2014.

[11] Coverity? scan open source report 2014[R].[s.l.]:Synopsys Inc,2015.

[12] Fortify source code analyzer用戶指南(版本5.1)[M].[s.l.]:Fortify Software Inc,2008.

[13] Fortify SCA user guide fortify 360 version 2.6[M].[s.l.]:Fortify Software Inc,2010.

[14] Blay P,Corlett S.Fortify SCA performance guide[M].[s.l.]:Fortify Software Inc,2014.

[15] Fortify source code analysis suite tutorial[M].[s.l.]:Fortify Software Inc,2010.

[16] 羅時飛.敏捷持續集成(CruiseControl版):高效硏發之道[M].北京:電子工業出版社,2008.

Heavy-weight Static Checking of Software in C/C++ and Java

JIANG Wen,LIU Li-kang

(School of Telecommunication Engineering,Xidian University,Xi’an 710071,China)

In order to ensure the quality of code in language C/C++ and Java based on Windows,it is very important for the static checking to code of C/C++ and Java.With SVN as configuration management tool,the heavy-weight static checking tools Coverity and Fortify are integrated into continuous integration tool ICP-CI,and static checking is to be done for both C/C++ and Java.The SVN client installation and the code updating of the SVN repository under Windows is described in details,and the Coverity and Fortify compiler configuration,the compiler scripts writing,and the inspection tasks configuration on ICP-CI task management page are conducted for both C/C++ and Java.The process of the static checking is introduced and the causes of problems are analyzed and the corresponding solutions are given.Finally the heavy-weight static checking applied in a case for both modules of code in C/C++ and Java in software product is introduced.Practice shows that the static checking is helpful to discover and solve all kinds of flaws of the code in C/C++ and Java timely,improving quality and safety for software.

Windows operating system;static checking;continuous integration;security vulnerabilities

2015-12-12

2016-04-05

時間:2016-08-01

國家部委基礎科研計劃:國防預研基金項目(A1120110007)

姜 文(1986-),女,工程師,碩士,CCF會員,研究方向為圖像處理與分析、數據庫應用和軟件工程;劉立康,副教授,研究方向為數字通信、圖像傳輸與處理、圖像分析與識別等。

http://www.cnki.net/kcms/detail/61.1450.TP.20160801.0907.054.html

TP311.56

A

1673-629X(2016)08-0017-07

10.3969/j.issn.1673-629X.2016.08.004

主站蜘蛛池模板: 日本成人福利视频| 欧美一级一级做性视频| 日韩欧美国产成人| 色哟哟精品无码网站在线播放视频| 亚洲欧美不卡中文字幕| 国产美女精品人人做人人爽| 色成人亚洲| 欧美午夜理伦三级在线观看| 欧美亚洲一区二区三区导航| 99视频在线免费观看| 成人中文在线| 精品久久久久无码| 国产高清不卡| 免费在线a视频| 欧美日本在线观看| 亚洲精品你懂的| 色天堂无毒不卡| 91九色视频网| 免费无遮挡AV| 久久亚洲国产最新网站| 国产精品视频导航| 国产一级二级在线观看| 亚洲欧美在线精品一区二区| 992Tv视频国产精品| 99人妻碰碰碰久久久久禁片| 四虎成人免费毛片| 国产视频欧美| 99偷拍视频精品一区二区| 亚洲欧美另类专区| 欧美激情一区二区三区成人| 在线无码九区| 91免费在线看| 久草视频精品| 亚洲一区网站| 思思热在线视频精品| 婷婷在线网站| 波多野结衣一二三| 国产成人综合网| swag国产精品| 99热这里只有精品5| 色悠久久综合| 中日无码在线观看| 丁香婷婷激情网| 婷婷开心中文字幕| 高潮毛片免费观看| 国产H片无码不卡在线视频| 97色婷婷成人综合在线观看| 亚洲永久精品ww47国产| 日韩国产亚洲一区二区在线观看| 中文成人在线视频| 日本午夜在线视频| 日韩激情成人| 97人人做人人爽香蕉精品| 一级一级一片免费| 亚洲人成人无码www| 国产亚洲精品97在线观看| 久久这里只有精品8| 黄色三级网站免费| 国产黄视频网站| 亚洲色图欧美在线| 亚洲第一视频网| 精品国产免费观看一区| 欧美日韩国产系列在线观看| 国产视频一二三区| 亚洲第一视频网| 老司机aⅴ在线精品导航| 97青草最新免费精品视频| 91视频首页| 国产欧美综合在线观看第七页| 国产美女自慰在线观看| 国产美女精品在线| 亚洲欧美成人综合| 国产精品欧美在线观看| 欧美日韩在线观看一区二区三区| 国产成人一区| 欧美激情二区三区| 强奷白丝美女在线观看| 国产日韩欧美黄色片免费观看| 全裸无码专区| 国产在线观看一区精品| 麻豆国产精品视频| 国产成人91精品免费网址在线 |