目前,面向對象軟件的測試用例的設計方法,還處于研究、發展階段。與傳統軟件測試(測試用例的設計由軟件的輸入?處理?輸出視圖或單個模塊的算法細節驅動)不同,面向對象測試關注于設計適當的操作序列以檢查類的狀態。
12.4.1 測試類的方法
前面已經講過,軟件測試從“小型測試”開始,逐步過渡到“大型測試”。對面向對象的軟件來說,小型測試著重測試單個類和類中封裝的方法。測試單個類的方法主要有隨機測試、劃分測試和基于故障的測試等3種。
1. 隨機測試
下面通過銀行應用系統的例子,簡要地說明這種測試方法。該系統的account(賬戶)類有下列操作: open(打開),setup(建立),deposit(存款),withdraw(取款),balance(余額),summarize(清單),creditLimit(透支限額)和close(關閉)。上列每個操作都可以應用于account類的實例,但是,該系統的性質也對操作的應用施加了一些限制,例如,必須在應用其他操作之前先打開賬戶,在完成了全部操作之后才能關閉賬戶。即使有這些限制,可做的操作也有許多種排列方法。一個 account類實例的最小行為歷史包括下列操作:
open·setup·deposit·withdraw·close |
這就是對account類的最小測試序列。但是,在下面的序列中可能發生許多其他行為:
open·setup·deposit·[deposit|withdraw|balance|summarize|creditLimit]n·withdraw·close |
從上列序列可以隨機地產生一系列不同的操作序列,例如:
測試用例#r1:open·setup·deposit·deposit·balance·summarize·withdraw·close
測試用例#r2:open·setup·deposit·withdraw·deposit·balance·creditLimit·withdraw·close
執行上述這些及另外一些隨機產生的測試用例,可以測試類實例的不同生存歷史。
2. 劃分測試
與測試傳統軟件時采用等價劃分方法類似,采用劃分測試(partition testing)方法可以減少測試類時所需要的測試用例的數量。首先,把輸入和輸出分類,然后設計測試用例以測試劃分出的每個類別。下面介紹劃分類別的方法。
(1) 基于狀態的劃分
這種方法根據類操作改變類狀態的能力來劃分類操作。再一次考慮account類,狀態操作包括deposit和withdraw,而非狀態操作有balance, summarize和creditLimit。設計測試用例,以分別測試改變狀態的操作和不改變狀態的操作。例如,用這種方法可以設計出如下的測試用例:
測試用例#p1:open·setup·deposit·deposit·withdraw·withdraw·close
測試用例#p2:open·setup·deposit·summarize·creditLimit·withdraw·close
測試用例#P1改變狀態,而測試用例#P2測試不改變狀態的操作(在最小測試序列中的操作除外)。
(2) 基于屬性的劃分
這種方法根據類操作使用的屬性來劃分類操作。對于account類來說,可以使用屬性balance來定義劃分,從而把操作劃分成3個類別:
. 使用balance的操作;
. 修改balance的操作;
. 不使用也不修改balance的操作。
然后,為每個類別設計測試序列。
(3) 基于功能的劃分
這種方法根據類操作所完成的功能來劃分類操作。例如,可以把account類中的操作分類為初始化操作(open,setup),計算操作(deposit, withdraw),查詢操作(balance, summarize,creditLimit)和終止操作(close)。然后為每個類別設計測試序列。
3. 基于故障的測試
基于故障的測試(fault based testing)與傳統的錯誤推測法類似,也是首先推測軟件中可能有的錯誤,然后設計出最可能發現這些錯誤的測試用例。例如,軟件工程師經常在問題的邊界處犯錯誤,因此,在測試SQRT(計算平方根)操作(該操作在輸入為負數時返回出錯信息)時,應該著重檢查邊界情況: 一個接近零的負數和零本身。其中“零本身”用于檢查程序員是否犯了如下錯誤:
原文轉自:http://www.uml.org.cn/Test/201501295.asp