1. 程式人生 > >測試設計之狀態轉換圖

測試設計之狀態轉換圖

狀態轉換圖簡介    

基於狀態轉換的用例設計是軟體測試設計的一種傳統方法。這種方法具有以下4個特徵:

  (1)軟體測試物件的輸出和行為方式不僅受當前輸入資料的影響,同時還與軟體測試物件之前的執行情況、之前的事件或以前的輸入資料等有關。  (2)通過引入狀態圖(State Diagram)來描述軟體測試物件和軟體測試資料、物件狀態之間的關係。  (3)狀態圖中的各個狀態是通過不同的事件驅動的,如函式的呼叫。  (4)基於狀態圖開展的測試稱之為狀態轉換測試。    狀態圖轉化法最早運用於嵌入式測試用例設計。在嵌入式軟體中,系統通過某種行為驅動能夠從一種狀態改變到另一種狀態。下面的示例圖是關於記憶體的狀態轉換圖。  

狀態轉換樹

  上面的狀態轉換圖“迴圈往復”,不利於初學者理清狀態轉換關係。下面以視訊播放軟體作為案例,來給大家介紹一個比較簡單易懂的狀態轉化圖,如下圖所示。
  上圖為一個主流程為“開機”-“執行”-“停機”流程結構呈“樹狀”的狀態轉換圖,也可以稱為狀態轉換樹。       從圖中可以清晰得看出這個軟體的功能是:開啟視訊播放機,系統處於"開機"狀態,單擊【執行】鍵,系統處於"執行"狀態;單擊【停機】鍵,播放結束,系統處於停機狀態;在"執行"狀態單擊【快進】鍵,進入"快進"狀態,【快進】鍵最多可以按4次,分別為2倍數、4倍數、8倍數和16倍數前進;快進狀態單擊【停止】鍵返回"執行"狀態,停機狀態單擊【播放】鍵,重新進入"執行"狀態。

狀態轉換圖轉為狀態轉換樹的方法

複雜的狀態轉換圖不利於編寫完備的測試用例,為此,我們需要將其轉換為狀態轉移樹,然後基於狀態轉換樹去設計每個階段的測試用例。轉換的基本思路是:

  (1)狀態樹的節點描述狀態圖的狀態,狀態樹的枝幹描述狀態圖的事件。  (2)轉換樹的根節點為狀態圖的初始狀態,轉換樹的終節點為葉節點。  (3)轉換樹的每個節點,在狀態圖中如有直接後續狀態,則新增一個枝幹和節點(不同的事件應有不同的枝幹和節點),直到出現如下情況,可將此節點作為葉節點:  從根節點到新新增的節點的路徑上已經出現過相同狀態。  或者:  新新增節點是狀態圖的一個結束狀態,且不需要考慮其他狀態轉換。  來源:"Testing Software Design Modeled by Finite-State Machines", IEEE Transactions on Software engineering, vol.4, no 3, may 1978, p 178-187  狀態轉換軟體測試覆蓋率:  (1)覆蓋軟體測試物件所有的狀態;  (2)覆蓋軟體測試物件所有的事件;  (3)覆蓋軟體測試物件所有的狀態轉換至少一次;  (4)覆蓋軟體測試物件所有的狀態、事件和狀態轉換。 下面討論視訊播放軟體狀態圖是如何轉換成狀態樹的。  下圖為該軟體的0-switch轉換圖。有了這棵樹,就可以設計測試用例了。從樹的根節點到所有葉子節點就是一個測試用例,這樣就得到4個測試用例,分別為:  
  (1)開機->執行->快進->執行;  (2)開機->執行->快進->快進;  (3)開機->執行->停機->執行;  (4)開機->執行->停機。  上面這棵樹叫作0-switch展開,也就是最基本的展開法。為了得到更多的測試用例,可以把這棵樹的非結束的葉子節點再進行一次展開,也就是1-switch展開,如圖2-7所示。  這樣,可以得到7個測試用例:  (1)開機->執行->快進->執行->快進;  (2)開機->執行->快進->執行->停機;  (3)開機->執行->快進->快進->執行;  (4)開機->執行->快進->快進->快進;    (5)開機>執行->停機;  (6)開機>執行->停機->執行->停機;  (7)開機>執行->停機->執行->快進。  按照這種方法可以設計2-switch、3-switch……但是,在實際工作中,航空和醫療等特殊領域除外,一般做到1-switch就已經足夠了。

相關推薦

測試設計狀態轉換

