靜態(tài)分析工具和動態(tài)測試工具_第1頁
靜態(tài)分析工具和動態(tài)測試工具_第2頁
靜態(tài)分析工具和動態(tài)測試工具_第3頁
靜態(tài)分析工具和動態(tài)測試工具_第4頁
靜態(tài)分析工具和動態(tài)測試工具_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第第頁靜態(tài)分析工具和動態(tài)測試工具靜態(tài)分析工具和動態(tài)測試工具

發(fā)表于:2023-12-02來源::點擊數(shù):標簽:工具動態(tài)靜態(tài)分析

靜態(tài)分析工具和動態(tài)測試工具軟件測試一、靜態(tài)分析工具靜態(tài)分析程序不需要執(zhí)行所測試的程序,它掃描所測試程序的正文,對程序的數(shù)據(jù)流和控制流進行分析。然后送出測試報告。通常,它具有以下幾類功能:(1)對模塊中的所有變量,檢查其是否都已定義,是否

靜態(tài)分析工具和動態(tài)測試工具軟件測試

一、靜態(tài)分析工具

靜態(tài)分析程序不需要執(zhí)行所測試的程序,它掃描所測試程序的正文,對程序的數(shù)據(jù)流和控制流進行分析。然后送出測試報告。通常,它具有以下幾類功能:

(1)對模塊中的所有變量,檢查其是否都已定義,是否引用了未定義的變量,是否有已賦過值但從未使用的變量。實現(xiàn)方法是建立變量的交叉引用表。

(2)檢查模塊接口的一致性。主要檢查子程序調(diào)用時形式參數(shù)與實際參數(shù)的個數(shù)、類型是否一致,輸入輸出參數(shù)的定義/使用是否匹配、數(shù)組參數(shù)的維數(shù)、下標變量的范圍是否正確,各子程序中使用的公用區(qū)(或外部變量、全局變量)定義是否一致等等。

(3)檢查在邏輯上可能有錯誤的結(jié)構(gòu)以及多余的不可達的程序段。如交叉轉(zhuǎn)入轉(zhuǎn)出的循環(huán)語句,為循環(huán)控制變量賦值,存取其他模塊的局部數(shù)據(jù)等。

(4)建立“變量/語句交叉引用表”、“子程序調(diào)用順序表”、“公用區(qū)/子程序交叉引用表”等。利用它們找出變量錯誤可能影響到哪些語句,影響到哪些其他變量等。

(5)檢查所測程序違反編程標準的錯誤。例如,模塊大小、模塊結(jié)構(gòu)、解釋的約定、某些語句形式的使用,以及文檔編制的約定等。

(6)對一些靜態(tài)特性的統(tǒng)計功能:各種類型源語句的出現(xiàn)次數(shù),標識符使用的交叉索引,標識符在每個語句中使用的情況,函數(shù)與過程引用情況,任何輸入數(shù)據(jù)都執(zhí)行不到的孤立代碼段,未經(jīng)定義的或未曾使用過的變量,違背編碼標準之處,公共變量與局部變量的各種統(tǒng)計。

靜態(tài)分析工具的結(jié)構(gòu)一般由四部分組成:語言程序的預(yù)處理器、數(shù)據(jù)庫、錯誤分析器和報告生成器。預(yù)處理器把詞法分析與語法分析結(jié)合在一起,以識別各種類型的語句。源程序被劃分為若干程序模塊單元(如主程序與一些子程序),同時生成包含變量使用、變量類型、標號與控制流等信息的許多表格。有些表格是全局表,它們反映整個程序的全局量信息,如模塊名、函數(shù)及過程調(diào)用關(guān)系、全局量等。有些表格是局部表,它們對應(yīng)到各個模塊,記錄模塊中的各種結(jié)構(gòu)信息,如標號引用表、分支索引表、變量屬性表、語句變量引用、數(shù)組或記錄特性表等。中國自學(xué)編程網(wǎng)整理發(fā)布所有表格都存入數(shù)據(jù)庫。不少測試工具有專門設(shè)計來存放各種信息的數(shù)據(jù)庫,通常以命令語言的形式來作為查詢語言。也有使用商用數(shù)據(jù)管理系統(tǒng)的。錯誤分析器在用戶指導(dǎo)下利用命令語言或查詢語言與系統(tǒng)通信進行查錯。并把檢查結(jié)果造表輸出。

