




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Klocwork 軟件靜態(tài)分析解決方案 目 錄 1. Klocwork 簡介.1 1.1. Klocwork 功能簡介.1 1.1.1. 缺陷檢測.1 1.1.2. 安全漏洞檢測.1 1.1.3. 軟件架構(gòu)分析.2 1.1.4. 軟件度量分析.3 1.1.5. 可定制的代碼分析.4 1.1.6. 開發(fā)人員IDE集成.4 1.2. Klocwork架構(gòu).4 2. Klocwork靜態(tài)分析工具與軟件開發(fā)進行過程集成.6 2.1. 軟件靜態(tài)分析技術(shù)是降低缺陷管理成本的首選.6 2.2. 軟件靜態(tài)分析技術(shù)的發(fā)展.6 2.2.1. 早期的軟件靜態(tài)分析.7 2.2.2. 新一代軟件靜態(tài)分析技術(shù).8 2.3. Klocwork軟件靜態(tài)分析原理.9 2.3.1. Klocwork靜態(tài)分析技術(shù)原理.9 2.3.2. Klocwork構(gòu)建過程.12 2.3.3. 工作原理.13 2.4. 在軟件開發(fā)過程中使用Klocwork .16 2.5. 使用Klocwork的團隊角色.17 2.5.1. 軟件開發(fā)人員在桌面階段消除軟件缺陷和安全漏洞.17 2.5.2. 軟件開發(fā)經(jīng)理在提交到QA之前獲取您軟件質(zhì)量的可視化和控制.17 2.5.3. 軟件架構(gòu)師理解和優(yōu)化架構(gòu).19 2.5.4. 安全經(jīng)理或?qū)彶槿藛T在被利用之前,防止安全漏洞發(fā)生.19 3. 部署.20 1. Klocwork 簡介 Klocwork公司是軟件靜態(tài)分析領(lǐng)域技術(shù)和市場領(lǐng)先的廠商,全球擁有200多個客戶,其中許多是全球財富500強中的公司。 Klocwork軟件是Klocwork公司基于專利技術(shù)分析引擎開發(fā)的,綜合應用了多種近年來最先進的靜態(tài)分析技術(shù),是出色的軟件靜態(tài)分析軟件。Klocwork產(chǎn)品與其它同類產(chǎn)品相比,具有很多突出的特征:Klocwork支持的語言種類多,能夠分析C、C+和Java代碼;能夠發(fā)現(xiàn)的軟件缺陷種類全面,既包括軟件質(zhì)量缺陷,又包括安全漏洞方面的缺陷,還可以分析對軟件架構(gòu)、編程規(guī)則的違反情況;軟件分析功能全面,既能分析軟件的缺陷,又能進行可視化的架構(gòu)分析、優(yōu)化;能夠分析軟件的各種度量;能夠提供與多種主流IDE開發(fā)環(huán)境的集成;能夠分析超大型軟件(上千萬代碼行)。 1.1. Klocwork 功能簡介 Klocwork功能包括: 缺陷檢測 安全漏洞檢測 軟件架構(gòu)分析 軟件度量分析 可定制的代碼分析 開發(fā)人員IDE集成 1.1.1. 缺陷檢測 提供多角度的各種缺陷類型的分析。 自動化的缺陷檢測功能易于使用,定制靈活,具有圖形化的構(gòu)建和報表管理圖形界面,擁有業(yè)界領(lǐng)先的消息過濾器,極具柔性的配置,和強大的學習調(diào)整知識庫; Klocwork能夠分析C/C+和Java代碼,生成代碼問題報告,能夠發(fā)現(xiàn)的缺陷類型舉例(詳細參見附錄): C/C+缺陷類型樣例 Java缺陷類型樣例 空指針釋放 效率錯誤(如:空的finalize方法) 內(nèi)存管理問題(如:內(nèi)存泄漏) 可維護性問題(如:空的catch從句) 數(shù)組越界 可靠性問題 (如資源泄漏) 未初始化數(shù)據(jù)使用 編碼風格問題(如:在條件中賦值)1.1.2. 安全漏洞檢測 Klocwork確信軟件安全性是軟件質(zhì)量中一個重要的、并越來越受重視的方面。同樣的,1 所有的Klocwork安全漏洞分析是基于市場領(lǐng)先的缺陷檢測能力,從原來的缺陷檢測分離出來單獨的安全漏洞檢測和違反推薦的安全代碼最佳實踐的缺陷檢測。 能夠檢測到的安全漏洞類型舉例(詳細參見附錄) C/C+安全漏洞分類 Java安全漏洞分類 訪問控制缺陷 拒絕服務 緩沖區(qū)溢出 注入缺陷(如:SQL注入、進程注入等) DNS欺騙 未經(jīng)驗證的輸入 忽略返回值 移動代碼安全 注入缺陷 有漏洞的會話管理 不安全的存儲 跨站點腳本 未經(jīng)驗證的用戶輸入 出錯處理不當 有漏洞的訪問控制 1.1.3. 軟件架構(gòu)分析 Klocwork幫助組織為任何需要理解軟件架構(gòu)的項目進行準備工作,如:外包項目、改造利用一段老的代碼、或者向已有系統(tǒng)添加新功能。利用Klocwork,架構(gòu)師、管理人員和開發(fā)人員能夠重新獲得對他們軟件和產(chǎn)品的架構(gòu)理解,并在進行任何代碼修改的時候進行功能強大的影響分析。當結(jié)合使用Klocwork的缺陷和安全漏洞檢測,它提供一個強大的功能集幫助理解在您軟件架構(gòu)異常和缺陷發(fā)生率的關(guān)聯(lián)關(guān)系。 架構(gòu)分析可以進行代碼結(jié)構(gòu)可視化展示,顯示已有應用系統(tǒng)的物理結(jié)構(gòu),應用系統(tǒng)中的依賴關(guān)系連同應用系統(tǒng)以及外部環(huán)境間的依賴關(guān)系。 2 軟件架構(gòu)師還可以利用架構(gòu)分析快速發(fā)現(xiàn)復雜的架構(gòu)問題(如循環(huán)依賴)、模型改進等方面的內(nèi)容,然后為開發(fā)人員產(chǎn)生一個可操作的變更列表。 在大型C/C+軟件中,一個普遍的可維護性問題就是過于復雜的頭文件結(jié)構(gòu),比如包含了許多不必要的頭文件。Klocwork能夠?qū)δ南到y(tǒng)執(zhí)行自動分析,然后給出經(jīng)過優(yōu)化后,對潛在的系統(tǒng)文件大小、構(gòu)建時間減少的量值,并給出優(yōu)化您頭文件的某種推薦方案的路徑圖。 使用自動的流程圖功能,從源代碼分析得出程序的流程圖,理解文件的處理流程,來幫助進行更加高效的編碼。 1.1.4. 軟件度量分析 基于實際從軟件源代碼采集得到的信息,Klocwork直接幫助執(zhí)行官和開發(fā)經(jīng)理理解、3 預測、和指導公司在軟件安全和質(zhì)量方面的成長。Klocwork隨產(chǎn)品發(fā)布100多種關(guān)于文件、類、和函數(shù)/方法的代碼度量,包括了從McCabe復雜度、Halstead程序度量、代碼行數(shù)、繼承數(shù)、循環(huán)數(shù)等各種基本度量??蛻暨€可以根據(jù)自己的質(zhì)量目標,任意組合這些基本度量進行運算生成復合度量。 1.1.5. 可定制的代碼分析 許多組織有自己獨特的編碼標準、安全策略或質(zhì)量目標。經(jīng)過擴展Klocwork產(chǎn)品,您可以將我們的分析引擎應用到您獨特的、公司特色的問題上。另外,Klocwork產(chǎn)品的可擴展性能夠用于實現(xiàn)行業(yè)特定的編碼標準,保證遵守最新的最佳實踐??蛻艨墒褂肒locwork文檔中介紹的擴展性API或者使用Klocwork提供的專業(yè)服務編寫適合您的檢查器。 1.1.6. 開發(fā)人員IDE集成 Klocwork與眾不同的核心之一就是我們能夠集成到您選定的開發(fā)環(huán)境中去。通過集成,在開發(fā)人員的桌面上即可自動進行代碼的檢查,您可創(chuàng)建更為優(yōu)秀的軟件并通過在開發(fā)過程早期捕捉到潛在的問題而降低開發(fā)成本。Klocwork能夠與Eclipse、Wind River Workbench 2.3、Visual Studio 6/2002/2003/2005、IBM Rational Application Developer for Websphere Software、Gvim、Emacs、Visual SlickEdit、Platform Builder、KDevelop、MetroWerks CodeWarrior、IntelliJ等集成。 1.2. Klocwork架構(gòu) Klocwork 產(chǎn)品基于安裝目錄和靜態(tài)分析項目目錄之上,其架構(gòu)包括一組服務器、一組靜態(tài)分析引擎、一組客戶端應用,如圖: Compilec/ kwckwjavaKlocwork 安裝目錄 kwlinkerLoad database (kwadmin) kwinspect kwintellectdb Compilekwcc/ kwjavamysql tomcat flexlm SCM服務器源文件Klocwork 服務器 Klocwork Database Server LicenseManager(FLEXlm)Klocwork Admin ServerKlocwork Web Server Object filesFBKB Project propertiesIDF KlocworktablesinSpect Reports Filter filesConfig filesKlocwork 應用工具 KMC Architectual Analysis Develop. inSpect Klocwork Project Central Web browser) kwadminMetrics&Tren R/O 服務器 R/W 服務器 Klocwork 分析引擎 Compilekwcc/ kwjavakwlinkerLoad database(kwadmin) kwinspect kwintellectdb 構(gòu)建 服務器 KLOCWORKSERVERFLEXLM SERVER MySQL SERVER TOMCAT SERVER 客戶端 計算機 Klocwork 項目目錄 DatabaseSystem ModelUser Models4 Klocwork服務器 Klocwork Admin Server(rmimanager)Klocwork管理服務器:管理Klocwork產(chǎn)生的數(shù)據(jù),配置其它的服務器。Klocwork客戶端連接到Admin Server來獲取項目信息。 Klocwork Database Server(mysql)Klocwork數(shù)據(jù)庫服務器:是一個MySQL數(shù)據(jù)庫服務器,包括Klocwork Project Central和inSight Architect的使用的數(shù)據(jù)。 Klocwork Web Server(tomcat)Klocwork Web服務器:基于Apache Tomcat,提供Web方式訪問Project Central使用inSpect報告和inSight Developer。 License Manager(lm)FLEXlm License Manager:可以是包含在Klocwork內(nèi)的FLEXlm版本或者是一個獨立的FLEXlm安裝。License Manager不需要安裝在與Klocwork 服務器相同的計算機上。 Klocwork分析引擎 Klocwork compilers(kwcc,kwjava)Klocwork編譯器:編譯C/C+和Java語言的源代碼,每個源代碼文件經(jīng)過編譯輸出一個目標文件。 Klocwork linker(kwlinker)Klocwork連接器:連接目標文件,生成Klocwork數(shù)據(jù)庫的tables。 kwdefectsj對Java字節(jié)碼(.jar和.class文件)進行缺陷和安全漏洞分析。 kwlef對C/C+目標文件進行缺陷和安全漏洞分析。 Klocwork inSpect(kwinspect)提供整個軟件系統(tǒng)的質(zhì)量信息的質(zhì)量保證系統(tǒng),inSpect根據(jù)構(gòu)建生成的tables生成各種報告(文本、PDF或者HTML輸出格式)。 Klocwork項目目錄 是所有Klocwork服務器和應用程序的數(shù)據(jù)存儲位置。projects_root包含Klocwork服務器設(shè)置和Klocwork分析引擎生成的項目、構(gòu)建相關(guān)的信息。 projects_root目錄的選擇很重要,目錄應該擁有并且將來也一直會有充分的磁盤空間。projects_root目錄必須是一個所有Klocwork都能夠訪問到的位置。 Klocwork應用工具 Klocwork Management Console(KMC)Klocwork管理控制臺:有GUI方式和命令行方式的界面。使用KMC和命令行程序管理Klocwork服務器、項目和構(gòu)建。 Klocwork Project CentralWeb站點方式的Klocwork項目中心:Klocwork inSight Developer和Klocwork inSpect的Web站點方式的管理中心。無需安裝,因此不出現(xiàn)在安裝程序的客戶程序列表里。inSight Developer提供直接從源代碼快速訪問軟件系統(tǒng)的信息。 Klocwork Enterprise Developer在將源代碼提交到源代碼管理系統(tǒng)之前,幫助保證源代碼的質(zhì)量; Architectural Analysis直接從源代碼提取準確的關(guān)于軟件設(shè)計的圖形視圖(C,C+和Java)。 Metrics and Trending 分析軟件缺陷的分布和趨勢,監(jiān)控軟件的質(zhì)量狀態(tài)。 5 2. Klocwork靜態(tài)分析工具與軟件開發(fā)進行過程集成 2.1. 軟件靜態(tài)分析技術(shù)是降低缺陷管理成本的首選 據(jù)美國NIST統(tǒng)計,2002年美國解決軟件缺陷的費用是$600億,占美國當年GDP的0.6%,而這還只是直接成本統(tǒng)計,不包括由缺陷而帶來的間接成本:品牌破壞、客戶信譽度下降、利潤下降、市場份額下降、甚至人身傷害的損失。 這巨大的因缺陷而產(chǎn)生的費用在缺陷生命周期中的分布(來自Garnter、IBM和HP的統(tǒng)計數(shù)字)如下圖: 在測試、發(fā)布階段糾正缺陷的成本是編碼階段發(fā)現(xiàn)并糾正缺陷的成本的1590倍,如果在交付用戶之后才發(fā)現(xiàn)并解決缺陷,這個數(shù)字將達到50200倍。 因此,在編碼實現(xiàn)階段發(fā)現(xiàn)并解決盡可能多的缺陷,能夠極大降低缺陷管理成本,據(jù)相關(guān)統(tǒng)計數(shù)字估計,這個成本至少可以降低1/3。 如何才能在編碼實現(xiàn)階段發(fā)現(xiàn)更多的缺陷呢?利用軟件靜態(tài)分析技術(shù)是最好的答案。軟件靜態(tài)分析無需代碼運行,就能發(fā)現(xiàn)代碼的質(zhì)量和安全問題,這種技術(shù)能夠把缺陷的發(fā)現(xiàn)和解決時間向前推移到“第一時間”在軟件開發(fā)過程中,發(fā)現(xiàn)并糾正問題所需成本最低的時間點。 2X 5X 10X 50X 30X 40X IBM 40 到 50倍 HP 30倍 Gartner 50 到 1000倍 測試/QA 最常見的缺陷發(fā)現(xiàn)和糾正時間點 “第一時間” 軟件開發(fā)過程中,發(fā)現(xiàn)并糾正問題所需成本最低的時間點 缺陷 管理 成本 發(fā)布 測試 編碼實現(xiàn)階段 設(shè)計 需求 2.2. 軟件靜態(tài)分析技術(shù)的發(fā)展 靜態(tài)分析技術(shù)很早時候出現(xiàn)在大學的科研機構(gòu)中以及高科技研究部門,已經(jīng)有很多年的歷史了,而且在很早時候,大家就已經(jīng)意識到軟件靜態(tài)分析技術(shù)在降低缺陷管理成本方面的作用,并且盡可能在軟件開發(fā)的日常過程中進行靜態(tài)分析工作。但是,前期的軟件靜態(tài)分析技術(shù)應用并非預期的那樣有效,也沒有真正成為開發(fā)人員的日常開發(fā)工作的一部分。原因有三: 6 1軟件靜態(tài)分析技術(shù)由于其算法的特殊性分析占用的時間、資源問題,導致無法對大型軟件(10萬代碼行以上)進行分析; 2早期的靜態(tài)分析技術(shù)誤報現(xiàn)象嚴重,開發(fā)人員面臨大量的誤報需要辨別其真?zhèn)?,耗時耗力,并且淹沒了真正的缺陷所在; 3性能問題,靜態(tài)分析過程通常很慢,無法應用到開發(fā)人員的日常開發(fā)環(huán)境當中。 隨著計算機技術(shù)的發(fā)展,計算資源效率日新月異,更重要的是靜態(tài)分析技術(shù)正在逐漸成熟起來,現(xiàn)在的靜態(tài)分析技術(shù)已經(jīng)與以前有了質(zhì)的飛躍,這些都使得靜態(tài)分析技術(shù)進行軟件開發(fā)測試成為現(xiàn)實。 2.2.1. 早期的軟件靜態(tài)分析 z 最初的靜態(tài)分析方法代碼審查 一直到現(xiàn)在,代碼審查的方式一直都在應用,這種方式的確是有效的提高軟件質(zhì)量的方式,但這種方式具有如下的弊端: 人工方式具有很大的不可靠性,隨著復雜度增加,錯誤會淹沒在代碼里,經(jīng)驗證明,超過百行的代碼進行審查時,發(fā)現(xiàn)問題是很困難的; 人工方式耗時,容易犯錯誤; 要求審查人員在軟件質(zhì)量方面具有較深的造詣,才能取得好的效果; z 最簡單的靜態(tài)分析方法grep 強大的搜索源代碼的能力; 不能識別語法、句法、注釋、字符串、聲明、函數(shù)調(diào)用等,靈敏度很低; z 基于基本詞法分析的靜態(tài)分析 是早期靜態(tài)分析工具采用的靜態(tài)分析方法,如ITS4、FlawFinder、RATS等; 能夠區(qū)分發(fā)生缺陷的詞匯,例如能區(qū)分gets(&buf)與int begetsNextChild = 0中的gets關(guān)鍵字; 過程: 前置處理 為源代碼打標記 與Compiler做的 第一件事詞法分析相同 比對 缺陷結(jié)構(gòu)庫 標記文件 缺點: 產(chǎn)生許多的誤報(false positives),原因是沒有考慮目標代碼的語義(Semantics); 不能很好地理解代碼執(zhí)行時的行為,盡管有些缺陷信號非常明顯,不需要語義解析就能準確定位,但大多數(shù)的缺陷都不是那么直接了當; 7 2.2.2. 新一代軟件靜態(tài)分析技術(shù) 2.2.2.1. 原則 新一代的軟件靜態(tài)分析技術(shù)使用了如下的分析原則:使用許多抽象的程序約束來映射源代碼的結(jié)構(gòu)。 2.2.2.2. 理論基礎(chǔ)程序分析(Program Analysis) 使用靜態(tài)技術(shù)對程序執(zhí)行時狀態(tài)和行為的集合進行預測; 但程序分析包括運行時錯誤是不可判定的,沒有固定、可靠的方法能夠真正回答程序是不是有運行時錯誤,這是數(shù)學理論上不可能實現(xiàn)的; 采用替代的方法,簡化所有的程序分析問題成為可以跟蹤和計算的問題; 2.2.2.3. 基本思路 使用抽象語法樹(Abstract Syntax Tree),從源代碼利用借鑒編譯技術(shù)的方法構(gòu)建一個AST,并加入更為豐富的語義狀態(tài)的描述。 2.2.2.4. 四種基本方法 z 數(shù)據(jù)流分析(Data Flow Analysis) 將程序看作是圖,節(jié)點是程序的基本塊,邊是描述控制如何從一個基本塊轉(zhuǎn)移到另一個基本塊。圖可以解決很多問題,例如:以圖中邊的抽象得出數(shù)學方程,其解就是可達性問題的答案;PREfix、SLAM靜態(tài)分析系統(tǒng)使用了數(shù)據(jù)流分析的思想。 z 基于約束的分析(Constraint-based Analysis) 從程序文本產(chǎn)生一系列的本地約束,通過解譯這些約束來驗證所有的屬性。Cqual是這種類型的系統(tǒng)。 z 抽象解析(Abstract Interpretation) 將程序映射成更加抽象的域(Domain),使分析更加具有可跟蹤性并具有檢驗代碼的作用;抽象解析通過計算能夠直接得出分析結(jié)果,而不是象其他類型的方法使用驗證的方式進行分析;ASTREE是抽象解析的靜態(tài)檢查器。 z 類型與結(jié)果分析(Type and Effect Analysis) 是結(jié)果系統(tǒng)和注釋的類型系統(tǒng)的混合。結(jié)果系統(tǒng)表達一個語句的執(zhí)行有什么結(jié)果;注釋的類型系統(tǒng)提供結(jié)果系統(tǒng)的語義。這種分析廣泛應用于各類編譯器(如:gcc Wall選項)。 2.2.2.5. 靜態(tài)分析技術(shù)方法的目標平衡與關(guān)鍵問題 靜態(tài)分析方法由于其算法特殊性,靜態(tài)分析不可能分析程序的所有狀態(tài)從而完全判定程序是不是有缺陷,因此靜態(tài)分析采用了各種逼近的算法來盡可能追求不同的目標,例如: 能夠找到盡可能多的缺陷; 提高報告的準確率; 這樣,以不同目標進行分析的算法,往往會傾向于某個特定目標,從而降低對其它目標的追求,這樣,在靜態(tài)分析方法中就存在這樣幾類的目標平衡和關(guān)鍵問題: 8 z 準確與全面的平衡 我們知道,程序分析包括運行時錯誤是不可完全判定的,沒有固定的方法能夠真正回答程序是不是有運行時錯誤,這是數(shù)學理論上不可能實現(xiàn)的;采用替代的方法,簡化所有的程序分析問題成為可以跟蹤的問題;這種簡化或者說近似不可避免地或者導致準確性下降或者導致全面性下降;換句話說,要追求準確,就要犧牲全面,反之亦然;例如:PREfix只分析幾類問題,但分析得非常準確;ASTREE則通過設(shè)置控制參數(shù)來設(shè)置準確與全面的不同程度的平衡這是抽象解析方法的強大而有意思的功能。 z 注釋與外部檢查 注釋提供對程序代碼細粒度的說明,基于注釋的靜態(tài)分析系統(tǒng)通常能夠比外部檢查系統(tǒng)發(fā)現(xiàn)更全面的問題;但基于注釋的程序與源程序同步起來困難,重用性差;隨著程序復雜性增加,原來添加的注釋已經(jīng)不能適用,產(chǎn)生大量的錯誤報告,需要添加新的注釋;但很難確定到底添加多少注釋合適。不過最新的基于注釋的靜態(tài)分析器正在考慮自動化注釋過程,從而解決這個問題。 z 適應性(Scalability) 適應性是指分析大型復雜程序的適應能力;一般的自動分析器隨著程序復雜度增加,很容易就滿載了。進行過程間分析(Interprocedural analysis)和過程內(nèi)分析(Intraprocedural analysis)的方法具有不同級別的適應性: Interprocedural analysis:能夠發(fā)現(xiàn)更多的bug,比intraprocedural更為準確;如:PREfix interprocedural 檢查器發(fā)現(xiàn)90的錯誤是關(guān)于多個函數(shù)間交互的;但interprocedural分析代價很高(CPU、內(nèi)存等),與程序大小為超線性增長; 2.3. Klocwork軟件靜態(tài)分析原理 經(jīng)過多年的發(fā)展,靜態(tài)分析技術(shù)由原來的詞法分析、語法分析發(fā)展到現(xiàn)在的語義分析階段,現(xiàn)在的靜態(tài)分析技術(shù)已經(jīng)遠遠發(fā)生了巨大的變化,通過對程序狀態(tài)的分析,能夠發(fā)現(xiàn)程序的運行時錯誤?,F(xiàn)在的靜態(tài)分析不是“grep on steroids”或“現(xiàn)代的lint工具”。Grep或者lint都不能達到現(xiàn)代靜態(tài)分析工具的精確度,均不能精確地檢測出代碼中復雜的缺陷和安全漏洞,更無法有效集成到您的開發(fā)過程中。 2.3.1. Klocwork靜態(tài)分析技術(shù)原理 Klocwork靜態(tài)分析融合了多種先進的靜態(tài)分析技術(shù)、Klocwork專利軟件分析技術(shù)以及Klocwork在靜態(tài)分析領(lǐng)域的專業(yè)技術(shù)和經(jīng)驗,這使得Klocwork的產(chǎn)品成為自動化的、適應大規(guī)模代碼的和準確的靜態(tài)分析工具。 Klocwork按照如下四個步驟分析軟件代碼: 步驟1構(gòu)建和代碼分析 步驟2代碼和系統(tǒng)知識聚合 步驟3跨過程缺陷分析 步驟4數(shù)據(jù)庫生成 9 步驟1 步驟2 步驟3 步驟4 客戶代碼Klocwork代碼分析 可定制的客戶知識庫文件 Klocwork中間系統(tǒng)文件平臺知識庫文件Klocwork缺陷分析 函數(shù)行為 知識庫Klocwork數(shù)據(jù)庫自動生成的文件 自動化構(gòu)建發(fā)現(xiàn)步驟 1 構(gòu)建和代碼分析 z 客戶代碼 顯而易見,這是進行任何靜態(tài)分析最重要的輸入,包括:構(gòu)成客戶全部或部分系統(tǒng)的頭文件、庫文件和其他組件,用來產(chǎn)生目標代碼和可執(zhí)行文件。Klocwork能夠分析C,C+和Java代碼。 z 自動化的構(gòu)建發(fā)現(xiàn) 另一個同等重要的輸入信息是客戶構(gòu)建軟件的準確信息尤其,必須的詳細信息包括標準的編譯選項如頭文件目錄(-I)、定義文件目錄(-D)等。目的是使Klocwork工具能夠按照其標準的系統(tǒng)構(gòu)建的方式來分析整個軟件系統(tǒng)。這種方式與其它的靜態(tài)分析工具不同,其它靜態(tài)分析工具不能生成代碼的全系統(tǒng)視圖,只能基于逐個文件(file-by-file)的方式進行分析,因此分析類型具有很大的局限性。Klocwork提供易于使用的、自動化的工具,通過使用專有的構(gòu)建發(fā)現(xiàn)技術(shù)對客戶的構(gòu)建進行檢測,產(chǎn)生一個構(gòu)建規(guī)格文件。這一創(chuàng)新技術(shù)大大簡化了Klocwork在客戶環(huán)境中的部署,而許多客戶環(huán)境是極其復雜的構(gòu)建環(huán)境。另外,在標準的構(gòu)建環(huán)境如Microsoft的構(gòu)建環(huán)境中,還可以從Visual Studio項目文件中自動提取構(gòu)建信息。 10 z Klocwork 代碼分析 準確的構(gòu)建信息和客戶代碼是代碼分析系統(tǒng)的兩個輸入。此分析使用Klocwork的技術(shù)對代碼進行解析、編譯和鏈接,產(chǎn)生Klocwork的中間系統(tǒng)數(shù)據(jù)。Klocwork代碼分析技術(shù)是極具適應性的(適應超大規(guī)模的代碼),可以對上千萬行的客戶代碼進行分析。此外,使用Klocwork的分布式構(gòu)建能力,客戶能夠利用已有的構(gòu)建結(jié)構(gòu)快速、頻繁地對他們的大規(guī)模代碼進行分析。因為Klocwork使用自己擁有的專為復雜環(huán)境而設(shè)計的編譯器和解析器,客戶可獲得最大的靈活性以支持眾多不同的環(huán)境。 步驟 2 代碼和系統(tǒng)知識聚合 z Klocwork中間系統(tǒng)數(shù)據(jù) 代碼分析時產(chǎn)生的中間系統(tǒng)數(shù)據(jù),存儲和聚合了如下的詳細系統(tǒng)模型: o 抽象語法樹(Abstract syntax tree-AST) 高層次的中間程序表示,將代碼分解為語法和語義結(jié)構(gòu),以樹的方式組織在一起。一些樣例結(jié)構(gòu)包括:聲明、語句和表達式。 o 調(diào)用圖(Call graph) 包括函數(shù)和/或方法調(diào)用其他函數(shù)和方法的信息。 o 控制流圖(Control flow graph) 控制流或者“邏輯流”分析包括所有的關(guān)于軟件“任務鏈”的信息,利用這些結(jié)果能夠跟蹤所有的路徑。這樣通過確保缺陷檢測已經(jīng)執(zhí)行了所有的代碼路徑,提高率代碼覆蓋率。 z 平臺知識庫文件 Klocwork隨產(chǎn)品發(fā)布提供一個平臺專有信息的詳細的知識庫。無需解析代碼,就可以知道函數(shù)行為的信息。這個功能在客戶僅僅訪問系統(tǒng)的庫文件而不是代碼時非常有用。平臺知識庫既增強了分析的準確性(減少誤報),又提高了缺陷檢測能力(減少漏報)。 z 客戶知識庫文件(可選) Klocwork也允許用戶添加他們自己的系統(tǒng)中所使用的第三方庫的特定描述??蛻粢部梢栽跊]有源代碼的情況下,輸入關(guān)于任何函數(shù)行為的詳細信息,如:封裝了系統(tǒng)內(nèi)存分配過程的客戶內(nèi)存管理過程。 步驟 3 過程間的缺陷分析 z Klocwork 缺陷分析 步驟2完成后,Klocwork的缺陷分析就開始運行,選取多種精密復雜的技術(shù)來檢測代碼中的缺陷。在高層次上,Klocwork的缺陷分析結(jié)合了語法檢查技術(shù)和精確的邏輯分析技術(shù),在整個系統(tǒng)中追蹤變量的可能的值和不同的執(zhí)行路徑。與其它分析技術(shù)不同,Klocwork從多種技術(shù)中選擇分析方法來保持適應性(大規(guī)模分析能力)和健壯的、準確的缺陷檢測之間的恰當平衡。三種通用的技術(shù)是: i. 過程間數(shù)據(jù)流分析 這種復雜的分析可以為代碼中所有的執(zhí)行路徑建立詳細的模型,并在全局的或者全系統(tǒng)的層次上覆蓋代碼。在此項技術(shù)中,Klocwork通過使用如下方式進行分析: 路徑消除 消除錯報的重要步驟,從分析中刪除所有的不可達路徑; 別名分析 更加準確理解系統(tǒng)內(nèi)存使用情況; 11 ii. 抽象解釋和約束解析 這些技術(shù)提供代碼中變量值可能值的推導,提高發(fā)現(xiàn)缺陷的概率和精度,提高分析的質(zhì)量。 iii. 啟發(fā)式排序 為靜態(tài)分析工具報告的缺陷分配概率值,并且利用各種開放源代碼和行業(yè)編碼標準進行“訓練”,缺陷分析積累的知識庫和概率都集成到工具中。 z 函數(shù)行為知識庫(Function Behavior Knowledge Base -FBKB) 自動生成描述所有函數(shù)行為的文件。這個文件作為系統(tǒng)分析的一部分集成到系統(tǒng)中。為了保證開發(fā)人員只對系統(tǒng)中他/她自己的部分進行編譯,也可以用于開發(fā)人員的桌面環(huán)境,所有的跨過程的系統(tǒng)知識通過一個共享的FBKB文件實現(xiàn),以保證開發(fā)人員獲得基于全系統(tǒng)環(huán)境的準確的結(jié)果。 步驟 4 數(shù)據(jù)庫生成 分析結(jié)束后,Klocwork將生成的所有數(shù)據(jù)存儲到數(shù)據(jù)庫中,這些數(shù)據(jù)包括缺陷、安全漏洞、架構(gòu)模型、度量。這樣,就為客戶提供了一個適應性強的可搜索的數(shù)據(jù)庫,使客戶能夠方便地找到他們想查找的缺陷。這也使得Klocwork能夠按照每次構(gòu)建跟蹤質(zhì)量問題,報告的所有缺陷均通過統(tǒng)一的缺陷狀態(tài)和階段進行管理。 2.3.2. Klocwork構(gòu)建過程 .c .cpp kwccProject Central數(shù)據(jù)庫 目標文件 kwlef含有缺陷信息的目標文件 kwlinker Tables kwadmin build-project構(gòu)建配置文件 kwbuildprojectkwinject 或 手工過程 (構(gòu)建集成或解析構(gòu)建日志) 構(gòu)建配置文件 以前的構(gòu)建 (可選) 人工FBKB (可選) kwscope這部分是自動的 這是用戶執(zhí)行的內(nèi)容 使用自動的集成構(gòu)建,或者使用kwinject生成構(gòu)建配置文件,再由構(gòu)建配置文件使用kwbuildproject進行構(gòu)建。 整個構(gòu)建過程對用戶來講是自動的、不可見的:C/C+源文件,經(jīng)過kwcc編譯器編譯,生成目標文件,再由kwlef對目標文件進行分析,生成帶有缺陷信息的目標文件。kwlinker12 將帶有缺陷信息的目標文件進行連接,生成構(gòu)建結(jié)果數(shù)據(jù)庫tables。 然后,從tables數(shù)據(jù)庫,由kwadmin build-project,將缺陷信息、度量信息和架構(gòu)信息進行結(jié)構(gòu)化并存入Project Central數(shù)據(jù)庫,供inSpect進行缺陷報告、inSight進行架構(gòu)分析。 2.3.3. 工作原理 這里通過Klocwork工具自動在Firefox(一個開源的web瀏覽器)發(fā)現(xiàn)空指針引用的問題,來說明如何使用Klocwork靜態(tài)分析技術(shù)在代碼中發(fā)現(xiàn)嚴重的運行時錯誤。這個例子將展示Klocwork如何能夠自動推斷一個函數(shù)的行為,尤其在這個例子中,通過考慮不同的預判條件,推斷某個的可能返回值和之后的參數(shù)引用。 缺陷類型:Result of function that may return NULL will be dereferenced 函數(shù)的返回結(jié)果可能為空并被引用 Klocwork提供的缺陷描述: Pointer certs returned from call to function nssList_CreateIterator at line 991 may be NULL and will be dereferenced by passing argument 1 to function nssListIterator_Start at line 992. 下圖是從Klocwork基于Web的缺陷引用和管理界面Porject Central中截取的圖片。圖片的上方2/3顯示的是源代碼視圖,而下方1/3顯示Klocwork的缺陷追溯信息,通過這些信息,開發(fā)人員可以一步步查看代碼,并一步步理解缺陷產(chǎn)生的原因。 Klocwork工具自動識別出在這一行,指針certs被賦值 然后,需要了解在另外一個函數(shù)nssList_CreateIterator內(nèi)部作了什么操作,以確定是否有返回NULL的可能性 13 Klocwork工具進行過程間跟蹤,分析到nssList_CreateIterator函數(shù)并自動判別可能會返回NULL。 注:通常情況下,簡單的靜態(tài)分析工具會報告每一次NULL的情況,但不會推斷函數(shù)其它部分的行為,這當然會引起大量的誤報。 然后,Klocwork工具進行過程間路徑跟蹤,發(fā)現(xiàn)certs被傳遞給位于另外一個源文件中的另一個函數(shù)nssListIterator_Start。 14 在函數(shù)nssListIterator_Start內(nèi)部,工具識別出有一個宏封裝了對第一個形參的引用。 因為Klocwork預處理了代碼,宏可以在這里展開,這樣工具就能夠理解其中的操作。 缺陷分析現(xiàn)在能夠推斷在返回NULL之后,有一處引用。 在宏定義里,出現(xiàn)了引用,產(chǎn)生了空指針引用的條件,因此,工具就報告了這個錯誤。 15 2.4. 在軟件開發(fā)過程中使用Klocwork Klocwork通過與軟件開發(fā)過程的結(jié)合,幫助實現(xiàn)一個閉環(huán)質(zhì)量控制管理過程。 首先,開發(fā)人員在個人開發(fā)環(huán)境中,使用Klocwork靜態(tài)分析,在代碼提交配置管理之前,把產(chǎn)生的代碼缺陷和安全漏洞發(fā)現(xiàn)并消滅在第一時間,這本身就大大節(jié)省了缺陷管理成本和開發(fā)時間。在解決缺陷問題的時候,Klocwork還能夠幫助進行缺陷修改的影響分析,避免缺陷的修改帶來新的問題。 在系統(tǒng)集成的時候,使用Klocwork對軟件系統(tǒng)進行分析,發(fā)現(xiàn)整個軟件系統(tǒng)級別的缺陷和安全漏洞,保證在進行QA工作和集成測試之前,將代碼本身的問題消滅掉。這樣,QA工作和集成測試就可以更多的關(guān)注用戶需求問題,而不是象傳統(tǒng)過程那樣,花費將大量時間用來解決軟件的代碼缺陷和安全漏洞問題。 生成的質(zhì)量報告,分別被開發(fā)管理人員、安全審查人員、代碼審查人員/QA人員、軟件架構(gòu)師所參考。 開發(fā)管理人員獲得整體的可視化質(zhì)量數(shù)據(jù),包括從團隊成員的角度和組件的角度進行數(shù)據(jù)的趨勢分析。 安全審查人員將關(guān)注軟件中存在的安全漏洞,最小化軟件安全風險,限制安全漏洞擴散。 代碼審查人員/QA人員/測試人員則使用Klocwork進行完全的、自動化的代碼審查,在展開QA工作之前,解決更多的缺陷問題。 16 軟件架構(gòu)師則通過Klocwork檢查開發(fā)人員的工作是否遵守了架構(gòu)目標,理解原有系統(tǒng)架構(gòu),優(yōu)化當前軟件架構(gòu),簡化和維護軟件架構(gòu)。 開發(fā)過程中的角色如開發(fā)管理人員、安全審查人員、代碼審查人員/QA人員和架構(gòu)師,可以設(shè)置質(zhì)量和安全策略,以保證整個開發(fā)團隊能夠遵守策略進一步改進開發(fā)過程和軟件質(zhì)量。Klocwork支持設(shè)置質(zhì)量和安全策略,并在進行靜態(tài)分析的時候,給出對策略的違反情況檢查。這樣,通過在開發(fā)過程中使用Klocwork,通過開發(fā)策略規(guī)范開發(fā)人員的開發(fā)行為,提高軟件質(zhì)量,形成質(zhì)量過程控制閉環(huán)。 2.5. 使用Klocwork的團隊角色 2.5.1. 軟件開發(fā)人員在桌面階段消除軟件缺陷和安全漏洞 Klocwork集成到Eclipse IDE中,也有與Windriver Workbench,Visual Studio,和IBM Rational Application for Websphere的集成插件。 軟件缺陷有時發(fā)生在開發(fā)拷貝的時候,或者在為復雜系統(tǒng)增強功能時因為疏忽而造成。無論什么情況,在代碼進入到代碼流(開發(fā)流)之前盡早自動的檢測
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國膨脹釘行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國脫脂麥胚粉行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國胸部加壓系統(tǒng)行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國聚甲醛樹脂行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資前景報告
- 2025至2030中國老人保健品行業(yè)市場深度調(diào)研及需求分析與投資價值評估報告
- 2025至2030中國羊絨市場銷售模式及投資戰(zhàn)略研究報告
- 2025至2030中國網(wǎng)絡(luò)連接設(shè)備行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國網(wǎng)球行業(yè)市場發(fā)展分析與發(fā)展趨勢及投資風險報告
- 2025至2030中國維生素D2行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 2025至2030中國結(jié)構(gòu)加固材料行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展報告
- 介入室耗材管理課件
- 三級直播銷售員(高級)職業(yè)技能鑒定考試復習題及答案
- 炎癥后色素沉著防治專家共識(2024版)解讀
- T/SHPTA 093-2024漆面保護用聚氨酯薄膜
- 2025年中國半胱氨酸及其鹽酸鹽行業(yè)市場前景預測及投資價值評估分析報告
- 帶小孩上班協(xié)議書
- 隧道居間合同協(xié)議書范本
- 2025年高考作文備考訓練之題目解析及范文:大海與池塘
- 安全操作規(guī)程總結(jié)
- 農(nóng)發(fā)行考試題及答案
- 高標準農(nóng)田建設(shè)監(jiān)理規(guī)范與實施策略
評論
0/150
提交評論