國立臺灣師範大學資訊教育研究所...

75
國立臺灣師範大學資訊教育研究所 碩士論文 指導教授:吳正己 博士 VB 程式設計初學者除錯行為分析 研究生: 陳美文 中華民國一百零一年七月

Transcript of 國立臺灣師範大學資訊教育研究所...

Page 1: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

國立臺灣師範大學資訊教育研究所

碩士論文

指導教授吳正己 博士

VB程式設計初學者除錯行為分析

研究生 陳美文 撰

中華民國一百零一年七月

i

摘 要

本研究目的旨在探討 VB程式設計初學者的除錯行為及他們對於除錯的看

法研究方法主要是以問卷調查方式瞭解學生除錯的看法並以質性分析方式分

析個案學生除錯過程中的行為最後輔以訪談以進一步探討前述除錯看法及行為

產生之原因問卷調查對象為台北市某高職三年級資料處理科學生兩班共72人

其中八人並進行除錯過程分析及訪談程式設計除錯的範圍包括變數判斷迴

圈及副程式等基本概念

研究結果顯示大部分學生認為自己的除錯技巧不足並認為除錯技巧與

個人天分或經驗有關而當學生無法解決程式錯誤時會先求助同學其次才是

老師雖然學生指出他們會利用除錯工具來找出錯誤但實際觀察其除錯過程發

現他們僅能倚賴編譯環境呈現的訊息(如「錯誤清單」「波浪狀底線標註」)

來找到程式錯誤卻甚少使用或不知道如何使用除錯工具(如「逐步執行」「設

定中斷點」)此外學生表示他們不喜歡除錯但成功除錯會讓他們有成就感並

且增加信心針對研究結果建議教師可以藉由教學設計增強學生除錯的成就感

使學生能以更正向的態度面對程式錯誤並能瞭解除錯也有其系統性的方法非

僅依個人天賦建議未來研究可以增加學生樣本數以增加研究的外在效度並

可以進一步探討學生在進階程式設計概念(如陣列遞迴等)的學習以期更全

面性的了解學生的除錯行為

關鍵詞程式設計初學者除錯Visual Basic

ii

Abstract

The Analysis of Novicesrsquo Debugging Behaviors in VB Programming

Mei-wen Chen

This study aims to investigate the debugging behaviors of novices in Visual

Basic (VB) programming Seventy-two students from a vocational high school in

Taipei City participated in the study The data collected for analysis were the

questionnaire results answered by all students to learn their self-perceived behaviors

and perceptions of debugging the video-taped and screenshot-recorded debugging

scenarios of eight case students and the interview data of the eight students

The analysis results showed that most students considered themselves lack of

debugging skills and believed these skills were kindly bound to individualrsquos nature

and could not be learned they did not like the challenges of debugging but enjoyed

the success of resolving bugs When encountering debugging problems they would

seek help from colleagues first rather than the teachers Although students indicated

that they used VB debugging tools to locate errors our observation revealed that they

could only relied on system provided error messages but could not use or be aware of

the existence of debugging tools such as ldquobreakpointrdquo

To engage novicesrsquo in debugging teachers may consider adopting proper

instructional design so that studentsrsquo sense of accomplishment could be reinforced

Future studies may repeat this study but with larger sample size to improve the

external validity

Keywords Novice programmer Debugging Visual Basic

iii

致 謝

回首三年的碩士生活真是有苦有樂確切來說應該是苦中作樂如今終於

要卸下碩士身份好想開心的大喊大叫我終於畢業了

三年時間裡面最感謝的莫過於指導教授 吳正己老師雖然老師行政工作

繁忙但總是會排開他忙碌的時間來指導我的論文上各種疑難雜症也常常勉

勵我要多學習不懂就要問落實其培養碩士生「邏輯思考」與「問題解決」的

能力我想三年時間下來我應該有 Level Up了再來要感謝我的兩位口試委

員林育慈老師邱瓊芳老師給了我很多寶貴的意見讓我的論文能夠更加完

整當然亦要感謝實驗學校的老師劉家欣老師沒有您大力幫忙我就不能

收集到這麼完整的實驗資料了

感謝我的家人爸媽老弟感謝你們無條件的支持我完成我從小就一

心想念師大的夢想雖然台北到高雄實際 350公里的距離在我心裡你們就像

隨時在身旁陪伴我不管我遇到甚麼好事壞事第一個就想和你們分享我永遠

愛你們

三年生活中謝謝身邊的朋友們帶給我豐富的心靈養份不管是生活大小事

-當我們睡在一起的室友們郁如玉玲雅瑄莉萍嘉彥文妍惠中冠

妤玟蒨感謝有你們陪伴讓我每天回到寢室都可以很放鬆忘記一天有多辛

苦還有音樂所的朋友們帶著我參加許多大大小小的音樂會演奏會讓我在

研究之餘還能滋潤我枯竭的腦子我都覺得快變成音樂所的學生了CSE LAB

的夥伴們怎麼可以少的了你們尤其是雅旬志軒筱蔓大家一起為了研究

而並肩作戰(嘴泡)的日子希望你們都可以順利的完成論文最後還要特別

謝謝孫林與政煥兩位博班大學長常常給予我很多建議與幫助以後也要請你們

多多指教摟

最後感謝自己不管經歷多少磨練與困難還好有一顆不放棄與堅定的心

支持這一路上的跌跌撞撞順利的走過也完成了碩士學位而接下來即將成為

博士生對自己來說也是更大的挑戰期許自己能更有衝勁與動力去迎接下一階

段的新生活

敬現在與未來那些閃閃發光的日子

iv

目 錄

附表目錄 vii

附圖目錄 viii

第一章 緒論 1

第一節 研究背景與動機 1

第二節 研究目的 3

第三節 研究限制 3

第四節 名詞釋義 3

第二章 文獻探討 5

第一節 程式設計初學者學習問題 5

第二節 程式設計除錯 9

第三節 VB程式設計 14

第三章 研究方法 17

第一節 研究設計 17

第二節 研究對象 17

第三節 研究工具 18

第四節 實施程序 21

第五節 資料分析 22

第四章 結果與討論 25

第一節 除錯行為 25

第二節 除錯態度 29

第三節 除錯過程 32

第五章 結論與建議 41

第一節 結論 41

第二節 建議 42

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 2: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

i

摘 要

本研究目的旨在探討 VB程式設計初學者的除錯行為及他們對於除錯的看

法研究方法主要是以問卷調查方式瞭解學生除錯的看法並以質性分析方式分

析個案學生除錯過程中的行為最後輔以訪談以進一步探討前述除錯看法及行為

產生之原因問卷調查對象為台北市某高職三年級資料處理科學生兩班共72人

其中八人並進行除錯過程分析及訪談程式設計除錯的範圍包括變數判斷迴

圈及副程式等基本概念

研究結果顯示大部分學生認為自己的除錯技巧不足並認為除錯技巧與

個人天分或經驗有關而當學生無法解決程式錯誤時會先求助同學其次才是

老師雖然學生指出他們會利用除錯工具來找出錯誤但實際觀察其除錯過程發

現他們僅能倚賴編譯環境呈現的訊息(如「錯誤清單」「波浪狀底線標註」)

來找到程式錯誤卻甚少使用或不知道如何使用除錯工具(如「逐步執行」「設

定中斷點」)此外學生表示他們不喜歡除錯但成功除錯會讓他們有成就感並

且增加信心針對研究結果建議教師可以藉由教學設計增強學生除錯的成就感

使學生能以更正向的態度面對程式錯誤並能瞭解除錯也有其系統性的方法非

僅依個人天賦建議未來研究可以增加學生樣本數以增加研究的外在效度並

可以進一步探討學生在進階程式設計概念(如陣列遞迴等)的學習以期更全

面性的了解學生的除錯行為

關鍵詞程式設計初學者除錯Visual Basic

ii

Abstract

The Analysis of Novicesrsquo Debugging Behaviors in VB Programming

Mei-wen Chen

This study aims to investigate the debugging behaviors of novices in Visual

Basic (VB) programming Seventy-two students from a vocational high school in

Taipei City participated in the study The data collected for analysis were the

questionnaire results answered by all students to learn their self-perceived behaviors

and perceptions of debugging the video-taped and screenshot-recorded debugging

scenarios of eight case students and the interview data of the eight students

The analysis results showed that most students considered themselves lack of

debugging skills and believed these skills were kindly bound to individualrsquos nature

and could not be learned they did not like the challenges of debugging but enjoyed

the success of resolving bugs When encountering debugging problems they would

seek help from colleagues first rather than the teachers Although students indicated

that they used VB debugging tools to locate errors our observation revealed that they

could only relied on system provided error messages but could not use or be aware of

the existence of debugging tools such as ldquobreakpointrdquo

To engage novicesrsquo in debugging teachers may consider adopting proper

instructional design so that studentsrsquo sense of accomplishment could be reinforced

Future studies may repeat this study but with larger sample size to improve the

external validity

Keywords Novice programmer Debugging Visual Basic

iii

致 謝

回首三年的碩士生活真是有苦有樂確切來說應該是苦中作樂如今終於

要卸下碩士身份好想開心的大喊大叫我終於畢業了

三年時間裡面最感謝的莫過於指導教授 吳正己老師雖然老師行政工作

繁忙但總是會排開他忙碌的時間來指導我的論文上各種疑難雜症也常常勉

勵我要多學習不懂就要問落實其培養碩士生「邏輯思考」與「問題解決」的

能力我想三年時間下來我應該有 Level Up了再來要感謝我的兩位口試委

員林育慈老師邱瓊芳老師給了我很多寶貴的意見讓我的論文能夠更加完

整當然亦要感謝實驗學校的老師劉家欣老師沒有您大力幫忙我就不能

收集到這麼完整的實驗資料了

感謝我的家人爸媽老弟感謝你們無條件的支持我完成我從小就一

心想念師大的夢想雖然台北到高雄實際 350公里的距離在我心裡你們就像

隨時在身旁陪伴我不管我遇到甚麼好事壞事第一個就想和你們分享我永遠

愛你們

三年生活中謝謝身邊的朋友們帶給我豐富的心靈養份不管是生活大小事

-當我們睡在一起的室友們郁如玉玲雅瑄莉萍嘉彥文妍惠中冠

妤玟蒨感謝有你們陪伴讓我每天回到寢室都可以很放鬆忘記一天有多辛

苦還有音樂所的朋友們帶著我參加許多大大小小的音樂會演奏會讓我在

研究之餘還能滋潤我枯竭的腦子我都覺得快變成音樂所的學生了CSE LAB

的夥伴們怎麼可以少的了你們尤其是雅旬志軒筱蔓大家一起為了研究

而並肩作戰(嘴泡)的日子希望你們都可以順利的完成論文最後還要特別

謝謝孫林與政煥兩位博班大學長常常給予我很多建議與幫助以後也要請你們

多多指教摟

最後感謝自己不管經歷多少磨練與困難還好有一顆不放棄與堅定的心

支持這一路上的跌跌撞撞順利的走過也完成了碩士學位而接下來即將成為

博士生對自己來說也是更大的挑戰期許自己能更有衝勁與動力去迎接下一階

段的新生活

敬現在與未來那些閃閃發光的日子

iv

目 錄

附表目錄 vii

附圖目錄 viii

第一章 緒論 1

第一節 研究背景與動機 1

第二節 研究目的 3

第三節 研究限制 3

第四節 名詞釋義 3

第二章 文獻探討 5

第一節 程式設計初學者學習問題 5

第二節 程式設計除錯 9

第三節 VB程式設計 14

第三章 研究方法 17

第一節 研究設計 17

第二節 研究對象 17

第三節 研究工具 18

第四節 實施程序 21

第五節 資料分析 22

第四章 結果與討論 25

第一節 除錯行為 25

第二節 除錯態度 29

第三節 除錯過程 32

第五章 結論與建議 41

第一節 結論 41

第二節 建議 42

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 3: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

ii

Abstract

The Analysis of Novicesrsquo Debugging Behaviors in VB Programming

Mei-wen Chen

This study aims to investigate the debugging behaviors of novices in Visual

Basic (VB) programming Seventy-two students from a vocational high school in

Taipei City participated in the study The data collected for analysis were the

questionnaire results answered by all students to learn their self-perceived behaviors

