• 沒有找到結果。

第四章 結果與討論

第二節 錯誤類型分析

本節將學生於各個程式設計概念中所犯下的錯誤狀況進行類別及原因的分 類,並統整各程式概念中常見的錯誤類型。

一、錯誤類型

本研究根據「學生在撰寫程式時的不同階段」將錯誤狀況進行分類,分別為 連結(connection)、定位(location)、使用(usage)和數學與其他(math and others)

四類,以下將詳細敘述各錯誤類型定義及可能發生原因。

1. 連結錯誤:

此類錯誤為無法將題目影片中的動作或欲實作的功能與目標程式概念進 行對應,常見的發生形式為「未使用/不知道需要XX」或「不知道怎麼做 XX」。此類錯誤發生的原因除了學生缺乏對目標程式概念的理解外,亦有可 能是由於題目無法清楚的進行呈現導致。

2. 定位錯誤:

此一分類是由於 Alice 程式的程式編寫環境為拖放式(drag-and-drop)而 導致的錯誤狀況,常見的發生形式為「無法找到拖曳目標/點擊目標按鈕」。

可能的發生原因包含 Alice 本身介面設計不良及學生缺乏宣告或取用的相關知 識。

3. 使用錯誤:

此類錯誤泛指所有學生在使用目標程式構句時所發生的錯誤,常見的發 生形式為「內容/條件設定錯誤」、「程式碼位置錯誤」等。發生原因為學生 對於目標程式構句之使用方法缺乏或不熟悉。

4. 數學與其他錯誤:

其他與程式概念無直接關聯的錯誤皆歸類於此類別中,以本實驗觀察到 的狀況而言,其中之一為學生在完成正確的操作後未主動進行測試,而是直

87

接向訪談員反問進行確認;另一種則是數學應用相關的錯誤,意即學生無法 順利使用數學進行相關的處理,如無法順利計算倍率、負數轉正的操作。

二、各程式概念之錯誤類型發生狀況

此處將分別針對學生在實作各程式概念時所犯下的錯誤類型進行統計並進 行相關探討。

1. 內建方法

本實驗在各實作題目中要求學生使用不同的內建方法來操作物件,使其做出 目標動作,所使用的內建方法包含 say(說話)、move(移動)、set color to(改變 顏色)、resize(縮放大小)以及 turn(轉向)。由於不同的內建方法之使用方法複 雜程度有所差異,進而導致所發生錯誤類型亦有不同,發生情形統整於表 4.10。

表 4.10 錯誤類別及原因-內建方法

實作對象 連結錯誤 定位錯誤 使用錯誤

方法 say V

方法 move V

方法 set color to V

方法 resize V V

方法 turn V V

方法 say 在第一題中學生首次使用時,並未發生任何錯誤情形。但在後續題 目中,有部分學生並未進行說話動作的撰寫,但在訪談員提示後即可順利補上,

推測應為學生忽略或忘記進行實作所導致。

在方法 move 的使用上,由於在題目中所使用的方式為組合兩個移動動作成 為一跳躍動作,無法實作的學生多半認為 Alice 已內建「跳躍」方法,故持續的 在物件方法庫中尋找,需要訪談員進行說明方可順利取用方法 move 完成實作目

88

標。

在方法 set color to 的使用上,有 7 名學生無法順利取得此內建方法,其原因 為方法 set color to 的取得方法和其他一般內建方法不同,是自物件的屬性中進行 拖曳,而非自方法庫中拖曳。因此研究者認為此一情況的發生是由於 Alice 介面 設計不良所導致。

在使用方法 resize(改變大小)時,有 6 名學生需要訪談員告知方能順利找 到方法 resize 來實作縮放動作,但方法 resize 之取用方法與其他內建方法並無差 異,因此推測學生可能是由於英文不熟悉導致無法找到。另一方面,所有學生皆 誤以為 resize 的功能為「縮放至指定數值的大小」,而非 「縮放為指定倍率的大 小」,雖然其中有 2 名學生在觀察執行成果或程式碼後可以看出 resize 所接收之數 值為縮放倍率,但其餘 11 名學生無法從程式執行結果推敲出該數值之意涵。值 得注意的是,當使用者將內建方法 resize 拖曳至程式中使用時,會出現如圖 4.22 的預設選單,其中的選項皆有英文說明,因此推測學生們在取用方法時,並未仔 細觀看選項內容便直接進行操作。

圖 4.22 resize 設定選單

在使用方法 turn(旋轉)來實作旋轉動作時,有 2 名學生認為需要使用方法 turn face to(轉面向目標)來進行實作,而非 turn。研究者認為此一錯誤情況同樣 來自於學生對於方法功能的誤解。而在使用時學生也因為未仔細閱讀而將 1/2 round(半圈)誤認為轉身 90 度。

89

2. 時序控制

在本次實驗中所使用的時序控制結構包含 do in order(依序執行)及 do together(同時執行)來進行物件動作順序的控制,以及設定指令時間控制動作時 間長短,錯誤發生情形統整於表 4.11。

表 4.11 錯誤類別及原因-時序控制

實作對象 連結錯誤 定位錯誤 使用錯誤

Do together V V

Do in order V V V

指令時間控制 V

在使用同時控制結構時,學生多是因為未注意到有動作需同時進行而未進行 取用,但是只要訪談者進行相關的提示,學生即可順利的取用及進行使用,表示 學生對於同時結構的取用有著一定程度的理解與熟悉。

