單元測試應該測試什麼?——
right-bicep
right——
結果是否正確?
b——是否所有的邊界條件都是正確的
?i——
能查一下反響關聯嗎?
c——能用其它手段交叉檢查一下嗎
?e——
你是否可以強制錯誤條件發生?
p——是否滿足效能要求?
結果是否正確
這個最簡單不過了,就是看程式執行之後的結構和文件是否一致。當然可能很多的時候乙個方法沒有很完整的文件描述它,那至少也應該有簡單的文字描述,否則沒有判斷是否正確的依據了。乙個原則是:對於驗證被測方法是否正確的這件事情,如果某些做法能夠使它變得更加容易,那麼就採納它吧。
邊界條件
correct
很多臭蟲都會集中在邊界附近,所以應該多注意。
一致性(conformance)——
值是否符合預期的格式?
很多時候,傳遞給方法的值或者方法執行後產生的值必須符合某種特定的格式。必須考慮的是,如果資料不能像期望的那樣符合格式要求,將會出現什麼情況。
有序性
(ordering)——
一組值是該有序的,還是該無序的?
應該考慮資料順序,或者是在乙個很大的資料集合中某一資料的位置。
區間性
(range)——
值是否在乙個合理的最大值和最小值的範圍之內?
對於乙個變數,它所屬型別的取值範圍可能比需要的或想要的更加寬廣。比如,人的年齡、角度等。
引用、耦合性
(reference)——
**是否引用了一些不受**本身直接控制的外部因素?
如果對於類的狀態、其它物件的狀態,或者全域性應用程式的狀態,需要作一些假設,那麼就需要對**進行測試,保證其在假設未滿足的情況下執行良好。前置條件和後置條件都必須檢測。
前置條件(
preconditions
):系統必須處於什麼狀態下,該方法才能執行。當前置條件不能滿足的情況下程式是否能夠正確執行。
後置條件(
postconditions
):方法執行之後將會有哪些狀態發生。程式的返回結構必須檢查,伴隨產生的***也必須檢查。
存在性(existence)——
值是否存在(要小心
null、0
、「」、有時可能還需要注意空格字串)?
存在性的問題很容易出現在方法的引數上,也經常出現在方法要用到的類的屬性上。特別是引用型別,要特別注意。當遇到
null
等值時,採取什麼策略需要及早考慮。應該形成一貫的處理策略,形成風格。可以考慮丟擲異常,並且
message
描述問題應盡量細緻明確。
基數性
(cardinality)——
是否恰好有足夠的值?
對基數性問題的認識我目前還不是很透徹。
時間性,絕對的或者相當的
(time)——
所有事情是否都是按順序發生的?是否在正確的時間?是否及時?
測試邊界是最有價值的工作,因為
bug通常會集中在這裡。邊界測試需要考慮的主要問題:
完全偽造或者不一致的輸入資料。
格式錯誤的資料。
空值或者不完整的值,如0,
0.0, 「」,
null
之類的。
一些與意料中的合理值相去甚遠的數值。
如果是傳入一系列資料,要考慮是否允許重複,考慮值是否應該有特定順序,順序是否可能有錯誤等。
檢查反向關聯
對於一些方法,我們可以使用反向的邏輯關係來驗證它們。要注意的是,當你同時編寫了原方法和它的方向測試時,一些
bug可能會被在兩個函式中都出現的錯誤所掩蓋。在可能的情況下,應該使用不同的原理來編寫反向測試。
使用其他手段來實現交叉檢查
通常解決乙個問題會有多種手段,如果你選擇了其中乙個方法,那麼就可以用其它的方法來檢驗它。另一種方法就是:使用類本身不同組成部分的資料,並且確信它們能「合起來」。
強制產生錯誤條件
應當能夠通過強制引發錯誤,來測試你的**是如何處理所有這些真實世界中的問題的。
下面是一些我們能想到的環境方面的因素:
記憶體耗光
磁碟用滿
時鐘出問題
網路不可用或者有問題
系統過載
受限的調色盤
顯示解析度過高或者過低
效能特性
乙個檢查起來會很有益處的部分是效能特性,而不是效能本身。
單元測試應該測試什麼? Right BICEP
單元測試應該測試什麼?right bicep right 結果是否正確?b 是否所有的邊界條件都是正確的?i 能查一下反響關聯嗎?c 能用其它手段交叉檢查一下嗎?e 你是否可以強制錯誤條件發生?p 是否滿足效能要求?結果是否正確 這 個最簡單不過了,就是看程式執行之後的結構和文件是否一致。當然可能很...
單元測試應該測什麼
單元測試應該全面覆蓋專案開發的 但是依賴的第三方 不應該被測試。凡是非本專案開發的 都可以認為是第三方 比如,我們專案依賴別的部門提供的儲存服務,連線此服務需要使用他們提供的乙個指令碼,而這個指令碼存放在我們的util目錄中。像這個指令碼,就是所謂的第三方 我用下面這段話來說服領導將這個指令碼從測試...
單元測試我們應該注意什麼!
今天老師在軟體工程中講了單元 測試這一環節,首先給我們乙個小函式,要我們分析它怎麼樣,如下 int largest int list,int length return max 針對這個函式我覺得有幾點可以說的。1.輸入陣列數值範圍影響程式正常執行。如輸入 1,2,3 1,2,3 0 1 2 257...