1. 程式人生 > >《MFQ&PPDCS》實踐--Modeling---S-state在ARP協議測試中的應用

《MFQ&PPDCS》實踐--Modeling---S-state在ARP協議測試中的應用

一.實踐思路:

ARP是TCP/IP協議棧中最經典和基礎的協議之一,它是一個有狀態的協議。搞清楚ARP協議在實現的上下文,以協議的狀態為分析視角是對ARP協議測試設計的一個不錯的思路。當然同一個被測物件可以採用多種不同的設計對其進行測試分析和設計,這裡沒有絕對和最優的最優的答案。

二.實踐過程:

2.1走讀程式碼瞭解ARP協議在產品實現中所處的上下文環境:

Arp協議在產品實現中所處的上下文環境(整體架構,子系統、模組之間的協作關係等)
……略(此處不便展開具體介紹)

2.2 梳理ARP協議狀態機:

ARP協議在產品實現中定義了五種協議狀態:ARP_CLEAR、ARPF_WAITING、ARPF_INUSE、ARPF_ALWAYS_USE及ARPF_NOQUEUE。其中ARPF_NOQUEUE狀態在目前的實現中基本上沒有使用,為了便於理解,我自行定義了NULL這個狀態。那麼協議狀態機如下圖所示:
這裡寫圖片描述


經過程式碼的學習和走讀,得到如下的協議轉換關係:

  • NULL(ARP例項未建立狀態)狀態的遷移:

1) NULL->NULL狀態保持:
a) 收到並非請求本段IP地址的Arp Request。
b) 收到請求本段IP地址的Arp Request,但Sender處於非相同子網。
c) 收到target並非本端IP的Arp Reply
d) 收到target為本端IP的Arp Reply,但Sender處於非相同子網。

2) NULL->ARPF_ALWAYS_USE:
增加IP地址配置,為IP地址建立持久的ARP條目。

  • ARPF_CLEAR(暫態):

1) ARPF_CLEAR->NULL
當學習新ARP條目時,狀態為ARPF_CLEAR的ARP條目當呼叫arp_find_free介面進行ARP例項分配時會被新的ARP例項所替換,此時老的ARP例項相當於狀態就不存在了,即為NULL。

2) ARPF_CLEAR->ARPF_INUSE
對於被動接收ARP Request或ARP Reply 進行學習NULL->ARPF_CLEAR的ARP條目,狀態直接轉換到ARPF_INUSE。後續通過ARP Ageing Time老化時間對其進行維護。ARPF_CLEAR只作為暫態。

3) ARPF_CLEAR -> ARPF_WAITING
在報文主動傳送時會發送Arp Request 嘗試進行解析,報文開始傳送時狀態轉換為為ARPF_WAITING。

  • ARPF_WAITING 狀態的遷移

1) ARPF_WAITING -> ARPF_WAITING
在報文主動傳送時會發送Arp Request 嘗試進行解析,在等待迴應和4次重傳期間狀態會保持在ARPF_WAITING。

2) ARPF_WAITING-> ARPF_CLEAR
在報文主動傳送時會發送Arp Request 嘗試進行解析,在等待迴應和4次重傳依然請求失敗,狀態會回退到ARPF_CLEAR。

3) ARPF_WAITING->ARPF_INUSE
在報文主動傳送時會發送Arp Request 嘗試進行解析,在等待迴應和4次重傳期間收到對應的Arp Reply狀態置為ARPF_INUSE。

  • ARPF_INUSE

1) ARPF_INUSE-> ARPF_INUSE
在ARP Ageing Time週期內正常收到匹配Arp條目的報文。ARPF條目保持ARPF_INUSE

2) ARPF_INUSE -> ARPF_WAITING
超過ARP Ageing Time還未收到匹配ARP條目的報文。 即ARP老化狀態回退為ARPF_WAITING。

  • ARPF_ALWAYS_USE 狀態的遷移

1) ARPF_ALWAYS_USE-> ARPF_ALWAYS_USE狀態保持
IP配置未被刪除時對應的靜態ARP條目時鐘保持,不受ageing time的影響。

2) ARPF_ALWAYS_USE->ARPF_CLEAR
刪除IP地址,同時會將對應的ARP條目狀態置為ARPF_CLEAR。

2.3協議相關的其他:

學習其他ARP相關的實現要素,如:
ARP的定時器超時處理流程;IPv4通用收發包流程;ARP收發流程;ARP相關資料結構。此處不便不展開細緻介紹。

2.4 ARP FT測試建模:

2.4.1測試模型的選擇:

MFQ測試設計在TD階段定義了5PPDCS種常用的測試模型: P-Process(流程)、P-Parameter(引數)、D-Data(資料)、C-combination (組合)、S-State(狀態)。其中S-State是一種基於被測狀態來建模的方法,對有“狀態”的被測物件十分有效。根據被測物件的狀態遷移條件進行覆蓋。在測試狀態遷移邏輯的同時也會測試到被測物件的功能。
ARP是有狀態的協議,S-State模型進行測試建模有著天然的優勢,故本次實踐採用S-State的模型進行建模。

2.4.2 S-State測試建模:

首先,我們給上一章給出的ARP狀態遷移圖中的每個狀態和遷移事件進行編號,得到新的狀態圖,這個新的狀態圖也是測試模型的一部分,如下所示:
這裡寫圖片描述

通過上面的狀態遷移圖,我們又可以梳理出如下的狀態遷移表:
這裡寫圖片描述
上述的狀態圖和狀態表即是S-State的測試設計模型,它和設計模型應該是高度一致的。從ARP功能測試的角度來說,對於狀態遷移表中的每一個Events的覆蓋就是基於狀態機測試應該覆蓋的基礎用例。但是我們需要明確,任意一種模型只能從一個維度去覆蓋,不要寄希望於採用了某一種模型就能達到無遺漏覆蓋的目的。在基於Events覆蓋的基礎上可以再新增一些其他型別的測試,比如狀態連續遷移的測試。