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