韓磊 胡建鵬
摘 ?要: 針對高校選修C語言程序設(shè)計課程人數(shù)日益增多,初學(xué)者無法自主查找出程序中的Bug以修正,指導(dǎo)教師無暇幫助所有學(xué)生找出Bug等問題,設(shè)計和實(shí)現(xiàn)了基于Web版的C語言Bug信息采集與查詢反饋系統(tǒng)。信息采集系統(tǒng)對初學(xué)者在日常C語言編程中出現(xiàn)的Bug信息進(jìn)行采集,然后對數(shù)據(jù)進(jìn)行分析與清洗,并導(dǎo)入數(shù)據(jù)庫;查詢反饋系統(tǒng)對編譯器報錯信息進(jìn)行檢索并給出錯誤類型與修改建議等。該系統(tǒng)的應(yīng)用顯著降低了初學(xué)者編程報錯次數(shù),提升了編程能力。
關(guān)鍵詞: 程序設(shè)計; 信息采集; C 語言Bug; 查詢反饋
中圖分類號:TP312 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號:1006-8228(2019)10-61-04
Abstract: In view of the increasing number of students taking C language programming course in colleges and universities, beginners are unable to find bug in the program independently to correct it, and instructors have no time to help all students find bugs. A Web based C language bug information collection and query feedback system is designed and implemented. The information collection system collects the bug information appearing in beginners' daily C programming, then analyses and cleans the data, and imports it into the database. The query feedback system retrieves the error information given by compiler and gives the error types and modification suggestions. The application of the system significantly reduces the number of programming errors for beginners, and improves their programming ability.
Key words: programming; information collection; C programming bug; query feedback
0 引言
C語言是當(dāng)今高校計算機(jī)專業(yè)最重要的專業(yè)基礎(chǔ)課之一,作為使用最為廣泛的面向過程的語言,高校許多計算機(jī)專業(yè)的課程,如數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計、操作系統(tǒng)、軟件工程等都是以C語言作為編程語言。因此,C語言程序設(shè)計這門課是眾多專業(yè)課程的前置課程,對其掌握的熟練與否,在很大程度上決定了學(xué)生專業(yè)素養(yǎng)的高低。
隨著社會不斷發(fā)展,國家教育的普及,高校教育也從精英教育模式轉(zhuǎn)變成大眾化教育,因而對于以應(yīng)用型人才培養(yǎng)為辦學(xué)目標(biāo)的眾多本科院校,如何在學(xué)生人數(shù)逐年增加、上機(jī)實(shí)驗(yàn)課指導(dǎo)老師無暇回復(fù)所有學(xué)生編程問題的情況下提高教學(xué)質(zhì)量,已成為了C語言程序設(shè)計課程迫在眉睫需解決的問題[1]。
中國的大學(xué)對于高級計算機(jī)語言的程序設(shè)計課程的教學(xué)多是培養(yǎng)目標(biāo)學(xué)習(xí)程序設(shè)計的思想和方法,通過大量實(shí)踐編程練習(xí),來掌握程序設(shè)計的流程與技巧;同樣,也只有通過大量的練習(xí)才能了解和避免程序中常出現(xiàn)的Bug[2]。許多初學(xué)者對開發(fā)環(huán)境陌生,不懂編譯器提示的錯誤信息進(jìn)而發(fā)現(xiàn)、糾正錯誤。在許多大學(xué)缺乏功能完善的在線Bug查詢輔助系統(tǒng),多是由程序設(shè)計指導(dǎo)教師幫助初學(xué)者查找程序中的Bug,費(fèi)時費(fèi)力還無法兼顧到所有學(xué)生。因此,需要一套有效的C語言錯誤信息采集、數(shù)據(jù)分析及Bug信息反饋的系統(tǒng)來輔助學(xué)生的程序設(shè)計課程學(xué)習(xí)。
1 C語言Bug信息在線采集系統(tǒng)
筆者所在高校對C語言程序設(shè)計這門課程的教學(xué)進(jìn)行了有益的探索[3]。本著實(shí)踐出真知的原則,設(shè)計了一個C語言Bug信息在線采集系統(tǒng),旨在采集大量初學(xué)者易犯的錯誤數(shù)據(jù)信息加以分析。在每學(xué)期的C語言程序設(shè)計課程中,每位學(xué)生在每次課上需要完成三道編程題和一道思考改錯題。
基于Web版的C語言Bug信息采集系統(tǒng)需要學(xué)生填寫在完成代碼編寫進(jìn)行編譯時的錯誤信息,包含以下信息:姓名、學(xué)號、編譯器(VC++、Dev-C++和VS2008等)、題目編號(如P23-2,表示23頁第2題)、錯誤編號、整段錯誤代碼、錯誤語句行號(編譯器提供)、錯誤語句、報錯信息(編譯器提供)、錯誤類型(語法、邏輯、運(yùn)行)、錯誤分析(學(xué)生自我分析)、修改措施、修改后語句。
在教學(xué)周期方面,上海工程技術(shù)大學(xué)的專業(yè)必修課“C語言程序設(shè)計”每學(xué)期有18周共36學(xué)時的教學(xué)周期,理論課程要求學(xué)生能夠掌握結(jié)構(gòu)化程序設(shè)計的一般方法,養(yǎng)成嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計及邏輯思維方式;而程序設(shè)計課程的課時一般不少于16課時,每個課時90分鐘,要求學(xué)生掌握C語言語法規(guī)范,培養(yǎng)靈活思維和解決實(shí)際問題的能力。學(xué)生在完成隨堂測驗(yàn)后,將他們在編程中出現(xiàn)并解決的Bug信息導(dǎo)入采集系統(tǒng),其中有編譯器報錯信息、錯誤類型、錯誤分析以及修改措施等,要培養(yǎng)學(xué)生規(guī)范填寫以方便后期對數(shù)據(jù)分析處理。
系統(tǒng)主要包括學(xué)生用戶管理、問卷管理、數(shù)據(jù)統(tǒng)計分析三大功能模塊。用戶管理包括學(xué)生信息導(dǎo)入、學(xué)生賬戶維護(hù)以及學(xué)生學(xué)號班級信息驗(yàn)證等功能。問卷管理包括問卷問題修改維護(hù)、問卷時間戳設(shè)定等功能。數(shù)據(jù)統(tǒng)計分析主要將采集的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中并實(shí)現(xiàn)以圖表形式呈現(xiàn)定量與定性的分析結(jié)果。系統(tǒng)設(shè)三種角色:管理員、指導(dǎo)老師與學(xué)生用戶。其中的管理員權(quán)限包括有初始化數(shù)據(jù)庫、配置系統(tǒng)、導(dǎo)入學(xué)生數(shù)據(jù)、修改需采集的問題與格式、統(tǒng)計與分析所采集的問題等;指導(dǎo)教師具有修改學(xué)生信息、修改需采集的問題與格式、查詢分析統(tǒng)計結(jié)果等權(quán)限;學(xué)生則驗(yàn)證身份、修改登錄密碼及完成錯誤信息的采集。
信息采集系統(tǒng)流程大致為,在實(shí)驗(yàn)機(jī)房的教師主機(jī)上配置服務(wù)器,學(xué)生通過局域網(wǎng)訪問采集信息的主頁。以學(xué)生姓名和學(xué)號為登錄用戶名和登錄密碼,整個問卷的問題設(shè)置為必填選項(xiàng),其中的編譯器、錯誤類型則設(shè)置下拉選擇菜單,其余信息則為學(xué)生自主填寫,每一個問題旁邊設(shè)置提示信息如問題“錯誤代碼”提示“僅填錯誤語句的代碼不是全部代碼”避免信息的重復(fù)。一個學(xué)生一學(xué)期的所有C語言錯誤數(shù)據(jù)信息作為一個單元存入數(shù)據(jù)庫。系統(tǒng)采集的數(shù)據(jù)以*xlsx格式存儲便于后期處理。
2 bug信息分析處理
將采集的17、18級兩屆學(xué)生的程序設(shè)計錯誤信息在初步數(shù)據(jù)處理后,繪制語法、邏輯、運(yùn)行三種錯誤的百分比餅狀圖,如圖1所示,可以直觀的發(fā)現(xiàn),語法錯誤所占比例最高,邏輯錯誤其次,至于一般程序不具有“健壯性”才會出現(xiàn)的運(yùn)行錯誤則占最小的比例。初學(xué)者在學(xué)習(xí)C語言這一門程序設(shè)計類語言時,大多會犯單詞拼寫錯誤、中文字符下輸入等低級語法錯誤,這是語法錯誤比例最大的原因,而邏輯錯誤則是學(xué)生前期沒有養(yǎng)成良好的邏輯思維造成的,至于運(yùn)行錯誤多是初學(xué)者不熟悉編譯器的使用造成。
本著以實(shí)際數(shù)據(jù)揭示教學(xué)工作中不足的原則,將歸類的語法錯誤、邏輯錯誤、運(yùn)行錯誤再次深入分析,挖掘其深層次信息,細(xì)化各編程報錯信息,以便在后續(xù)教學(xué)工作中加以改進(jìn)。同時,細(xì)化分析各類型的錯誤能將同一類型的報錯信息中的關(guān)鍵詞提取分析方便后期的查詢反饋系統(tǒng)設(shè)計。
圖2是將所采集的學(xué)生錯誤信息深入分類處理后得到的初學(xué)者易犯錯誤類型及其占比情況。從中可以直觀的了解初學(xué)編程語言學(xué)生常犯的錯誤及比例,便于指導(dǎo)老師針對性的改進(jìn)授課。同樣,利用其數(shù)據(jù)統(tǒng)計分析系統(tǒng)將數(shù)據(jù)可視化呈現(xiàn),依據(jù)C語言Bug采集系統(tǒng)的時間戳來處理歸類數(shù)據(jù),在同一段時間對比三種類型的錯誤比例變化發(fā)現(xiàn),在“C語言程序設(shè)計”開課之初學(xué)生的語法錯誤比例明顯高于邏輯與運(yùn)行錯誤;而到了課程的中后期,隨著指導(dǎo)老師針對編程中出現(xiàn)的常見錯誤則語法錯誤進(jìn)行糾正,語法錯誤比例下降,邏輯錯誤比例上升。這就可以幫助教學(xué)導(dǎo)師在往后的不同教學(xué)階段中加以改進(jìn)教學(xué)方案。
3 Web版查詢與反饋系統(tǒng)設(shè)計
3.1 數(shù)據(jù)庫設(shè)計
在采集了兩屆學(xué)生的C語言Bug信息并處理后,為解決上機(jī)實(shí)驗(yàn)課程指導(dǎo)老師人手不夠、初學(xué)者大多會犯的同樣的錯誤等問題設(shè)計了基于WEB版的C語言Bug信息查詢與反饋系統(tǒng)。與C語言Bug信息采集系統(tǒng)一樣,系統(tǒng)設(shè)置允許管理員與指導(dǎo)教師采用*.xls和*.xlsx格式導(dǎo)入學(xué)生數(shù)據(jù)信息,以學(xué)生的學(xué)號為用戶名和初始密碼,給學(xué)生修改登錄密碼的權(quán)限[4]。
因?yàn)椴樵兣c反饋系統(tǒng)旨在幫助初學(xué)者明白bug的錯誤類型以及分析錯誤原因提示修改建議,因此采集系統(tǒng)所采集的數(shù)據(jù)中有些不需要進(jìn)行再次分析,因此需要重新建立一個查詢與反饋信息的數(shù)據(jù)庫。將采集與處理后的“錯誤語句”、“報錯信息(編譯器提供)”、“錯誤類型(語法、邏輯、運(yùn)行)”、“錯誤分析(學(xué)生自我分析)”、“修改措施”及“修改后語句”導(dǎo)入查詢反饋系統(tǒng)數(shù)據(jù)庫中。由于初學(xué)者在前期不了解C語言bug信息采集系統(tǒng)的使用因此會不可避免出現(xiàn)錯誤,所以需要對以上數(shù)據(jù)進(jìn)行二次清洗。
3.2 查詢與反饋系統(tǒng)設(shè)計
在數(shù)據(jù)二次清洗以及導(dǎo)入數(shù)據(jù)庫之后,開始設(shè)計C語言Bug信息的查詢與反饋系統(tǒng)。設(shè)計之初考慮到初學(xué)者便于上手使用,設(shè)計成類似于“百度”“谷歌”等搜索引擎形式,同時在頁面顯示提示信息,指導(dǎo)學(xué)生操作。其工作原理是基于分類目錄(Directory)即通過之前人工采集的Bug信息形成數(shù)據(jù)庫進(jìn)行搜索[5]。依據(jù)之前對Bug信息的歸類處理,對提取的“編譯器報錯信息”中的字組頻度進(jìn)行統(tǒng)計,抽出高頻出現(xiàn)的詞組作為搜索關(guān)鍵字。對于關(guān)鍵詞搜索還使用熱點(diǎn)優(yōu)先策略,比如編譯器報錯提示信息: [Error] expected ';' before 'else'這種占比極大、熱點(diǎn)關(guān)鍵詞進(jìn)行優(yōu)先抓取策略,而不需要經(jīng)過去重與過濾處理。在抓取信息時,采用廣度優(yōu)先策略便于顯示更多信息,為初學(xué)者提供多種解決方案。圖3為分類目錄檢索系統(tǒng)的結(jié)構(gòu)示意圖。
3.3 應(yīng)用實(shí)例
在設(shè)計理念和開發(fā)方法明確之后,通過各種UI對比后,C語言Bug信息查詢與反饋系統(tǒng)的首頁最終如圖4所示,其使用流程大致為:學(xué)生可以通過直接搜索編譯器提供的報錯信息以檢索出該錯誤的類型、錯誤原因分析以及錯誤修改措施;同樣學(xué)生也可以通過編譯器報錯信息中的關(guān)鍵字檢索,這樣通過廣泛索引,反饋系統(tǒng)會提供大量同類型信息。圖5是根據(jù)編譯器提供的報錯信息“expected ';' before ')'”進(jìn)行查詢Bug信息的反饋的示例。
4 結(jié)束語
C語言程序設(shè)計的教學(xué)正朝著多元化、現(xiàn)代化、信息可視化的方向發(fā)展[6]。本文設(shè)計了一套C語言Bug信息采集與查詢反饋系統(tǒng),以提高“C語言程序設(shè)計”課程的教學(xué)成效。自2017年以來,上海工程技術(shù)大學(xué)電子電氣工程學(xué)院對修習(xí)“C語言程序設(shè)計”課程的學(xué)生投入使用該系統(tǒng),學(xué)生在編程課上的提問次數(shù)顯著下降,同時,編程能力較往屆均有了較大提升。由于前期信息采集數(shù)量較少,且信息格式相對不夠規(guī)范,因此在未來的工作中,將不斷完善C語言Bug信息數(shù)據(jù)庫,同時不斷優(yōu)化Bug信息的查詢與反饋系統(tǒng),做到更加精確化、便捷化。
參考文獻(xiàn)(References):
[1] 龔文勝.關(guān)于新形勢下的C語言有效教學(xué)模式探究[J].科學(xué)大眾(科學(xué)教育),2019.2:162.
[2] 李霞.基于專業(yè)應(yīng)用的C語言程序設(shè)計課程教學(xué)研究[J].計算機(jī)時代,2019.2:95-97
[3] 傘宏力.電子信息工程專業(yè)C語言程序設(shè)計課程教學(xué)改革建議[J].教育教學(xué)論壇,2019.4:136-137
[4] 洪曉彬.數(shù)據(jù)庫在分布式應(yīng)用軟件中的應(yīng)用與設(shè)計研究[J].無線互聯(lián)科技,2019.3:53-54
[5] 帥應(yīng),羅文琪,熊麗珍,舒忠.一種改進(jìn)的垂直搜索引擎研究與設(shè)計[J].現(xiàn)代計算機(jī)(專業(yè)版),2018.34:90-95,100
[6] 李延軍,李明,馬金剛,王曉燕,何雪英.混合學(xué)習(xí)模式在C語言程序設(shè)計移動課堂中的應(yīng)用研究[J].計算機(jī)教育,2018. 1:71-74