毛新軍,尹良澤,尹 剛,王 濤,余 躍,盧 遙
(國防科技大學 計算機學院,湖南 長沙 410073)
如何培養(yǎng)高素質(zhì)的軟件工程人才、如何根據(jù)新工科建設的要求[1-2]加強軟件工程人才的能力培養(yǎng)是當前軟件工程專業(yè)教育面臨的重要挑戰(zhàn)。軟件工程是一門實踐性很強的課程,實踐教學是課程教學的一項必備環(huán)節(jié)。為了滿足產(chǎn)業(yè)和經(jīng)濟發(fā)展對軟件工程專業(yè)人才的迫切需求,我們需要從人才培養(yǎng)角度深層次思考這門課程實踐教學的建設目標、方法和手段,以期取得所需的人才培養(yǎng)效果。
首先,如何認識軟件工程課程實踐教學的目標?不同于其他的專業(yè)課程(如操作系統(tǒng)、編譯原理等),軟件工程課程將諸多“工程”要素融合到課程實踐中以系統(tǒng)性地培養(yǎng)學生工程實踐能力、訓練其工程素養(yǎng)。因此,加強這門課程實踐教學的建設對于提高人才培養(yǎng)質(zhì)量、提升工程實踐能力具有重要的價值。
第二,如何達成教學目標并解決面臨的問題?軟件工程課程實踐教學面臨的一個普遍性問題是學生經(jīng)常抱怨實踐沒有參考對象,不知道如何去做以及做的對不對;一個突出的現(xiàn)象是學生經(jīng)常遇到多樣化問題,老師難以做到一一解答。這就需要針對軟件工程課程實踐教學的特點和問題,尋找有效的解決方法。
第三,如何提供科學的考評手段并以此促進人才培養(yǎng)?考評是一個指揮棒,引導學生按照要求來開展工作;也是一個基準線,告訴學生按照什么樣的要求和標準來評定其成效和成績;同時也是一個推進劑,以評促改,幫助學生不斷改進其實踐成果,在此過程中培養(yǎng)能力、提升素養(yǎng)和積累經(jīng)驗。因此,這就需要從能力培養(yǎng)的角度來正確認識考評的目的、制定科學的考評標準和合理的考評手段。
軟件工程課程實踐教學需要為學生的工程實踐和創(chuàng)新能力培養(yǎng)創(chuàng)造條件、明確要求和提供指南,這就需要精心設計課程實踐的內(nèi)容,分解和細化課程實踐的要求,形成課程實踐的具體技術指標。結(jié)合軟件工程專業(yè)和技術的發(fā)展,考慮當前軟件系統(tǒng)的形態(tài)和特征,軟件工程課程實踐內(nèi)容須滿足以下的要求。
(1)規(guī)模性。課程實踐待開發(fā)的軟件系統(tǒng)必須具備一定規(guī)模。只有通過對一定規(guī)模軟件系統(tǒng)的開發(fā)實踐才能讓學生領悟軟件工程中的“工程”要素并運用工程化的手段來解決問題。這里的規(guī)模可以表現(xiàn)為代碼的長度、功能點的數(shù)量,也可是構(gòu)成系統(tǒng)的要素等。
(2)交叉性。當前大部分的軟件系統(tǒng)不再是一個純粹的技術系統(tǒng),而是融合領域知識(如教育、航空等)、交叉相關專業(yè)知識(如AI、移動計算等)的一類復雜系統(tǒng)。軟件工程課程實踐的內(nèi)容需要體現(xiàn)軟件系統(tǒng)開發(fā)的知識、技能等方面的綜合性和交叉性。
(3)集成性。互聯(lián)網(wǎng)時代的軟件系統(tǒng)通常不再是單一、集中和封閉的系統(tǒng),而是要與諸多系統(tǒng)和設備進行集成和交互。課程實踐中應考慮將軟件系統(tǒng)與其他系統(tǒng)和設備相結(jié)合來解決問題。
(4)高質(zhì)量。質(zhì)量是工程的基本要素。因此,課程實踐必須重視質(zhì)量,培養(yǎng)學生的質(zhì)量意識(如編程規(guī)范、模型一致性等),掌握高質(zhì)量軟件產(chǎn)品的開發(fā)能力。
(5)創(chuàng)新性。有創(chuàng)意的軟件才有價值,才能激發(fā)學生的實踐熱情和激情,幫助學生獲得成就感。因此,課程實踐要創(chuàng)造機會、提供空間來讓學生進行各種創(chuàng)意和構(gòu)思,從而培養(yǎng)學生的創(chuàng)新意識和能力。
(6)先進性。軟件工程相關技術發(fā)展很快,業(yè)界所采用的技術不斷變化,除了要訓練學生的基本軟件開發(fā)技能之外,課程實踐要盡可能地采用業(yè)界的主流技術,如開發(fā)方法、實現(xiàn)語言、支撐平臺和工具等,確保課程實踐技術手段的先進性。
要達成上述目標是一項極具挑戰(zhàn)性的工作。一方面,對老師的知識、經(jīng)驗和教學投入提出很高的要求。另一方面,對學生開展課程實踐所需的知識結(jié)構(gòu)、開發(fā)技能、工具使用、實踐結(jié)果等提出了更高的要求。當前基于互聯(lián)網(wǎng)的群體化方法及其在軟件工程等諸多領域的成功實踐為上述問題的解決提供新穎的思路和獨特的方法,可以借助于互聯(lián)網(wǎng)上的群體(如軟件開發(fā)人員),利用他們的智慧(如開發(fā)經(jīng)驗)和產(chǎn)品(如開源軟件)來開展課程實踐,以克服老師、助教和學生在知識、經(jīng)驗、閱歷和認識等方面的局限性和有限性,達成工程實踐和能力培養(yǎng)的目標。
(1)借助互聯(lián)網(wǎng)群體的智慧?;ヂ?lián)網(wǎng)連接了大量的人群,其中不乏高手和能人。它們擁有多樣的軟件工程知識,具有豐富的軟件開發(fā)經(jīng)驗和技能。開源軟件社區(qū)提供了靈活的機制來支持他們之間的交流、溝通和討論,從而來分享他們的智慧和經(jīng)驗[3-4]。課程實踐可以借助于互聯(lián)網(wǎng)群體的力量和智慧,運用互聯(lián)網(wǎng)社區(qū)的運行機制和手段,讓互聯(lián)網(wǎng)群體成為課程實踐的指導者和貢獻者,幫助和指導學生解答問題、提供資源、給出建議、反饋經(jīng)驗等。
(2)利用互聯(lián)網(wǎng)群體的作品。互聯(lián)網(wǎng)上匯聚了大量的開源軟件,他們是互聯(lián)網(wǎng)群體實踐活動的結(jié)晶,其中不乏高水平、高質(zhì)量[5]的作品。重用開源軟件成為目前重要的軟件開發(fā)方式和手段。軟件工程課程實踐的規(guī)模性、高質(zhì)量、交叉性、集成性等要求意味著讓學生從頭開始、全新開發(fā)這樣的軟件系統(tǒng)是不現(xiàn)實的?;陂_源的軟件開發(fā)方法將開發(fā)軟件與重用開源軟件二者相結(jié)合不僅可以滿足課程實踐教學的目標和要求,而且可以幫助學生掌握主流的軟件開發(fā)技術。
概括起來,軟件工程課程實踐教學可借助互聯(lián)網(wǎng)群體的智慧和力量,依托他們的軟件開發(fā)知識、經(jīng)驗和作品,指導學生的課程實踐,解決軟件開發(fā)中遇到的種種問題,重用開源軟件來實現(xiàn)特定功能,從而來達成和實現(xiàn)實踐教學的目標和要求。
針對上述目標和要求,我們開展了基于群體化的軟件課程實踐教學探索。整個實踐采用分組方式,每組由3~4位同學組成,他們共同完成實踐任務,包括需求創(chuàng)意、軟件設計、編碼實現(xiàn)、軟件測試等。課程實踐要求學生提交分析和設計模型、軟件文檔、程序代碼等軟件產(chǎn)品。為了落實人才培養(yǎng)目標、加強工程實踐和創(chuàng)新能力培養(yǎng),踐行群體化的實踐教學方法,課程實踐特別關注以下幾個方面的工程實踐問題,并采取了一組行之有效的實施方法。
1)軟件需求創(chuàng)意。
要求學生借助群體的智慧和力量,做有創(chuàng)意的課程實踐,具體表現(xiàn)為軟件系統(tǒng)欲解決的問題、軟件需求以及實現(xiàn)技術手段要有新意。鼓勵學生參考往屆學生的作品,依托基于互聯(lián)網(wǎng)的實踐教學平臺Trustie,與往屆學生進行交流和溝通,分享他們的經(jīng)驗和感悟,從而獲得創(chuàng)意的靈感和想法。要求學生加入到開源社區(qū),通過對已有開源軟件的分析以及與社區(qū)中群體的交流來獲得有關創(chuàng)意的意見、建議和想法。這兩種方法的本質(zhì)都是希望擴大學生的視野、獲取他人的智慧、聽取他人的建議、獲得更多的知識,并依此來構(gòu)想軟件需求。在此過程中,老師主要起到引導、評價、建議、把關、促進再思考等作用。
2)分布式協(xié)同開發(fā)和版本管理。
要求學生基于Git開發(fā)、管理軟件。每個項目團隊創(chuàng)建各自的軟件版本庫,負責人基于Issue管理工具來安排和發(fā)布任務,成員間基于Git來開展交流和解決沖突,每個成員利用Git提交各自的作品(如程序代碼),并利用Pull-request機制將其合并到整個課程實踐項目中。它不僅可以幫助學生掌握基于互聯(lián)網(wǎng)的軟件開發(fā)模式(如任務分配、作品發(fā)布、作品的本地開發(fā)和分布式提交等),而且有助于獲取學生個體的課程實踐情況,搜集第一手課程實踐數(shù)據(jù),從而對學生的實踐情況(如參與程度、所作出的貢獻、產(chǎn)品質(zhì)量等)進行科學和客觀的評價。
3)迭代開發(fā)。
由于課程實踐對軟件的創(chuàng)意、規(guī)模和知識交叉性等提出了更高要求,對于學生而言要一次性地開發(fā)出如此復雜的軟件系統(tǒng)是非常困難的,他們常常面臨需求創(chuàng)意難以想清楚、一些復雜功能難以實現(xiàn)等問題。為此我們采用迭代的方法來開展課程實踐,在整個課程實踐過程中要求學生分若干次迭代來完成整個課程實踐任務,每次迭代關注的角度和評價的要求不同。
4)以評促改。
課程實踐要求學生周期性地匯報課程實踐的成果(平均每周一次),老師根據(jù)學生的匯報對學生的課程實踐進行“點評”,幫助學生發(fā)現(xiàn)問題并提供建議,目的是引導學生對課程實踐成果持續(xù)改進和提高,從而起到以“評”促“改”的功效。針對學生的調(diào)查問卷結(jié)果表明,課堂點評最受學生歡迎,并對學生改進和提高課程實踐水平起到關鍵性的作用。
5)重用開源軟件。
課程實踐鼓勵學生根據(jù)構(gòu)想的軟件需求,到開源軟件托管網(wǎng)站(如SourceForge、Github、Stack Overf l ow、開源中國、CodeProject等)去尋找支撐其關鍵需求的開源軟件,并將其集成到整個課程實踐的軟件項目之中。為了鼓勵學生重用開源,我們明確要求學生在課程實踐中要重用至少5 000行開源軟件。
6)借助開源社區(qū)。
課程實踐要求學生加入到相關的開源社區(qū)中,學生通過檢索獲取相關討論或者在社區(qū)中提出問題獲得所需的解答。此外,我們還通過實踐教學平臺收集了每一屆學生開展課程實踐所遇到的問題、解決問題的方法、軟件開發(fā)經(jīng)驗等,學生也可以通過分享這些智慧來促進相關問題的解決。
7)持續(xù)檢查。
課程實踐要求學生采用持續(xù)檢查(continuous inspection)來確保所開發(fā)軟件系統(tǒng)的質(zhì)量,借助持續(xù)集成系統(tǒng)Jenkins將SonarQube質(zhì)量分析工具集成到Trustie平臺,實現(xiàn)了對學生提交到版本庫代碼的自動化質(zhì)量檢查,并要求學生對問題代碼進行修復后,才可合并到項目倉庫中。
8)考評方法。
采用定性和定量、主觀和客觀、過程和結(jié)果相結(jié)合的考評方法,針對多個方面(如參與度、質(zhì)量、貢獻等)給出一個詳盡的實踐考核評價要素,借助于課程實踐教學平臺Trustie以及諸多軟件開發(fā)工具(如Git和SonarQube),搜集學生在課程實踐過程中的參與和貢獻信息(如提出問題、提供建議、參與討論、提交作品等的數(shù)量),對課程實踐結(jié)果(如代碼質(zhì)量)進行定量的分析,盡可能做到基于數(shù)據(jù)、綜合實踐過程和結(jié)果、統(tǒng)籌實踐的工作量和質(zhì)量、團隊匯報和個體問答相結(jié)合的方式來進行考評,從而通過考評方法的改變來驅(qū)動學生更為獨立、自主、積極地開展實踐。
9)工具和平臺支持。
為了幫助老師和學生高效地開展課程實踐,跟蹤實踐情況和效果,科學客觀地評價實踐成績,課程實踐教學借助一系列的工具和平臺,包括分布式協(xié)同開發(fā)平臺Trustie-Forge、開源軟件檢索和分析平臺Trustie-OSSEAN、開源代碼閱讀和標注工具Trustie-Codepedia等。
基于上述實踐教學方法,針對軟件工程專業(yè)的學生開展了2年的探索,每年大約有24名學生參與,采用小班教學模式,配備2~3名助教。課程實踐延續(xù)一年時間,覆蓋了4門課程的實踐教學任務,包括軟件工程、軟件體系結(jié)構(gòu)與設計、軟件項目管理以及軟件課程綜合實踐。整體上看軟件工程實踐教學改革取得了以下成果:
(1)學生通過課程實踐所開發(fā)的軟件系統(tǒng)代碼規(guī)模平均超出10 000行。2個年級課程實踐提交的代碼統(tǒng)計結(jié)果表明,課程實踐的各項目開發(fā)程序代碼量平均超出5 000行,重用開源軟件超出5 000行(見表1)。
(2)軟件系統(tǒng)的集成性和綜合性。所開發(fā)的軟件系統(tǒng)大部分是基于互聯(lián)網(wǎng)的分布式系統(tǒng),許多軟件系統(tǒng)集成了機器人、無人系統(tǒng)、智能手機、Web服務等系統(tǒng)和設備,交叉了模式識別、移動計算、數(shù)據(jù)分析等相關知識。
(3)軟件質(zhì)量意識和水平得到提升。學生軟件開發(fā)的質(zhì)量意識得到加強,運用各種技術(如持續(xù)檢查、軟件測試等)和工具(如Junit、SonarQube等)來開發(fā)高質(zhì)量軟件系統(tǒng)的能力得到提升,分析結(jié)果表明學生開發(fā)的軟件產(chǎn)品的質(zhì)量處于較高水平。
(4)軟件工程綜合素養(yǎng)獲得提升。課程實踐過程中學生持續(xù)進行總結(jié)、報告和討論,制作宣傳彩頁、視頻和匯報PPT,撰寫產(chǎn)品手冊、凝練創(chuàng)新點,因而學生的總結(jié)、分析、表達、匯報、交流、討論等方面的綜合素養(yǎng)得到了顯著提升。
(5)學生掌握了基于互聯(lián)網(wǎng)的現(xiàn)代軟件工程技術和工具,學會了借助于開源軟件的軟件開發(fā)技能(如查找、閱讀、分析和集成開源軟件等)、依托開源社區(qū)獲得群體智慧的方法(如提出和發(fā)布問題、查詢解答等),運用基于互聯(lián)網(wǎng)的CASE工具來進行協(xié)同開發(fā)。
(6)課程實踐成果的創(chuàng)新性得到認可。兩年來學生構(gòu)思了許多有創(chuàng)意的軟件作品,包括無人值守的圖書館、家庭接待機器人、多無人機聯(lián)合搜尋系統(tǒng)、Baby安保助手等,這些軟件作品獲得了計算機作品比賽、機器人比賽等多項全國性獎項,包括金獎1項、銀獎2項、省賽區(qū)特等獎3項和一等獎1項。
實踐教學是軟件工程系列課程教學的重要環(huán)節(jié),如何改革軟件工程課程實踐教學,克服當前實踐教學理念、實施方法、評價手段等方面的局限性是一項極為緊迫的任務?;诨ヂ?lián)網(wǎng)的連接、共享和開放思想,借助以開源軟件和開源社區(qū)為代表的群體化思想,結(jié)合主流的軟件工程技術和工具,針對軟件工程實踐教學中的突出矛盾和瓶頸問題,開展了以提升工程實踐和創(chuàng)新能力為目標的實踐教學改革,取得了積極的成效,為加強軟件工程專業(yè)人才的培養(yǎng)做出了積極的探索,極大提高了學生開發(fā)大規(guī)模、高質(zhì)量軟件系統(tǒng)的自信心。兩年的教學實踐表明,在互聯(lián)網(wǎng)時代我們應該采用更為開放的思維來尋找解決實踐教學問題的方法,應該充分發(fā)揮互聯(lián)網(wǎng)的優(yōu)勢和力量來彌補當前實踐教學中存在的問題和不足,應該通過教學和科研相結(jié)合、滿足產(chǎn)業(yè)發(fā)展需要以及貼近主流的技術來落實實踐教學改革。