摘要:本文介紹了在程序設計課程教學中教師如何對學生程序作業(yè)進行數(shù)據(jù)挖掘的一種方法。這種方法即將學生源程序文件分解為語法元素數(shù)據(jù),對語法元素數(shù)據(jù)和成績進行分析和統(tǒng)計,幫助教師發(fā)現(xiàn)導致學生程序錯誤的主要因素,從而調整教學內容和方式。
關鍵詞:數(shù)據(jù)挖掘;程序設計;教學
中圖分類號:G64 文獻標識碼:B文章編號:1672-5913(2007)02-0057-03
1程序設計課程與數(shù)據(jù)挖掘技術概述
程序設計課程是培養(yǎng)學生軟件開發(fā)能力的一門課程。目前國內的理工類學?;蛳嚓P專業(yè)普遍都為學生開設了程序設計課程。一直以來,如何了解多數(shù)學生在學習程序設計中所遇到的困難,如何幫助學生克服學習中的障礙,都要靠教師多年的教學經(jīng)驗來解決。這種傳統(tǒng)的教學方法顯然不能滿足知識更新迅速的計算機教學過程。因此需要研究如何從學生提交的程序作業(yè)中利用數(shù)據(jù)庫技術及時發(fā)現(xiàn)問題和解決問題。數(shù)據(jù)挖掘(Data Mining)技術是近年來新興的數(shù)據(jù)管理與分析技術,主要用于發(fā)現(xiàn)數(shù)據(jù)中隱藏的線索,輔助人們進行科學分析和決策。數(shù)據(jù)挖掘普遍需要三個階段:數(shù)據(jù)準備、挖掘操作和結果表達。下面以C語言為例介紹在程序設計課程教學中,對學生程序作業(yè)進行數(shù)據(jù)挖掘的一種應用方案。
2程序設計課程的數(shù)據(jù)挖掘過程
2.1 數(shù)據(jù)準備
根據(jù)程序設計課程的教學特點,我們按錯誤的嚴重程度將所有學生提交的程序作業(yè)的評閱結果歸納為以下5類,即題目錯誤、編譯時語法錯誤、編譯時語法警告、編譯后運行結果不完全正確、編譯后運行結果完全正確。為了對學生程序作業(yè)中的問題進一步分析原因,我們對以下8類數(shù)據(jù)進行分析,即功能模塊函數(shù)序列、邏輯結構序列、語句類型序列、表達式序列、運算符序列、標識符序列、數(shù)值常量序列以及簡化的字符常量序列。
要將文件形式的源程序分解為以上8項數(shù)據(jù),就需要按語法規(guī)則完成以下步驟:
(1) 過濾程序中的注釋信息和空白字符,產(chǎn)生預處理元素序列;
(2) 根據(jù)#include和#define等標記替換用戶指定的包含文件和宏定義等預處理元素;
(3) 對照語法元素表,進一步將程序分解為關鍵字、標識符、常量、運算符、定界符等語法元素序列;
(4) 將數(shù)值常量以空格為連接符連接為一個數(shù)值常量序列;
(5) 將字符及字符串常量保留%d等格式字符和\等轉義字符后刪去多余字符,以空格為連接符連接為一個簡化的字符常量序列;
(6) 將所有運算符以空格為連接符連接為一個運算符序列;
(7) 將用戶變量名和函數(shù)名統(tǒng)一編碼后與程序中的關鍵字構成標識符序列;
(8) 將運算符與標識符及常量以空格為連接符連接為一個表達式序列;
(9) 將程序中的語句分類為表達式語句、函數(shù)調用語句、空語句、復合語句、if語句、else語句、switch語句、case語句、while語句、do語句、for語句、break語句、continue語句、return語句和goto語句,并組織成語句類型序列;
(10) 對語句按分號和大括號等定界符劃分為模塊函數(shù)序列;
(11) 將模塊內語句按順序、選擇、循環(huán)的分類構成邏輯結構序列。
2.2 挖掘操作的過程
由于篇幅所限,下面僅以程序設計教學中的典型題目“溫度轉換”的數(shù)值常量序列和運算符序列為考察數(shù)據(jù)具體描述挖掘過程。
(1)數(shù)據(jù)清理
首先將數(shù)據(jù)準備階段的各類數(shù)據(jù)與評閱結果組成一個數(shù)據(jù)記錄集(如表1所示)。由于分析的目的是找出教學中造成學生程序錯誤的主要因素,而題目錯誤僅僅是因為學生操作馬虎,與掌握程序設計的能力并不相關,因此把評閱結果全部正確的和題目錯誤的記錄過濾掉,只保留評閱結果為語法錯誤、語法警告和運行錯誤的記錄(如表2所示)。
(2)構造1項侯選集,發(fā)現(xiàn)頻繁1項集
將所有數(shù)據(jù)作為1項集中的元素,構造1項侯選集,并計算不同元素的數(shù)量,如表3所示。保留其中數(shù)量較多的元素,濾掉其它元素,得到頻繁1項集,如表4所示。
(3)構造2項侯選集,發(fā)現(xiàn)頻繁2項集
將所有頻繁1項集元素兩兩組合,構成侯選2項集,并計算組合后的數(shù)量,如表5所示。保留其中數(shù)量比較多的元素,濾掉其它元素,得到頻繁2項集{=/*(-),編譯警告}。
2.3 結果表達和解釋
保留下來的2項集的兩個元素分別代表了錯誤類型和造成該類型錯誤的主要語法元素序列,即現(xiàn)有數(shù)據(jù)表明(輸入函數(shù)中)未使用取地址運算符是造成編譯警告的主要原因。
3數(shù)據(jù)挖掘應用效果
在現(xiàn)實的教學過程中,我們對2005級8個班275名學生的5385個程序進行了統(tǒng)計和分析,發(fā)現(xiàn)題目錯誤的比例約占1.49%,編譯錯誤的比例約占3.38%,編譯時警告的比例約占1.21%,運行錯誤的比例約占8.10%,運行正確的比例約占85.82%。其中造成編譯錯誤的主要原因是注釋信息或各級括號定界符未配對;造成編譯警告的主要原因是格式輸入函數(shù)調用時缺少地址運算符或用戶變量定義后未使用;造成運行錯誤的主要原因是除法運算符兩側運算量為整型常量。下面的圖表反映了在程序設計課程的教學中沒有使用數(shù)據(jù)挖掘技術和使用了數(shù)據(jù)挖掘技術的教學效果對比。
圖1為未采用本方法指導教學的10次學生程序作業(yè)評閱結果統(tǒng)計圖,其中靠上的折線表示每次學生作業(yè)的平均分數(shù),靠下的折線表示每次學生作業(yè)的嚴重語法錯誤發(fā)生率??梢园l(fā)現(xiàn),學生每次作業(yè)的平均成績基本呈水平小波動隨機形狀,表明學生成績在學習過程中沒有明顯變化,同樣嚴重語法錯誤發(fā)生率也沒有明顯變化。圖2為一直采用本方法指導教學的10次學生程序作業(yè)評閱結果統(tǒng)計圖,可以發(fā)現(xiàn)學生的成績隨著系統(tǒng)的使用時間增加而穩(wěn)定的上升。在第三次作業(yè)以后基本保持在90分以上的水平,同時嚴重語法錯誤的比例也快速的下降,在第二次作業(yè)以后就控制在5%以下。以上對比說明本方法比較準確地發(fā)現(xiàn)了學生程序中的語法錯誤和算法錯誤的主要因素,使學生得到及時地反饋并在以后的程序設計中避免相似的錯誤,從而明顯的改善了教學效果。
參考文獻:
[1] 李建中,王珊 . 數(shù)據(jù)庫系統(tǒng)原理[M] . 北京:電子工業(yè)出版社,2004.
[2] Richard J. Roiger,Michael W.Geatz . 數(shù)據(jù)挖掘教程[M] .北京:清華大學出版社,2003.
[3] GB/T 15272-94.程序設計語言C[S].
投稿日期:2006-08-08
作者簡介:梅險(1975-),男(漢族),黑龍江省哈爾濱市人,工程師,研究方向:數(shù)據(jù)庫與軟件工程。