毛新軍,尹 剛,尹良澤,張春元,毛曉光
(國防科技大學(xué) 計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
軟件工程是軟件工程人才培養(yǎng)的一門核心專業(yè)課,其目標(biāo)是培養(yǎng)學(xué)生借助于工程化的手段,并綜合運(yùn)用多方面的知識來解決復(fù)雜問題和開展創(chuàng)新實(shí)踐的能力。實(shí)踐教學(xué)無疑是達(dá)成這一建設(shè)要求的重要環(huán)節(jié),只有通過針對軟件系統(tǒng)的工程化開發(fā)實(shí)踐,才能讓學(xué)生深入理解和掌握抽象的軟件工程知識,運(yùn)用所學(xué)到方法和技術(shù)來開發(fā)軟件系統(tǒng),并在克服困難、解決問題的過程中獲得感悟,積累經(jīng)驗(yàn),提升能力。
新工科建設(shè)[1-2]給軟件工程課程實(shí)踐教學(xué)提出了明確和清晰的要求,即從新工科人才培養(yǎng)的角度出發(fā),為提升學(xué)生的工程實(shí)踐和創(chuàng)新能力、提高工程素養(yǎng)做出貢獻(xiàn)。
首先,課程實(shí)踐的內(nèi)容要充分體現(xiàn)“工程”特點(diǎn),為工程實(shí)踐和創(chuàng)新能力培養(yǎng)奠定基礎(chǔ)。例如,課程實(shí)踐中待開發(fā)的軟件系統(tǒng)要有一定規(guī)模、需求,問題要有創(chuàng)意,涉及的知識和技能要有多樣性、綜合性、交叉性、集成性等特點(diǎn)。
其次,課程實(shí)踐的實(shí)施要充分體現(xiàn)“工程”特點(diǎn),通過實(shí)訓(xùn)來培養(yǎng)工程實(shí)踐和創(chuàng)新能力。例如,課程實(shí)踐要充分借助工具和平臺,盡可能采用與業(yè)界主流相一致的方法和技術(shù)手段。
最后,課程實(shí)踐的考評要充分體現(xiàn)“工程”特點(diǎn),為工程實(shí)踐和創(chuàng)新能力培養(yǎng)提供準(zhǔn)繩。例如,要關(guān)注和重視工程實(shí)施及其產(chǎn)品的質(zhì)量,要通過考評來推動(dòng)工程實(shí)踐,加強(qiáng)能力培養(yǎng)。
因此,必須在新工程建設(shè)的背景下重新審視軟件工程課程實(shí)踐教學(xué)的建設(shè),分析新工科建設(shè)對其提出的要求,審視當(dāng)前實(shí)踐教學(xué)在達(dá)成這一要求方面存在的問題和不足,并思考和尋求解決問題的有效方法。
自2012年以來,國防科技大學(xué)計(jì)算機(jī)學(xué)院針對新工科建設(shè)中對軟件工程課程實(shí)踐教學(xué)的要求,對其課程建設(shè)開展了系統(tǒng)性、深層次的教學(xué)改革,試圖解決我們在落實(shí)人才培養(yǎng)方案、加強(qiáng)能力培養(yǎng)、適應(yīng)專業(yè)和產(chǎn)業(yè)發(fā)展、滿足崗位需求等方面存在的問題和面臨的挑戰(zhàn)。這次教學(xué)改革涉及面廣、幅度大、要求高,包括知識結(jié)構(gòu)的重組和優(yōu)化、課程群的建設(shè)、教學(xué)方法的改進(jìn)、教學(xué)平臺的開發(fā)和應(yīng)用、考核方法的調(diào)整等。
當(dāng)前軟件工程實(shí)踐教學(xué)通常采用團(tuán)隊(duì)方式組織學(xué)生參與實(shí)踐,以項(xiàng)目形式開展實(shí)踐,以老師或者TA作為指導(dǎo)學(xué)生完成課程實(shí)踐的主要幫助對象,以老師給定的任務(wù)和要求(如時(shí)間、進(jìn)度、評標(biāo)和考核標(biāo)準(zhǔn)等)驅(qū)動(dòng)學(xué)生開展實(shí)踐。在課程實(shí)踐過程中,學(xué)生主要借助于物理空間(如教室或校園),或者局域網(wǎng)絡(luò)空間(如某些教學(xué)平臺),通過與教師和TA的交互,獲得所需的資源,解決存在的問題。
概括起來,這種實(shí)踐教學(xué)方法存在以下不足:①參與對象的封閉性,課程實(shí)踐的參與對象僅僅局限于參加實(shí)踐教學(xué)的學(xué)生、老師和TA,其他對象難以加入到實(shí)踐教學(xué)中并做出貢獻(xiàn),因此老師的作用很關(guān)鍵;②資源渠道的有限性,學(xué)生大多情況下只能從老師或者TA那里獲得支撐課程實(shí)踐所需的資源,難以從其他的渠道來獲得幫助,因此老師的輔導(dǎo)很關(guān)鍵;③實(shí)施空間的局部性,課程實(shí)踐通常受限于局部的物理空間和信息空間,學(xué)生難以與實(shí)施空間之外的個(gè)體或者群體進(jìn)行交互和協(xié)作,因此與老師的交互很關(guān)鍵。
現(xiàn)行的實(shí)踐教學(xué)方法的本質(zhì)是以教師、教室和教材為中心開展課程實(shí)踐,成效高度依賴于任課教師的專業(yè)水平、工程經(jīng)驗(yàn)和教學(xué)投入,今年的成功并不意味著明年的成功。這種實(shí)踐教學(xué)方法極大限制了學(xué)生開展實(shí)踐的視野,限制了實(shí)踐教學(xué)的實(shí)施空間,制約了獲取指導(dǎo)和幫助的范圍,影響了對學(xué)生工程實(shí)踐能力和素養(yǎng)等方面的訓(xùn)練和培養(yǎng)。
從教師的角度看,軟件工程課程實(shí)踐教學(xué)面臨的最大挑戰(zhàn)在于老師缺乏足夠的知識、經(jīng)驗(yàn)、資源、時(shí)間和精力來指導(dǎo)學(xué)生完成課程實(shí)踐。基于傳統(tǒng)教學(xué)方法,單純靠教師和TA來輔導(dǎo)學(xué)生開展軟件工程的課程實(shí)踐,高標(biāo)準(zhǔn)地完成各項(xiàng)實(shí)踐任務(wù)將會(huì)非常困難,即使老師有美好的意愿,也會(huì)遇到心有余而力不足的尷尬局面,從而導(dǎo)致課程實(shí)踐虎頭蛇尾,草草收場。
從學(xué)生的角度看,軟件工程課程實(shí)踐教學(xué)面臨的最大挑戰(zhàn)在于在課程實(shí)踐過程中會(huì)遇到種種的問題,迫切地需要尋求解答、給出建議、提供指導(dǎo)?;趥鹘y(tǒng)教學(xué)方法,學(xué)生只能從教師和TA處尋求有限的幫助,難以超越老師和TA獲得其他的幫助渠道,一些問題難以做到及時(shí)解決,從而極大影響了學(xué)生開展課程實(shí)踐的積極性和熱情,以及課程實(shí)踐的效果和質(zhì)量。
當(dāng)前的教育改革深受互聯(lián)網(wǎng)和信息技術(shù)的影響,一個(gè)典型的例子就是MOOC?;ヂ?lián)網(wǎng)不僅是一個(gè)技術(shù)平臺,更是一種理念和思想,借助連接的手段,采用開放的思維,實(shí)現(xiàn)信息、資源、服務(wù)、知識等的充分共享,從而為諸多問題的求解提供了基于互聯(lián)網(wǎng)的新模式。在此背景下,群體化實(shí)踐和應(yīng)用不斷產(chǎn)生,從大眾點(diǎn)評到軟件開發(fā)等諸多領(lǐng)域。
在軟件工程領(lǐng)域,以開源軟件、開源社區(qū)為代表的一類群體化方法取得了成功。它們?yōu)檐浖こ陶n程實(shí)踐教學(xué)的開展以及克服其局限提供了新的思路和理念。開源軟件不僅改變了傳統(tǒng)意義上的軟件開發(fā)模式,允許人們自由地獲取、使用、修改和分發(fā)由互聯(lián)網(wǎng)群體開發(fā)的程序代碼,而且極大激發(fā)了互聯(lián)網(wǎng)群體的創(chuàng)新意識,代表了軟件工程領(lǐng)域一種先進(jìn)的開發(fā)技術(shù)。以SourceForge、GitHub等為代表的開源社區(qū)不僅匯聚了大量不同水平和層次、不同專業(yè)和領(lǐng)域知識背景的軟件開發(fā)人員,而且提供了來自互聯(lián)網(wǎng)大眾的各種智慧,如互聯(lián)網(wǎng)的連接、開放和共享思想以及以開源軟件和開源社區(qū)為代表的群體化方法的成功實(shí)踐給了我們諸多的啟發(fā),充分發(fā)揮互聯(lián)網(wǎng)的優(yōu)勢和群體智慧的力量,加強(qiáng)軟件工程課程實(shí)踐建設(shè)、改革實(shí)踐教學(xué)方法、提升課程實(shí)踐效果,達(dá)成人才培養(yǎng)目標(biāo)。
(1)互聯(lián)網(wǎng)匯聚了海量、多樣、高質(zhì)量的資源(如開源軟件),我們可以將這些資源引入到實(shí)踐教學(xué)環(huán)節(jié),讓它們成為指導(dǎo)課程實(shí)踐的學(xué)習(xí)資源,從而來解決軟件工程實(shí)踐教學(xué)中普遍存在的資源數(shù)量不足、質(zhì)量不高、難以獲取等方面的突出問題。
(2)互聯(lián)網(wǎng)聚集了大量、經(jīng)驗(yàn)豐富、高水平的開發(fā)人員,我們可以將這些群體引入到課程實(shí)踐教學(xué)環(huán)節(jié),讓他們成為課程實(shí)踐的指導(dǎo)者和貢獻(xiàn)者,從而來解決實(shí)踐教學(xué)中普遍存在的有問題找不到幫助、難以獲得高水平指點(diǎn)等方面的突出問題。
互聯(lián)網(wǎng)上匯聚了大量值得我們學(xué)習(xí)的“老師”,也不乏“高手”,他們提供的資源和作品值得我們學(xué)習(xí)和利用,他們的智慧、經(jīng)驗(yàn)、心得等值得我們借鑒和參考。軟件工程課程實(shí)踐教學(xué)應(yīng)充分借助互聯(lián)網(wǎng)群體的力量,利用互聯(lián)網(wǎng)群體提供的資源、智慧和作品來開展學(xué)習(xí)、指導(dǎo)實(shí)踐。
近年來無論是教育界還是工業(yè)界都充分認(rèn)識到群體化學(xué)習(xí)方法的重要性,并在高等教育中開展了積極的探索和實(shí)踐[3-5]?;谌后w化思想的課程實(shí)踐教學(xué)不僅可以利用互聯(lián)網(wǎng)群體所提供的資源(如開源軟件)來支持實(shí)踐,讓高質(zhì)量資源及其蘊(yùn)含的豐富經(jīng)驗(yàn)和成功經(jīng)驗(yàn)來提升學(xué)習(xí)者的實(shí)踐水平和工程素養(yǎng);而且它還超越傳統(tǒng)意義上的物理空間(如教室和課堂),讓學(xué)習(xí)者基于互聯(lián)網(wǎng)與互聯(lián)網(wǎng)上的“高手”進(jìn)行交流,及時(shí)獲得幫助和指導(dǎo),從而來解決實(shí)踐過程中遇到的各類問題(見圖1)。
圖1 基于群體化方法的實(shí)踐教學(xué)示意圖
群體化方法使得實(shí)踐教學(xué)的理念發(fā)生了根本性的變化(見表1),它基于群智、開放、海量、高質(zhì)量等新穎的理念,可以有效克服以教師、教室和教材為核心的實(shí)踐教學(xué)模式存在的諸多不足,是對傳統(tǒng)實(shí)踐教學(xué)方法的有效補(bǔ)充。
與傳統(tǒng)的實(shí)踐教學(xué)方法相比較,基于群體化方法的實(shí)踐教學(xué)具有以下特點(diǎn):①實(shí)施空間,基于互聯(lián)網(wǎng)空間而非物理或者局域信息空間;②協(xié)同對象,基于開放的互聯(lián)網(wǎng)群體,而非任課教師或TA;③實(shí)踐資源,來自于互聯(lián)網(wǎng)群體的作品、問題解答、經(jīng)驗(yàn)分享等,而非來自老師和TA的有限資源;④實(shí)踐協(xié)同,基于互聯(lián)網(wǎng)平臺(如社區(qū))、采用分布式協(xié)同(Issue、Pull/Request)機(jī)制,而非面對面交流和指導(dǎo)。
為了加強(qiáng)軟件工程課程實(shí)踐教學(xué)的建設(shè),強(qiáng)化工程實(shí)踐和創(chuàng)新能力的培養(yǎng),踐行基于群體化的實(shí)踐教學(xué)方法,在過去3年我們圍繞軟件工程課程實(shí)踐教學(xué)的實(shí)踐內(nèi)容、實(shí)施方法、考評方式、支撐平臺等方面開展了積極的探索,整個(gè)實(shí)踐教學(xué)改革的框架如圖2所示,主要包括兩個(gè)相互關(guān)聯(lián)的實(shí)踐。
(1)閱讀和維護(hù)高質(zhì)量的開源軟件。該實(shí)踐要求學(xué)生閱讀高質(zhì)量、具有一定規(guī)模的開源軟件,根據(jù)對開源軟件的理解來對代碼進(jìn)行標(biāo)注,對代碼的質(zhì)量進(jìn)行分析,在此基礎(chǔ)上對開源軟件進(jìn)行維護(hù),完善其功能,糾正其缺陷。該實(shí)踐的目的旨在讓學(xué)生掌握高質(zhì)量程序代碼的基本風(fēng)格和要求,學(xué)習(xí)如何編寫高質(zhì)量的程序代碼,感受程序代碼質(zhì)量的重要性,領(lǐng)會(huì)軟件需求變化和規(guī)模增長對代碼質(zhì)量產(chǎn)生的影響。實(shí)踐的結(jié)果包括開源代碼標(biāo)注和注釋、開源代碼質(zhì)量分析報(bào)告、經(jīng)過維護(hù)后的開源代碼、可運(yùn)行和可演示的軟件系統(tǒng)、軟件系統(tǒng)的產(chǎn)品介紹、演示和報(bào)告材料。
表1 群體化方法帶來實(shí)踐教學(xué)理念的轉(zhuǎn)變
圖2 軟件工程課程實(shí)踐教學(xué)的整體框架
(2)開發(fā)有創(chuàng)意、上規(guī)模和高質(zhì)量的軟件系統(tǒng)。要求學(xué)生構(gòu)想和創(chuàng)意軟件需求,對待開發(fā)軟件系統(tǒng)的規(guī)模性、集成性、綜合性、質(zhì)量等提出明確要求,采用迭代的方法進(jìn)行需求分析、軟件設(shè)計(jì)、編寫代碼、測試驗(yàn)證等,鼓勵(lì)學(xué)生重用開源代碼和互聯(lián)網(wǎng)服務(wù),通過基于互聯(lián)網(wǎng)的分布式協(xié)同、持續(xù)集成和檢查、基于開源社區(qū)的交流和討論等手段來開發(fā)軟件,解決開發(fā)中遇到的問題。實(shí)踐的結(jié)果包括軟件需求創(chuàng)意文檔、軟件設(shè)計(jì)模型、程序代碼、測試報(bào)告、可運(yùn)行和可演示的軟件系統(tǒng)、軟件系統(tǒng)的產(chǎn)品介紹、演示視頻和報(bào)告材料。
為了實(shí)施實(shí)踐教學(xué),我們采取了以下的方法和手段。①采用群體化的方法來解決傳統(tǒng)實(shí)踐教學(xué)面臨的問題,包括學(xué)習(xí)互聯(lián)網(wǎng)群體所開發(fā)的開源代碼,通過加入開源社區(qū)并進(jìn)行交互和協(xié)同來獲得互聯(lián)網(wǎng)群體幫助,分享他們的經(jīng)驗(yàn)和智慧;②借助于基于互聯(lián)網(wǎng)工具和平臺來開展實(shí)踐,如分布式系統(tǒng)開發(fā)平臺Trustie-Forge、開源軟件連接與檢索平臺Trustie-OSSEAN、開源代碼學(xué)習(xí)標(biāo)注工具Trustie-Codepedia;③迭代開發(fā)和持續(xù)講評,兩個(gè)實(shí)踐均采用迭代的方式來完成,在此過程中老師須對學(xué)生的實(shí)踐過程和提交的實(shí)踐成果持續(xù)進(jìn)行講評,發(fā)現(xiàn)問題、給出建議、提供思路、糾正方法、總結(jié)經(jīng)驗(yàn)等。
經(jīng)過3年的建設(shè)以及2屆學(xué)生的實(shí)踐探索,基于群體化的軟件工程課程實(shí)踐教學(xué)在加強(qiáng)工程實(shí)踐和創(chuàng)新能力方面取得了積極的成效:學(xué)生所開發(fā)的軟件系統(tǒng)的規(guī)模平均達(dá)到10 000行以上代碼,軟件系統(tǒng)集成了多個(gè)系統(tǒng)和設(shè)備(如機(jī)器人、無人飛機(jī)、智能終端、開源軟件和互聯(lián)網(wǎng)服務(wù))、交叉了多樣化的知識和技術(shù)(如模式識別技術(shù)、機(jī)器人軟件技術(shù)、移動(dòng)APP軟件技術(shù)等等),軟件產(chǎn)品的質(zhì)量(包括代碼、模型和文檔)得到了顯著提升,基本掌握了基于互聯(lián)網(wǎng)來進(jìn)行群體化協(xié)同開發(fā)的技術(shù)和技能,所構(gòu)想和實(shí)現(xiàn)的軟件系統(tǒng)有新意,在多個(gè)比賽和競賽中獲獎(jiǎng)。
技術(shù)發(fā)展、產(chǎn)業(yè)進(jìn)步和國家經(jīng)濟(jì)結(jié)構(gòu)戰(zhàn)略調(diào)整對高等院校的人才培養(yǎng)質(zhì)量,尤其是工程實(shí)踐和創(chuàng)新能力、工程素養(yǎng)等提出了更高的要求。如何針對這一要求改進(jìn)教育理念和教學(xué)方法是當(dāng)前高等教育面臨的一項(xiàng)重要挑戰(zhàn)。實(shí)踐教學(xué)無疑是達(dá)成這一目標(biāo)的關(guān)鍵,但是當(dāng)前基于教師、教材和教室的實(shí)踐教學(xué)方法在支撐人才培養(yǎng)方面存在諸多的局限性。互聯(lián)網(wǎng)理念和群體化方法可以為達(dá)成新工科人才培養(yǎng)要求、克服現(xiàn)有實(shí)踐教學(xué)方法不足等提供有效的解決途徑,從而實(shí)現(xiàn)實(shí)踐教學(xué)理念和思想上的轉(zhuǎn)變,充分借助群體的智慧來促進(jìn)人才培養(yǎng)將是高等教育的一個(gè)重要趨勢?;谶@一思想,我們探索了基于群體化的軟件工程實(shí)踐教學(xué),設(shè)計(jì)了讀開源代碼、改開源軟件、利用開源軟件和互聯(lián)網(wǎng)群體來開發(fā)有創(chuàng)意、上規(guī)模和高質(zhì)量的軟件系統(tǒng)等一系列的課程實(shí)踐,訓(xùn)練和培養(yǎng)了學(xué)生的工程意識、質(zhì)量意識、創(chuàng)新意識,實(shí)踐結(jié)果表明了我們的教學(xué)實(shí)踐改革思路和方法的有效性。