2008年12月18日 星期四

S18 Review──問題來自過於相信自己

之前支援的專案在十一月下旬出了嚴重問題:執行交易後會保持交易執行中的狀態,無法恢復為等待執行。一開始沒有頭緒,花了很多時間後確認是UI被卡住,又再花了很多時間才知道是自己之前寫的一個API裡發生了無法離開的while迴圈。

那個API原來的用途是找出輸入元件前或後的下一個可輸入元件,尋找的流程是遇到下一個可輸入元件就傳回。設計之初認為再怎麼樣循環找回到自己一定會有結束,經過幾個月來的使用也沒有問題,卻沒想到在特別的操作狀況下會有欄位全部變成不能輸入的狀況,因此造成跑不出來的無窮迴圈,加上在AWT Event執行緒呼叫而使得其後排隊的UI動作全部不會運作。

檢討的最後客戶詢問我們:系統陸續出現這麼多問題的根本原因是什麼?我依據這次問題的經驗回答道:是因為對自己設計的執行流程過於自信。根據提出需求規格的人撰寫對應的方法時,依分解動作堆疊的同時心裡在意的是完成功能,相對於例外的處理則以自己的思維加以管控;然而例外的形成組合種類卻不是一時間可以完整條列的,因而寫出的程式邏輯間就形成潛在的漏洞。

程式能不能完成功能只是找出一條可以走到目的地的路,但是如何在動作的順序間條列出所有可能造成例外的情況,卻得一步一步審慎思考才有機會列舉更多。一個人思考或許列出95%以上,但是只要出現沒想到的狀況,整個系統就可能爆發出嚴重的問題,因此至少需要再有其他人的Review來儘可能協助補齊邏輯上的漏洞。其重要性比起找出程式更理想的寫法真的是大多了。

為人處世時亦是如此,光憑自己的直覺反應可能會太過衝動、粗心或鑽牛角尖,縱使三思過後也可能因為個人特性依然存在著盲點。在重大決定前與親朋好友稍作討論,取聽其他人的不同意見加以綜合應能找出一條更好的路。這幾年在想不透的人生問題上有這樣的朋友可以聽取我的疑問,提供我適切的回答,雖然說最後還是要自己想通才會有改變,但是有其他人幫忙檢視總是提供了更全面的資訊。

沒有留言:

張貼留言