and perceptions of debugging the video-taped and screenshot-recorded debugging

scenarios of eight case students and the interview data of the eight students

The analysis results showed that most students considered themselves lack of

debugging skills and believed these skills were kindly bound to individualrsquos nature

and could not be learned they did not like the challenges of debugging but enjoyed

the success of resolving bugs When encountering debugging problems they would

seek help from colleagues first rather than the teachers Although students indicated

that they used VB debugging tools to locate errors our observation revealed that they

could only relied on system provided error messages but could not use or be aware of

the existence of debugging tools such as ldquobreakpointrdquo

To engage novicesrsquo in debugging teachers may consider adopting proper

instructional design so that studentsrsquo sense of accomplishment could be reinforced

Future studies may repeat this study but with larger sample size to improve the

external validity

Keywords Novice programmer Debugging Visual Basic

iii

致 謝

回首三年的碩士生活真是有苦有樂確切來說應該是苦中作樂如今終於

要卸下碩士身份好想開心的大喊大叫我終於畢業了

三年時間裡面最感謝的莫過於指導教授 吳正己老師雖然老師行政工作

繁忙但總是會排開他忙碌的時間來指導我的論文上各種疑難雜症也常常勉

勵我要多學習不懂就要問落實其培養碩士生「邏輯思考」與「問題解決」的

能力我想三年時間下來我應該有 Level Up了再來要感謝我的兩位口試委

員林育慈老師邱瓊芳老師給了我很多寶貴的意見讓我的論文能夠更加完

整當然亦要感謝實驗學校的老師劉家欣老師沒有您大力幫忙我就不能

收集到這麼完整的實驗資料了

感謝我的家人爸媽老弟感謝你們無條件的支持我完成我從小就一

心想念師大的夢想雖然台北到高雄實際 350公里的距離在我心裡你們就像

隨時在身旁陪伴我不管我遇到甚麼好事壞事第一個就想和你們分享我永遠

愛你們

三年生活中謝謝身邊的朋友們帶給我豐富的心靈養份不管是生活大小事

-當我們睡在一起的室友們郁如玉玲雅瑄莉萍嘉彥文妍惠中冠

妤玟蒨感謝有你們陪伴讓我每天回到寢室都可以很放鬆忘記一天有多辛

苦還有音樂所的朋友們帶著我參加許多大大小小的音樂會演奏會讓我在

研究之餘還能滋潤我枯竭的腦子我都覺得快變成音樂所的學生了CSE LAB

的夥伴們怎麼可以少的了你們尤其是雅旬志軒筱蔓大家一起為了研究

而並肩作戰(嘴泡)的日子希望你們都可以順利的完成論文最後還要特別

謝謝孫林與政煥兩位博班大學長常常給予我很多建議與幫助以後也要請你們

多多指教摟

最後感謝自己不管經歷多少磨練與困難還好有一顆不放棄與堅定的心

支持這一路上的跌跌撞撞順利的走過也完成了碩士學位而接下來即將成為

博士生對自己來說也是更大的挑戰期許自己能更有衝勁與動力去迎接下一階

段的新生活

敬現在與未來那些閃閃發光的日子

iv

目 錄

附表目錄 vii

附圖目錄 viii

第一章 緒論 1

第一節 研究背景與動機 1

第二節 研究目的 3

第三節 研究限制 3

第四節 名詞釋義 3

第二章 文獻探討 5

第一節 程式設計初學者學習問題 5

第二節 程式設計除錯 9

第三節 VB程式設計 14

第三章 研究方法 17

第一節 研究設計 17

第二節 研究對象 17

第三節 研究工具 18

第四節 實施程序 21

第五節 資料分析 22

第四章 結果與討論 25

第一節 除錯行為 25

第二節 除錯態度 29

第三節 除錯過程 32

第五章 結論與建議 41

第一節 結論 41

第二節 建議 42

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 4: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

iii

致 謝

回首三年的碩士生活真是有苦有樂確切來說應該是苦中作樂如今終於

要卸下碩士身份好想開心的大喊大叫我終於畢業了

三年時間裡面最感謝的莫過於指導教授 吳正己老師雖然老師行政工作

繁忙但總是會排開他忙碌的時間來指導我的論文上各種疑難雜症也常常勉

勵我要多學習不懂就要問落實其培養碩士生「邏輯思考」與「問題解決」的

能力我想三年時間下來我應該有 Level Up了再來要感謝我的兩位口試委

員林育慈老師邱瓊芳老師給了我很多寶貴的意見讓我的論文能夠更加完

整當然亦要感謝實驗學校的老師劉家欣老師沒有您大力幫忙我就不能

收集到這麼完整的實驗資料了

感謝我的家人爸媽老弟感謝你們無條件的支持我完成我從小就一

心想念師大的夢想雖然台北到高雄實際 350公里的距離在我心裡你們就像

隨時在身旁陪伴我不管我遇到甚麼好事壞事第一個就想和你們分享我永遠

愛你們

三年生活中謝謝身邊的朋友們帶給我豐富的心靈養份不管是生活大小事

-當我們睡在一起的室友們郁如玉玲雅瑄莉萍嘉彥文妍惠中冠

妤玟蒨感謝有你們陪伴讓我每天回到寢室都可以很放鬆忘記一天有多辛

苦還有音樂所的朋友們帶著我參加許多大大小小的音樂會演奏會讓我在

研究之餘還能滋潤我枯竭的腦子我都覺得快變成音樂所的學生了CSE LAB

的夥伴們怎麼可以少的了你們尤其是雅旬志軒筱蔓大家一起為了研究

而並肩作戰(嘴泡)的日子希望你們都可以順利的完成論文最後還要特別

謝謝孫林與政煥兩位博班大學長常常給予我很多建議與幫助以後也要請你們

多多指教摟

最後感謝自己不管經歷多少磨練與困難還好有一顆不放棄與堅定的心

支持這一路上的跌跌撞撞順利的走過也完成了碩士學位而接下來即將成為

博士生對自己來說也是更大的挑戰期許自己能更有衝勁與動力去迎接下一階

段的新生活

敬現在與未來那些閃閃發光的日子

iv

目 錄

附表目錄 vii

附圖目錄 viii

第一章 緒論 1

第一節 研究背景與動機 1

第二節 研究目的 3

第三節 研究限制 3

第四節 名詞釋義 3

第二章 文獻探討 5

第一節 程式設計初學者學習問題 5

第二節 程式設計除錯 9

第三節 VB程式設計 14

第三章 研究方法 17

第一節 研究設計 17

第二節 研究對象 17

第三節 研究工具 18

第四節 實施程序 21

第五節 資料分析 22

第四章 結果與討論 25

第一節 除錯行為 25

第二節 除錯態度 29

第三節 除錯過程 32

第五章 結論與建議 41

第一節 結論 41

第二節 建議 42

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 5: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

iv

目 錄

附表目錄 vii

附圖目錄 viii

第一章 緒論 1

第一節 研究背景與動機 1

第二節 研究目的 3

第三節 研究限制 3

第四節 名詞釋義 3

第二章 文獻探討 5

第一節 程式設計初學者學習問題 5

第二節 程式設計除錯 9

第三節 VB程式設計 14

第三章 研究方法 17

第一節 研究設計 17

第二節 研究對象 17

第三節 研究工具 18

第四節 實施程序 21

第五節 資料分析 22

第四章 結果與討論 25

第一節 除錯行為 25

第二節 除錯態度 29

第三節 除錯過程 32

第五章 結論與建議 41

第一節 結論 41

第二節 建議 42

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 6: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

v

目 錄

參考文獻 45

附錄一 程式設計問卷調查 51

附錄二 除錯題目 53

附錄三 除錯行為觀察表 57

附錄四 除錯行為觀察表示例 58

附錄五 學生訪談大綱 63

附錄六 程式設計問卷調查mdash開放式問題填答結果 64

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 7: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

vi

附表目錄

表 3-1 各除錯問題屬性 19

表 3-2 除錯問題之錯誤列表 19

表 3-3 除錯行為編碼 24

表 4-1 學生除錯求助對象優先次序之次數統計 26

表 4-2 學生使用 VB除錯工具的情形 26

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

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

表 4-5 學生除錯遭遇問題的情形 30

表 4-6 學生對除錯的看法 31

表 4-7 學生除錯成功情形 32

表 4-8 編號 3學生除錯行為觀察表 35

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 8: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

vii

附圖目錄

圖 3-1 螢幕錄製軟體 20

圖 3-2 研究實施步驟 21

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

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

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

圖 4-4 第二題正確執行結果 38

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

圖 4-6 第二題錯誤執行結果 2 38

圖 4-7 除錯問題第三題(速食店點餐)程式編譯畫面例 39

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 9: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

1

第一章 緒論

第一節 研究背景與動機

隨著數位化時代來臨擁有資訊能力是現代人需具備的基本技能如同教孩

子學習藝術創作寫作與演說等基本技能是為了能讓他們運用這些能力表達自

己並與外界溝通教授孩子程式設計也是讓他們能運用電腦創作發揮增強自我

的表達能力(Ellinger 2003)Resnick 等人(2009)指出學習程式設計能增進邏

輯思考問題解決能力等Hartmann Nievergelt 與 Reichert(2001)更建議把

程式設計(pRogramming)與其原有的閱讀寫作算術 3R(ReadingwRiting

aRithmatic)基本素養並列成新的4R在2003年美國計算機協會ACM(Association

for Computing Machinery)提出K-12電腦課程架構把電腦科學規劃成主要學科

而其他各國也相繼將電腦科學列為中小學的學習科目(Tucker et al 2004)

台灣的電腦課程為高中與高職必修科目其課程目的是要培養學生電腦科學

的基本概念及邏輯思維與問題解決的能力教材規劃上主要均是以程式設計為學

習的內容及工具程式設計儼然是教師教學的重點之一(教育部技職司2010

教育部國教司2008)雖然課程綱要未指定應教授的程式語言但大部分高中

教師均選擇使用 Visual Basic(VB)(陳宏煒2003)而高職教師亦是教授 Visual

Basic 程式語言為主高中職教師選擇使用 VB 的可能原因是早期台灣的課綱

主要是以 BASIC 語言為架構其直譯式的語言環境較編譯式單純易學後來有

了Windows 作業環境之後教師自然使用了支援該環境下的 VB

學習程式設計對初學者來說是很困難的許多的研究指出學生學習程式設

計常遭遇到的困難是如何找出程式錯誤之處並加以修改(Fitzgerald et al 2008

McCauley et al 2008 Simon et al 2008)初學者在解決程式錯誤時通常沒有

完全理解程式就以嘗試錯誤的方式修改導致無法成功地解決錯誤(Jadud 2005

Parsons amp Haden 2007 Simon et al 2008)Perkins等人(1986)分析學生學習

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 10: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

2

LOGO和BASIC程式設計的除錯行為發現有些學生面對程式錯誤時不知所措

且不願意進一步探索解決問題有些學生試圖解決問題並測試程式執行的結果

另外有些學生沒有深層思考就嘗試修改程式碼一直重複嘗試那些無效的解決

方法沈碧麗(2005)也發現當學生遇到程式錯誤時常無法自己找出錯誤的原

因而是立即求助於教師在電腦教科書中程式設計除錯的內容所佔的篇幅甚

小(McCauley et al 2008)電腦課程仍然很少給予學生正式的除錯訓練與教學

策略(Chmiel amp Loui 2004)顯然瞭解學生的除錯行為並給予學生適當的

除錯方法訓練應是程式設計教學的一個重要議題

除錯議題的研究主要的程式語言從早期的 BASIC(Gugerty amp Olson 1986

Perkins amp Martin 1986 Putnam et al 1986)至近期的 JAVA 程式語言(Fitzgerald

et al 2008 Jadud 2005 Murphy et al 2008 Simon et al 2008)相關電腦科學教

育文獻中很少探討 VB 的教學更遑論解析學生在的 VB 程式除錯行為而

VB程式語言提供可視化的介面讓學生在學習程式語言的時候不被語法和錯

誤訊息分心(Powers et al 2006)另外在程式編輯時有提供立即式的偵錯功

能輔助程式設計者除錯VB既然是台灣高中職程式設計(或問題解決)教學的

主要工具實有必要瞭解學生在學習程式設計時如何進行除錯以及對除錯抱

