首頁>技術>

說到邊界值測試用例設計,很多初學者可能都在這個上面摔過跟頭。因為測試產品的邊界值,聽起來似乎非常容易,但真當做起來,卻沒那麼容易。因為,初學者往往容易發現:但凡自己能想到的值,拿去做測試時,都是對的(被覆蓋的),根本找不到bug。

那麼,問題出在哪裡呢?筆者以為,這主要是初學者所認知的值域有限,很難找到特殊值造成的。下面,我們就根據邊界值測試的重點和難點,來為大家介紹在設計邊界值測試用例時,應該注意哪些問題。

1、邊界值測試的難點

關於邊界值測試核心內容(或者說是難點),筆者以為,我們主要需要注意以下4點:

1)如何選擇輸入域或輸出域,以便順利推進後續的邊界值測試用例設計;

2)如何確定輸入域或輸出域的邊界,以便確保所有測試物件的邊界值都被覆蓋到;

3)如何確定輸入域或輸出域邊界附近的鄰域範圍,以便我們及時發現邊界潛在的問題;

4)如何根據被測物件的邊界及其鄰域,去設計更為合理和嚴謹的測試用例。

2、如何確定輸入域?

一般情況下,原始輸入域通常是由多個輸入條件共同構成的,並具有一定實際意義。我們也稱之為整體輸入域。整體輸入域的邊界通常很清晰,我們很容易去展開測試。這時,你可能想問:既然如此,確定輸入域不是非常簡單嗎?

還真並非如此。輸入域之所以不好確定,是邊界點太少,難以覆蓋所有隱含邊界情況造成的。尤其是當各個輸入條件之間,存在較為複雜的約束關係時,此時的輸入域將更難確定。

因此,在確定輸入域時,我們可將整體輸入域拆分成由各個輸入條件,分別構成的單個輸入域,從而找出這些輸入域的集合(以下稱,個體輸入域)。

3、如何確定邊界值?

透過上述描述,我們基本能找出所有個體輸入域來。那麼,我們如何透過這些個體輸入域,從而確定他們的邊界呢?下面我們一起來看看。

對於某個輸入條件而言,確定邊界可參照如下原則:

1)若輸入條件規定了取值範圍,則以該範圍作為邊界;

2)若輸入條件規定了值的個數,則以值的個數為邊界;

3)若輸入域是有序集合(如有序表、順序檔案等),則選取集合中特定次序的資料作為邊界,如第一個或最後一個數據等。

在實際工作中,當我們針對某個輸入條件,去確定邊界點時,我們可以這樣去思考:

1)首先,我們可以在需求描述中,尋找最大極限邊界。比如:最低XX,最高XX;最多XX,最少XX;等等。像這類凡是可用數值來描述的,無論在SRS中是否明確指出其邊界,其極限邊界條件已經是固定的了。所以,你可以根據其變數的特點,找到對應的取值範圍。比如,C++中int型變數的取值範圍是:−32768~32767,當SRS中未明確規定輸入條件的邊界時,該取值範圍就是其極限邊界。

2)其次,我們還可以在需求描述中,尋找其他較為明顯的邊界。這些邊界點的特徵比較明確,主要是:當在該點附近一個極小的鄰域內分別取小於、等於和大於該點的3個值時,被測物件對這些值的處理方式不完全相同,則該點就是導致被測物件的輸出發生本質變化的邊界點。

簡單點說,就是在輸入某個條件的邊界時,不僅包含最小值點和最大值點,還可能存在其他非極值性質的邊界點。這個問題,我們要留意一下。

3)另外,我們還需要關注軟體內部的邊界點,或者說是次邊界條件或內部邊界條件。比如,2的乘方、ASCII字元表等。值得注意的是,測試新手(或者終端的客戶)是很難發現這些邊界問題的。但如果因為我們是新手,找不到問題就認為沒有問題,這就是“埋下隱患”的開始。當然,這也激勵著我們努力學習專業知識,努力成長為專業測測試達人。

總之,邊界點的確認,既可以針對整體輸入域進行,也可透過個體輸入域來尋找。兩種方法是都可行的。但這些都需要遵循一個原則——獨立性假設原則。即當針對某個輸入條件確定邊界點時,不考慮其他輸入條件可能對該輸入條件所產生的任何影響。這樣,我們的邊界值將覆蓋的更為全面。

4、如何設定邊界點附近的鄰域?

我們都知道,一般情況下,邊界點及其附近,都可能存在bug。因此,在測試時,我們需要在邊界點附近確定大小為1的領域,並應基於所有邊界點及其鄰域來設計測試用例。(注:這裡的“1”是指1個單位長度,並非數字意義上的“1”。鄰域應根據測試分析的結果,靈活設定。)

5、如何設計測試用例?

透過上述4條,相信大家都知道如何去尋找測試物件的邊界值了。當我們找出所有的邊界點集合及其鄰域後,我們只需要在這些邊界和鄰域中,選擇適當規模的資料進行測試即可。

那麼,我們應該如何選擇測試資料、如何選擇邊界組合方式,來保證測試用例的質量呢?下面,我們來給大家介紹一下。

1)測試資料的選擇

主要包括兩種方法。一個是窮舉法,一個是典型值法。相信大家根據名字也不難理解其中的意思。這裡就不贅述了,想了解的小夥伴可自行詢問度娘。

2)邊界組合方式的選擇

主要包括3種方式:強邊界法、弱邊界法和全邊界法。其中,

強邊界法要求每個測試用例都對應多個輸入條件,同時取邊界測試資料;

弱邊界法則是基於單缺陷假設提出來的,即被測物件只要在某個輸入條件的某個邊界出錯,則在任何包含該輸入條件的某個邊界的情況下一定會出錯,那麼測試時僅覆蓋輸入條件的單個邊界點即可,無需測試多個輸入條件同時取邊界測試資料的情況;

全邊界法是將所有邊界組合情況全部納入測試內容,即強邊界+弱邊界。優勢在於可測試到所有邊界,但由此可能會導致的巨大測試量。

6、如何設計測試方案?

最後,我們來說說如何設計測試方案。

假設有兩個輸入條件x、y,每個輸入條件僅有2個邊界點,分別是xmin、xmax和ymin、ymax,且滿足xmin<xmax和ymin<ymax,若這些邊界點對應的鄰域均為a,其中a為整數,且a≥1。

基於以上思想,透過選擇不同的測試資料,採用不同規模的邊界組合方式,我們可得出不同的測試方案。

(本期思考題,我們將在下期為大家揭曉答案。)

28
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JavaScript字串 - 概念