知識回顧數組
軟件測試中的錯誤主要分爲三種:Failure, Error 和 Fault。
測試
下面就分析一下它們的不一樣:
ui
Failure的定義:當一個系統不能執行所要求的功能時,即爲Failure,可譯爲「失效」。(Termination of the ability of an element or an item to perform a function as required.)spa
舉例:指針
病人告訴醫生本身的各類症狀,身體沒有健康地工做 – Failures code
醫生想找出疾病的根源,如病毒 – Fault
orm
病人身體狀態異常,好比血壓較高,心跳不規律等 – Errors
blog
實例(HOMEWORK2)遞歸
程序1:ci
1 public int findLast (int[] x, int y) 2 { //Effects: If x==null throw
3 NullPointerException 4 // else return the index of the last element 5 // in x that equals y. 6 // If no such element exists, return -1
7 for (int i=x.length-1; i > 0; i--) 8 { 9 if (x[i] == y) 10 { 11 return i; 12 } 13 } 14 return -1; 15 } 16 // test: x=[2, 3, 5]; y = 2 17 // Expected = 0
Solution:
1.Fault: 循環條件沒設置好,i > 0會致使循環沒法進行到數組第一項,應該改爲 i >= 0。
2.數組x爲空時,會拋出空指針錯誤,循環沒法執行,也不會執行上面敘述的Fault。
3.只要知足數組x[0]不是與y相等的惟一的元素便可避免Error,好比測試用例 x = [1, 2, 3, 4, 5, 6], y = 2, 這樣獲得返回結果 Expected = 1, 結果是正確的。
4.當數組只有一個元素的時候,因爲循環沒法訪問第一個元素(x[0]),因此循環沒法進行,永遠返回-1,致使Error。此時Failure產生未知, 若是這惟一的元素與y不相等,則Failure也不會產生。測試用例 x = [1], y = 2,此時 返回-1,只有Error,無Failure。
程序2
1 public static int lastZero (int[] x) { 2 // Effects: if x==null throw NullPointerException 3 // else return the index of the LAST 0 in x. 4 // Return -1 if 0 does not occur in x
5 for (int i = 0; i < x.length; i++) 6 { 7 if (x[i] == 0) 8 { 9 return i; 10 } 11 } 12 return -1; 13 } 14 // test: x=[0, 1, 0] 15 // Expected = 2
Solution:
1.Fault: 循環錯誤,從前日後遍歷,遇到第一個0便返回其下標,循環應改成for (int i=x.length-1; i >= 0; i--)。
2.因爲該程序從前日後遍歷,循環至少執行一次,因此總會執行該Fault。
3.循環若是沒法執行便不會致使Error,即數組爲空。另外若數組只有一個元素,這樣不論如何遍歷結果也相同,也不會引起Error。
4.當數組有一個以上元素且只有一個元素爲0時,此時循環返回的是第一個等於0的元素的下標,致使Error。可是因爲只有一個元素等於0, 因此同時這也是最後一個等於0的元素的下標,則Failure不會產生。測試用例 x =
[1,0,1],Expected=1,此時只有Error,無Failure。