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