• 沒有找到結果。

第四章 結果與討論

第一節 除錯行為

本節依據問卷所得的結果,分別針對學生在除錯過程中的求助對象、除錯工 具的使用、修改錯誤情形等三個部份描述。扣除掉 6 份填答不完整之問卷,最後 得到 66 份有效問卷。以下的說明將問卷題目重新編號以助於描述的便利。

壹、求助對象

問卷要求學生列出當程式發生錯誤時,他們會優先求助的三個優先對象。

分析時,以學生填寫前三項的優先次序分別依第一優先、第二優先、第三優先以 次數統計的方式來探討。如表 4-1 顯示六個選項的次數統計結果,求助最優先的 前三項為「找同學幫忙」(59 次)、「找老師幫忙」(49 次)、「參考教科書或講義」

(47 次),其中學生最優先求助的對象「找同學幫忙」(59 次)的次數為最高。

而選擇第一優先的選項以「找同學幫忙」(26 次)、「參考教科書或講義」(23 次)

為主要兩個選項,就結果的發現,當程式發生錯誤學生最常採取找同學幫忙、參 考教科書或講義來解決程式的錯誤。

另外,表 4-1 顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1 人),顯然在除錯過程中,學生不會遇到問題就先放棄,會求助其他方式來解決 問題,若尋求的幫助無法解決問題,就會停止解決問題。而選擇「其他」為第一 順序的八位學生,其填的答案為「自己想」(5 人)、「自己檢查」(3 人)皆說明 學生會自己先思考解決問題,再尋求協助。

26

27

題,非常同意 9%、同意 24%),不到兩成的學生使用「偵錯工具」為「設定中 斷點」(第 3 題,非常同意 5%、同意 12%)。雖然有約五成的學生指出他們會使 用「及時運算」找出程式錯誤,但觀察八位學生的除錯過程發現,學生都不清楚 debug.print 指令的意涵,訪談時也均「不知道」此指令或「老師沒有教」。顯然 學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果,但 並未能夠以它來進行除錯。事實上,在整個觀察學生除錯的過程發現,八位學生 皆未使用「偵錯工具」進行除錯。而經由訪談得知僅有兩位學生使用過「偵錯工 具」,有些學生甚至以為「偵錯工具」指的就是「錯誤清單」。以下為訪談之二例。

研究者:那你知道什麼是偵錯工具嗎?

學生:偵錯工具…,應該就是它知道這個不能執行之後,它就跑不動了這樣。

研究者:那你知道就是這個……,就是即時運算、就是中斷點。

學生:不知道。 (訪談學生 8-1)

研究者:你有使用偵錯工具嗎?

學生:偵錯工具……?

研究者:嗯,你知道什麼是偵錯工具嗎?

學生:是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡 研究者:就是類似中斷點啊那些的。

學生:嗯,沒有。 (訪談學生 6-1)

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意 非常

不同意 平均 1. 我常使用「及時運算」

來找出程式的錯誤 17% 36% 27% 11% 9% 3.41 2. 我常使用「逐步執行」

來找出程式的錯誤 9% 24% 38% 17% 12% 3.02 3. 我常使用「設定中斷

點」來找出程式的錯誤 5% 12% 38% 26% 20% 2.56

叁、除錯構思

表 4-4 顯示學生除錯構思的情形。大部分的學生表示「我直接修改程式碼,

邊修改邊構思」(59%),或「我已經大概構思好擬修改的程式碼」(38%),只有 3%的學生選擇「我已經全部構思好擬修改的程式碼」,再進行錯誤程式碼修改。

顯然學生仍比較習慣直接就進行程式碼編修,而非完整構思好後再進行修改。

表 4-4 學生修改錯誤程式碼前的構思情形

問題 次數 百分比

1. 我已經全部構思好擬修改的程式碼 2 3%

2. 我已經大概構思好擬修改的程式碼 25 38%

3. 我直接修改程式碼,邊修改邊構思 39 59%

29

第二節 除錯的態度

本節依據學生在問卷填答的情形,來分析學生對程式除錯的態度,以下 分別就學生除錯遭遇的問題、對除錯的看法兩個部分來進行探討。

壹、除錯遭遇的問題

表 4-5 為學生除錯情形的分析,想要了解學生在除錯時,是否有甚麼困難的 地方。而為了瞭解學生填答的情況,將非常同意視為 5 分、同意為 4 分、普通為 3 分、不同意為 2 分、非常不同意為 1 分,統計的結果如表 4-6 所示。由第 1 題 顯示僅有兩成的學生(非常同意 5%、同意 15%)表示「看不懂錯誤清單中的訊 息」,亦可對應表 4-3 第 1 題有六成的學生利用錯誤清單中的訊息來找到程式錯 誤的地方。第 2 題、第 3 題顯示不到兩成的學生同意(第 2 題非常同意 3%、同 意 15%,第 3 題非常同意 2%、同意 17%),第 4 題有四成的學生認為「不知 道使用哪些資料來測試程式的執行結果」,顯然大部分的學生可以找到程式錯誤 在哪裡,以及知道如何修改程式錯誤,但是不知道使用哪些資料測試程式的執行 結果。另外,學生不認為程式的問題容易解決(第 1 題與第 2 題,學生同意皆不 到三成)。

在問卷的開放式問題中請學生指出「我覺得除錯最困難的地方是?」,整理 66 位學生的填答內容(參見附錄六),主要可以歸納出以下二種:

1. 不知道錯誤在哪裡(25 位)

2. 不知道如何修改錯誤(8 位)

