6)從硬件問題中恢復
程序應該適度地處理硬件故障。如果磁盤或其目錄已滿,你應該能夠放入一張新的磁盤,而不只是關閉了你所有的數據。如果一個設備很長時間還沒有準備好接收輸入,你就沒有應該假定它已經斷線或斷開連接而進行處理。程序決不能夠讓我們永遠在那里坐等。
7)不能從遺失磁盤中退出
假定你的程序要求你插入一張具有它需要的文件的磁盤,如果插入的磁盤不正確,它會再次提醒你,直到插入了正確的磁盤為止。然而,如果沒有正確的磁盤,你就沒有任何辦法可以退出,除非你重啟系統。不,這種做法是極端蠻橫的,決不能允許出現這樣的問題。
4、邊界相關的錯誤
一個邊界描述了程序的一個改變點,假定程序在邊界的一邊以某種方式做所有事,而在邊界的另一邊,它以不同的方式完成所有事。
邊界相對立的兩邊的典型“東西”就是數據值。存在三種標準邊界缺陷:
邊界情況的處理不當
如果一個程序把任何小于100的兩個數相加,不接收任何大于100的數,那么當你恰恰輸入100時它會做何反應?它又該怎么做?
錯誤邊界
規格說明表示,程序應該把任意兩個小于100的數相加,同時不接收大于95的數。
邊界外情況的錯誤處理
邊界某一邊的值是不可能,不可信,不能接收,或是預料之外的,沒有為其編寫任何處理代碼。程序是否成功拒絕了大于100的值?或者是否當它獲取了一個大于100的值時就會崩潰?
我們把邊界的概念看得更廣泛,邊界描述了考慮一個程序以及它在其極限周圍得行為得方式。存在很多種的極限:最大,最小,最新,最舊,最近,第一個等等。相同類型的缺陷可以伴隨其中任何一種極限而產生,我們可以用相同或類似的觀點考慮它們。
不同邊界錯誤的考慮方式
不同類型的邊界,其考慮方式也是不同的,但是其思想基本上都相近:無外乎上溢出與下溢出。
1)數值邊界
有些數值邊界是任意的,如大于100;而有些則要描述自然極限,如三角形的特征和子母的ASCII碼等。
2)與一個邊界相等
在一個列表中的所有元素可能相同,也可能不同。如果你試著對任一列表進行排序,會發生什么?如果列表由數字組成,當你嘗試計算平均值,標準偏差,對稱系數時又會發生什么?(以上是概要統計概念,按算法,對稱系數可能會計算為0或引起被0除的錯誤。)
3)多種多樣的邊界
一個輸入串可以長達80個字符么?如果你輸入79、80或81個字符會如何?程序是否在每種情況下都接收你的輸入?一個列表可以只是一個元素么?沒有元素可以么?僅含一個數值的標準偏差又是什么呢?
4)空間中的邊界
例如,如果一個繪圖程序繪制了一個圖形,并在其周圍繪制了一個方框,那么該如何處理一個應當在方框外正確顯示的點?
5)時間的邊界
假定程序顯示了一個提示,停留60秒等待你回應。然后,如果你沒有輸入內容就顯示菜單,如果正當它開始顯示菜單時,你開始輸入內容,會發生什么?
假定你在計算機仍然在從磁盤中裝入程序時按下空格鍵,發生了什么事?空格鍵是被發送給操作系統,為正在裝載的程序進行了保存,還是僅僅因為預料之外而導致計算機崩潰?
6)硬件相關邊界
如果一臺主機可以連接100臺終端,那么當你加入99,100,101臺時會發生什么?如果你讓100臺終端同時登陸會怎樣?
如果磁盤已經塞滿了會如何?如果一個目錄能保存1000個文件,當你嘗試保存第999、1000、1001個的時候會發生什么?如果打印機有較大的輸入緩沖區,當你的數據填滿緩沖區,但是卻還沒有更多數據要傳遞時,會發生什么?當打印機缺紙或顏料用完了又會發生什么?
5、計算錯誤
程序計算一個數據得到了一個錯誤的結果。發生計算錯誤通常因為下面三種類型的原因:
很差的邏輯:
可能存在一個錄入錯誤,開發人員可能會在編制程序時無意中錯誤簡化了復雜關系地表達式,或者由于拼寫錯誤或筆誤導致。另外一種糟糕的情況則是設計錯誤,開發人員關于代碼如何做的概念可能一開始就錯了。
很差的算法:
如果1+1=1,可以理解為一種特殊邏輯,但是如果把它作為數值運算,恐怕是沒有人會同意的。無論何時,一個錯誤的算法總不會得出正確的結果。
原文轉自:http://www.uml.org.cn/Test/200711195.asp