張海清,趙衛(wèi)東,李代偉,唐聃,魏維,吳四九
(1.成都信息工程大學(xué) 軟件工程學(xué)院,四川成都 610225;2.成都大學(xué) 計(jì)算機(jī)學(xué)院,四川成都 610100)
Github是一個(gè)開源協(xié)同平臺(tái),是一個(gè)面向開源及私有軟件項(xiàng)目的托管平臺(tái),支持Git協(xié)議作為唯一的版本庫格式。Github是基于Git的代碼托管平臺(tái),繳費(fèi)客戶可建設(shè)私人倉庫,免費(fèi)的客戶只能使用公共倉庫,代碼需要公開。Github由Chris Wanstrath,PJ Hyett 與Tom Preston-Werner三位創(chuàng)始人在2008年4月發(fā)布。除了Git代碼倉庫托管及基本的Web管理界面外,還提供了訂閱、在線文件編輯器、討論組、文本渲染、協(xié)作圖譜及代碼片段分享(Gist)等功能。現(xiàn)在,托管版本數(shù)量很多,也有其他知名開源項(xiàng)目Ruby on Rails、jQuery、python等。Git分布式版本控制系統(tǒng)主要應(yīng)用在軟件項(xiàng)目托管平臺(tái),通過網(wǎng)頁訪問公開或者私人項(xiàng)目,瀏覽源代碼、修改代碼及注釋。其最突出的特點(diǎn)在于“階段版本控制”,它可以瀏覽任意提交過的版本并提供文件歷史庫,團(tuán)隊(duì)成員也可以在其內(nèi)置聊天程序中進(jìn)行交流,非常便捷[1-2]。隨著版本控制系統(tǒng)Git的廣泛應(yīng)用,越來越多的項(xiàng)目被移植到Github上[3]。由于Github基于版本控制技術(shù),其突出的版本控制性和團(tuán)隊(duì)協(xié)作性,可以用來作為一個(gè)輔助教學(xué)系統(tǒng)工具[4-6]。
學(xué)生的實(shí)驗(yàn)數(shù)據(jù)和實(shí)驗(yàn)報(bào)告文檔可以存儲(chǔ)在學(xué)生自己的本地倉庫中,本地倉庫由Git維護(hù)的三棵“樹”組成。一是工作目錄,持有實(shí)際文件;二是暫存區(qū)(Index),臨時(shí)保存改動(dòng);三是HEAD,指向最后一次提交的結(jié)果。學(xué)生可以提出修改(把它添加到暫存區(qū)內(nèi)),有如下使用命令:
git add <filename>
git add *
這是Git工作流程的第一步。使用以下命令以實(shí)際提交改動(dòng):
git commit -m “提交信息”
改動(dòng)現(xiàn)在已經(jīng)在本地倉庫的HEAD中了。執(zhí)行以下命令以將這些改動(dòng)提交到遠(yuǎn)端倉庫中:
git push origin master
可把master改成要推送的任何分支。分支用來將特性開發(fā)絕緣開來。在創(chuàng)建倉庫時(shí),master是“默認(rèn)”分支。在其他分支上面進(jìn)行開發(fā),開發(fā)后再將它們合并到主分支上。
如還沒有克隆現(xiàn)有倉庫,并將倉庫連接到某遠(yuǎn)程服務(wù)器上,可用如下命令:
git remote add origin <server>
這樣就能夠?qū)⒏膭?dòng)發(fā)送到所添加的服務(wù)器上。
Markdown是一種可使用普通文本編輯器編寫的標(biāo)記語言。設(shè)計(jì)它的目的是用最簡單的語言快速生成網(wǎng)頁頁面,無須復(fù)雜的程序設(shè)計(jì)。用簡單的標(biāo)記語法,就可使普通文本內(nèi)容具有富文本的格式。Markdown有系列的衍生版本,用來擴(kuò)展Markdown的功能,比如表格、內(nèi)嵌HTML、腳注等。Markdown的語法簡單、易學(xué),并且功能要比純文本更強(qiáng),所以Github用它作為平臺(tái)的基本文本樣式,平臺(tái)以“README.md”的文件名作為默認(rèn)頁面文件,當(dāng)用戶進(jìn)入頁面時(shí),自動(dòng)以網(wǎng)頁形式呈現(xiàn)該文件的內(nèi)容。
由于Markdown的原文是普通文本,所以可以使用同一個(gè)IDE編輯器編寫程序和文檔,這樣就極大提高了程序和文檔的可維護(hù)性,同時(shí)也方便教師的批改,既可線上修改,也可線下修改。
Markdown文件除了可以在網(wǎng)頁直接呈現(xiàn)之外,還可以用像RStudio這樣的編輯器,快速將Markdown轉(zhuǎn)化為演講PPT、Word產(chǎn)品文檔、LaTex論文。因此Markdown語言必將越來越廣泛地應(yīng)用于信息工程領(lǐng)域的文檔編寫工作中。
在實(shí)驗(yàn)開始前,與所有平臺(tái)一樣,每名教師和學(xué)生必須要注冊(cè)一個(gè)賬號(hào)。所以實(shí)驗(yàn)前的準(zhǔn)備工作首先應(yīng)是專門針對(duì)Github平臺(tái)使用技能進(jìn)行訓(xùn)練,通過搭建Github實(shí)驗(yàn)環(huán)境,可以讓學(xué)生熟悉和掌握Github平臺(tái)工具的基本用法,這是后續(xù)實(shí)驗(yàn)的基礎(chǔ)[7]。申請(qǐng)Github賬號(hào)的過程比較簡單,但是要將教師的賬號(hào)和學(xué)生的賬號(hào)綁定在一起就比較繁瑣。最簡單有效的方法是通過代碼倉庫(repository)進(jìn)行聯(lián)系,見圖1。教師和學(xué)生都必須先申請(qǐng)一個(gè)賬號(hào),然后各自創(chuàng)建自己的倉庫。通常,教師倉庫TeacherRepo是公開的,便于所有學(xué)生直接查看,而學(xué)生倉庫StudentRepo是私有的,這樣學(xué)生之間就不能互相訪問對(duì)方的倉庫。這樣設(shè)計(jì)是為了避免學(xué)生互相抄襲。教師倉庫TeacherRepo用來存儲(chǔ)教師的課程資料和實(shí)驗(yàn)指導(dǎo)材料相關(guān)文檔,學(xué)生倉庫StudentRepo用來存儲(chǔ)學(xué)生的實(shí)驗(yàn)結(jié)果文檔。
實(shí)驗(yàn)準(zhǔn)備階段中有一個(gè)對(duì)教師來講比較繁瑣的工作,就是批量確認(rèn)學(xué)生發(fā)出的申請(qǐng)郵件。由于這個(gè)工作是在教師的郵箱界面進(jìn)行的,不屬于Github的管理范圍,因此必須逐個(gè)手工確認(rèn)。一旦郵件確認(rèn)成功,對(duì)于每個(gè)學(xué)生的StudentRepo倉庫而言,就有了兩個(gè)成員,一是學(xué)生本人,二是教師,允許學(xué)生和教師共同維護(hù)StudentRepo。實(shí)驗(yàn)教學(xué)過程中允許學(xué)生提交實(shí)驗(yàn)報(bào)告,允許教師批改實(shí)驗(yàn)報(bào)告。
在師生都準(zhǔn)備好了倉庫之后,就可以開始實(shí)驗(yàn),教師和學(xué)生的實(shí)驗(yàn)過程是一個(gè)協(xié)同工作流,見圖2。教師應(yīng)將每個(gè)實(shí)驗(yàn)分配到TeacherRepo中的不同目錄,學(xué)生可以Fork到自己的倉庫中。學(xué)生應(yīng)按照TeacherRepo中的實(shí)驗(yàn)要求完成實(shí)驗(yàn),最好以Markdown格式編寫,在教師規(guī)定的時(shí)間內(nèi)將實(shí)驗(yàn)結(jié)果和實(shí)驗(yàn)報(bào)告推送(push)到StudentRepo中,完成實(shí)驗(yàn)。系統(tǒng)會(huì)自動(dòng)記錄推送日期,教師可以查看學(xué)生是否按時(shí)提交。
在實(shí)驗(yàn)截止日期到達(dá)之后,教師需要將學(xué)生的實(shí)驗(yàn)結(jié)果通過Git命令下載到教師本地電腦中,然后進(jìn)行實(shí)驗(yàn)報(bào)告的批閱。批閱過程很簡單,就是在學(xué)生原代碼或者原文件上直接寫上正確的文字。特別是對(duì)于代碼文件,教師只管將正確的代碼替換學(xué)生的代碼即可,無須專門指出學(xué)生哪里有錯(cuò)誤。教師逐一批改完每名學(xué)生的實(shí)驗(yàn)文檔之后,應(yīng)將文檔分別推送到每個(gè)學(xué)生對(duì)應(yīng)的StudentRepo中,讓學(xué)生查閱實(shí)驗(yàn)批改情況。
特別需要強(qiáng)調(diào)的是,相比Word或者PDF文字處理工具,教師的批閱過程極其方便和快捷。教師對(duì)實(shí)驗(yàn)報(bào)告的審閱無須像文字處理工具那樣添加批注,只需要專注學(xué)生出現(xiàn)的問題,在學(xué)生的原始文件上直接修改即可。而且由于同一個(gè)實(shí)驗(yàn)的標(biāo)準(zhǔn)答案都是一樣的,在很多情況下教師可以直接復(fù)制粘貼,大大提高了評(píng)閱的效率。
教師上傳到StudentRepo的批改后的實(shí)驗(yàn)報(bào)告是標(biāo)準(zhǔn)答案或者是對(duì)學(xué)生錯(cuò)誤的批注,學(xué)生看到的也是最新版本的內(nèi)容。由于Github完全基于Git協(xié)議,所以它提供了一個(gè)非常強(qiáng)大的功能就是查看文件歷史(history),該功能可以在界面上直接呈現(xiàn)教師批閱的文件痕跡,見表1,學(xué)生在Github界面上查看教師評(píng)閱痕跡。這些批注都是在教師在批改報(bào)告的時(shí)候自動(dòng)生成的,學(xué)生看到這樣的批注,就立即知道教師修改了哪些地方。
在整個(gè)實(shí)驗(yàn)協(xié)同工作流中,教師需要使用Git命令批量下載和推送實(shí)驗(yàn)報(bào)告文檔,也可能需要批量查詢學(xué)生的完成情況或者完成一些自定義的操作,手工對(duì)每名學(xué)生進(jìn)行這些操作可能會(huì)需要花費(fèi)大量的時(shí)間。Github對(duì)外提供了一套開發(fā)者應(yīng)用編程接口(API),允許開發(fā)者編程抓取代碼庫的開發(fā)活動(dòng)數(shù)據(jù)[4],教師可以通過編寫應(yīng)用程序或者腳本,自動(dòng)訪問Github資料庫中的用戶和資源。
表1 學(xué)生在Github界面上查看教師評(píng)閱痕跡
在實(shí)驗(yàn)過程中,除了通過文檔的交換完成實(shí)驗(yàn)工作流之外,Github還通過Issues功能提供了成員之間的溝通渠道。教師和學(xué)生可以非常方便地在Issues實(shí)現(xiàn)溝通和交流,同時(shí)教師也可以了解學(xué)生之間交流的情況,教師在學(xué)生項(xiàng)目開發(fā)過程中的控制和管理更加方便,測(cè)評(píng)也有了合理的依據(jù)[8-9]。對(duì)于這些數(shù)據(jù)信息的處理,還可通過第三方工具M(jìn)iningit和Bicho來實(shí)現(xiàn)。通過這兩個(gè)工具,用戶可以抓取項(xiàng)目的相關(guān)數(shù)據(jù)信息并存儲(chǔ)到本地?cái)?shù)據(jù)庫中,以便進(jìn)一步研究和使用[10]。
通過以上討論,可以看出Github特別適合作為軟件工程專業(yè)及信息科學(xué)專業(yè)學(xué)生的實(shí)驗(yàn)教學(xué)平臺(tái)。不僅在校園內(nèi),學(xué)生畢業(yè)進(jìn)入到社會(huì)工作之后,Git機(jī)制還可在公司內(nèi)部進(jìn)行高效的代碼管控。同時(shí),也應(yīng)該看到,這個(gè)工作流也有一些局限性,如無法判斷學(xué)生抄襲情況,無法自動(dòng)給實(shí)驗(yàn)評(píng)分[11],對(duì)其他非軟件工程專業(yè)的實(shí)驗(yàn)管理不方便等。而Github系統(tǒng)平臺(tái)也意識(shí)到了其對(duì)教育教學(xué)的輔助功能,線上已經(jīng)推出面向教育的課堂工具[12-14],Github課堂提供了教師面對(duì)眾多學(xué)生進(jìn)行高效的輔助實(shí)驗(yàn)教學(xué)的功能模塊。
創(chuàng)新創(chuàng)業(yè)理論研究與實(shí)踐2022年20期