二、動態(tài)測試工具

動態(tài)測試就是通過選擇適當?shù)臏y試用例,實際運行所測程序,比較實際運行結(jié)果和預(yù)期結(jié)果,以找出錯誤。動態(tài)測試分為結(jié)構(gòu)測試與功能測試。在結(jié)構(gòu)測試中常采用語句測試、分支測試或路徑測試。作為動態(tài)測試工具,它應(yīng)能使所測試程序有控制地運行,自動地監(jiān)視、記錄、統(tǒng)計程序的運行情況。典型方法是在所測試程序中插入檢測各語句的執(zhí)行次數(shù)、各分支點、各路徑的探針(probe),以便統(tǒng)計各種覆蓋情況。有些程序設(shè)計語言的源程序清單中沒有標號,在進行靜態(tài)分析或動態(tài)測試時,還要重新對語句進行編號,以便能標志各分支點和路徑。在有些程序的測試中,往往要統(tǒng)計各個語句執(zhí)行時的cPU時間,以便對時間花費最多的語句或程序段進行優(yōu)化。

(1)測試覆蓋監(jiān)視程序

主要用在結(jié)構(gòu)測試中,可以監(jiān)視測試的實際覆蓋程度。主要的工作有:分析并輸出每一可執(zhí)行語句的執(zhí)行特性;中國自學(xué)編程網(wǎng)整理發(fā)布分析并輸出各分支或各條路徑的執(zhí)行特性;計算并輸出程序中謂詞的執(zhí)行特性;為此,測試覆蓋監(jiān)視程序的工作過程分為以下三個階段:

1)對所測試程序做預(yù)處理。如在程序的分支點和匯合點插入“執(zhí)行計數(shù)探針”;在非簡單賦值語句(相對于賦常數(shù)值或下標計算等簡單賦值語句而言)后插入“記憶變量值探針”,記錄變量的首次賦值、末次賦值、最小值、最大值。以及在循環(huán)語句中插入“記憶控制變量值探針”,記錄循環(huán)控制變量的首次賦值、末次賦值、最小值、最大值。

2)編譯預(yù)處理后的源程序,運行目標程序。在運行過程中,利用探針,監(jiān)視、檢查程序的動態(tài)行為,收集與統(tǒng)計有關(guān)信息。

3)一組測試后,可以根據(jù)要求,輸出某一語句的執(zhí)行次數(shù),某一轉(zhuǎn)移發(fā)生的次數(shù),某賦值語句的數(shù)值范圍,某循環(huán)控制變量的數(shù)據(jù)范圍,某子程序運行的時間、所調(diào)用次數(shù)等。從而發(fā)現(xiàn)在程序中從未執(zhí)行的語句,不應(yīng)該執(zhí)行而實際執(zhí)行了的語句,應(yīng)該執(zhí)行但實際沒有執(zhí)行的語句,以及發(fā)現(xiàn)不按預(yù)定要求終止的循環(huán)、下標值越界、除數(shù)為零等等異常情況。

(2)斷言處理程序

“斷言”是指變量應(yīng)滿足的條件。例如,I10,A(6)O等。在所測試源程序中,在指定位置按一定格式,用解釋語句寫出的斷言叫做斷言語句。在程序執(zhí)行時,對照斷言語句檢查事先指定的斷言是否成立??梢詭椭鷱?fù)雜系統(tǒng)的檢驗、調(diào)試和維護。

斷言分局部性斷言和全局性斷言兩類。局部性斷言,是指在程序的某一位置上,例如,重要的循環(huán)或過程的入口和出口處,或者在一些可能引起異常的關(guān)鍵算法之前設(shè)置的斷言語句。例如在賦值語句A—B/z之前,設(shè)置局部性斷言語句:

CASSERTL()CAL(ZO)

全局性斷言,是指在程序運行過程中自始至終都適用的斷言。例如,變量I、J、K只能取O到100之間的值,變量M、N只能取2、4、6、8四個值等。全局性斷言寫在程序的說明部分。描述格式為

CASSERTVALUES(I,J,K)(O:100)