持的態度以進一步的提供電腦科學教育者參考並規劃有效的教學策略

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 11: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

3

第二節 研究目的

本研究目的旨在探討影響 VB程式設計初學者的除錯行為以及對於除錯的

態度根據研究目的本研究提出的待答問題如下

1 學生程式設計的除錯行為為何

2 學生對於程式設計除錯的態度為何

第三節 研究範圍限制

本研究的研究範圍與限制如下

1 本研究之課程範圍為程式設計基本程式概念其範圍包括變數迴圈

判斷副程式等內容

2 本研究之研究對象採方便取樣研究結果可能受限於研究對象若要將

結果推論至其他班級或學校須再擴大樣本數進行更深入的分析

第四節 名詞釋義

一除錯

除錯是指程式設計者在程式的測試過程中發現錯誤和找出確切錯誤的位置

並解決錯誤(McCauley 2008)在本研究中當程式設計者首次開始編譯執行程

式到程式成功運行這期間的過程都被包含在除錯的階段

二除錯行為

行為(behavior)是個體表現的一切活動表現在外且能被直接觀察記錄或

測量的活動(張春興2007)在本研究中除錯行為是指在除錯的階段程式

設計者所表現的行為特別針對學生除錯過程中察看測試編輯等行為以及

學生尋求對象求助除錯工具的使用來進行分析

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 12: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

4

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 13: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

5

第二章 文獻探討

本章分為三節就本研究運用之相關文獻整理歸納依「程式設計初學者

學習問題」「程式設計除錯」及「VB程式設計」三個面向進行探討

第一節 程式設計初學者學習問題

本節先是探討初學者學習程式設計時所遇到的困難再探討初學者在程式設

計過程中常犯的錯誤最後是探討程式錯誤類型

壹初學者遭遇的困難

程式設計是一個描述執行反思除錯(description- execution- reflection-

debugging- description)的循環過程(Valente 1995)程式設計不僅是撰寫程式

碼而是設計演算法的程序並考慮其程式輸出正確性與效率(Gal-Ezer 1998)

在這過程中必須撰寫精確程式碼告訴電腦該執行的指令所以瞭解程式語言的知

識與結構是很重要初學者在學習程式設計不僅是要瞭解程式語言的特性了解

程式架構與執行的流程並且要融會貫通程式語法與語法的結構(Bayman amp

Mayer 1988)但對於初學者來說這些龐大且複雜的程式語言和語法的結構

實在是非常困難且不容易理解對初學者學習造成難題與困擾 Lahtinen

Ala-Mutka與 Jaumlrvinen(2005)探究新手程式設計者的困難的研究中在課程內

容層面的問卷其中「在學習程式設計中什麼樣類型的問題是你覺得困難」問

卷結果指出學生覺得困難的排名前三名的依序是用設計程式來解決任務區分

程序的功能以及在程式中找到錯誤而多數的研究指出(Fitzgerald et al 2008

Jeffries 1982 McCauley et al 2008 Simon et al 2008)學生學習程式設計困難

是如何找出程式的錯誤並修改它而找出錯誤是最花費學生的時間

當然找出程式錯誤連帶就是要修改錯誤讓程式能夠正確執行但 Katz 與

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 14: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

6

Anderson(1987)提出當學生遇到程式出了問題或錯誤學生沒有好的方法來解

決程式的錯誤沈碧麗(2005)研究中亦提及教師於課堂上讓學生練習撰寫程式

當學生遇到問題時無法自己找出程式錯誤的來源一碰到問題就立即求助教師

由其是當初學者面對程式錯誤的訊息時他們無法瞭解錯誤訊息所指何意到底

是程式語法錯誤還是程式的語意錯誤對他們來說利用錯誤訊息來判斷程式的錯

誤的地方是很困難的(Hughes Jadud amp Rodrigo 2010 Marie et al 2008)

根據上述所述對初學者來說學習程式設計困難大多數是找不到程式錯誤在

哪裡以及不知道如何修改錯誤一碰到程式錯誤就束手無策當然對初學者來

說這些都是一種挑戰不管是要理解錯誤訊息找到錯誤修改錯誤都是很重要

學習程式設計的目標是能夠運用所學的程式語言來解決問題程式設計者在除錯

的過程中需要融會貫通程式語言的基本知識包含程式語言的語法知識和語意知

識才找出錯誤進行修復進而解決錯誤

貳初學者常犯的錯誤

找不到錯誤不知道如何修改常是初學者最困擾的地方而錯誤為什麼會產

生是因為程式設計的語意與我們自然語言的語意不同若初學者在學習程式設

計時沒有建構正確知識在設計程式時很容易就會產生程式錯誤(Bonar amp

Soloway1985)而 SpohrerSoloway與 Pope(1985)將初學者在設計 PASCAL

程式所犯的錯誤歸納為四種錯誤

1 遺漏(Missing)遺漏程式語法像是未宣告變數未定義變數

2 錯置(Misplaced)程式語法錯置

3 變形(Malformed)語法格式錯誤

4 偽裝(Spurious)寫入多餘不必要的程式語法

Perkins 和 Martin(1986)研究初學者學習 BASIC 程式設計困難的地方歸

納四種初學者常犯的錯誤

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 15: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

7

1 省略(Omissions)遺漏程式語法例如遺漏分號hellip等

2 錯置(Migrations)錯置或誤用語法將原本用在某個敘述的語法誤用

到其他語法敘述

3 次序錯誤(Sequence errors)程式碼順序上的錯誤

4 錯誤(Mistakes)無法歸類到以上三類的其他錯誤

Jadud(2005)研究初學者學習 BlueJ 最犯的錯誤其前三項為遺漏分號

(semicolon)未宣告變數(unknown variable)遺漏括號(bracket expected)

其最主要是皆是語法錯誤當遇到語法錯誤學生只需稍做修改就可以快速完成

編譯所以語法錯誤是容易修復的反之花費在編譯語意錯誤的時間比較多

McCauley(2008)研究初學者學習 JAVA 程式設計以 Spohrer 等人(1985)提出

的錯誤分類來設計程式設計題目其研究發現大多數是遺漏程式碼或是程式的結

構不正確

經由上述研究可以發現不管是哪一種程式語言初學者在設計程式時會

出現的錯誤不外乎是遺漏程式語法語法錯置格式錯誤雖然有些錯誤的產生

是跟程式語法程式結構有關但是仍有很大的原因是與程式語言的語法本身無

關(Spohrer 1986)

叁程式錯誤的類型

而程式發生錯誤主要的錯誤類型依照錯誤發生的階段與成因主要分為編

譯錯誤(compile-time errors)和執行階段錯誤(run-time errors)兩種(Ahmadzadeh

et al 2005 Spohrer amp Soloway 1986)

一編譯錯誤

編譯錯誤是指編譯程式時發現的錯誤這類型的錯誤通常是程式語法的錯誤

(syntax errors)因為程式設計者沒有遵循程式語言的語法包含語法使用有誤

或是拼字錯誤未清楚的定義變數或物件以及輸入不正確的程式敘述導致程

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 16: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

8

式無法順利編譯這類錯誤通常在編譯時會被自動檢查出來幫助程式設計者指

出錯誤並能夠即時修正(尹玫君1991)初學者程式設計錯誤型態大部分是程

式碼遺漏或是程式結構不正確(McCauley et al 2008)

二執行階段錯誤

執行階段錯誤是指程式在執行時出現未經預期的錯誤狀況這類型的錯誤通

常是邏輯錯誤(logic errors)或語意錯誤(semantic errors)程式設計者程式語

法並未撰寫錯誤而是語意錯誤這類錯誤在編譯的過程中無法被察覺因為程式

語法無錯誤不影響程式的執行是由於內在語意所產生的錯誤這些錯誤必須由

程式設計者自己來改正除錯(尹玫君1991)

由上述得知程式設計者在面對編譯錯誤時通常都能根據編譯軟體的指示即

時修正反之當遇到執行階段錯誤程式設計者必須自己找出語意錯誤並修正

錯誤而這類型錯誤的除錯過程正是需要深入研究並探討其成因

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 17: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

9

第二節 程式設計除錯

本節先是探討除錯重要性接著探討除錯應具備的知識最後再探討除錯行

壹除錯重要性

程式設計的過程中皆會遇到錯誤的產生很少有人第一次程式設計就成功

由其是初學者在不熟習程式語法與結構之下不管是程式的語法錯誤或語意錯誤

初學者必須經歷面對錯誤與解決錯誤的階段才能設計出可以運行的程式(Valente

1995)在程式設計的過程中Shneiderman(1980)將其分為四個階段程式的

理解程式的組織程式的除錯程式的修正吳正己與林凱胤(1997)程式設

計包括四個主要步驟瞭解問題的需求擬定解題的計畫撰寫程式碼及測試

與除錯所以程式要能成功的運行除錯是程式設計中重要的一個環節也是程

式設計的核心

Shneiderman(1980)定義除錯的能力分析錯誤找出錯誤以及改正錯誤

的能力McCauley(2008)除錯是指程式設計者在程式的測試過程中發現錯

誤和找出確切錯誤的位置並解決錯誤所以除錯是當程式發生錯誤要找出錯誤

並修改錯誤讓程式能成功執行而對初學者來說他們學習程式設計所遭遇的

困難大多數是找不到錯誤以及不知道如何修改錯誤這表示他們在程式設計的除

錯階段是有學習阻礙學生是需要除錯的能力來發現錯誤與修改錯誤除錯是必

須被教導的技能(Katz amp Anderson 1987)

但電腦課程卻很少給予學生正式的除錯訓練與教學策略(Chmiel amp Loui

2004)綜觀現今電腦教科書程式設計除錯的內容所佔的篇幅甚小(McCauley

et al 2008)教師在程式設計教學中往往會忽略教導除錯

根據上述教師與教科書缺乏教授除錯的內容大多數學生認為除錯是程式

編寫中的一部份學生沒有將除錯視為一個獨立的技能而教師在教學時也未特

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 18: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

10

別教授程式除錯的技能學生花費很多時間在程式的除錯上顯然瞭解學生的

除錯行為並給予學生適當的除錯方法訓練應是程式設計教學的一個重要議

貳除錯知識

除錯需要精通程式知識包含程式語法和語意以及理解程序應用(Gugerty

amp Olson 1986 Putnam Sleeman Baxter amp 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)

開始除錯首要的任務就是先預想與評估程式輸入與輸出的結果與實際上輸

入與輸出的結果的差異當實際上執行程式時依循著程式的程序的執行情況來

評估與理解程式同時也需要熟悉程式語言與一般程式設計的原則來理解程式

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

力來解決問題

AhmadzadehElliman與 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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 19: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

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)提出的七種除錯知識中之四者

相同可知擁有好的除錯能力的程式設計者這些除錯知識是需要具備的

叁除錯行為

行為(behavior)是個體表現的一切活動(張春興2007)只限於表現在外

且能被直接觀察記錄或測量的活動本研究提及的除錯行為是指除錯的階段程式

設計者所表現的一切活動Perkins 等人(1986)研究中以觀察和訪談的方式來

了解學生學習 LOGO 和 BASIC 程式設計中怎麼解決程式的問題提出以下兩種

解決的類型

1 停止者(Stopper)當學生面對程式錯誤時完全不知所措而且不願意

進一步探索解決問題就停止解決錯誤

2 行動者(Movers)學生試圖解決問題寫下或是修正程式碼並測試程

式執行的結果期間停頓思考的時間不足以代表學生是停止解決錯誤

另外從 Movers 衍伸出 Extreme movers是指學生沒有深層思考就嘗試

修改程式碼常會導致過多的錯誤而放棄解決錯誤或者是沒有針對錯誤

找出解決方法一直重複嘗試那些無效的解決方法

另外 Jeffries(1982)研究提及新手程式設計者在解決程式錯誤的問題時

常未完全理解程式碼便立即嘗試修改並測試Jadud(2006)藉由觀察學生編譯

與執行的過程來了解學生的除錯行為發現學生在發生編譯錯誤時很快地再次

重新編譯程式學生會藉由觀察程式執行的狀態來修改程式碼所以學生花很少

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 20: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 21: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

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

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 22: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

14

第三節 VB程式設計

本節主要是探討程式語言與工具的影響接著探討 VB程式設計學習阻礙

