程式師心中永遠的痛 -- 「除錯(Debug)」...以及除錯的科學步驟
我相信每個寫過程式的人,都會在程式跑出錯誤結果時,為了找出原因而搔白了頭髮吧?那是因為錯誤(Bug)的發生原因,常常並不單純。導致要除錯的人,為了要猜出迷霧後頭的真相,而發狂到想去掄牆。今天我發現一篇很棒的文章,很詳細地說出「除錯為什麼困難」,以及「除錯的科學步驟」。雖說除錯方法沒有一套 SOP (標準流程,Standard of Procedures)可以遵循,不過作者的確已經以最淺顯的語句,嘗試表達出除錯的標準流程了。
除錯會困難的原因不外乎下列幾點:
* 發生錯誤的平台在客戶端,無法取得或無法 100% 在現地複製
* 要重現錯誤(以便找出原因)的代價太高。如:需跑 3 個月才會當機,只有跑在百萬元等級的設備才會出錯...
* 無法取得足以當成線索的輸出。如:死當,沒有任何錯誤訊息...等。
* 錯誤由多重原因交織造成。很難猜出是哪些原因、以何種順序執行才會造成。
* 錯誤每次發生的症狀並不一致。很難藉由這些毫無章法的錯誤,找出元兇。
* 事實上錯誤不是由程式本身引起,是由編譯流程或執行環境不正確導致。如:用舊的編譯器,或者環境設定錯誤。
* ...
至於除錯的科學方法,我幫各位稍微整理一下原文,可依循下列步驟實現:
1. 確認的確是由「由程式碼撰寫缺失」所造成的錯誤。並寫下該程式碼「應有、受期待的行為」為何。
2. 找出可確切重現錯誤的步驟(Stabilize)、分離各模組以找出「病灶」來自於哪個模組(Isolate)、列出可能引起原因,並做實驗排除至只剩一個原因為止(Minimize)。(文章:2, 3, 4, 5 三點)
3. 修正錯誤,並以實驗確定錯誤已經移除。
4. 將修正還原成原來的樣子,確認錯誤會重新被產生。
5. 測試整個程式的其它功能,確認他們沒有因為我們的「修正」而產生副作用,導致新的錯誤發生(此稱「迴歸測試(Regression Test)」)。
6. 從找到的原因猜想,會不會造成其它錯誤是現階段我們還沒發現的?
原文連結在此,請參考:
http://blog.regehr.org/archives/199
另外我也推薦一本除錯很不錯的書給各位參考:
「Debug Hacks除錯駭客:極致除錯的技巧與工具」(歐萊禮出版社)
http://goods.ruten.com.tw/item/show?21209129976637
科學方法最困難的步驟 在 科學方法5步驟2022-在Facebook/IG/Youtube上的焦點新聞和 ... 的推薦與評價
https://culturekr.com/keywords/科學方法最困難的步驟... [PDF] 1-1 探究科學的方法弗萊明在實驗過程中的推測,在科學 ... ... <看更多>
科學方法最困難的步驟 在 科學方法| 步驟、示例、提示和實踐 - YouTube 的推薦與評價
科學方法 : 步驟 、示例、提示和實踐 科學方法 是一個能夠解決問題並從觀察中學習的重要工具。 這個方法分為6個 步驟 :一,觀察並提出問題二,研究三, ... ... <看更多>
科學方法最困難的步驟 在 科學方法5步驟2022-在Facebook/IG/Youtube上的焦點新聞和 ... 的推薦與評價
https://culturekr.com/keywords/科學方法最困難的步驟... [PDF] 1-1 探究科學的方法弗萊明在實驗過程中的推測,在科學 ... ... <看更多>