小型面向對象語言程序測試用例自動生成技術

發表于:2009-10-21來源:作者:點擊數: 標簽:面向對象程序自動技術語言
小型面向對象語言程序 測試用例 自動生成技術 提要 程序測試是保證軟件統和產品達到高 質量 和高 可靠性 的重要手段,它代表了對規約,設計和編碼的最終審查. 本文使用信息流分析技術,對面向對象語言編寫的程序自動生成測試用例.信息流分析技術又稱程序流分析

小型面向對象語言程序測試用例自動生成技術  

提要

程序測試是保證軟件統和產品達到高質量和高可靠性的重要手段,它代表了對規約,設計和編碼的最終審查.

本文使用信息流分析技術,對面向對象語言編寫的程序自動生成測試用例.信息流分析技術又稱程序流分析技術,是一種靜態分析技術,即在一個程序沒有被實際運行之際,通過靜態分析去發現它的一些運行行為方面的特性.信息流分析包括控制流分析和數據流分析兩種,其中控制流分析側重于對程序結構的分析,而數據流分析側重于對變量控制結構下的定值,使用以及傳播情況的分析.

本文屬于基于代碼的白盒測試.首先定義了一個面向對象語言Small Object-Oriented Language(SOOL),然后通過自己建造的詞法和語法分析器對SOOL構造出語法樹,接下來在語法樹上進行數據流分析和控制流分析,利用部分求值技術和程序分析技術找到滿足條件組合覆蓋策略和類覆蓋策略的執行路徑,分析可能產生分支的語句,構造包含所有執行路徑的路徑二叉樹,對路徑二叉樹上的條件表達式進行分類和化簡整理,由規范條件表達式生成梯度表達式,最后根據梯度表達式生成測試用例.

目錄

第一章 引言

1.1 程序測試技術

程序設計行家說:"任何程序,無論多么小,都有錯誤.如果小到了只能執行單一功能,這樣的程序不會有任何意義,假如這樣的程序存在,操作系統最終也會由于一個錯識而失效.沒有錯誤的程序是荒唐可笑的,是不可能存在的.假如存在沒有任何錯誤的程序,那么世界也不復存在."①

無論怎樣強調軟件測試的重要性和它對軟件可靠性的影響都不過分.在開發大型軟件系統的漫長過程中,面對著極其錯綜復雜的問題,人的主觀不可能完全符合客觀現實,與工程密切相關的各類人員之間的通信和配合也不可能完美無缺,因此,在軟件生命周期的每個階段都不可避免地會產生差錯.我們力求在每一個階段結束之前通過嚴格的技術審查,盡可能早地發現并糾正差錯;但是,經驗表明審查并不能發現所有的差錯,此外在編碼過程中還不可避免地引入新的錯誤.如果的軟件投入生產性運行之前,沒有發現并糾正軟件中的大部分差錯,那么這些差錯遲早會在生產過程中暴露出來,那時不僅改正這些錯誤的代價更高,而且往往會造成很惡劣的后果.測試的目的就是在軟件投入生產性運行之前,盡可能多地發現軟件中的錯誤.目前軟件測試仍然是保證軟件質量的關鍵步驟,它是對軟件規格說明,設計和編碼的最后復審.⑦

面向對象測試是面向對象技術的重要方面.隨著面向對象開發方法和面向對象程序設計語言的廣泛使用,用戶采用對象技術開發的軟件和產品也日益增多.測試是保證軟件系統和產品達到高質量和高可靠性的重要方面,它代表了對規約,設計和編碼的最終審查.有關面向對象測試研究也受到軟件界的重視.

正如對于過程式程序設計語言,從過去幾十年有時甚至是痛苦的經歷中所認識到的,每一個進步都有其代價;就面向對象而言,導致更大靈活性,健壯性,一般性和高生產率的真實東西,也是要求測試的東西,如果不是更為困難,至少也更具挑戰性.在過程式語言中,單元測試處于重要地位,而集成測試次之,但在面向對象語言中,這種相對重要性恰好相反.面向對象程序設計給測試者帶來很多新的問題,這些問題是過程式語言中沒有的.在這些問題中,多態,繼承和動態綁定是最容易出問題的地方,而它們又是面向對象的核心.

本文主要針對繼承,發消息機制對程序進行基于類覆蓋策略的測試用例生成,生成的測試用例側重于覆蓋類中所有的數據成員及成員函數.

1.2 測試用例自動生成技術

軟件測試是十分繁重困難的腦力勞動過程,測試工作量通常占軟件開發總量的40%以上.為了既快又好地完成測試工作,開發自動測試工具是十分必要的.自動化的程度及其發揮的作用取決于測試目標,預算,軟件過程,開發的應用類型以及開發環境和目標環境的細節.

下面介紹幾種典型的應用:

1.2.1 測試數據生成程序

這種程序可以為測試某個系統而自動產生量的輸入數據,但是它不能自動產生預期的輸出,因此用途有限制.當必須測試某個系統在實際環境中的性能時,測試數據生成程序特別有用.例如,為了測試一個數據庫管理系統,應該使用非常大的數據庫,在這種情況下,可以使用測試數據生成程序,產生需要的大量數據.當能夠形式地說明某個系統的輸出數據的語法時,測試數據生成程序也很有用,因為在這種情況下可以寫一個程序自動校核被測系統的輸出結果.例如,在測試一個編譯程序的語法分析功能時,如果輸入語法正確的源程序,則編譯程序的輸出應該就是輸入的程序,否則輸出中還應該包含指示錯誤的信息.測試數據生成程序接受被編譯的語言的語法說明,根據語法產生正確和錯誤的源程序作為測試數據.在這種情況下,它可以自動檢驗被測試的編譯程序的輸出.

