物件導向的類測試技術研究
物件導向的類測試技術研究
摘要:類是物件導向軟體的基本構成單元,類測試是物件導向軟體測試的關鍵。從基於服務的、基於物件動態測試模型的、基於流圖的以及基於規約的四個方面論述了類測試的思想和方法。
關鍵詞:物件導向;軟體測試;類測試
1、物件導向軟體的類測試
物件導向軟體從巨集觀上來看是各個類之間的相互作用。在物件導向系統中,系統的基本構造模組是封裝了的資料和方法的類和物件,而不再是一個個能完成特定功能的功能模組。每個物件有自己的生存週期,有自己的狀態。訊息是物件之間相互請求或協作的途徑,是外界使用物件方法及獲取物件狀態的唯一方式。物件的功能是在訊息的觸發下,由物件所屬類中定義的方法與相關物件的合作共同完成,且在不同狀態下對訊息的響應可能完全不同。物件中的資料和方法是一個有機的整體,測試過程中不能僅僅檢查輸入資料產生的輸出結果是否與預期的吻合,還要考慮物件的狀態。模組測試的概念已不適用於物件的測試“類測試將是整個測試過程的一個重要步驟。
物件導向軟體的類測試與傳統軟體的單元測試相對應,但類包含一組不同的操作,並且某特殊操作可能作為一組不同類的一部分存在。同時,一個物件有它自己的狀態和依賴於狀態的行為,物件操作既與物件的狀態有關,但也可能改變物件的狀態。因此,類測試時不能孤立地測試單個操作,要將操作作為類的一部分;同時要把物件與其狀態結合起來,進行物件狀態行為的測試“類的測試內容分為:(1)基於服務的測試(測試類中的每一個服務);(2)基於狀態的測試(考察類的例項在其生命週期各個狀態下的情況);(3)基於響應狀態的測試(從類和物件的責任出發,以外界向物件傳送特定的訊息序列的方法來測試物件的各個響應狀態)。
2、類測試技術
2.1 基於服務的類測試技術
基於服務的類測試主要考察封裝在類中的一個方法對資料進行的操作,它可以採用傳統的白盒測試方法。為克服軟體測試的盲目性和侷限性,保證測試的質量,提高軟體的可靠性,下面我們介紹一種類的服務的測試模型及相應的測試策略。
BBD通常有兩種獲取途徑。一是採用逆向工程的方法根據源程式畫出流程圖,然後構造出BBD。但這畢竟是在缺少軟體開發前期的分析、設計文件或文件不齊全的情況下退而求其次的辦法。當源程式不正確時構造出來的BBD就是錯誤的。另一種途徑就是追根溯源,在軟體的分析、設計階段就根據測試的需要構造出相應的BBD。這樣就能從根本上解決問題,正確地指導類的服務的測試。
2.2 基於層次增量的類測試
層次增量測試的基本思想是:首先分別測試父類的各個成員函式,再測試成員函式間的相互作用,把測試用例和執行資訊儲存在/測試歷史中,在測試子類時,根據父類的測試歷史修改部分的定義以及實現語言的繼承對映來決定子類中的哪些特徵應當重測試以及父類的哪些測試用例可以複用。
這種根據類間繼承關係的層次特性對類進行增量測試的技術是由M.Harrold等人提出的,其特點是複用父類的測試資訊來指導子類的測試。
類中的特徵被分為6種型別:新特徵:子類中新定義的特徵;遞迴特徵:在父類中定義、未被子類重定義的繼承特徵;重定義特徵:在父類中定義、又在子類中重定義的特徵,重定義特徵在子類中遮蔽了同名(同參數列)的父類特徵;虛新特徵虛特徵是指其實現尚不完整、留待子類重定義的特徵,虛新特徵是指子類中新定義的虛特徵;虛遞迴特徵:在父類中定義的虛特徵,被子類繼承後未重定義的特徵;虛重定義特徵:在父類中定義的虛特徵,在子類中被重定義的特徵,重定義特徵在子類中遮蔽了同名(同參數列)的父類特徵。
父類中各個成員函式的測試採用傳統的單元測試技術,可以把傳統的基於規約和基於程式的測試技術相結合選擇測試集。類中每一個成員函式的測試歷史是一個三元組{mi(TSi,test),(TPi,test)},其中mi為成員函式;TSi為基於規約的測試集;TPi為基於程式的測試集;test標識該測試集是否要(重)執行。
同一類中成員函式的相互作用的測試實際上是一種整合測試,如何進行這一測試是根據類圖來確定的。在類圖中,節點表示類中的一個成員函式或資料成員,有向邊表示傳送訊息。測試資料集的選擇也可應用基於規約和基於程式的測試方法。測試歷史的形式也是一個三元組{mi(TISi,test),TIPitest},其中mi是類圖中某一子圖的根節點;TISi是基於規約的整合測試集;TIPi是基於程式的整合測試集;取表示該測試集要全部(重)執行,取表示部分(重)執行,取表示無需(重)執行。一個類的測試歷史是各成員函式測試歷史的集合和整合測試歷史集合的並集。
2.3 基於流圖的類測試技術
把傳統的基於流圖的測試技術應用於類測試提出了一種構造類流圖的框架。在類流圖中,節點表示操作,操作A和操作B之間的有向邊表示允許某引用類(client)在呼叫操作A之後呼叫操作B,確定節點間是否可以聯邊的依據是該類的規約。
傳統程式流圖的測試充分性準則可以在類流圖中找到對應,如類流圖的節點覆蓋要求測試時的操作序列應使每個操作至少執行一次,分支覆蓋要求測試時的操作序列應覆蓋類流圖中的每條邊至少一次。還可以在類流圖上給出類似於資料流的定義性出現!引用性出現、定義-引用對等概念。在類流圖中,所有物件的定義性出現和引用性出現根據操作(節點)中是否定義或引用該物件來確定,然後在謂詞性引用和控制操作。計算性引用和非控制操作之間建立對應關係,從而可以類似地給出資料流準則中的定義覆蓋準則、引用覆蓋準則和定義-引用路徑覆蓋準則等。圖4給出堆疊類(類名為Stack,T為棧元型別)的類流圖,表1給出每個操作的定義性和引用性使用情況。
基於流圖的類測試技術把傳統的基於規約的測試應用於類測試,完全依賴於類的實現,系統地而不是隨機地產生測試用例,且可全部自動化。
====================================分割線================================
最新內容請見作者的GitHub頁:http://qaseven.github.io/
相關文章
- PHP 核心技術 --物件導向PHP物件
- python-程式導向、物件導向、類Python物件
- Java物件導向——類與物件Java物件
- 看完就能掌握的PHP核心技術 - 物件導向PHP物件
- 物件導向 -- 類的組合物件
- 軟體設計師:物件導向技術物件
- JAVA物件導向--抽象類Java物件抽象
- python物件導向思想(類與物件)Python物件
- Python物件導向之十二:程式碼測試Python物件
- 物件導向的基本理論1:類和物件物件
- C++ 類(物件導向初探)C++物件
- PHP 物件導向 (十一)反射類PHP物件反射
- 物件導向之內部類物件
- PHP中物件導向的分頁類PHP物件
- 物件導向-物件導向思想物件
- java物件導向的面試題Java物件面試題
- python中物件導向_類_物件的概念與定義Python物件
- Java語言之物件導向—類與物件(上)Java物件
- PHP物件導向(OOP)—-分頁類PHP物件OOP
- PHP 物件導向 (二)類屬性PHP物件
- Python如何設計物件導向的類(下)Python物件
- Python如何設計物件導向的類(上)Python物件
- 前端面試6:物件導向前端面試物件
- Java匹馬行天下之JavaSE核心技術——物件導向Java物件
- 第十一章——物件導向技術(選做15+)物件
- 談談我對物件導向以及類與物件的理解物件
- 物件導向中類和物件的定義是什麼?物件
- JS的物件導向(理解物件,原型,原型鏈,繼承,類)JS物件原型繼承
- 物件導向 -- 類的載入順序 類和物件的名稱空間物件
- PHP 物件導向 (六)魔術方法PHP物件
- PHP 物件導向 (八)類的自動載入PHP物件
- Python進階之物件導向(類的特殊方法)Python物件
- 一、Java物件導向面試題Java物件面試題
- 2-Java面試-物件導向Java面試物件
- 課時37:類與物件:物件導向程式設計物件程式設計
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- “程序導向”和“物件導向”物件
- Python - 物件導向程式設計 - 什麼是 Python 類、類物件、例項物件Python物件程式設計