壹程式語言與工具的影響

學習程式設計其程式語言與環境也很重要 Garry和 Marcos(2002)引述

提出不同的程式語言適合不同的認知特點當然在教學上如果選用適當的程式語

言不僅會提升教學品質也會增進學生學習的動機與興趣Ousterhout(1998)

把程式語言分成兩大類

1 腳本式語言(Scripting language)如 TclVisual Basic在程式介面中

提供許多視覺化的工具使用者只需拖曳物件與設定物件的屬性使用

起來簡單容易

2 系統程式語言(System programming language)如 PascalCC++

Java程式介面中撰寫程式碼偏向文字式對程式初學者來說腳本式

語言比系統程式語言學習來的容易許多因為腳本式語言簡單的語法讓

學習更佳容易

Garry與Marcos(2002)把程式語言分成四種

1 程序式語言(Procedural)例如 COBOL

2 物件導向語言(Object Oriented)例如 C++Java

3 視覺化語言(Visual)例如 Visual Basic

4 腳本式語言(Script)例如 HTML

在程式設計環境提供一個可視化的介面運用拖曳(drag-drop)的功能可以

讓學生在學習程式語言的時候不被語法和錯誤訊息分心(Powers et al 2006)

雖然台灣高中職的課綱並沒有指定使用哪一種程式語言教授程式設計陳宏

煒(2003)研究提到 Visual Basic為最多教師所採用的程式語言其原因是教師

覺得學生比較容易學習且能引起學習興趣高中資訊科技概論教科書均以 Visual

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 23: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

15

Basic為主要的教材內容來教授程式設計而高職的程式設計主要也是以 Visual

Basic為教材內容

貳VB程式設計學習困難

Martin(1999)研究發現學生在學習 Visual Basic時候比較偏向學習物件

的知識而忽略程式設計的概念進而提出 Visual Basic有太多物件屬性要學習

這對於新手程式設計者來說不是最好的教授程式設計的教學工具陳明溥(2007)

提出使用複雜度較高的物件式程式設計工具(Visual Basic)在開始學習的時候

必須讓使用者熟練物件式工具才能使初學者在學習活動中能有效運用進而設

計任務

Ko等人(2004)研究指出初學者使用 Visual BasicNET 程式介面的學習阻

礙有以下六種阻礙

1 設計的阻礙(design barriers)使用者無法設計出正常執行的程式缺乏

程式設計基本的認知

2 選擇的阻礙(selection barriers)使用者無法選擇要使用哪些功能或元件

來設計程式也不知如何使用因為不知道這些介面或功能會有哪些作用

缺乏對介面或功能的瞭解

3 協調的阻礙(coordination barriers)使用者無法有效的連結物件與物件來

完成程式的執行無法做有效的協調但是大部分的使用者皆有達到有效

的假設

4 使用的阻礙(use barriers)使用者知道要選擇哪些功能與元件來設計程

式但是不知道如何使用也不知道使用後的結果是如何使用的阻礙包

含語法上的錯誤例如使用者不知道如宣告陣列的初始值就提出了一個

無效的假設導致語法的誤用

5 瞭解的阻礙(understanding barriers)使用者知道如何使用元件來設計程

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 24: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

16

式但是程式執行出來並不是使用者所預期的結果這其中包含了編譯錯

誤(Compile-time errors)與執行錯誤(run-time errors)使用者在編譯錯

誤時無法瞭解程式編譯時所提供錯誤訊息的提示所以不知道程式碼那邊

有出錯在執行錯誤時使用者無法預期程式的結果或是使用者所預期

的結果並未執行

6 訊息的阻礙(Information Barriers)主要是瞭解是用者是否瞭解程式介面

的使用例如使用者關掉程式設計的主要視窗但不知道或不清楚要如何

把它開啟使用者也不清楚系統提供的一些訊息或是提示另外使用者也

不願意使用偵錯工具(debugger)來解決錯誤的問題

由上述文獻可以得知高中職教師多以 Visual Basic為主要教授程式設計的

工具但其實不清楚學生在學習程式設計的過程中是否有學習到程式設計的概

念與培養問題解決的能力也不知道學生在面對程式錯誤或困難時會怎麼解決

問題所以從學生的程式設計的除錯過程瞭解老師的程式設計教學給予學生是

否足夠程式設計知識或是策略讓他們進行除錯(Robins Rountree amp Rountree

2003)教師必須要瞭解學生在學習 Visual Basic 面對問題的時候如何解決才能

幫助學生學習的更有效果

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 25: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

17

第三章 研究方法

本研究採用問卷調查了解學生對程式設計除錯的態度及看法並輔以訪談與

學生程式除錯過程觀察來瞭解學生的除錯行為根據此研究目的針對本研究的

研究設計研究對象研究工具實施步驟及資料分析分節加以說明如下

第一節 研究設計

本研究探討學生的除錯行為為了瞭解學生除錯的行為與除錯的態度想法

以高職三年資料處理科學生為研究對象研究主要是採用問卷調查方式進行輔

以訪談與觀察學生除錯的過程研究實施主要先以問卷調查參與學生除錯的行為

再由研究者從中選取八位學生輔以質性觀察學生除錯解題過程的方式深入了

解學生除錯行為事後以訪談來瞭解學生對於除錯的想法與意見資料分析依據

問卷調查的結果以及觀察螢幕錄製結果來瞭解學生如何除錯然後再利用訪談

學生的除錯想法與意見來相互驗證瞭解學生除錯行為問卷發放的時間運用

學生上完程式設計相關的課程後的下課時間讓學生填寫而質性觀察的部分是

運用學生課後的時間進行除錯問題的活動並訪談歷時三小時

第二節 研究對象

本研究是以台北市立某高職資料處理科高職三年級學生兩班共 72人為研究

對象所有研究對象皆修習過一學年的計算機概論與一學年的程式語言皆具備

基本程式設計概念另外八位觀察與訪談的研究對象是由兩班級的程式設計授

課教師挑選依學生前一學期的成績從級中選出兩名高成就三名中成就三名

低成就共八位學生除了兩名高成就學生為學校培訓程式設計比賽的選手有利用

課餘時間練習程式設計其他六名學生皆只有在課堂學習程式設計

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 26: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

18

第三節 研究工具

依本研究之研究目的為了更有效的蒐集資料以呈現研究結果本研究資料

來源包含程式設計問卷除錯問題等相關資料以下將詳細說明本研究之研究

工具

壹程式設計問卷

本問卷編製的目的是要了解學生在除錯過程當中解決錯誤的方式與行為

調查問卷內容是參考 Murphy等人(2008)擬定之除錯行為為依據經資訊教育

專家討論修訂從中選擇適合本研究的行為由研究者根據研究需要編製而成

問卷初擬完成後邀請兩位高職電腦教師針對問卷的適切性給予建議並邀請

八位學生試答再經與一位資訊教育專家討論修改後定稿(詳細內容如附錄一)

問卷為封閉式問題總共 20題其內容分為三個部分簡述如下

1 除錯行為(9題)學生除錯時發生的行為

2 除錯困難(6題)學生除錯時遭遇的問題

3 除錯的態度(5題)學生對於除錯的態度或想法

問卷採用李克特氏五等量表方式填答填答者依照題意最符合自己的想法

非常同意同意普通不同意非常不同意另外有兩題開放式問題「我對

程式除錯的感想」與「我覺得除錯最困難的地方是」以了解學生對除錯的感

貳除錯問題

本研究質性觀察會給予學生除錯問題讓學生進行實際除錯活動深入了解

學生實際除錯的過程其除錯題目的編製是研究者參考李啟龍和俞冠廷(2008)

編著的「Visual Basic 2008 程式設計 16堂特訓」以及中華民國電腦技能基金會

(2009)編製「Visual Basic 2008實力養成曁評量」等書籍修改成適合本研究

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 27: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

19

之除錯問題其除錯問題中的錯誤是研究者依據(Spohrer amp Soloway 1986)編

製(如表 3-1)經資訊教育專家論修訂以及兩位高職電腦教師給予建議針對

題目的適切性加以評定給予建議再與資訊教育專家討論後修訂出實驗時使

用的除錯問題(如表 3-2詳細題目見附錄二)

表 3-1 各除錯問題屬性

內容 問題 變形 錯置 遺漏 偽裝

基本概念 三的倍數

副程式 交換變數值

綜合 速食店點餐

表 3-2 除錯問題之錯誤內容列表

題目 錯誤

三的倍數 遺漏按鈕物件程式碼多餘指令敘述

交換變數值 呼叫副程式格式錯誤傳址參數錯置

速食店點餐 checkbox 控制物件格式錯誤If 判斷運算式錯置

遺漏按鈕物件多餘變數

叁螢幕錄製軟體

本工具主要是以螢幕錄製的方式記錄學生程式除錯的過程利用免費螢幕錄

製軟體 SCREEN2EXE 進行螢幕錄製(如圖 3-1)圖中紅框標示是螢幕錄製的畫

面是以全螢幕的方式錄製並根據學生的行為予以編碼和歸納進行分析並供

與研究者後續分析資料與佐證

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 28: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

20

圖 3-1 螢幕錄製軟體

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 29: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

21

程式設計除錯實作

錄影

螢幕錄製

第四節 實施程序

本研究主要以問卷調查以及觀察學生除錯過程與學生訪談等方式進行研究

實施步驟如圖 3-2所示

圖 3-2 研究實施步驟

壹 問卷施測

本研究的研究對象為資料處理科高職三年級學生問卷發放的時間為三年級

學期中學生上完程式設計相關課程後讓學生填寫是為了讓學生在上課時已經

有程式設計課堂練習的實作填寫問卷時較能符合平常學生除錯的行為其問卷

填寫時間為下課時間十分鐘

實驗開始

問卷施測(72位學生)

程式設計除錯實作(8位學生)

學生訪談(8位學生)

資料分析

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 30: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

22

貳 程式設計除錯實作

為了解學生之除錯行為本研究挑選八位學生進行質性觀察讓學生進行實

際除錯活動並訪談每位學生給予三題需要除錯的程式設計問題因研究者一人

無法兼顧八位學生一同進行質性觀察因此由本所研究生三名為指導員予以協助

進行方式每個除錯問題歷時約三十分鐘指導員五分鐘題目解說給予學生二

十分鐘上機實作除錯問題而其餘五分鐘為學生訪談部份學生除錯過程利用螢

幕錄製軟體以全螢幕錄製並架設錄影機對學生全程錄影觀察員在學生除錯實

作時會在旁邊協助器材架設與錄製並且當學生有問題時給予學生協助觀察

員在學生除錯實作結束後記錄觀察學生除錯的心得輔以研究者參考

叁 學生訪談

八位學生除錯每完成每一題除錯問題後會進行五分鐘至十分鐘不等錄音訪

談訪談的內容約五題到八題不等包含是否有成功除錯題目中的錯誤請簡

短敘述如何進行除錯的是否有看錯誤清單來進行除錯會先預先構思需要修改

的程式碼等等以深入了解學生對程式除錯的想法其訪談大綱詳細的內容見附

錄五

第五節 資料分析

本研究利用問卷蒐集資料採用李克特氏五等量表方式填答填答者依照題

意最符合自己的想法非常同意同意普通不同意非常不同意分別給予

5分4分3分2分1分之計算分數量表得分越高表示填答者越符合各題

敘述的程度反之得分越低表示填答者越不符合各題敘述的程度所蒐集到的

資料利用 SPSS 統計軟體進行統計分析其調查問卷的結果採描述性分析以平

均數次數分配百分比為主要的方法另外質性觀察資料主要是分析螢幕錄

製的學生除錯的過程與學生訪談的內容並根據學生的除錯行為予以編碼和歸納

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

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

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

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

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

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

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

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

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

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

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

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

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

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

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 31: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

23

進行分析以下針對學生除錯行為分析方法加以說明

學生除錯行為分析分為以下三個部分

1 分析螢幕錄製的資料

八位學生在解決除錯問題時均以螢幕錄製學生除錯的過程而研

究者針對螢幕錄製的資料輔以錄影資料將學生除錯過程以記錄於除錯

紀錄表中(如附錄三)而學生的除錯行為分成察看測試編輯求

助放棄其他行為(見表 3-3)紀錄方式為觀察學生連續的除錯行為