狀態轉換圖簡介    基於狀態轉換的用例設計是軟體測試設計的一種傳統方法。這種方法具有以下4個特徵:  (1)軟體測試物件的輸出和行為方式不僅受當前輸入資料的影響,同時還與軟體測試物件之前的執行情況、之前的事件或以前的輸入資料等有關。  (2)通過引入狀態圖(State Di

TCP狀態轉換解析

new ping命令 滿足 決定 網絡 pen dns設置 所有 netstat 本文參考Unix網絡編程卷1,對TCP狀態轉換進行總結,方便掌握TCP鏈接中各個狀態及故障分析。 1.Linux下TCP相關工具   基於Linux系統查看網絡狀態,首先了解幾個基本查看指令。

TCP狀態轉換的理解

fin 2msl 建立 情況 方便 bsp 斷開連接 主動斷開 一次 怎樣去讀懂TCP的狀態轉換圖?   1.概述 我第一次看這個轉換圖的時候,看的有點蒙,雖然知道表示的是TCP連接的狀態轉換圖,但是不知道怎麽去看這個圖,怎麽去理出個頭緒

TCP狀態轉換

揮手 準備 分享 text 狀態 傳輸過程 發送 二次 出現 如下圖所示,TCP通信過程包括三個步驟:建立TCP連接通道(三次握手)、數據傳輸、斷開TCP連接通道(四次揮手)。??????????????????????????????????????這裏進一步探究TCP三

TCP狀態轉換詳解 tcp協議講解

在前面,已經介紹了TCP協議的三路握手和四次揮手。如下圖所示,TCP通訊過程包括三個步驟:建立TCP連線通道(三次握手)、資料傳輸、斷開TCP連線通道(四次揮手)。          &n

TCP狀態轉換詳解 tcp協議講解

在前面,已經介紹了TCP協議的三路握手和四次揮手。如下圖所示,TCP通訊過程包括三個步驟:建立TCP連線通道(三次握手)、資料傳輸、斷開TCP連線通道(四次揮手)。                                                

TCP協議詳解(TCP報文、三次握手、四次揮手、TIME_WAIT狀態、滑動視窗、擁塞控制、粘包問題、狀態轉換

一、TCP報文 【重要的欄位】: 序號:Seq序號,佔32位,用來標識從TCP源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記; 確認序號:Ack序號,佔32位,只有ACK標誌位為1時,確

網站設計CSS精靈

寫完這個標題後,我就後悔了,因為這個標題會讓別人誤以為我很懂網站設計似的,其實對於web開發我是個外行。沒改標題的原因是可以讓大家有“雖不懂但覺厲”的感覺。我研究web技術僅限於折騰我這個部落格,當隨便翻到某個網站的時候,看到有好的地方,就抄襲過來,我這往大了說應該屬於網路犯罪。今天無事看到某人部落格上的新浪

執行緒的狀態轉換

執行緒在一定條件下。狀態會發生變化。 執行緒變化的狀態轉換圖例如以下:   1、新建狀態(New):新建立了一個執行緒物件。   2、就緒狀態(Runnable):執行緒物件建立後,其它執行緒呼叫了該物件的start()方法。 該狀態的執行緒位於可執行執行

tcp 狀態轉換以及問題點2

這裡主要為了將問題弄清楚,後續遇到問題會不斷的增加,儘量希望能夠把問題逐步搞清楚! 第一:tcp連線為什麼需要三次握手?       在謝希仁著《計算機網路》第四版中講“三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。在另一部經典的《

程序狀態的概念及狀態轉換

一、程序狀態 1.建立狀態 程序由建立而產生。建立程序是一個非常複雜的過程,一般需要通過多個步驟才能完成:如首先由程序申請一個空白的程序控制塊(PCB),並向PCB中填寫用於控制和管理程序的資訊;然

【Unix 網路程式設計】TCP狀態轉換詳解

在前面,已經介紹了TCP協議的三路握手和四次揮手。如下圖所示,TCP通訊過程包括三個步驟:建立TCP連線通道(三次握手)、資料傳輸、斷開TCP連線通道(四次揮手)。                  

Linux程序的狀態轉換

http://blog.csdn.net/mu0206mu/article/details/7348618 ◆執行狀態(TASK_RUNNING)當程序正在被CPU執行,或已經準備就緒隨時可由排程程式執行,則稱該程序為處於執行狀態(running)。程序可以在核

使用ModelSim自動生成狀態機FSM的狀態轉換

HDL程式碼設計中重要的內容之一就是設計程式的狀態機FSM,狀態轉換控制著整個程式的流程,為了理解程式,我們經常需要把狀態機的狀態轉換圖畫出來,這樣看起來很直觀,但是,有沒有辦法自動生成狀態轉換圖呢? 在ISE或者ModelSim中有沒有這樣的工具呢? 答案是肯定的,Mod

TCP連線關閉狀態轉換

主要部分,四次握手: 斷開連線其實從我的角度看不區分客戶端和伺服器端,任何一方都可以呼叫close(or closesocket)之類 的函式開始主動終止一個連線。這裡先暫時說正常情況。當呼叫close函式斷開一個連線時,主動斷開的 一方傳送FIN(finish報文

軟考 DFA的狀態轉換+正規式

1. [解析] 至少要有一個.或E,所以在BCD中。 然後不含+,所以在CD中。 然後觀察5出去的兩條邊(對應於.後的字元),如果是數字的話,就不能出現E了,所以選C。 具體來說 0是入口,6是

線程的生命周期和線程的狀態轉換

不可 創建 例如 上進 notify alt lee 我們 當前 一、線程的生命周期   1、線程的5種狀態:新建(New),就緒(Runnable),運行(Running),阻塞(Blocked),死亡(Dead)   2、線程的生命周期圖解:(參考傳智播客劉意201

[編譯原理-詞法分析(二)] 使用狀態轉換識別詞法單元

前言 一個小Demo, 用於分析的原始檔比較簡單, 主要的部分都有, 擴充套件比較容易. 將正則表示式表示的模式構造為狀態轉換圖.

Java設計模式從[遊戲中的兵種狀態轉換]分析狀態(State)模式

  假設我們正在做一個即時戰略遊戲,我們設計一個兵種,他在剛剛生產出來的時候是步兵,但是他可以切換武器,第一次切換會變成弓箭手,第二次切換會變成舉著盾牌的裝甲兵,第三次切換則又變成了步兵……如何實現這個切換的機制?我們一開始會想到,在步兵這個類中加入switch語句,然而這

設計模式狀態模式

分支語句 控制 查看 cti get 裏的 抽象類 href 其它 設計模式之狀態模式 May 22, 2015 狀態模式(State)允許一個對象在其內部狀態改變的時候改變它的行為,對象看起來似乎修改了它的類。 正文 舉個例子,就比如我們平時在下載東西,通常就會有好幾個