故而學生覺得除錯最困難的就是找不出程式的錯誤,則更不用談要如何修改錯誤 了。另外,有少數學生提到看不懂錯誤清單上的訊息。

30

31

32

33

一、第一題除錯問題—三的倍數

圖 4-1 所示為程式編譯錯誤之畫面例,圖中所示為成是編譯錯誤之畫面例,

圖中紅框表示包含了編譯錯誤:遺漏物件按鈕的事件程序;執行錯誤:多餘指令 敘述。此題主要是基本概念,瞭解學生除錯是否會看錯誤清單找出錯誤,以及從 程式執行錯誤的結果找出錯誤。

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為:

1. 察看錯誤清單訊息

八位學生修改程式碼過程中,皆出現修改「Dim a,b as integer」此行程式碼,

34

重新宣告 a、b 變數,修改完後錯誤清單上的錯誤並未修正,其後馬上又復原程 式碼,顯然學生在修改錯誤時,會察看錯誤清單中顯示的訊息來修改程式碼,當 編輯完成後,錯誤並未解決便復原或繼續修改程式碼。

2. 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If 敘述的部份,「if i mod 3 <> 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3 的倍數時就直接跳回至 for 迴圈,此行程式碼 是無錯誤的。而四位學生(編號 1、4、6、7)不理解「if i mod 3 <> 0 Then Continue For」此行指令,將此行程式碼修改為:

「if i mod 3 = 0 Then Continue For」(學生編號 1、4)

「if i mod 3 <> 0 Then Exit For」(學生編號 6、7)

亦可由下表 4-8 可知編號 3 學生除錯此題的過程(詳細行為觀察表請見附錄 四),當學生執行修改的程式碼後,發現程式輸出結果錯誤,又繼續修改此行程 式碼把 Continue For、Exit For 刪除,再次執行修改後的程式碼,亦從學生的除 錯行為觀察表可以發現,學生不瞭解程式碼的意思。

35 改成「Dim a,b,c as integer」

E1

改成「if I mod 3 <> 0 then i+1 and txtOutput.Text=””」

E1

10:13 察看程式碼 R2

11:48 編輯程式碼,修改「if I mod 3 <> 0 then i+1 and txtOutput.Text=””」

改成「if I mod 3 <> 0 then txtOutput.Text=””」

E1

12:03 察看程式碼 R2

12:21 編輯程式碼,寫入 if 敘述 end if 程式碼 E1 12:26 編輯程式碼,txtOutput.Text=””移至 if 敘述裡面 E1 12:43 開啟”記事本”,複製 txtOutput.Text=txtOutput.Text O1

13:00 察看程式碼 R2

3. 使用註解的功能,讓程式編譯時跳過錯誤的程式碼

編號 4 學生在已修改完編譯錯誤遇到執行錯誤時,利用註解的功能(如圖 4-2),讓程式暫不執行已註解的程式碼,再由程式的輸出結果來判斷是否要繼續 修改程式碼。

36

圖 4-2 編號 4 學生使用註解的功能

4. 使用記事本的功能,以便能備忘程式碼

編號 3 學生修改過程中,會把程式碼複製至記事本,把記事本當成是備忘錄。

亦從修改的過程當中發現此位同學未能理解程式碼,一直試圖修改錯誤,但是在 修改的過程當中卻又增加了許多錯誤,導致此題未除錯成功。

經實際觀察發現,學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找 出程式錯誤的地方,但對於錯誤訊息所代表的意思並非全然瞭解,就如同學生反 覆修改變數,但此行程式碼是無錯誤的,程式的主要的編譯錯誤是錯誤訊息 3 與 4 指出的「陳述式不可以出現在方法主體之外」,若學生知道此錯誤訊息所代 表的意思,就能找出遺漏物件按鈕的事件程序。另外當學生不理解語法的運用,

他們會以嘗試錯誤的方式修改程式碼,一邊嘗試修改程式碼,一邊觀察除錯清單 與執行結果的變化,在修改程式碼的過程中反而產生新的錯誤;或是學生在修改 過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行,從觀察程式輸出的結果 再進行修改。而學生這兩種修改方式缺乏預完成程式的知識,容易發生在修改錯 誤的時候錯誤沒有減少反而增加新的錯誤,導致程式最後無法除錯成功。

37

二、第二題除錯問題—交換變數值

圖 4-3 所示為程式編譯錯誤之畫面例,主要是利用副程式「傳值呼叫」與「傳 址呼叫」,圖中紅框標示包含了編譯錯誤:呼叫副程式的語法指令;執行錯誤:

參數 Byref 的設定。二位學生(編號 2、編號 8)利用錯誤清單與提示訊息,編 輯修改程式碼與執行程式後,快速就找出副程式語法指令以及傳址參數設定的錯 誤。

圖 4-3 除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1、編號 4、編號 5、編號 6),以為修改完有波浪狀底線標 註的程式碼「swap_by_value(i,j)」、「swap_by_Address(i,j)」的編譯錯誤後,就以 為自己已經成功除錯而停止解題,並沒有仔細檢查程式是否正確執行成功(圖 4-4),其錯誤執行結果如圖 4-5 所見,並未解決參數 Byref 的設定的錯誤。

圖 4-4 第二題正確執行結果 圖 4-5 第二題錯誤執行結果 1

編號 3 學生修改完上述波浪狀底線標註的程式碼後,執行程式時發現輸出結 果是不正確,並未修改 Byref 參數設定,而是修改變數的位置

編號 3 學生修改完上述波浪狀底線標註的程式碼後,執行程式時發現輸出結 果是不正確,並未修改 Byref 參數設定,而是修改變數的位置

相關文件