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

表1 學生在Github界面上查看教師評閱痕跡
在實驗過程中,除了通過文檔的交換完成實驗工作流之外,Github還通過Issues功能提供了成員之間的溝通渠道。教師和學生可以非常方便地在Issues實現(xiàn)溝通和交流,同時教師也可以了解學生之間交流的情況,教師在學生項目開發(fā)過程中的控制和管理更加方便,測評也有了合理的依據(jù)[8-9]。對于這些數(shù)據(jù)信息的處理,還可通過第三方工具Miningit和Bicho來實現(xiàn)。通過這兩個工具,用戶可以抓取項目的相關(guān)數(shù)據(jù)信息并存儲到本地數(shù)據(jù)庫中,以便進一步研究和使用[10]。
通過以上討論,可以看出Github特別適合作為軟件工程專業(yè)及信息科學專業(yè)學生的實驗教學平臺。不僅在校園內(nèi),學生畢業(yè)進入到社會工作之后,Git機制還可在公司內(nèi)部進行高效的代碼管控。同時,也應該看到,這個工作流也有一些局限性,如無法判斷學生抄襲情況,無法自動給實驗評分[11],對其他非軟件工程專業(yè)的實驗管理不方便等。而Github系統(tǒng)平臺也意識到了其對教育教學的輔助功能,線上已經(jīng)推出面向教育的課堂工具[12-14],Github課堂提供了教師面對眾多學生進行高效的輔助實驗教學的功能模塊。