1.2.2 動態分析程序

動態分析程序的主要功能是分析被測試程序中每個句的執行次數.它有兩個基本部分:1,檢測部分:它往往被分析的程序中插入檢測語句,當程序執行時,這些語句收集和整理有關的每個語句執行次數的信息.2,顯示部分:它匯集檢測語句提供的信息,并以某種容易理解的形式印出這些信息.為了檢測執行次數,應該找出所有判定語句和循環語句,并在每個循環和判定的開始處放置檢測代碼.不包含循環或分支的一串順序語句,只需在它們的開始處放置檢測代碼.為了設置檢測代碼,需要了解這種語言的語法,所以在普通的編譯程序中,增加檢測功能是實現這種功能的一種方便途徑,用戶可以通過編譯命信令選擇使用這個功能.另一種途徑是用預處理程序在被測試程序中插入高級語言,以便收集有關程序執行的信息.動態分析程序在軟件測試中很有用,利用它可以發現測試過程中沒有執行的語句,以便增加相應的測試數據.在調試過程中動態分析程序也能起到重要作用,利用它可以發現不按預定要求終止的筆循環,也可以發現不應執行而實際執行的代碼,或者應該執行而實際上沒有執行的代碼.

1.2.3 靜態分析程序

靜態分析程序不需要執行測試的程序,它僅僅掃描被測試程序的正文,從中尋找可能導致錯誤的異常情況,例如,使用了一個尚未賦值的變量;賦了值的變量始終未被使用;實在參數和形參的類型或個數不符;永遠執行不到的程序段;…….對于像FORTRAN這樣的語言,因為在編譯期間可以做的檢查不多,所以靜態分析程序很有用.DAVE,AUDIT和FACES等系統都是用于FORTRAN程序的典型靜態分析程序.當然,靜態分析程序并不僅限于FORTRAN程序,LINT系統就是為分析C程序開發的.因為LINT可以對C程序進行的靜態檢查的嚴格程度,相當于ALGOL68編譯程序可以對ALGOL68源程序提供的檢查的嚴格程度,所以它把一種嚴格類型語言的可靠性優點,與系統實現語言生成非常高效代碼的能力結合起來.

1.2.4 文件比較程序

一般說來,測試過程需要檢查的輸出結果數量極大.這是一件非常單調乏味的工作,而且由于一時疏忽而漏過錯誤的輸出.因此,檢查測試結果的過程應該盡可能自動化.自動檢查測試結果的過程主要由下述幾步組成:1,建立一個文件存放預期的正確結果;2,執行測試,并把輸出數據存在一個文件;3,使用文件比較程序來比較上述兩個文件,印出兩者之間的差異.

本文大體上屬于第一種和第三種工具的結合,利用信息流分析技術,對程序進行靜態分析,生成測試用例.

1.3 信息流分析技術

信息流分析技術又稱程序流分析技術,是一種靜態分析技術,即在一個程序沒有被實際運行之際,通過靜態分析去發現它的一些運行行為方面的特性.信息流分析包括控制流分析和數據流分析兩種,其中控制流分析側重于對程序結構的分析,而數據流分析側重于對變量控制結構下的定值,使用以及傳播情況的分析.二者相輔相承,不可分開.

信息流分析技術最早被用于編譯優化,目前除編譯優化外,在程序測試,程序理解,程序驗證,程序調試以及程序分片等許多領域,信息流分析都有廣泛的應用.

下面介紹幾個信息流分析的應用:

1.3.1 編譯優化

編譯優化是信息流分析最早的應用領域.當程序設計發展到出現高級程序設計語言時,程序設計者不再關注那些依賴于具體機器的實現細節,用高級語言編寫程序更為容易,程序的通用性和可讀性大大增強.但是,用高級語言編寫的程序的執行效率卻大大不如用匯編語言編寫的程序.這也正是因為它不依賴于具體機器的通用性阻礙了程序員利用某一機器的物理特性去編寫更有效的代碼.雖然如此,程序設計科學的發展方向仍然是應該朝著在更為抽象的層次上去設計程序,從而增強其通用性和可讀性這一主要方向的.因此,要提高程序的執行效率,就必須從改進編譯器入手,改進由編譯器產生的目標程序的效率,進行編譯優化.這里所說的優化并不是修補拙劣的程序,而是在合理的限內應用提高目標代碼的效率.利用信息流分析技術,可以對程序進行優化.如常表達式的優化,公共了表達式的優化,無關代碼移動,削減運算強度和寄存器的分配等.

1.3.2 程序測試

程序測試是軟件開發的重要環節,程序靜態信息流分析是程序測試所采用的一種主要手段.利用數據流分析可以找出數據流中的異?,F象,如引用在前定值在后,重復定值以及只定值不使用等情況;利用控制流分析,可以確定測試路徑,對于路徑覆蓋策略,點覆蓋策略,條件組合策略,語句覆蓋策略,具有有效的手段.

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97