對照除錯行為編碼將其記錄下來(如附錄四)

2 分析學生訪談

將八位學生訪談編譯成為逐字稿並依個案學生加以編碼輔以驗

證歸納分析出的除錯行為

3 歸納學生除錯行為

由學生除錯的歷程歸納學生除錯行為是本研究探究的主要目的將

除錯行為編碼與訪談資料逐項整理分類與比較並多次進行重複比較

與驗證幫助研究者進行除錯行為分析時解釋研究結果

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

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

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

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

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

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

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

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

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

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

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

學生偵錯工具helliphellip

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

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

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

28

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

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

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

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

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

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

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

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

1 察看錯誤清單訊息

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

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

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

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 32: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

24

表 3-3 除錯行為編碼

行為類別 描述 編碼

1 察看

閱讀題目 R1

檢視程式碼 R2

檢視表單設計 R3

檢視物件屬性 R4

檢視錯誤清單 R5

閱讀提示訊息 R6

在紙上畫記追蹤程式碼 R7

2 測試

執行程式 T1

輸入資料測試輸出結果 T2

3 編輯 修改程式碼 E1

修改表單設計 E2

修改物件屬性 E3

4 求助

使用偵錯工具 H1

使用資源 H2

尋求他人協助 H3

5 放棄 停止解決錯誤 G1

6 其他 無關的其他行為 O1

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

問卷要求學生列出當程式發生錯誤時他們會優先求助的三個優先對象

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

(47次)其中學生最優先求助的對象「找同學幫忙」(59 次)的次數為最高

而選擇第一優先的選項以「找同學幫忙」(26次)「參考教科書或講義」(23次)

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

研究者那你知道什麼是偵錯工具嗎

學生偵錯工具hellip應該就是它知道這個不能執行之後它就跑不動了這樣

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

學生不知道 (訪談學生 8-1)

研究者你有使用偵錯工具嗎

學生偵錯工具helliphellip

研究者嗯你知道什麼是偵錯工具嗎

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

學生嗯沒有 (訪談學生 6-1)

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

點」來找出程式的錯誤 5 12 38 26 20 256

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 33: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

25

第四章 結果與討論

本章報導學生程式設計問卷填答結果並輔以八位學生除錯過程的觀察和訪

談資料綜合分析高職學生程式除錯行為與對除錯的態度

第一節 除錯行為

本節依據問卷所得的結果分別針對學生在除錯過程中的求助對象除錯工

具的使用修改錯誤情形等三個部份描述扣除掉 6份填答不完整之問卷最後

得到 66 份有效問卷以下的說明將問卷題目重新編號以助於描述的便利

壹求助對象

問卷要求學生列出當程式發生錯誤時他們會優先求助的三個優先對象

分析時以學生填寫前三項的優先次序分別依第一優先第二優先第三優先以

次數統計的方式來探討如表 4-1顯示六個選項的次數統計結果求助最優先的

前三項為「找同學幫忙」(59次)「找老師幫忙」(49次)「參考教科書或講義」

(47次)其中學生最優先求助的對象「找同學幫忙」(59 次)的次數為最高

而選擇第一優先的選項以「找同學幫忙」(26次)「參考教科書或講義」(23次)

為主要兩個選項就結果的發現當程式發生錯誤學生最常採取找同學幫忙參

考教科書或講義來解決程式的錯誤

另外表 4-1顯示第一優先與第二優先統計次數最低是「放棄解題」(皆為 1

人)顯然在除錯過程中學生不會遇到問題就先放棄會求助其他方式來解決

問題若尋求的幫助無法解決問題就會停止解決問題而選擇「其他」為第一

順序的八位學生其填的答案為「自己想」(5人)「自己檢查」(3人)皆說明

學生會自己先思考解決問題再尋求協助

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

研究者那你知道什麼是偵錯工具嗎

學生偵錯工具hellip應該就是它知道這個不能執行之後它就跑不動了這樣

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

學生不知道 (訪談學生 8-1)

研究者你有使用偵錯工具嗎

學生偵錯工具helliphellip

研究者嗯你知道什麼是偵錯工具嗎

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

學生嗯沒有 (訪談學生 6-1)

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

點」來找出程式的錯誤 5 12 38 26 20 256

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 34: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

26

表 4-1 學生除錯求助對象優先次序之次數統計

求助對象 第一優先 第二優先 第三優先 合計

1 找同學幫忙 26 26 7 59

2 找老師幫忙 5 22 22 49

3 參考教科書或講義 23 13 11 47

4 上網查詢資料 3 4 9 16

5 放棄解題 1 1 17 19

6 其他 8 0 0 8

貳除錯工具的使用

表 4-2 為學生使用除錯工具找到程式錯誤的分析整體而言六成以上

的學生指出他們使用 VB的「錯誤清單」(非常同意 21同意 38)「波

浪狀底線標註」(非常同意 27同意 35)以及「偵錯工具」(非常同意

18同意 48)來找到程式錯誤的地方其中以「偵錯工具」為學生最常使

用的方式

表 4-2 學生使用 VB除錯工具的情形

除錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「錯誤清單」

的訊息來找到錯誤的地

21 38 29 8 5 364

2 我常使用有「波浪狀底

線」標註的程式碼來找到

錯誤的地方

27 35 23 12 3 371

3 我常使用 VB的「偵錯

工具」來找到錯誤的地方 18 48 18 11 5 365

VB 的「偵錯工具」包括「及時運算」「逐步執行」以及「設定中斷點」

等三項表 4-3 顯示有五成學生的表示常使用「及時運算」(第 1題非常同

意 17同意 36)其他兩項則較低約有三成學生常使用「逐步執行」(第 2

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

研究者那你知道什麼是偵錯工具嗎

學生偵錯工具hellip應該就是它知道這個不能執行之後它就跑不動了這樣

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

學生不知道 (訪談學生 8-1)

研究者你有使用偵錯工具嗎

學生偵錯工具helliphellip

研究者嗯你知道什麼是偵錯工具嗎

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

學生嗯沒有 (訪談學生 6-1)

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

點」來找出程式的錯誤 5 12 38 26 20 256

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 35: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

27

題非常同意 9同意 24)不到兩成的學生使用「偵錯工具」為「設定中

斷點」(第 3題非常同意 5同意 12)雖然有約五成的學生指出他們會使

用「及時運算」找出程式錯誤但觀察八位學生的除錯過程發現學生都不清楚

debugprint 指令的意涵訪談時也均「不知道」此指令或「老師沒有教」顯然

學生在問卷的回答僅顯示他們曾用過「及時運算」視窗來觀看程式輸出結果但

並未能夠以它來進行除錯事實上在整個觀察學生除錯的過程發現八位學生

皆未使用「偵錯工具」進行除錯而經由訪談得知僅有兩位學生使用過「偵錯工

具」有些學生甚至以為「偵錯工具」指的就是「錯誤清單」以下為訪談之二例

研究者那你知道什麼是偵錯工具嗎

學生偵錯工具hellip應該就是它知道這個不能執行之後它就跑不動了這樣

研究者那你知道就是這個helliphellip就是即時運算就是中斷點

學生不知道 (訪談學生 8-1)

研究者你有使用偵錯工具嗎

學生偵錯工具helliphellip

研究者嗯你知道什麼是偵錯工具嗎

學生是點一下(錯誤清單的訊息)會跟你說錯的地方在哪裡

研究者就是類似中斷點啊那些的

學生嗯沒有 (訪談學生 6-1)

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

點」來找出程式的錯誤 5 12 38 26 20 256

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 36: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

28

表 4-3 「偵錯工具」各項的使用情形

偵錯工具 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常使用「及時運算」

來找出程式的錯誤 17 36 27 11 9 341

2 我常使用「逐步執行」

來找出程式的錯誤 9 24 38 17 12 302

3 我常使用「設定中斷

點」來找出程式的錯誤 5 12 38 26 20 256

叁除錯構思

表 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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 37: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

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

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 38: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

30

表 4-5 學生除錯遭遇問題的情形

除錯遭遇問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我常看不懂「錯誤清

單」中的訊息 5 15 39 24 17 267

2 我常找不到程式的錯

誤在哪裡 3 15 35 30 17 258

3 我知道程式的錯誤在

哪裡但是常不知道如何

修改錯誤

2 17 29 33 20 247

4 我常不知道使用哪些

資料來測試程式的執行

結果

9 33 36 17 5 326

5 我覺得程式「編譯錯

誤」的問題容易解決 2 21 58 17 3 302

6 我覺得程式「執行結果

錯誤」的問題容易解決 6 20 42 26 6 294

貳對除錯的看法

表 4-6主要呈現是學生對於除錯的態度的填答情形由第 2題有八成的學生

(非常同意 50同意 32)認同成功除錯後會非常高興第 1題只有兩成的

學生(非常同意 6同意 17)喜歡除錯把除錯視為一種挑戰因此可以知道

學生雖然沒有喜歡除錯但成功除錯後會非常高興第 3 題第 4題第 5題這

三題想要了解學生對於自己除錯技巧的態度第 5題有五成的學生(非常同意

12同意 39)認同除錯技巧是由經驗累積而不是老師的教授第 4題有六

成的學生(非常同意 21同意 44)認同除錯技巧部分是靠天分由此得知

大部分的學生覺得除錯的技能是自己的經驗累積以及靠天分並不是靠老師的教

授亦可以從第 3題僅不到三成的學生(非常同意 0同意 23)認為自己的

除錯技巧不錯所以大部份學生自評自己的除錯技能並未很好

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 39: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

31

表 4-6 學生對除錯的看法

問題 非常

同意 同意 普通 不同意

非常

不同意 平均

1 我喜歡除錯我認為它

是一項對自己的挑戰 6 17 45 21 11 286

2 當成功除錯後我會非

常高興 50 32 17 0 2 429

3 我認為自己的除錯技

巧還不錯 0 23 39 26 12 273

4 我認為除錯技巧有點

是靠天分 21 44 29 3 3 377

5 我認為除錯技巧是由

經驗累積而不是老師的

教授

12 39 26 18 5 336

在問卷的開放式問題中請學生描述「我對程式除錯的感想」(詳細填答內容

見附錄六)可以歸納出以下幾種

1 除錯成功很有成就感很開心很感動(23位)

2 除錯很難(10位)

3 除錯很麻煩(6位)

第一項中有 14 位學生相同寫下除錯成功很有成就感有 9 位學生寫下除錯很開

心很感動表示有 23位學生對於成功除錯有正向的態度亦對應到表 4-7第 2

題有八成的學生認為除錯成功會非常高興因此除錯成功是否對學生的學習心態

是有影響另外問卷中有 10位寫下除錯很難有 6位學生寫下除錯很麻煩較

為負面的態度亦對應到表 4-7第 1題不到三成的學生喜歡除錯把除錯視為一種挑

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 40: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

32

第三節 除錯過程

觀察學生實際除錯過程中的螢幕錄製與錄影的資料為主來分析學生除錯的

行為從兩班 72 名學生中共抽取 8名學生給予三題含有錯誤的程式設計題目

進行除錯的活動每題除錯時間為 20 分鐘以下分別就學生整體除錯情形來探

表 4-7為八位學生除錯成功情形的統計第一題除錯問題(三的倍數詳見

附錄二)除了編號 3的學生之外其他學生皆有成功除錯第二題除錯問題(交

換變數值詳見附錄二)有三位學生(編號 2編號 7編號 8)成功除錯第

三題除錯問題(速食店點餐詳見附錄二)只有編號 2的學生成功除錯編號 2

的學生是三題除錯問題皆有成功除錯而編號 3的學生皆未成功除錯以下分別

就此三題除錯問題來探討八位學生的除錯行為

表 4-7學生除錯成功情形

學生

編號

第一題

成功除錯

第二題

成功除錯

第三題

成功除錯

1 - -

2

3 - - -

4 - -

5 - -

6 - -

7 -

8 -

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 41: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

33

一第一題除錯問題mdash三的倍數

圖 4-1所示為程式編譯錯誤之畫面例圖中所示為成是編譯錯誤之畫面例

圖中紅框表示包含了編譯錯誤遺漏物件按鈕的事件程序執行錯誤多餘指令

敘述此題主要是基本概念瞭解學生除錯是否會看錯誤清單找出錯誤以及從

程式執行錯誤的結果找出錯誤