CASSERTVALUES(M,N)(2,4,6,8)

程序員在每個變量、數(shù)組的說明之后,都可寫上反映其全局特性的斷言。

動態(tài)斷言處理程序的工作過程如下:

1)動態(tài)斷言處理程序?qū)φZ言源程序做預(yù)處理,為解釋語句中的每一個斷言插入一段相應(yīng)的檢驗程序。

2)運行經(jīng)過預(yù)處理的程序,檢驗程序?qū)z查程序的實際運行結(jié)果與斷言所規(guī)定的邏輯狀態(tài)是否一致。對于局部性斷言,每當程序執(zhí)行到這個位置時,相應(yīng)的檢驗程序就要工作;對于全局性斷言,在每次變量被賦值后,相應(yīng)的檢驗程序就進行工作。

動態(tài)斷言處理程序還要統(tǒng)計檢驗的結(jié)果(即斷言成立或不成立的次數(shù)),在發(fā)現(xiàn)斷言不成立的時候,還要記錄當時的現(xiàn)場信息,如有關(guān)變量的狀態(tài)等。處理程序還可按測試人員的要求,在某個斷言不成立的次數(shù)已達指定值時中止程序的運行,并輸出統(tǒng)計報告。[Page]

3)一組測試結(jié)束后,程序輸出統(tǒng)計結(jié)果、現(xiàn)場信息,供測試人員分析。

(3)符號執(zhí)行程序

符號執(zhí)行法是一種介于程序測試用例執(zhí)行與程序正確性證明之間的方法。它使用了一個專用的程序,對輸入的源程序進行解釋。在解釋執(zhí)行時,所有的輸入都以符號形式輸入到程序中,這些輸入包括基本符號,數(shù)字及表達式等。符號執(zhí)行的結(jié)果,可以有兩個用途:其一是可以檢查公式的執(zhí)行結(jié)果是否達到程序預(yù)期的目的;其二是通過程序的符號執(zhí)行,產(chǎn)生程序的路徑,為進一步自動生成測試數(shù)據(jù)提供條件。

解釋程序在對象源程序的判定點計算謂詞。一個條件語句if……then…else的兩個分支在一般情況下需要進行并行計算。語法路徑的分支形成一棵“執(zhí)行樹”,樹中每一個結(jié)點都是一個

表示執(zhí)行到該結(jié)點時累加判定的謂詞。一旦解釋程序?qū)ο笤闯绦虻拿恳粭l語法路徑都進行了符號計算,就會對每一條路徑給出一組輸出,它是用輸

入再加上遍歷這條路徑所必須滿足的條件的謂詞組這兩者的符號形式表示的。實際上,這種輸出包含了程序功能的定義。在理想情形下,這種輸出可以自動地與可用機器執(zhí)行的程序所要具備的功能進行比較。否則可用手工進行比較。由于語法路徑的數(shù)目可能很大,再加上其中有許多是不可達路徑,這時可對執(zhí)行樹進行修剪。但是修剪時必須特別小心,不要把“重要”路徑無意中修剪掉。另外,還有一個問題:如果對象源程序中包含有一個循環(huán),而循環(huán)的終止取決于輸入的值,那么執(zhí)行樹就會是無窮的,這時,必須加以人工干預(yù),進行某種形式的動態(tài)修剪,以恢復(fù)解釋執(zhí)行。

符號執(zhí)行更有用的一個結(jié)果是用于產(chǎn)生測試數(shù)據(jù)。符號執(zhí)行的各種語法路徑輸出的累加謂詞組(只要它是可解的)定義了一組等價類,每一等價類又定義了遍歷相應(yīng)路徑的輸出,可依據(jù)這種信息來選擇測試數(shù)據(jù)。尋找好的測試數(shù)據(jù)就等于尋找語義(即可達)路徑,中國自學(xué)編程網(wǎng)整理發(fā)布它屬于語法路徑的子集,因此,可依據(jù)這種信息來選擇測試數(shù)據(jù)。

符號執(zhí)行方法還可以度量測試覆蓋程度。如果路徑謂詞的析取值為真(true),則該測試用例的集合就“覆蓋”了源程序。如果不是這樣,該析取值的取假(false),表示源程序有沒有測試到的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論