周小涵
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
基于總體統(tǒng)計(jì)信息的編程行為主要是對底層數(shù)據(jù)的上層描述,不直接反映代碼信息或者底層數(shù)據(jù)信息,但卻是底層信息的一種體現(xiàn),主要表現(xiàn)在時(shí)間戳、編程時(shí)長、連續(xù)快照間的分鐘數(shù)等信息,在Vihavainen等人[1]的實(shí)驗(yàn)中,每個(gè)學(xué)生在進(jìn)行一個(gè)有截止日期的家庭作業(yè),使用學(xué)生編程環(huán)境中的插件從學(xué)生的實(shí)際編程過程中收集快照中的編程時(shí)長、距離截止日期的時(shí)間、連續(xù)快照之間的分鐘數(shù)以及其他的編程行為的每周的中值、平均值、最小值、最大值和標(biāo)準(zhǔn)差來作為特征數(shù)據(jù)。利用B-Course[2]的非參數(shù)貝葉斯網(wǎng)絡(luò)工具來建模數(shù)據(jù)中要素之間的依賴關(guān)系,以及構(gòu)建分類器,使用leave-one-out交叉驗(yàn)證,這篇文章通過檢測學(xué)生編程中的一些時(shí)間數(shù)據(jù)等總體統(tǒng)計(jì)信息能比較準(zhǔn)確地預(yù)測他們數(shù)學(xué)課程的結(jié)果。
基于代碼快照的編程行為使用的很多,它是指通過時(shí)間或者事件觸發(fā)記錄代碼內(nèi)容,利用代碼快照來比較代碼內(nèi)容的不同之處,主要可以分為粗粒度和細(xì)粒度兩種,其中粗粒度是以事件為觸發(fā)的,細(xì)粒度是以時(shí)間為觸發(fā)的。Vihavainen等人[1]使用學(xué)生編程環(huán)境中的插件從學(xué)生的實(shí)際編程過程中收集快照,使用連續(xù)快照之間的分鐘數(shù)、順序快照之間的編輯距離的每周的中值、平均值、最小值、最大值和標(biāo)準(zhǔn)差以及其他的特征來作為特征數(shù)據(jù),其中編輯距離通過Bergel和Roach的Ukkonen算法的擴(kuò)展算法[3]來計(jì)算。通過編程行為的數(shù)據(jù)預(yù)測她們數(shù)學(xué)課程的結(jié)果。Watson等人[4]使用BlueJ IDE的擴(kuò)展從學(xué)生的實(shí)際編程過程中收集快照以及其他特征,使用WATWIN算法進(jìn)行評分,定量描述學(xué)生常規(guī)編程行為方面的數(shù)據(jù),該算法分為兩個(gè)階段,第一階段,為學(xué)生試圖編譯的每個(gè)文件構(gòu)建連續(xù)對,并估計(jì)學(xué)生花在處理錯(cuò)誤的時(shí)間量,使用日志編程行為來構(gòu)建一組連續(xù)的編譯事件對,從而可以分析學(xué)生對不同錯(cuò)誤的響應(yīng)。在第二階段,通過根據(jù)事先已知的和本文自己的研究已經(jīng)確定為表現(xiàn)較弱表現(xiàn)學(xué)生的表現(xiàn)來分配扣分來對每個(gè)配對進(jìn)行評分。他們比較之前的研究,將編譯事件對進(jìn)行了處理,剔除了兩次都正確的對和僅僅增加了注釋的對,糾正了連續(xù)的對在不同文件上產(chǎn)生解決錯(cuò)誤時(shí)間的誤差,并通過移除所有的標(biāo)識符將錯(cuò)誤信息一般化。Blikstein[5]描述了一種自動(dòng)化技術(shù)評估,分析和可視化學(xué)生學(xué)習(xí)計(jì)算機(jī)編程,在編程任務(wù)期間記錄了數(shù)百個(gè)學(xué)生代碼的快照,并采用不同的量化技術(shù)來提取學(xué)生的行為,并根據(jù)編程經(jīng)驗(yàn)對其進(jìn)行分類。Vihavainen[6]正在調(diào)查學(xué)生在編程過程中的行為(例如,渴望開始研究剛剛發(fā)布的練習(xí),遵循最佳編程實(shí)踐)會影響課程結(jié)果。只充分利用學(xué)生編程過程中使用快照自動(dòng)收集的數(shù)據(jù),而不會收集任何額外的背景信息。Spacco等人[7]構(gòu)建了一個(gè)Eclipse插件來解決學(xué)生在學(xué)習(xí)編程技能時(shí),只能提交項(xiàng)目接受嚴(yán)格的測試,卻缺少和教師之間的反饋。該插件有兩個(gè)主要功能。首先,它會在每次保存,添加或刪除文件時(shí)將中央CVS存儲庫中的學(xué)生項(xiàng)目的完整狀態(tài)捕獲即代碼快照。這產(chǎn)生了每個(gè)學(xué)生項(xiàng)目演變的細(xì)致歷史。其次,插件允許學(xué)生將他或她的項(xiàng)目提交給中央服務(wù)器。提交服務(wù)器自動(dòng)編譯并對學(xué)生提交的作品進(jìn)行有限測試,提供反饋信息,說明項(xiàng)目與實(shí)現(xiàn)項(xiàng)目的要求有多接近。他們的目的是為教師和研究人員提供關(guān)于學(xué)生學(xué)習(xí)和工作方式的更詳細(xì)信息,并提供反饋給學(xué)生,幫助他們專注于實(shí)現(xiàn)所分配的項(xiàng)目。
基于事件的編程行為可以分為兩大類,分別為按事件類型劃分和按事件間相關(guān)性劃分,其中按事件類型可以分為編譯事件和環(huán)境事件,環(huán)境事件即IDE環(huán)境中進(jìn)行的操作,比如保存。按事件間相關(guān)性劃分可以分為基于時(shí)間的劃分和基于頻率的劃分?;诰幊淌录木幊绦袨槎嗍褂镁幾g事件作為特征提取的初始數(shù)據(jù),編譯事件即為記錄編譯事件時(shí)間點(diǎn)附近的數(shù)據(jù),像是Vihavainen等人[1]收集編譯時(shí)的編譯結(jié)果等數(shù)據(jù)。Jadud[8]引入了一種名為 Error Quotient(EQ)的算法,該算法通過學(xué)生兩次編譯的時(shí)間以及編譯的結(jié)果,分析學(xué)生程序設(shè)計(jì)過程中的連續(xù)狀態(tài),并提供了學(xué)生能夠如何很好地解決任何遇到的語法錯(cuò)誤的度量標(biāo)準(zhǔn)。Watson等人[4]使用BlueJ IDE的擴(kuò)展從學(xué)生的實(shí)際編程過程中收集除了代碼快照數(shù)據(jù)外,還收集了編譯事件結(jié)果(編譯成功或失?。?bào)告的錯(cuò)誤消息及行號,將編譯事件的結(jié)果以時(shí)間戳為序,兩兩一組,按照兩個(gè)連續(xù)事件分別基于時(shí)間和頻率的相關(guān)性,使用WATWIN算法進(jìn)行評分,基于直接記錄日志,定量描述學(xué)生常規(guī)編程行為方面的數(shù)據(jù)。Munson等人[9]分析了課內(nèi)和課外的編程活動(dòng),記錄程序源、編譯器錯(cuò)誤消息列表、文檔名稱、學(xué)生正在處理的作業(yè)、時(shí)間戳以及學(xué)生的ID,可以用作輔導(dǎo)弱勢學(xué)生在其過于落后之前對其表現(xiàn)早期的表現(xiàn)進(jìn)行干預(yù)的基礎(chǔ)。
基于日志的編程行為可以記錄所有的日志文件信息,例如在Watson等人[4]的實(shí)驗(yàn)中使用BlueJ IDE的擴(kuò)展從學(xué)生的實(shí)際編程過程中收集除了代碼快照、編程事件、總體信息等數(shù)據(jù)外,他們還收集了報(bào)告的錯(cuò)誤消息及行號這兩個(gè)基于日志的編程行為,使用WATWIN算法進(jìn)行評分,基于直接記錄日志,定量描述學(xué)生常規(guī)編程行為方面的數(shù)據(jù)。他們對收集的錯(cuò)誤信息進(jìn)行處理,去掉了標(biāo)識符來判斷學(xué)生是否一直在犯同一種錯(cuò)誤,也得到了不錯(cuò)的結(jié)果。Carter J[10]開發(fā)一個(gè)不依賴于距離自動(dòng)確認(rèn)和傳達(dá)開發(fā)人員難度的系統(tǒng),其中他們針對日志的不同片段,計(jì)算每個(gè)片段中各類別命令占全部命令總數(shù)的百分比,并將這些百分比用作識別模式的特征,其中共有5類命令分別為:導(dǎo)航(用戶從一個(gè)文件切換到另一個(gè)文件)、編輯(用戶插入或刪除文本)、刪除(用戶刪除整個(gè)方法或類)、調(diào)試(用戶使用調(diào)試器顯式調(diào)試代碼)、焦點(diǎn)(用戶在IDE和其他打開的窗口之間切換)。
基于按鍵的編程行為顧名思義,就是編程人員在編程過程中敲擊鍵盤所產(chǎn)生的數(shù)據(jù),一般是按鍵間的釋放時(shí)間、按鍵的駐留時(shí)間和使用特殊按鍵(例如,空格、回車、delete等按鍵)的頻率。Richard等人[11]通過記錄學(xué)生編程時(shí)擊鍵的類型和時(shí)間戳,來測試擊鍵速度和表現(xiàn)間是否存在相關(guān)性。按鍵的這種行為也被應(yīng)用在除了編程行為外的其他領(lǐng)域,也有一定的參考價(jià)值,主要是用來做用戶情感狀態(tài)識別等方面,A.Kolakowska等人[12]介紹了在通過按鍵的動(dòng)態(tài)分析來識別用戶情緒狀態(tài)和驗(yàn)證用戶身份這一領(lǐng)域的一些研究,主要提取的特征為鍵間的釋放時(shí)間、按鍵的駐留時(shí)間、使用特殊按鍵的頻率,但是他們的研究在識別用戶情緒狀態(tài)方面的結(jié)果并不理想;Clayton等人[13]通過按鍵和用戶的情感信息,確定表現(xiàn)最好的情緒狀態(tài)模式。
基于鼠標(biāo)的編程行為主要收集鼠標(biāo)的跳躍活動(dòng)、運(yùn)動(dòng)軌跡的x、y坐標(biāo),加速度等信息,主要有兩種應(yīng)用,第一種是利用鼠標(biāo)的在編程過程中的運(yùn)動(dòng)軌跡或點(diǎn)擊來分析編程過程;Green等人[14]通過檢測代碼編輯過程中的非線性行為來調(diào)查編程活動(dòng)的策略方案。Blikstein[5]描述了一種自動(dòng)化技術(shù)評估,分析和可視化學(xué)生學(xué)習(xí)計(jì)算機(jī)編程,在編程任務(wù)期間記錄了數(shù)百個(gè)學(xué)生代碼的快照,以及鼠標(biāo)點(diǎn)擊這種非代碼事件總數(shù),并采用不同的量化技術(shù)來提取學(xué)生的行為,并根據(jù)編程經(jīng)驗(yàn)對其進(jìn)行分類。Gray等人[15]通過檢測鼠標(biāo)的移動(dòng),引入了“改變事件”的概念來描述編碼過程中的這些關(guān)鍵時(shí)刻。他們認(rèn)為,改變事件可以通過兩種不同的方式來實(shí)施:或者是對項(xiàng)目的局部小修改,或者是對項(xiàng)目目標(biāo)結(jié)構(gòu)的重大轉(zhuǎn)變。這項(xiàng)工作的重要性在于它清楚地確定了可能發(fā)生這種變化的情況。Estey等人[16]通過學(xué)生在學(xué)習(xí)工具中的交互行為預(yù)測學(xué)習(xí)艱難的學(xué)生,通過的交互行為為學(xué)生對一下按鈕——編譯代碼、運(yùn)行代碼、提交解決方案、獲得提示以及提出問題的點(diǎn)擊,并且為了能更好地區(qū)分持續(xù)性和暫時(shí)性掙扎,她們進(jìn)一步提出了一種測量編程行為變化的軌跡度量;第二種不是編程行為,但是同樣可以借鑒,利用鼠標(biāo)反應(yīng)時(shí)間和鼠標(biāo)軌跡和加速度等特征進(jìn)行欺騙檢查,F(xiàn)reeman等人[17]作者通過使用鼠標(biāo)追蹤技術(shù),記錄鼠標(biāo)運(yùn)動(dòng)的x,y坐標(biāo),來測量人們的心里狀態(tài)。Zhang[18]等人通過利用鼠標(biāo)反應(yīng)時(shí)間和鼠標(biāo)軌跡特征進(jìn)行欺騙檢測。
如表1。
表1
現(xiàn)有的有關(guān)編程行為的研究大多集中在對于一到兩種的編程行為進(jìn)行研究,很少有將多種編程行為進(jìn)行結(jié)合研究的。從上文中可以看出,每一種編程行為都有著自己的優(yōu)勢和劣勢,在今后的研究中,我們想將各個(gè)層次的編程行為進(jìn)行結(jié)合,實(shí)現(xiàn)趨利避害的效果,使得利用編程行為的預(yù)測得到更加準(zhǔn)確的結(jié)果。