圖 4-1 除錯問題第一題(三的倍數)程式編譯畫面例

分析八位學生修改程式的過程中可以歸納出以下幾種行為

1 察看錯誤清單訊息

八位學生修改程式碼過程中皆出現修改「Dim ab as integer」此行程式碼

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 42: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

34

重新宣告 ab 變數修改完後錯誤清單上的錯誤並未修正其後馬上又復原程

式碼顯然學生在修改錯誤時會察看錯誤清單中顯示的訊息來修改程式碼當

編輯完成後錯誤並未解決便復原或繼續修改程式碼

2 學生以嘗試錯誤的方式修改程式碼

學生在修改在 For 迴圈 If敘述的部份「if i mod 3 ltgt 0 Then Continue For」

此行程式碼的意思是指當 i 不是 3的倍數時就直接跳回至 for迴圈此行程式碼

是無錯誤的而四位學生(編號 1467)不理解「if i mod 3 ltgt 0 Then Continue

For」此行指令將此行程式碼修改為

「if i mod 3 = 0 Then Continue For」(學生編號 14)

「if i mod 3 ltgt 0 Then Exit For」(學生編號 67)

亦可由下表 4-8可知編號 3學生除錯此題的過程(詳細行為觀察表請見附錄

四)當學生執行修改的程式碼後發現程式輸出結果錯誤又繼續修改此行程

式碼把 Continue ForExit For 刪除再次執行修改後的程式碼亦從學生的除

錯行為觀察表可以發現學生不瞭解程式碼的意思

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 43: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

35

表 4-8 編號 3學生除錯行為觀察表

時間 行為 編碼

648 察看程式碼 R2

753 編輯程式碼剪下 continue For 程式碼

改成「if I mod 3 ltgt 0 then」

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改「if I mod 3 ltgt 0 then」

改成「if I mod 3 ltgt 0 then i+1」

E1

834 編輯程式碼寫入宣告 c

改成「Dim abc as integer」

E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then c= i+1」

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改「if I mod 3 ltgt 0 then i+1」

改成「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

E1

1013 察看程式碼 R2

1148 編輯程式碼修改「if I mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo」

改成「if I mod 3 ltgt 0 then txtOutputText=rdquordquo」

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

3 使用註解的功能讓程式編譯時跳過錯誤的程式碼

編號 4學生在已修改完編譯錯誤遇到執行錯誤時利用註解的功能(如圖

4-2)讓程式暫不執行已註解的程式碼再由程式的輸出結果來判斷是否要繼續

修改程式碼

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 44: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

36

圖 4-2 編號 4 學生使用註解的功能

4 使用記事本的功能以便能備忘程式碼

編號3學生修改過程中會把程式碼複製至記事本把記事本當成是備忘錄

亦從修改的過程當中發現此位同學未能理解程式碼一直試圖修改錯誤但是在

修改的過程當中卻又增加了許多錯誤導致此題未除錯成功

經實際觀察發現學生除錯過程會使用除錯工具中的「錯誤清單」的訊息找

出程式錯誤的地方但對於錯誤訊息所代表的意思並非全然瞭解就如同學生反

覆修改變數但此行程式碼是無錯誤的程式的主要的編譯錯誤是錯誤訊息 3

與 4指出的「陳述式不可以出現在方法主體之外」若學生知道此錯誤訊息所代

表的意思就能找出遺漏物件按鈕的事件程序另外當學生不理解語法的運用

他們會以嘗試錯誤的方式修改程式碼一邊嘗試修改程式碼一邊觀察除錯清單

與執行結果的變化在修改程式碼的過程中反而產生新的錯誤或是學生在修改

過程會先試著刪除修改讓程式暫時無編譯錯誤可以執行從觀察程式輸出的結果

再進行修改而學生這兩種修改方式缺乏預完成程式的知識容易發生在修改錯

誤的時候錯誤沒有減少反而增加新的錯誤導致程式最後無法除錯成功

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 45: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

37

二第二題除錯問題mdash交換變數值

圖 4-3所示為程式編譯錯誤之畫面例主要是利用副程式「傳值呼叫」與「傳

址呼叫」圖中紅框標示包含了編譯錯誤呼叫副程式的語法指令執行錯誤

參數 Byref的設定二位學生(編號 2編號 8)利用錯誤清單與提示訊息編

輯修改程式碼與執行程式後快速就找出副程式語法指令以及傳址參數設定的錯

圖 4-3除錯問題第二題(交換變數值)程式編譯畫面例

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 46: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

38

四位學生(編號 1編號 4編號 5編號 6)以為修改完有波浪狀底線標

註的程式碼「swap_by_value(ij)」「swap_by_Address(ij)」的編譯錯誤後就以

為自己已經成功除錯而停止解題並沒有仔細檢查程式是否正確執行成功(圖

4-4)其錯誤執行結果如圖 4-5所見並未解決參數 Byref 的設定的錯誤

圖 4-4第二題正確執行結果 圖 4-5第二題錯誤執行結果 1

編號 3學生修改完上述波浪狀底線標註的程式碼後執行程式時發現輸出結

果是不正確並未修改 Byref參數設定而是修改變數的位置

「swap_by_Address(ji)」讓輸出結果看起來很像正確的程式碼其執行結果如圖

4-6所見由此得知學生會利用其他替代的方法來讓輸出的結果看起來像正確

的執行結果但是卻不是真正的解決錯誤

圖 4-6 第二題錯誤執行結果 2

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 47: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

39

三第三題除錯問題mdash速食店點餐

圖 4-7所示為程式編譯錯誤之畫面例主要是想要了解學生除錯 VB 的物件

與物件屬性值的行為包含了編譯錯誤CheckBox 控制項設定(cbUPFChecked

cbUPDChecked)執行錯誤遺漏物件按鈕if敘述條件的錯誤

圖 4-7除錯問題第三題(速食店點餐)程式編譯畫面例

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 48: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

40

在除錯的過程中四位學生(編號 1578)看到有波浪狀底線標註的

「cbUPFChecked」「cbUPDChecked」就把此兩行刪除讓程式可以執行之後

再修改但這些學生因為刪除了這兩行程式碼最後都沒有成功達到題目的要求

二位學生(編號 3編號 4)先註解這兩行有波浪狀底線標註的程式碼讓程式

可以執行之後再進行修改遺漏物件按鈕與 if敘述條件的執行階段錯誤八位

學生皆能夠解決大部分學生皆表示解決表單設計的問題比解決程式碼錯誤容易

許多

綜合以上所觀察到學生的除錯情形當學生遇到編譯錯誤像是語法錯誤或

是有波浪狀底線標註的程式碼時會先試者刪除修改讓程式暫時無編譯錯誤試

試看執行程式的結果如以下的行為

1 把波浪狀底線標註的程式碼刪除再復原其刪除的程式碼

2 剪下複製程式碼貼在應用程式「記事本」

3 利用註解的功能把有波浪狀底線標註的程式碼註解

學生認為有錯誤的程式刪除修改或是複製到「記事本」或是利用註解的

功能讓程式暫時無編譯錯誤可以執行程式再察看程式執行輸出的結果並從

輸出的結果來編輯修改程式碼但如果程式輸出的結果不是學生所預期的結果

學生就會復原剛剛刪除的程式碼再重新編輯而學生利用註解的功能或是「記

事本」的功能當修改程式碼後若程式輸出不是預期的結果學生就可以察看複

製在記事本上的程式碼或是註解起來的程式碼察看初始的錯誤程式碼再重新

思考如何修改程式碼從以上的行為亦可得知學生較缺乏預完成程式的知識

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 49: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

41

第五章 結論與建議

本研究旨在探究初學者程式除錯行為以高職三年級學生兩班 72人為研究

對象了解學生程式除錯行為及對除錯態度研究採用問卷調查法並輔以觀察與

訪談針對學生除錯行為進行分析期能根據分析結果提出具體建議以提供教師

參考研究結論與建議分述如下

第一節 結論

根據第四章的結果本研究發現以下三項結論

壹 學生僅能倚賴編譯環境呈現的訊息來找到程式錯誤

由問卷調查中發現學生進行除錯時利用 VB除錯工具如「錯誤清單」「波

浪狀底線標註」程式碼來找到程式錯誤經由觀察學生除錯過程中發現此兩項

除錯工具是學生最常使用的除錯工具亦從學生訪談中可得知此兩項除錯工具來

幫助他們找到程式錯誤反而甚少使用「偵錯工具」來進行除錯有些學生甚至

不知道如何使用

貳 學生除錯知識不足

多數學生認為自己的除錯技巧不是很好並認為除錯技巧是靠自己的天份與

經驗累積而不是老師教授由問卷調查中發現學生除錯時都是邊思考邊修改

程式碼鮮少學生是全部構思好才進行修改而實際觀察發現學生除錯時會以

嘗試錯誤的方式修改程式碼和先修改刪除或是以註解的方式讓程式暫時無編譯

錯誤可以執行從觀察程式執行的情況再進行修改其修改方式表示學生缺乏除

錯知識中預完成程式的知識除錯的方法和程式錯誤的知識

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 50: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

42

叁 除錯成功可以帶給學生很大的成就感

學生通常不太喜歡除錯覺得除錯很困難且麻煩但在除錯成功後都會感到

成就感以及非常開心所以成功除錯對學生學習心態是有正向影響並且增加學

生的信心

第二節 建議

壹 教學建議

一加強除錯的教學

學生雖然不喜歡除錯但在除錯成功後都會感到成就感以及非常開心從問

卷開放式調查中發現學生認為除錯最困難是不知道錯誤在哪裡不知道如何修改

錯誤從研究中發現學生缺乏預完成程式的知識除錯的方法和程式錯誤的知

識如果教師能藉由教學設計加強學生除錯的方法與知識不僅能夠提升學生的

除錯技能也能增加學生學習的成就感亦可以增加他們勇於面對問題進而解決

問題反而能增加他們學習的正向態度

貳 對未來研究建議

一增加學生樣本數重複本研究

由於本研究採兩班做為受試研究對象以量化統計輔以質性資料的分析以

個案的方式觀察八位學生除錯過程學生樣本數較少本研究只歸納八位學生共

通性的除錯行為並未深入比較高中低成就學生的除錯行為是否有不同因

此建議未來的研究可以擴大學生的樣本數並以質性資料如除錯行為觀察表深入

探討進行分析更能完整分析學生除錯行為

二應依程式設計的概念設計不同類型的除錯題目

本研究的除錯題目僅針對受試學生所學過的課程內容來設計此範圍涵蓋變

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 51: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

43

數迴圈判斷副程式等內容因除錯題目僅有三題並非涵蓋所有的程式概

念未來研究可以增加陣列遞迴等更具深度的內容或者考慮設計不同的程式

概念為獨立的除錯題目研究是否會有不同的除錯行為以全面瞭解學生除錯的

情形

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 52: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

44

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 53: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

45

參考文獻

中華民國電腦技能基金會(2009)Visual Basic 2008 實力養成曁評量台北市

碁峰資訊

尹玫君(1991)電腦程式設計能力與認知能力相關之研究臺南師院學報24

李啟龍和俞冠廷(2008)Visual Basic 2008 程式設計 16堂特訓台北市文魁

資訊股份有限公司

李進益(2003)影響高(中)職資訊科學生學習滿意度因素之研究(未出版之

碩士論文)國立彰化師範大學彰化市

沈碧麗(2005)高職電腦教師教學信念之個案研究(未出版之碩士論文)國立

臺灣師範大學臺北市

張春興(2007)教育心理學台北市東華出版社

教育部技職司(2010)職業學校群科課程綱要臺北教育部

教育部國教司(2010)普通高級中學課程綱要臺北教育部

陳宏煒(2003)高中電腦課程實施現況調查(未出版之碩士論文)國立臺灣師

範大學臺北市

陳明溥(2007)程式語言課程之教學模式與學習工具對初學者學習成效與學習

態度之影響師大學報科學教育類521-21

Ahmadzadeh M Elliman D amp Higgins C (2005) An analysis of patterns of

debugging among novice computer science students SIGCSE Bulletin 37(3)

84-88 doi 10114511519541067472

Bayman P amp Mayer R E (1988) Using conceptual models to teach BASIC

computer programming Journal of Educational Psychology 80(3) 291-298

