面向對象的軟件測試技術 軟件測試技術
相關知識點-面象對象(=Object Oriented)技術
1. 對象和類
l 面象對象的編程語言:以對象為中心,以消息為驅動,程序=對象+消息
l 類是一種新的數據類型,是設計的核心,是通過抽象數據類型的方法來實現的一種數據類型
l 類是對某一對象的抽象,對象是某一類的實例,兩者密切相關
2. 封裝、繼承和多態性
(1) 封裝:把數據和操作結合一體,使程序結構更加緊湊,避免了數據紊亂帶來的調試與維護的困難
(2) 繼承:可以從一個類派生到另一個類,派生類繼承了父類和祖先類的數據成員和函數,增加了軟件的可擴充性,并為代碼重用提供了強有力的手段
(3) 多態性:多種表現形式,可以用‘一個對外接口,多個內在實現方法’表示。
一.面向對象測試模型
1. 面向對象測試的分類
依據面向對象開發模型(面向對象分析、面向對象設計、面向對向編程),分為:
(1) 面向對象分析的測試(OOA Test)、面向對象設計的測試(OOD Test):是對分析結果和設計結果的測試,主要對分析設計產生的文本進行的,是軟件開發前期的關鍵性測試
(2) 面向對象編程的測試(OOP Test):對編程風格和程序代碼實現進行測試,主要的測試內容在OO Unit Test和OO Integrate Test中體現
(3) 面向對象單元測試(OO Unit Test):對程序內部具體單一的功能模塊的測試,主要對類成員函數的測試,是OO Integrate Test的基礎
(4) 面向對象集成測試(OO Intergrate Test):對系統內部的相互服務進行測試,如成員函數間的相互作用,類間的消息傳遞。不僅要基于OO Unit Test,還要參考OOD、OOD Test的結果
(5) 面向對象確認測試(OO System Test)、面向對象系統測試(OO System Test):最后階段的測試,以用戶需求為測試標準,借鑒OOA 、OOA Test的結果
二. 面向對象軟件的測試策略
1. 面向對象分析的測試
(1) 面向對象分析
是把E-R圖和語義網絡模型,即信息造型中的概念,與面向對象程序設計語方中的重要概念結合在一起而形成的分析方法。通常以問題空間的圖表的形式進行描述
(2) 分析方法
直接映射問題空間,全面地將問題空間中實現功能的現實抽象化。將問題空間中的實例抽象為對象,用對象的結構反映問題空間的復雜實例和復雜關系,用屬性和服務表示實例的特性和行為。
(3) 面向對象分析缺點
對問題空間分析抽象的不完整,會影響軟件的功能實現,導致軟件開發后期產生大量原本可避免的修補工作;一些冗余的對象或結構類的選定,程序的整體結構和增加程序員不必要的工作量,因此 OOA測試的重點在其完整性和冗余性
(4) OOA測試劃分的五個方面
對認定的對象的測試、對認定的結構的測試、對認定的主題的測試、對定義的屬性和實例關聯的測試、對定義的服務和消息關聯的測試
2. 面向對象設計(OOD)的測試
(1) 面向對象設計(OOD)
采用‘造型的觀點’,以OOA為基礎歸納出類,并建立類結構或進一步構造類庫,以實現分析結果對問題空間的抽象。OOD歸納的類即可以是對象的簡單延續,也可以是不同對象的相同或相似的服務
(2) OOD與OOA
OOD是OOA的進一步細化和更高層的抽象,所以OOD、OOA的界限很難區分,OOD確定類和類結構不僅是滿足當前需求分析要求,更重要是通過重新組合或加以適當的補充,方便實現功能重用和擴增。因此,對OOD的測試,建議針對功能的實現和重用以及OOA結果的分析
(3) OOD測試劃分的三個方面
1、認定的類的測試
2、構造的類的層次結構測試
3、類庫支持的測試
3. 面向對象編程(OOP)的測試
(1) 面向對象程序
把功能的實現分布在類中,能正確實現功能的類,通過消息傳遞來協同實現設計要求的功能。將出現的錯誤精確的確定在某一具體的類上。
(2) 測試重點
忽略類功能實現的細則,將測試的目光集中在類功能的實現和相應的面向對象程序風格上
(3) 測試方面
1、類的封裝
2、類的功能
4. 面向對象軟件的單元測試
(1) 可以將一些傳統的單元測試方法在面向對象軟件的單元測試中使用,如等價類劃分、因果圖、邊界值分析法、邏輯覆蓋法、路徑分析法、程序插樁法,單元測試一般建議由程序員完成
(2) 單元級測試的測試分析和測試用例,規模和難度均遠小于對整個系統的測試分析和測試用例,并且對語句應該有100%的代碼執行覆蓋率。
(3) 設計測試用例選擇輸入數據的兩個假設:
l 如果函數(程序)對某一類輸入中的一個數據正確執行,對同類中的基他輸入也能正確執行(等價類)
l 如果函數(程序)對某一復雜度的輸入正確執行,對更高復雜度的輸入也能正確執行
(4) 針對繼承性,Brian Marick兩方面的考慮
l 繼承的成員函數是否都不需要測試:當繼承的成員函數在子類中做了改動;成員函數調用了改動過的成員函數的部分這兩種情況需要對子類重新測試
l 對父類的測試是否能照搬到子類:可以重新測試或在父類原有的測試要求和測試用例上增加新的測試要求和測試用例,主要針對子類中變動的部分進行測試
5. 面向對象軟件的集成測試
(1) 傳統的自頂向下或自底向上的集成測試策略在面向對象軟件的集成測試中無意義,OO軟件的集成測試需要在整個程序編譯完成后進行,面向對象程序具有動態特性,程序的控制流無法確定,只能對編譯完成的程序做基于黑盒子的集成測試
(2) 面向對象軟件的集成測試兩種策略
l 基于線程的測試(Thread based testing):集成對響應系統的一個輸入或事件所需的一組類,每個線程分別進行集成和測試,應用回歸測試以保證沒有產生副作用。
l 基于使用的測試(Use based testing):通過測試那些幾乎不使用服務器類的的類(獨立類)而開始構造系統,在獨立類測試完成后,下一層中使用獨立類的類(依賴類)被測試,這個依賴類層次的測試序列一直持續到構造完整個系統。
(3) 測試目的
能夠檢測出相對獨立的,單元測試無法檢測出的,那些類相互作用時才會產生的錯誤,只關注于系統的結構和內部的相互作用
(4) 面向對象軟件的集成測試過程
第一步:靜態測試 針對程序的結構進行,檢測程序結構是否符合設計要求。通過使用測試軟件的‘可逆性工程’功能,得出源程序的類系統圖和函數功能調用關系圖,與OOD結果相比較,檢測程序結構和實現上是否有缺陷,檢測OOP是否達到了設計要求
第二步:動態測試 根據靜態測試得出的函數功能調用關系圖或類關系圖作為參考,按照如下步驟設計測試用例,達到如下測試覆蓋標準
設計測試用例步驟:選定檢測的類,參考OOD分析結果,確定出類的狀態和相應的行為;確定覆蓋標準;利用結構關系圖確定待測類的所有關聯;根據程序中類的對象構造測試用例,確認使用什么輸入激發類的狀態,使用類的服務和期望產生什么行為等,還要設計一些類禁止的例子,確認類是否有不合法的行為產生
覆蓋標準:達到類所有的服務要求或服務提供的一定覆蓋率;依據類間傳遞的消息,達到對所有執行線程的一定覆蓋率;達到類的所有狀態的一定覆蓋率等
六. 面向對象軟件的確認和系統測試
(1) 系統測試:需要測試它與系統其他部分配套運行的表現,以確保在系統各部分協調工作的環境下軟件也能正常運行
(2) 要求:測試環境盡量與用戶實際使用環境相同,保證被測系統的完整性,對暫時沒有的系統設備部件,應采取相應的模擬手段。參考OOA分析結果,檢測軟件是否能夠完全‘再現’問題空間
(3) 不僅是檢測軟件的整體行為表現,另一方面對軟件設計開發的確認。OO軟件的確認和系統測試具體的測試內容與傳統的系統測試基本相同,包括:功能測試,強度測試,性能測試,安全測試,易用性測試,恢復測試,安裝/卸載測試
三.OO軟件測試用例設計原則(Berard)
關注于設計合適的操作序列以測試類的狀態
1. 對每個測試用例應當給予特殊的標識,并且還應當與測試的類有明確的聯系
2. 測試目的應當明確
3. 應當為每個測試用例開發一個測試步驟列表,列表包含內容
l 列出所要測試對象的說明
l 列出將要作為測試結果的消息和操作
l 列出測試對象可能發生的例外情況
l 列出外部條件,為了正確對軟件進行測試所必須有的外部環境的變化
l 列出為了幫助理解和實現測試所需要的附加信息
四.OO軟件測試的方法
1. 基于故障的測試
(1) 具有較高的發現可能故障的能力
(2) 從分析模型開始,考察可能發生的故障,設計用例去執行設計和代碼
(3) 可用于集成測試,發現消息聯系中‘可能的故障’(可能的故障指意料之外的結果、錯誤地使用了操作/消息、不正確地引用等)
(4) 除用于操作測試外,還可用于屬性測試,用以確定其對于不同類型的對象行為是否賦予了正確的屬性值
(5) 是從客戶對象(主動)上發現錯誤
(6) 不能發現的錯誤:不正確的規格說明,用戶不需要的功能或缺少用戶需要的功能;沒有考慮子系統間的交互作用
2. 基于場景的測試
(1) 主要關注用戶需要做什么,不是產品能做什么,即從用戶任務(使用用例)中找出用戶要做什么及如何去執行
(2) 有助于在一個單元測試情況下檢查多重系統,比基于故障的測試更實際,更復雜一點
3. OO類的隨機測試
如果一個類有多個操作(功能),這些操作(功能)序列有多種排列,這種不變化的操作序列可隨機產生,用這種可隨機排列來檢查不同類實例的生存史,稱為隨機測試
4. 類層次的分割測試
(1) 可以減少用完全相同的方式檢查類測試用例的數目,類似于等價類劃分
(2) 分類:基于狀態的分割、基于屬性的分割、基于類型的分割
l 基于狀態的分割:按類操作是否會改變類的狀態進行分割(歸類)
l 基于屬性的分割:按類操作所得到的屬性來分割(歸類)
l 基于類型的分割:按完成的功能分割(分類),如初始操作、計算操作、查詢操作
5. 由行為模型(狀態、活動、順序和合作圖)導出的測試
狀態轉換圖(STD)可以用來幫助導出類的動態行為的測試序列,以及這些類與之合作的類的動態行為測試用例,根據狀態轉換圖,設計出最小測試用例,加入其他測試序列到最小測試序列中,保證類所有行為被充分檢查
總結:
本章主要講述了面向對象軟件的測試方法,依據面向對象軟件開發模型劃分面向對象測試模型,其中單元測試、集成測試、確認測試和系統測試通過與傳統的單元測試、集成測試和確認測試、系統測試進行比較,得出面向對象軟件的測試內容。
文章來源于領測軟件測試網 http://www.kjueaiud.com/