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