Bonar J amp Soloway E (1985) Preprogramming knowledge a major source of

misconceptions in novice programmers Human-Computer Interaction 1(2)

133-161

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 54: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

46

Chmiel R amp Loui M C (2004) Debugging from novice to expert SIGCSE

Bulletin 36(1) 17-21

Decasse M amp Emde A M (1988) A review of automated debugging systems

knowledge strategies and techniques Proceedings of the 10th International

Conference on Software engineering 162-171 Singapore

Ellinger H (2003) A nature sense of algorithm Children should learn computer

programming as a basic skill Retrieved Febuary 13 2009 from

httphunterellingerorgeducationProgrammingForChildrenhtm

Fitzgerald S Lewandowski G McCauley R Murphy L Simon B Thomas L

amp Zander C (2008) Debugging Finding Fixing and Flailing a

Multi-Institutional Study of Novice Debuggers Computer Science Education

18(2) 93-116

Gal-Ezer J amp Harel D (1998) What (else) should CS educators know

Communications of the ACM 41(9) 77-84

Garry L W amp Marcos P S (2002) A theory of the relationship between cognitive

requirements of computer programming languages and programmers

cognitive characteristics Journal of Information Systems Education 13(1) 59

Gugerty L amp Olson G (1986) Debugging by skilled and novice programmers

ACM SIGCHI Bulletin 17(4) 171-174

Hartmann W Nievergelt J amp Reichert R (2001) Kara finite state machines and

the case for programming as part of general education Proceedings of the

2001 IEEE Symposia on Human-Centric Computing Languages and

Environments 135-141 Stresa Italy

Hughes M C Jadud M C amp Rodrigo M M T (2010) String formatting

considered harmful for novice programmers Computer Science Education

20(3) 201-228 doi 101080089934082010507335

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 55: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

47

Jadud M C (2006) Methods and tools for exploring novice compilation behaviour

Paper presented at the Proceedings of the second international workshop on

Computing education research Canterbury United Kingdom

Jeffries R (1982) A comparison of the debugging behavior of expert and novice

programmers Paper presented at the American Education Research

Association Annual Meeting New York

Katz I R amp Anderson J R (1987) Debugging an analysis of bug-location

strategies Human-Computer Interaction 3(4) 351-399

Ko A J Myers B A amp Aung H H (2004) Six Learning Barriers in End-User

Programming Systems Paper presented at the Proceedings of the 2004 IEEE

Symposium on Visual Languages - Human Centric Computing

Lahtinen E Ala-Mutka K amp Jaumlrvinen H-M (2005) A study of the difficulties of

novice programmers SIGCSE Bulletin 37(3) 14-18

Marie-H Nienaltowski n Pedroni M amp Meyer B (2008) Compiler error

messages what can help novices SIGCSE Bulletin 40(1) 168-172 doi

10114513523221352192

Martin J (1999) Teaching with Visual BASIC Journal of Computer Science

Education 13(1) 12-15

McCauley R Fitzgerald S Lewandowski G Murphy L Simon B Thomas L

amp Zander C (2008) Debugging a review of the literature from an

educational perspective Computer Science Education 18 67-92

Murphy L Lewandowski G McCauley R Simon B Thomas L amp Zander C

(2008) Debugging the good the bad and the quirky -- a qualitative analysis

of novices strategies SIGCSE Bulletin 40(1) 163-167 doi

10114513523221352191

Ousterhout J K (1998) Scripting higher level programming for the 21st Century

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 56: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

48

Computer 31(3) 23-30

Parsons D amp Haden P (2007) Programming osmosis Knowledge transfer from

imperative to visual programming environments Proceedings of The

Twentieth Annual National Advisory Committee on Computing Qualifications

Conference 209-215 Hamilton New Zealand

Perkins D Hancock C Hobbs R Martin F amp Simmons R (1986) Conditions of

learning in novice programmers Journal of Educational Computing Research

2(1) 37-55

Perkins D amp Martin F (1986) Fragile knowledge and neglected strategies in novice

programmers Empirical studies of programmers Ablex Norwood NJ (1986)

213ndash229

Powers K Gross P Cooper S McNally M Goldman K J Proulx V amp Carlisle

M (2006) Tools for teaching introductory programming what works

SIGCSE Bulletin 38(1) 560-561 doi 10114511247061121514

Putnam R Sleeman D Baxter J amp Kuspa L (1986) A summary of

misconceptions of high school basic programmers Journal of Educational

Computing Research 2(4) 459-472

Resnick M Maloney J Hernandez A Rusk N Eastmond E Brennan K

Silverman B (2009) Scratch Programming for Everyone Communications

of the ACM 52(11) 60-67

Robins A Rountree J amp Rountree N (2003) Learning and Teaching Programming

A Review and Discussion Computer Science Education 13(2) 137-172 doi

101076csed13213714200

Shneiderman B (1980) Software psychology Human factors in computer and

information systems (Winthrop computer systems series) Winthrop Publishers

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 57: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

49

Simon B Bouvier D Chen T Lewandowski G McCartney R amp Sanders K

(2008) Common sense computing (episode 4) debugging Computer Science

Education 18(2) 117-133

Spohrer J G amp Soloway E (1986) Analyzing the high frequency bugs in novice

programs Paper presented at the Papers presented at the first workshop on

empirical studies of programmers on Empirical studies of programmers

Washington DC United States

Spohrer J C Soloway E amp Pope E (1985) A GoalPlan Analysis of Buggy Pascal

Programs HumanndashComputer Interaction 1(2) 163-207 doi

101207s15327051hci0102_4

Tucker A Deek F Jones J McCowan D Stephenson C amp Verno A (2004) A

model curriculum for K-12 computer science Retrieved February 13 2009

from

httpwwwcstaacmorgCurriculumsubCurrFilesK-12ModelCurr2ndEdpdf

Valente J (1995) Logo as a window into the mind Logo Update 4(1) 1-4

Retrieved February 13 2009 from

httpelmediamitedulogo-foundationpubslogoupdatev2004n2001html

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 58: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

50

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 59: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

51

附錄一 程式設計問卷調查

程式設計問卷調查

親愛的同學你好

這份問卷是用來瞭解你學習程式設計的情形請你就每一題選擇最符合你想法

的選項並在裡打「ˇ」本問卷不具名請依你個人實際情況作答沒有標準答

案謝謝你的合作

1 當程式「發生錯誤」時通常我採取下列步驟的優先次序是(1 為第一優

先2 為第二優先3 為第三優先數字不可重複請至少要填入三項)

( )找同學幫忙

( )找老師幫忙

( )參考教科書或講義

( )上網查詢資料

( )放棄解題

( )其他請說明

2 當我開始修改錯誤的程式碼時通常 (單選)

我已經全部構思好擬修改的程式碼

我已經大概構思好擬修改的程式碼

我直接修改程式碼邊修改邊構思

3 我覺得除錯最困難的地方是請寫下來

4 我對程式除錯的感想(以幾句話來形容)請寫下來

背面有題請繼續填答

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 60: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

52

請你就每一題選擇最符合你想法的選項並在裡打「ˇ」

選 項

題 目 內 容

1 當程式「發生錯誤」時我通常使用以下工具

A 我常使用「錯誤清單」的訊息來找到錯誤的地方

B 我常使用有「波浪狀底線」標註的程式碼來找到錯誤

的地方

C 我常使用 VB 的「偵錯工具」來找到錯誤的地方

2 VB 的「偵錯工具」我常使用以下工具

A 我常使用「及時運算」來找出程式的錯誤

B 我常使用「逐步執行」來找出程式的錯誤

C 我常使用「設定中斷點」來找出程式的錯誤

3 我常看不懂「錯誤清單」中的訊息

4 我覺得程式「編譯錯誤」的問題容易解決

5 我覺得程式「執行結果錯誤」的問題容易解決

6 我常找不到程式的錯誤在哪裡

7 我知道程式的錯誤在哪裡但是常不知道如何修改錯誤

8 我常不知道使用哪些資料來測試程式的執行結果

9 我喜歡除錯我認為它是一項對自己的挑戰

10 當成功除錯後我會非常高興

11 我認為自己的除錯技巧還不錯

12 我認為除錯技巧有點是靠天分

13 我認為除錯技巧是由經驗累積而不是老師的教授

填答完畢謝謝您

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 61: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

53

附錄二 除錯題目

列出區間內三的倍數

題目說明

輸入「起始值」與「終止值」按下「列出區間內所有三的倍數」按鈕後會列

出所有 3 的倍數

屬性值設定

物件 屬性 屬性值

Label1 Text 起始值

Label2 Text 終止值

Button1 Text 列出區間內三的倍數

Textbox3 (Name) txtOutput

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 62: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

54

交換變數值

題目說明

依序按下「傳值呼叫」與「傳址呼叫」按鈕後會出現下圖的運算結果

屬性值設定

物件 屬性 屬性值

Button1 Text 傳值呼叫

Button2 Text 傳址呼叫

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 63: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

55

速食店點餐

題目說明

請完成速食店點餐的程式依照點選套餐的內容並輸入數量算出金額

1 每種套餐可選擇一項主餐一項副餐和一項飲料現在的表單無法正確的

選擇請修正為正確的表單

2 選到副餐為薯條時可以再選擇「薯條加大」的五元升級方案若選到其他

種類的副餐則須將「薯條加大」的 CheckBox 控制項設為不可核取

3 選到飲料為可樂時可以再選擇「可樂加大」的五元升級方案若選到其他

種類的飲料則須將「可樂加大」的 CheckBox 控制項設為不可核取

4 按「結帳」按鈕時顯示「謝謝光臨」的訊息

屬性值設定

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 64: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

56

物件 屬性 屬性值

RadioButton1 (Name) rbA1

Text 1 號餐兩塊雞套餐(129 元)

RadioButton2 (Name) rbA2

Text 2 號餐雙層漢堡套餐(99 元)

RadioButton3 (Name) rbB1

Text 薯條

RadioButton4 (Name) rbB2

Text 玉米

RadioButton5 (Name) rbB3

Text 沙拉

RadioButton6 (Name) rbC1

Text 可樂

RadioButton7 (Name) rbC2

Text 紅茶

RadioButton8 (Name) rbC3

Text 雪碧

CheckBox1 (Name) cbUPF

Text 薯條加大

CheckBox2 (Name) cbUPD

Text 可樂加大

TextBox1 (Name) txtPrice

TextBox2 (Name) txtQty

TextBox3 (Name) txtAmt

Button1 (Name) Btn_GO

Text 結帳

Label1 Text 單價

Label2 Text 數量

Label3 Text 金額合計

Label4 Text 元

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 65: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

57

附錄三 除錯行為觀察表

除錯行為觀察表

題目

是否完成 是 否

總時間

學生編號

時間 行為 編碼

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 66: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

58

附錄四 除錯行為觀察表示例

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 615 分

學生編號 編號 2

時間 行為 編碼

000 察看題目 R1

048 表單設計點選 Form切換至檢視程式碼

Form1_Load 的程式區段 R3

052 察看程式碼 R2

100 切換至表單設計察看 ExEOuEpuE EexEbox 屬性

值 R4

134 切換至檢視程式碼察看程式碼 (ExEOuEpuE 那

行) R2

156 編輯程式碼在 if 敘述寫入(end if )程式碼 E1

203 察看程式碼 R2

220 編輯程式碼在 if 敘述刪除(end if )程式碼 E1

223 察看程式碼 R2

233 編輯程式碼刪除 i as inEeger 修改成 i E1

240 察看程式碼 R2

245 編輯程式碼復原刪除 (i 修改成 i as inEeger) E1

248 察看程式碼 R2

252 執行程式 (編譯錯誤) T1

257 察看錯誤清單的錯誤訊息 R5

306 察看程式碼 R2

328 編輯程式碼宣告 i as inEeger E1

330 察看程式碼 R2

338 編輯程式碼刪除宣告 i as inEeger E1

340 切換至表單設計點選 buEEon1進入

buEEon1_click 程式區段 R2

345 編輯程式碼剪下程式碼把程式碼移置 buEEon1

click 的程式區段 E1

408 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 67: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

59

察看輸出結果

437 察看程式碼 (迴圈部分) R2

458 編輯程式碼修改 ExEOuEpuEEexE amp=i amp ldquo rdquo 修改

