「…軟體作者僅能使用閒暇時間撰寫, 所以不能提供完整支援, 也不保證一定沒有Bug, 如因使用或不能使用本軟體所發生之其他損害,包括營業利益之損失或是造成你上廁所時跌進馬桶等意外,必須由使用者自行負責所有後果…」。
看看這個免責宣告是不是很眼熟,你幾乎可以在所有軟體的說明中找到類似字句,很顯然的軟體設計師似乎都不敢保証自己寫出來的程式是完全沒有錯誤的,零Bug的程式是所有軟體開發人員所追求的不可能達成的目標,這聽起來實在不妙但現實如此,千慮一失的情況總是在你我左右,為什麼會這樣呢?

傑森最近開始學 C# 程式設計,他寫了一隻用來計算除法的程式,這東西真是非常酷,只要在方格填上數字再按個按鈕就可以算出數字相除的結果,傑森對他的成品感到很滿意,這可是他絞盡腦汁通宵達旦的曠世鉅作,他的程式碼像是這樣。
這麼簡單的程式應該不會有Bug在裏面了吧,真的嗎?就我所知這個除法計算機至少有兩個顯而易見的錯誤,首先,如果沒有在方格裏填上任何東西或是填入的不是正常的數字就會出現「輸入字串格式不正確」的錯誤,第二如果在分母的地方輸入 0 就會產生除以 0 的錯誤,傑森不死心又再度修改他的程式,這次他會在做除法計算前小心的檢查文字方塊是否有正確的填上數字,並且分母不能為 0 ,修改後的程式變成這樣。
「程式碼看起來比原來的複雜得多,不過所有的錯誤都解決了。」傑森嘴裏唸著。
但是他還沒發現其實如果輸入的數子大過 2,147,483,647 就會出現 OverflowException 的錯誤。
就是這樣,總是會有你想不到的臭蟲藏在程式碼的深處,你永遠也別想寫出一個完美的程式,當完成一個系統時你總是會很心虛的跟你的老闆說「嗯,應該是完成了」,但是對程式的品質可沒有多大的信心,面對這種情況我倒是有一個小技巧可以改善,方法很簡單,那就是盡可能的去發現所有錯誤,你可以請一個測試人員專門做這種找碴的事,也可以在系統當掉之前記錄一筆 LOG,一般而言如果是兩、三個月內完成的小案子至少要找出一千個錯誤,因為能找到的錯誤越多代表還存在的錯誤越少,如果你能修正這一千個錯誤那麼剩下的也應該會是非常難發生的錯誤,我當然不是說所有剛寫出來的程式就一定會有一千個錯誤,但是如果能在初期發現的錯誤越多將來程式的品質越經得起考驗,所以如果一開始你的測試人員回報給你超大量的錯誤清單,你應該要感到高興才對,相反的如果測試人員跟你說他發現有二十個錯誤需要修改,那麼你最好請他再從頭徹底的測試一遍,要找出淺藏的錯誤當然有技巧,只要是數值你就要去測試極大值跟極小值會不會有問題,如果是有小數點的數值你就要注意各種情況下的進位,字串就要小心處理編碼跟字串長度及空字串,然後最好要求測試人員用各種不可思議的方式去操作程式。
原則就是發現的錯試越多你的程式碼將會更穩固,不過我想先提醒你並不是所有的問題都值得花時間去修正,那又是另一個故事了,也許我會在下一次跟你聊聊這方面主題。