和同時控制結構相比,學生在定位和使用循序控制結構上都較為生疏。由於 在第一題中是將同時與循序組合使用,有 9 名學生未將循序控制結構使用於同時 結構中以完成實作目標。其中有 7 名學生在訪談者提示或告知「變色動作和整個 跳躍動作須同時執行」後,直接將「向下移動」的程式碼移入原本僅包含「向上 移動」及「變色」程式碼的 do together 中,使得「向上移動」及「向下移動」這 兩個衝突動作置於同一個 do together 中(如圖 4.2),造成程式執行時目標物件僅 變色未跳動。研究者推測學生可能誤認為 do together 中的程式碼可以將其中某些 部分同時執行,其他部分依序執行。

在指令執行時間的控制上,學生同樣因為難以觀察的因素而未進行設定,但 是只要訪談者進行相關的提示,學生即可順利的進行設定。

3. 內建函式

在本實驗中所使用的內建函式包含 height(身高)、ask user for a number(要

90

求使用者輸入數字)以及 a > b 或 a < b(比較),錯誤發生情形統整於表 4.12。。

表 4.12 錯誤類別及原因-內建函式

實作對象 連結錯誤 定位錯誤 使用錯誤

height V

ask user for a number V a > b、a < b V

在實作題目中,物件身高是作為縮放倍率計算使用,由於學生在訪談員提示 後即可順利進行使用,因此推測學生未進行取用主要是因為未意識到「縮放至與 目標同高」所需的計算需使用身高而未取用。

另外要求使用者輸入數字及比較函式的位置因為其共通性,並未放置於物件 函式庫中,而是位於世界(world)函式庫裡,導致學生在取用時較難以找到。

4. 變數

在變數概念中,連結、定位及使用三種類型的錯誤皆有發生,以下分別進行 狀況說明及討論。

在第三題中首次使用變數時,幾乎所有的學生都不知道需要使用變數來進行 資料的暫存以協助解題或計算。即使在第三題中已經使用變數儲存資料,在第四 題中,仍有 3 名學生需要訪談者提示「目標身高已經改變」才進行變數宣告以暫 存身高;第四題及第六題中,共計有 11 名學生仍需要訪談者提示或告知,才宣 告變數儲存使用者輸入數值(ask user for a nubmer 函式),顯示大多數學生明顯缺 乏「使用變數來暫時儲存數值」的概念。

而在定位方面,由於變數宣告按鈕與參數宣告按鈕十分接近,導致有 4 名學 生將變數宣告與參數宣告混淆。其中有 2 名學生誤宣告為參數(parameter);另 外 2 名學生在宣告變數及宣告參數的按鈕之間游移,無法做決定。

在使用上,設定變數值時有 2 名學生認為可將欲進行儲存的函式直接拖曳至

91

參數預設值中進行指定。但在 Alice 中,數字變數的預設值僅能設定為常數,若 要指定為特定函式,則須將變數拖曳至程式中進行設定。另一方面,在使用變數 作為運算使用時,學生會發生的錯誤多為忘記進行使用,但在操作方面並無明顯 問題。

5. 選擇結構

選擇結構中所發生的錯誤集中於連結與使用兩類,學生並未發生定位方面的 錯誤。在第四題中,大多數學生皆能正確取用 if/else 選擇結構進行輸入數值的判 斷,僅有 3 名學生需要訪談者提示,才理解需要使用 if/else。在使用上,僅有 1 名學生無法設定選擇結構的判斷條件,需要訪談者告知設定方法。

6. 重複結構

選擇結構中所發生的錯誤集中於連結與使用兩類,學生並未發生定位方面的 錯誤。

在連結方面,學生對於重複概念的理解較為片面,在第五題首次取用 loop 重 複執行特定動作時,大多數學生可以理解「重複執行 n 次」需用重複結構 loop 進 行實作,僅有 4 名學生需要訪談者提示或告知;但在第七題中使用重複結構 loop 控制陣列上的物件依序執行相同的動作時,大部分(10 名)的學生並未意識到「不 同人需要重覆執行相同的動作」同樣可以透過 loop 進行實作。根據此差異,研究 者推測學生僅將 loop 視作「重複執行特定動作 n 次」的控制結構。

在使用方面,第五題中使用常數做為 loop 的重複次數時,僅有少數學生需要 訪談者提示;但是在第六題使用變數做為重複次數時,所有學生皆使用儲存使用 者輸入數值的變數做為迴圈次數。這個作法在使用者輸入數值為正數時,可使迴 圈正常運作;但是當使用者輸入數值為負數時,會因為終止條件為負數使得迴圈 內程式碼不會執行。所有的學生在解決此狀況時,都把焦點放在修改迴圈終止條

在使用方面,第五題中使用常數做為 loop 的重複次數時,僅有少數學生需要 訪談者提示;但是在第六題使用變數做為重複次數時,所有學生皆使用儲存使用 者輸入數值的變數做為迴圈次數。這個作法在使用者輸入數值為正數時,可使迴 圈正常運作;但是當使用者輸入數值為負數時,會因為終止條件為負數使得迴圈 內程式碼不會執行。所有的學生在解決此狀況時,都把焦點放在修改迴圈終止條

相關文件