成 ExEOuEpuEEexE amp= ExEOuEpuEEexE amp ldquo rdquo E1

509 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

531 察看程式碼 R2

533 編輯程式碼刪除 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp ldquo rdquo E1

537 執行程式 ((輸入 250 測試)程式輸出錯誤) T1

察看輸出結果

546 編輯程式碼寫入 ExEOuEpuEEexE =

ExEOuEpuEEexE amp i 修改成 ExEOuEpuEEexE amp=

ExEOuEpuEEexE amp i amp ldquo rdquo

E1

552 執行程式 (輸入 250 測試) T1

615 停止 成功除錯

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 68: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

60

除錯行為觀察表

題目 三的倍數

是否完成 是 否

總時間 2000

學生編號 編號 3

時間 行為 編碼

000 察看題目 R1

114 察看程式碼 R2

144 切換至表單設計察看表單 R3

203 察看程式碼 R2

206 切換至表單設計察看表單 R3

210 察看程式碼 R2

219 察看黃色的提示訊息

R6

230 察看程式碼 R2

325 切換至表單設計察看 txtOutput 屬性值 R4

342 察看程式碼察看 txtOutput 那行 R2

348 切換至表單設計察看 txtOutput 屬性值 R4

359 察看程式碼察看 txtOutput 那行 R2

401 切換至表單設計察看 txtOutput 屬性值 R4

405 察看程式碼察看 txtOutput 那行 R2

415 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

419 察看程式碼察看 txtOutput 那行 R2

443 編輯程式碼修改 txtOutputText = txtOutputText

amp i 變成 c = txtOutputText amp i

E1

455 察看程式碼察看 txtOutput 那行 R2

513 編輯程式碼復原 txtOutputText = txtOutputText

amp i

E1

515 察看程式碼 R2

553 編輯程式碼剪下 txtOutputTex 兩行程式碼 E1

605 開啟rdquo記事本rdquo 將 txtOutputTex 兩行程式碼貼上 O1

611 察看程式碼 R2

618 編輯程式碼刪除宣告 c 變成 Dim ab as integer E1

633 切換至表單設計察看 txtOutput 屬性值 R4

637 切換至rdquo筆記本rdquo察看筆記本的程式碼 O1

648 察看程式碼 R2

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 69: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

61

753 編輯程式碼剪下 continue For 程式碼變成 if I

mod 3 ltgt 0 then

E1

756 開啟rdquo記事本rdquo 貼上 continue For 程式碼 O1

808 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod

3 ltgt 0 then i+1

E1

834 編輯程式碼寫入宣告 c 變成 Dim abc as integer E1

843 編輯程式碼在 if 敘述寫入 c=i+1 E1

900 察看程式碼 R2

923 修改 if I mod 3 ltgt 0 then i+1 變成 if I mod 3 ltgt 0

then c= i+1

E1

925 察看程式碼 R2

949 開啟rdquo記事本rdquo複製 txtOutputText O1

957 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 變成 if I

mod 3 ltgt 0 then i+1 and txtOutputText=rdquordquo

E1

1013 察看程式碼 R2

1148 編輯程式碼修改 if I mod 3 ltgt 0 then i+1 and

txtOutputText=rdquordquo變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo

E1

1203 察看程式碼 R2

1221 編輯程式碼寫入 if 敘述 end if 程式碼 E1

1226 編輯程式碼txtOutputText=rdquordquo移至 if 敘述裡面 E1

1243 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1300 察看程式碼 R2

1324 編輯程式碼在 if 敘述中寫入 else if 程式碼 E1

1346 開啟rdquo記事本rdquo複製 txtOutputText=txtOutputText O1

1354 編輯程式碼在 if 敘述 else if 中貼上

txtOutputText=txtOutputText 程式碼

E1

1359 察看程式碼 R2

1447 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1450 察看程式碼 R2

1509 編輯程式碼刪除宣告 i 變成 Dim abc as integer E1

1513 察看程式碼 R2

1536 編輯程式碼修改 if I mod 3 ltgt 0 then 變成 if I mod E1

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 70: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

62

3 ltgt 0 then txtOutputText=rdquordquo and i=1

1558 編輯程式碼刪除在 if 敘述中 else if 程式碼 E1

1601 編輯程式碼刪除在 if 敘述中 end if 程式碼 E1

1602 察看程式碼 R2

1605 編輯程式碼

E1

1644 察看程式碼 R2

1652 執行程式 (編譯錯誤) T1

1701 察看程式碼 R2

1707 編輯程式碼修改 for I as integer 變成 while I as

integer

E1

1715 編輯程式碼修改 while I as integer 變成 for I as

integer

E2

1724 察看程式碼 R2

1900 編輯程式碼寫入宣告 i 變成 Dim abci as integer E1

1907 編輯程式碼修改 for I as integer 變成 for I E1

1911 察看程式碼 R2

1921 編輯程式碼刪除宣告 c 變成 Dim abi as integer E1

1924 察看程式碼 R2

1932 編輯程式碼修改 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=1 變成 if I mod 3 ltgt 0 then

txtOutputText=rdquordquo and i=i+1

E1

1934 察看程式碼 R2

2000 停止 未成功除錯

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 71: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

63

附錄五 學生訪談大綱

學生訪談大綱

第一題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

第二題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 是否知道 debugprint 這行指令的意思 請你稍微解釋它的意思

6 知道如何使用「偵錯工具」嗎

第三題除錯題目完成後訪談

1 是否有成功除錯題目中的錯誤如果沒有原因是

2 請你簡短敘述如何進行除錯的

3 是否有看錯誤清單來進行除錯嗎「錯誤清單」有幫助解題嗎

4 當你開始修改錯誤的程式碼時你會先預先構思需要修改的程式碼嗎

5 知道如何使用「偵錯工具」嗎

6 設計表單方面有任何問題嗎會有困難嗎

7 元件如果設定有錯誤跟程式碼錯誤哪一個比較難找

除錯題目完成後訪談

1 學校老師有教 VB的偵錯工具嗎

2 除錯對你來說是容易的嗎為什麼

3 除錯對你來說最困擾的地方是找出錯誤解決錯誤還是其他

4 老師教學的時候有特別教如何除錯嗎

5 VB否為目前最熟悉的程式語言

6 除了學習 VB程式語言還有學習其他的程式語言

7 有無參加過檢定或考證照例如像是軟體設計丙級檢定TQC 2008VB檢定

或是程式設計相關的證照

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 72: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

64

附錄六 程式設計問卷調查mdash開放式問題結果

開放式問題學分為兩題我對程式除錯的感想我覺得除錯最困難的地方

學生填答結果如下學生重新編號以助於描述便利

一我對程式除錯的感想

編號 我對程式除錯的感想

1 其實只是輔助而已

2 除錯完會很有成就感

3 做出來會很有成就感

4 儘管自己在這方面並不是很擅長但有了除錯功能在編寫程式時

還是會有所幫助的

5 很難非常難無敵難

6 當成功除錯時是很有成就感的相反的會沮喪生氣

7 VB真的好困難有些想法很難直接理解

8 成功並執行會很有成就感

9 麻煩

10 有時候會看不懂

11 真感動

12 希望有些錯誤的訊息可以口語化一點才看得懂

13 修改完之後如果正確的話會很有成就感

14 當修改完之後正確了會非常感動開心

15 天啊又要重新思考了為何其他人都會呢(完全搞不懂現在狀況

是hellip)自己修改錯誤成功超開心很有成就感

16 有時候很難成功的修正但完成除錯以後就會很有成就感

17 十分具有挑戰性成功後會非常開心

18 很有挑戰性當除錯成功會很有成就感太難解不出時就覺得很討厭

19 每次改迴圈都改到要哭出來

20 無

21 有時候很簡單有時候很難

22 邏輯很重要

23 好煩

24 有挑戰性

25 實在是一大挑戰腦袋必須要很靈活才行

26 除錯成功時會有很大的成就感

27 很累

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 73: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

65

28 當成功的把問題找出來時就會非常開心(成功解決)如果找不到到

底在哪裡錯就會非常不耐煩

29 很麻煩

30 找錯誤的方法

31 多試幾次最後一定會成功

32 很難沒辦法寫出正確的程式碼

33 如果把錯的改成對的會很有成就感

34 成功會很開心

35 雖然有時要想很久不過解決之後會很有成就感

36 很耗時間精神

37 腦袋快爆炸了

39 爽

40 能不錯就不錯一次搞定最好

41 很煩又錯了這樣要一直想怎麼改

43 很耗時間精神體力很麻煩

44 很不爽很難找很難改

45 很有成就感

46 改正了會很有成就感

47 困難

48 一知半解手足無措

49 一個錯誤逐漸把程式完成很有成就感

50 很難

51 非常的繁雜混亂

52 增強使用效率

53 程式除錯真的很難

55 終於把程式寫對了那感覺很好

57 時好時壞

58 很難

60 好用

61 不想做了

62 可以動腦感覺還不錯

63 我很少除錯過沒甚麼感想

64 好困苦

65 成功除錯如果金榜題名除錯失敗如掉入地獄

66 很費腦力但成功後會有成就感

67 電腦真是個白癡

68 答案總在天馬行空處

70 太好了我又更正錯誤了應該會更熟悉了

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 74: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

66

71 難

72 機車

二我覺得除錯最困難的地方

編號 我覺得除錯最困難的地方

1 不知道哪裡有邏輯錯誤

2 找不到錯誤在哪裡

3 當程式太大眼睛會看到亂掉

4 有時候會想不出解決的方法需要較長的時間來思考

5 有時無法看懂自己錯在哪裡和如何改

6 不知道錯在哪裡

7 找不到問題的所在處不明白寫法為什麼不正確修改還不一定正確

8 為何會錯誤

9 想到正確方式

10 找到錯誤修正

11 以為作對但有錯所以不好找

12 雖然可偵錯但清單上所列的錯誤術語會看不懂

13 不知道修改之後的答案是不是正確

14 不知道為何會錯

15 我的思考方向對與否錯誤是這個嗎

16 發現錯誤為什麼錯

17 找不到錯誤在哪裡

18 不知如何修改

19 反覆改了好幾次程式碼卻還是改不出來

20 無

21 找不到錯誤在哪裡

22 邏輯思考如果不通就寫不出來

23 程式碼太多眼花撩亂

24 觀念不對

25 找到錯誤並修改

26 找不到錯在哪裡

27 一直朝錯誤的地方想打亂完整的思想

28 每次構想好實際操作卻又無法執行會錯誤不然就是一直出現rdquo0rdquo

29 修改錯誤

30 不知道錯在哪裡

31 找不到錯的地方

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪

Page 75: 國立臺灣師範大學資訊教育研究所 碩士論文rportal.lib.ntnu.edu.tw/bitstream/20.500.12235/93053/1/n...勵我要多學習、不懂就要問,落實其培養碩士生「邏輯思考」與「問題解決」的

67

32 不知道如何寫程式碼沒辦法讓電腦知道我想的

33 有些地方要全刪掉才能完成

34 要找出錯在哪

35 不知道如何修改

36 不知道錯誤的地方在哪

37 在迴圈中出現的錯誤

39 萬事皆可達

40 找錯

41 你不知道你錯哪裡所以不知道從何改起

43 不知道哪裡錯

44 找錯

45 不知哪裡錯

46 卡在同個地方

47 找尋錯誤的地方並思考如何改正

48 看不懂錯在哪

49 知道哪裡有問題可是想不到解決的辦法

50 不知道錯在哪就算知道也不知道如何修改

51 明明覺得自己對卻出不來

52 因gt果不知因哪來果函數用法一大堆英文看不懂

53 錯誤的地方不只一處造成找不到問題的所在

55 想了老半天卻想不出錯在哪裡

57 如果一個地方找不到解決方法就無法繼續寫程式

58 根本不知道要從哪裡下手

60 一開始觀念就錯

61 連跑都不能跑

62 根本不知道錯在哪

63 不知道哪裡錯

64 因為已有錯的方法所以會繼續用那個想法

65 程式碼太常跳來跳去很難看清楚遇到不會的指令

66 不知道哪裡錯

67 小細節常認為一定對的地方最難找

68 不知道怎麼改

70 找到錯誤卻沒有任何解決的辦法

71 連程式都很難做出來

72 不知道錯哪