• 沒有找到結果。

程式設計除錯

第二章 文獻探討

第二節 程式設計除錯

須被教導的技能(Katz & Anderson, 1987)。

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel & Loui, 2004)。綜觀現今電腦教科書,程式設計除錯的內容所佔的篇幅甚小(McCauley, et al., 2008),教師在程式設計教學中,往往會忽略教導除錯。

根據上述,教師與教科書缺乏教授除錯的內容,大多數學生認為除錯是程式 編寫中的一部份,學生沒有將除錯視為一個獨立的技能,而教師在教學時也未特

10

& Olson, 1986; Putnam, Sleeman, Baxter, & Kuspa, 1986)。尹玫君(1991)其研究 指出當學生進行程式除錯或設計演算法等複雜的任務時,他們必需具備基礎的程 式語法及語意相關的知識,雖然學習程式語言特性,並不能增進解決問題的能力,

但它卻是進入更高一層思考活動所必須具備的基本知識。

而在除錯的知識方面,Decasse 和 Emde(1988)研究歸納除錯者所需要的 七種除錯知識:

1. 預完成程式的知識(knowledge of the intended program)

2. 實際程式的知識(knowledge of the actual program)

3. 程式語言的知識(understanding of the programming language)

4. 一般程式設計知識(general programming expertise)

5. 應用領域的知識(knowledge of the application domain)

6. 關於程式錯誤的知識(knowledge of bugs)

7. 除錯的方法(knowledge of debugging methods)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸 入與輸出的結果的差異,當實際上執行程式時,依循著程式的程序的執行情況來 評估與理解程式,同時也需要熟悉程式語言與一般程式設計的原則來理解程式,

並且有錯誤類型的知識與運用策略來解決錯誤的方法,所以除錯同時需要很多能 力來解決問題。

Ahmadzadeh、Elliman 與 Higgins(2005)研究新手提出好的程式設計者在

11

除錯過程中擁有以下四種知識:

1. 預完成程式的知識(knowledge of the intended program)

2. 實際程式的知識(knowledge of the actual program)

3. 除錯的方法(knowledge of use of debugging methods)

4. 關於程式錯誤的知識(knowledge of the error itself)

而這四種除錯的知識與 Decasse 和 Emde(1988)提出的七種除錯知識中之四者 相同,可知擁有好的除錯能力的程式設計者,這些除錯知識是需要具備的。

另外,從 Movers 衍伸出 Extreme movers,是指學生沒有深層思考就嘗試 修改程式碼,常會導致過多的錯誤而放棄解決錯誤,或者是沒有針對錯誤

12

的時間查看語法錯誤的訊息、編輯程式碼,以及重新編譯。使用試誤的方式來了 解錯誤,此種情況常會導致無法成功地解決問題,因為如果沒有仔細理解程式,

而不斷的用嘗試錯誤的方式解決問題,則會影響程式設計後續的除錯(Putnam, et al., 1986)。

Perkins 等人(1986)從觀察學生除錯中發現重要的技能,分別為以下三種:

1. 密切追蹤程式碼(Close Tracking of Code):以閱讀程式碼的方式了解程式 的運作,特別是密切察看某幾行程式碼。

2. 修補(Tinkering):編寫程式碼或是以修改程式碼的方式來解決程式設計 的問題。

3. 拆解程式(Breaking Problems Down):將程式適當的拆解成數個部份來解 決問題。

Murphy 等人(2008)觀察學生解決程式錯誤的情形,歸納出以下幾種除錯 時發生的行為:

1. 獲得領域知識(Gain domain knowledge):利用程式的輸出,或是反覆 查看問題,從中獲得問題主要的概念知識。

2. 程式碼追蹤(Tracing, including: Mental, Print, Debugger):包括在腦海中 追蹤程式碼、列印程式及輸出結果,以及使用偵錯工具等追蹤程式碼。

3. 測試(Testing):利用資料或數據來測試程式的輸出是否是成功正確的 執行結果。

4. 理解程式碼(Understanding code):以閱讀程式碼的方式,理解程式的 運行。

5. 使用參考資源(Using resources):使用線上 JavaDoc 說明文件、Java Tutorial 說明文件、課本講義。

6. 使用工具(Using Tools):使用偵錯工具。

7. 隔離問題(Isolating the problem):看起來可疑的程式碼,利用註解的指

13

令隔離問題。

8. 與舊經驗連結(Pattern matching):程式設計者利用舊有的程式設計解 題經驗來判別程式碼正確與否。

9. 尋找替代方案(Consider alternatives):考慮多種解決方式來解決問題。

10. 程式語言環境(Environmental):利用程式環境的功能,例如:復原鍵。

11. 避開問題(Work around problem):逃避問題或困難,找到其他可以替 代解決的方式。

12. 備用(Just in case):增加或刪除程式碼,但不影響程式的輸出結果,例 如刪除多餘的變數。

13. 修補(Tinkering):修改程式碼。

綜合上述的文獻當中,可以整理歸納出以下的除錯行為主要分成追蹤、修補、

測試、求助,以及放棄此五種行為。

1. 追蹤(Trace):以閱讀程式碼的方式來了解程式的運作情形,以及寫或 畫下程式碼的方式來了解程式的運作情形。

2. 修補(Tinkering):編寫程式碼或是修改程式碼。

3. 測試(Testing):利用資料或數據來測試程式的輸出是否正確。

4. 求助(Help):使用偵錯工具(Debugger)、使用資源如:工具書、課本、

講義,或是尋求他人協助。

5. 放棄(Stop):停止解決錯誤。

綜合此節文獻探討,學習程式設計的目標是能夠運用所學的程式語言來解決 問題,而程式設計者在面對編譯錯誤和執行階段錯誤,程式設計者怎麼自己找出 錯誤並修正錯誤,其除錯的行為正是需要深入研究並探討。所以如果能知道學生 的除錯行為,就能幫助教學者教導學生如何解決程式錯誤的問題。

14

相關文件