摘 要:分析當前軟件工程課程實踐教學面臨的主要問題和挑戰(zhàn),以培養(yǎng)“解決復雜工程問題能力”為目標,提出基于開源和群智的軟件工程實踐教學方法。設(shè)計了循序漸進的課程實踐框架,其核心思想是:要求學生開發(fā)上規(guī)模、有創(chuàng)意、高質(zhì)量的軟件系統(tǒng);通過學習、重用和改造開源軟件開展軟件工程課程實踐;借助開源社區(qū)中的群智知識解決課程實踐中遇到的具體問題。此外,介紹了支撐軟件工程實踐教學的軟件工程及教學案例資源。5年的教學實踐表明,實踐教學方法成效顯著,學生創(chuàng)新實踐能力,以及綜合運用知識和工具解決復雜工程問題的能力等得到了極大提升。
關(guān)鍵詞:軟件工程;開源軟件;群智;開源社區(qū)
DOI: 10. 11907/rjdk.192730
開放科學(資源服務(wù))標識碼(OSID):
中圖分類號:TP434
文獻標識碼:A
文章編號:1672-7800( 2020)001-0001-06
0 引言
軟件工程課是一門“虛”“實”相結(jié)合、對實踐性要求非常高的課程。其“虛”的一面主要體現(xiàn)在,該課程關(guān)注的對象是軟件這一邏輯產(chǎn)品,課程知識點包含許多思想性和方法性的內(nèi)容,要將這些抽象的知識點講清楚、讓學生聽明白具有挑戰(zhàn)性。如果照本宣科地講授,學生會覺得空洞乏味,很難理解軟件工程的內(nèi)涵并掌握其要領(lǐng),因而軟件工程課程教學普遍存在“不好教”、“不易學”的突出問題[1]。其“實”的一面主要體現(xiàn)在,軟件工程課程講授的是軟件開發(fā)的具體工程化方法,課程知識點包含許多具有經(jīng)驗性、實用性的軟件開發(fā)技術(shù),需要學生在具體實踐中加以領(lǐng)會并應(yīng)用到軟件開發(fā)中。整體而言,實踐教學是軟件工程課程教學的核心和關(guān)鍵,如何通過實踐教學提升教學成效,讓學生領(lǐng)會軟件工程的內(nèi)涵、掌握其知識點并能運用它們解決實際問題,進而積累軟件開發(fā)經(jīng)驗,是軟件工程教育面臨的一項長期重大挑戰(zhàn)[2-3]。
提高工科學生的能力和素質(zhì)是近年來新工科教育需要解決的主要問題[4]。軟件工程課程實踐教學并非簡單地讓學生完成一項軟件系統(tǒng)開發(fā),而是通過課程實踐培養(yǎng)學生多方面的能力,尤其是“解決復雜工程問題的能力”,進一步提升學生的軟件工程素質(zhì)。實際上,軟件工程課程非常適合培養(yǎng)學生“解決復雜工程問題的能力”,原因有二:一是軟件本身是一類極為復雜的系統(tǒng);二是軟件開發(fā)需要綜合運用多種技術(shù)和工具、需要考慮和權(quán)衡多種因素,充分體現(xiàn)了復雜問題的解決過程。成功的軟件開發(fā)實踐需要解決諸多復雜工程問題,如滿足需求、確保質(zhì)量、保證進度等。而要達到能力培養(yǎng)這一目標,就需要對課程實踐教學任務(wù)進行精心設(shè)計、對實踐成果提出明確要求、對實踐過程進行精細把控。顯然,這需要從源頭提高課程實踐中待開發(fā)軟件系統(tǒng)的規(guī)模和復雜性,讓學生在具體實踐中體驗由于規(guī)模和復雜性增長帶來的一系列工程問題,并在解決實際復雜工程問題的過程中逐步培養(yǎng)其能力和素質(zhì)。
在軟件工程課程實踐教學過程中,學生對于教師布置的軟件工程實踐作業(yè)往往無從下手,課堂上似乎聽懂了,但一旦要具體開發(fā)一個軟件系統(tǒng)常常不知所措,通常面臨兩方面的主要問題。首先,學生在實踐過程中常常遇到超越教材和課堂的多樣化開發(fā)問題,許多問題教師也難以回答,使得課程實踐工作難以開展,影響學生完成實踐作業(yè)的信心和勇氣,許多學生不得不通過避重就輕、減少實踐內(nèi)容、降低實踐難度等方式以求順利完成作業(yè),教師對此狀況也只能“望而興嘆”“睜一只眼閉一只眼”。許多教師缺乏軟件開發(fā)實際經(jīng)驗,沒有足夠的時間和精力指導學生開展實踐、解答學生遇到的問題,也無法為學生提供實踐所需的各種資源,常常覺得“心有余而力不足”。其次,軟件工程課程實踐中會有一些關(guān)鍵需求和功能模塊,它們需要綜合運用多種專門技術(shù)(從網(wǎng)絡(luò)編程、數(shù)據(jù)庫設(shè)計到智能數(shù)據(jù)分析)才能得以實現(xiàn),因而是阻礙學生順利完成實踐的主要瓶頸。通常,軟件系統(tǒng)開發(fā)涉及諸多技術(shù)要素,除通用軟件工程技術(shù)外(如編程、設(shè)計、測試等),稍具規(guī)模和復雜性的軟件系統(tǒng)都會或多或少地涉及一些專用計算機技術(shù)(如圖像處理、模式識別、網(wǎng)絡(luò)通訊、數(shù)據(jù)分析等)。對于其中一些技術(shù)要素,學生可能并未掌握,或者將其應(yīng)用到具體的軟件系統(tǒng)開發(fā)之中會有困難,進而阻礙關(guān)鍵軟件需求和軟件部件開發(fā),影響課程實踐的順利完成。由于這兩方面問題的存在,軟件工程課程實踐常常是“虎頭蛇尾”、“草草了事”。學生提交實踐作業(yè),教師給定實踐成績,隨后實踐教學就結(jié)束了,至于實踐做得好不好、對不對、效果如何、還存在哪些問題、應(yīng)該如何解決等問題往往不得而知,最終導致軟件工程課程實踐教學流于形式、走走過場,難以達到預期效果。
為了改革軟件工程實踐教學方法,人們進行了諸多探索,如采用游戲化的手段[5]、借用MOOC教學[6]、引入?yún)f(xié)同學習方法[7]、也嘗試將開源項目引入到軟件工程教育中[8]。本文以培養(yǎng)“解決復雜工程問題能力”為目標,設(shè)計了軟件工程課程實踐的任務(wù)框架,明確了課程實踐的具體要求,提出了基于開源和群智的軟件工程實踐教學方法。
1 《軟件工程》課程實踐教學任務(wù)框架
如何針對教學目標設(shè)計一個科學、合理、可行的實踐任務(wù)是開展實踐教學的基礎(chǔ)和前提。軟件工程課程實踐任務(wù)設(shè)計不僅要服務(wù)于能力和素質(zhì)培養(yǎng)這一目標,還要綜合考慮實際條件、前導課程、學生水平、技術(shù)狀況等因素。本文設(shè)計了包含兩項實踐任務(wù)、循序漸進的軟件工程課程實踐任務(wù)框架(見圖1),以達成課程實踐教學能力培養(yǎng)目標。
任務(wù)1:閱讀、分析和維護高質(zhì)量的開源代碼。
該實踐要求學生:①閱讀高質(zhì)量的開源代碼,理解代碼的語法語義和編程風格;②對開源代碼進行標注和注釋;③分析開源代碼質(zhì)量,從多方面理解和領(lǐng)會高質(zhì)量代碼的基本特征,掌握編寫高質(zhì)量程序的基本技能和要領(lǐng),包括編碼風格、軟件設(shè)計和程序設(shè)計方法等;④運用所學到的軟件開發(fā)技能和方法維護開源軟件,以增強和完善其功能,糾正開源代碼中的缺陷和錯誤,在此過程中將所學到的編程技巧、設(shè)計方法和代碼風格等應(yīng)用到代碼維護中,做到“學以致用”,以確保維護質(zhì)量,并在此過程中體會和感受軟件“質(zhì)量”的重要性,理解“需求變化”和“代碼修改”對軟件質(zhì)量的影響。
該實踐旨在通過對高質(zhì)量開源代碼的學習,掌握高水平的軟件設(shè)計和程序設(shè)計技能,培養(yǎng)質(zhì)量意識和良好的軟件工程素質(zhì)。對于剛剛?cè)腴T的學生而言,程序代碼的閱讀、分析和維護比軟件分析、設(shè)計和建模等工作更容易人手。該實踐任務(wù)既可以讓學生在程序代碼層次,從質(zhì)量視角理解軟件工程的內(nèi)涵,也可以讓學生掌握高水平的軟件開發(fā)技能和要領(lǐng),并以此指導后續(xù)實踐任務(wù)的開展。因此,該實踐任務(wù)的引入在整個軟件工程課程實踐中起承上啟下作用,幫助學生循序漸進地開展實踐,作好技術(shù)儲備,積累一定軟件開發(fā)經(jīng)驗。
為了達成該實踐任務(wù)的培養(yǎng)目標,需要對閱讀、分析和維護的開源代碼提出明確要求:①質(zhì)量高,如代碼的軟件設(shè)計很好體現(xiàn)了軟件工程原則,程序模塊具有良好的獨立性和封裝性,代碼遵循編碼風格,具有良好的可理解性、可維護性、可擴展性等;②規(guī)模適中,規(guī)模太小,難以體驗代碼規(guī)模給軟件質(zhì)量及軟件維護等帶來的影響,無法領(lǐng)會軟件工程在開發(fā)大規(guī)模軟件系統(tǒng)中的作用;規(guī)模太大,學生難以從整體上把握軟件系統(tǒng)的全局,沒有足夠的時間和精力完成閱讀、分析和維護工作。為此,建議待閱讀、分析和維護的開源代碼規(guī)模至少應(yīng)具有5 000-10 000行的代碼量;③易于理解,所選擇的開源軟件盡可能來自于大家所熟知的應(yīng)用領(lǐng)域(如辦公、家庭、公共服務(wù)等),其功能應(yīng)具有直觀、易于理解的特點,學生容易建立起功能和代碼之間的關(guān)聯(lián)關(guān)系,并結(jié)合實際應(yīng)用需求構(gòu)想和增強其軟件功能;④用熟知的編程語言編寫,盡可能選擇那些用學生所熟知的程序設(shè)計語言所編寫的開源軟件;⑤開源社區(qū)活躍,盡可能地選擇那些在開源社區(qū)中仍然活躍的開源軟件,以便學生可以就該開源軟件的有關(guān)新特征、缺陷、版本等在社區(qū)中進行交互和協(xié)同,分享社區(qū)中軟件開發(fā)者群體的軟件開發(fā)經(jīng)驗和知識。
任務(wù)2:開發(fā)有創(chuàng)意、上規(guī)模和高質(zhì)量的軟件。
該實踐任務(wù)要求學生運用軟件工程的思想、方法、技術(shù)和工具開發(fā)一個有創(chuàng)意、上規(guī)模和高質(zhì)量的軟件系統(tǒng),在此過程中積累軟件工程經(jīng)驗,逐步培養(yǎng)和提升軟件開發(fā)能力,尤其是解決復雜工程問題的能力。
為了達成實踐教學目標,對軟件系統(tǒng)開發(fā)規(guī)模、質(zhì)量等提出明確要求:①規(guī)模性,待開發(fā)的軟件系統(tǒng)必須具備一定規(guī)模,才能讓學生領(lǐng)悟軟件工程中的“工程”要素并運用工程化的手段解決復雜問題。一般而言,要求學生以團隊為單位開發(fā)出具有至少10 000行以上程序代碼的軟件系統(tǒng);②綜合性,軟件系統(tǒng)開發(fā)需要綜合運用多方面的技術(shù)、語言和工具等;③集成性,待開發(fā)軟件系統(tǒng)需要與各種遺留系統(tǒng)、機器人、無人設(shè)備、智能終端、互聯(lián)網(wǎng)云服務(wù)等進行交互,從而解決實際問題;④高質(zhì)量,所開發(fā)的軟件系統(tǒng)必須具有良好的質(zhì)量屬性,如規(guī)范性、正確性、可維護性等,從而表現(xiàn)出良好的軟件工程素質(zhì);⑤創(chuàng)意性,所開發(fā)的軟件系統(tǒng)需要在待解決問題以及解決問題的方法等方面具有創(chuàng)意,以加強創(chuàng)新意識和能力培養(yǎng),同時激發(fā)學生的實踐熱情和激情。
2 基于開源與群智的實踐教學方法
達成上述實踐教學目標,無論對于教師還是學生而言都是一項極具挑戰(zhàn)性的工作。通過分析可以發(fā)現(xiàn),軟件工程實踐教學方法自身存在諸多局限性,難以有效支撐上述培養(yǎng)目標的實現(xiàn)。首先,施教方法落后,具體表現(xiàn)為施教對象的封閉性、輔助渠道的單一性、提供資源的有限性等,學生主要依靠教師和教輔解決實踐中遇到的困難和問題。實踐的成功高度依賴于教師和教輔的決心、投入、經(jīng)驗和水平。今年成功并不意味著明年成功,難以重復和復制。其次,實踐教學諸多假設(shè)的不合理性,比如要求針對熟知的問題或給定明確的軟件需求完成軟件開發(fā),認為實踐所需的技術(shù)等不能超出學生已學課程的知識范疇,要求學生采用全新的方式開發(fā)軟件系統(tǒng)的所有代碼,以及期望學生一次性地完成軟件開發(fā)實踐等。這些假設(shè)嚴重束縛了實踐的開展和實施,沒有為學生提供改進的機會和空間。
近年來,移動互聯(lián)網(wǎng)帶動了群體智能的應(yīng)用及發(fā)展,其特點是利用互聯(lián)網(wǎng)上的海量人群及其智慧解決各類問題,成功的案例包括基于眾籌眾智的萬眾創(chuàng)新、基于眾包眾享的共享經(jīng)濟、基于大眾開發(fā)的開源軟件等。這給開展軟件工程實踐教學改革提供了啟發(fā):在軟件工程課程實踐教學中,僅靠教師的力量無法從根本上解決實踐教學中的基礎(chǔ)性問題,可以嘗試將互聯(lián)網(wǎng)大眾的力量引入到課程實踐環(huán)節(jié),讓那些高水平的軟件工程師成為指導學生的“教師”,幫助學生解決實踐中遇到的各類問題;并且,開源軟件技術(shù)及實踐在IT學術(shù)界和產(chǎn)業(yè)界得到了廣泛應(yīng)用,產(chǎn)生了重要影響,建設(shè)開源生態(tài)、借助開源軟件實現(xiàn)軟件開發(fā)已成為諸多IT企業(yè)的共識,包括Coogle、IBM、華為甚至微軟等。這給開展軟件工程實踐教學改革提供了啟發(fā):靠學生自己獨立開發(fā)出軟件系統(tǒng)的所有程序代碼,既無必要也不現(xiàn)實,重用和集成開源軟件完成軟件開發(fā)是一種有效的工程方法和手段,應(yīng)該鼓勵學生通過重用開源軟件完成課程實踐任務(wù)。概括起來,基于開源和群智的軟件工程實踐教學方法本質(zhì)就是要借助于互聯(lián)網(wǎng)上的海量群體以及開源軟件幫助學生開展軟件工程課程實踐。它不僅可以有效克服現(xiàn)行方法的不足,還可以幫助學生有效解決實踐中遇到的問題。該方法基本思想描述如下:
(1)鼓勵學生借助開源軟件開發(fā)軟件。在軟件工程課程實踐過程中,學生可能會構(gòu)思一些較為復雜、有技術(shù)難度的軟件需求,這些需求的實現(xiàn)需要用到超出課程和教材的專業(yè)知識(如語音識別、圖像識別、機器人控制、智能手機通信等),所需軟件開發(fā)技術(shù)(如數(shù)據(jù)庫設(shè)計)可能還未開始講授,掌握實現(xiàn)需求的開發(fā)技術(shù)(如將語音轉(zhuǎn)換為文字、將視頻和語音信息從一臺計算機傳輸?shù)接脩羰謾C上)對學生而言有難度。在這種情況下,課程實踐鼓勵學生到開源軟件社區(qū)去尋找開源軟件,以實現(xiàn)課程實踐中那些學生所不能或者難以實現(xiàn)的軟件需求。學生可訪問諸如Cithub( https: //github.com/) 、SourceForge( https: //source-forge.net/)、碼云(https://gitee.com/)等開源軟件托管網(wǎng)站,結(jié)合實際需求找尋相應(yīng)的開源軟件,通過對開源軟件的理解,對其進行重用,集成到課程實踐的軟件系統(tǒng)中,從而實現(xiàn)目標軟件系統(tǒng)的關(guān)鍵需求。開源軟件托管平臺(如Github)匯聚了海量的開源軟件項目(如僅Github就有8000萬個軟件版本庫),足以提供相應(yīng)的開源代碼幫助學生實現(xiàn)各類軟件需求。無疑,重用開源軟件或其代碼片段可以幫助學生有效解決課程實踐中“不知道如何做、不會做”等問題。例如,假設(shè)學生所構(gòu)思的軟件系統(tǒng)中有一項關(guān)鍵需求,要求將機器人所獲取的語音信息傳送到遠端的用戶手機上。這一功能需求的實現(xiàn)對專有技術(shù)要求很高,開發(fā)起來有難度,為此學生可以到Cithub中尋找相關(guān)開源項目,利用“Linphone4Android”開源軟件就可以實現(xiàn)該軟件需求。
(2)要求學生到開源社區(qū)尋求問題解決。在軟件工程課程實踐過程中,學生會遇到大量、多樣化和個性化的軟件開發(fā)問題。這些問題覆蓋編程語言、開發(fā)技能、基礎(chǔ)平臺、代碼調(diào)試、工具使用等方方面面,涉及語言使用、缺陷定位、數(shù)據(jù)庫設(shè)計、網(wǎng)絡(luò)編程等諸多環(huán)節(jié)。顯然,讓教師和教輔幫助學生解決這些問題是不現(xiàn)實的。在這種情況下,課程實踐要求學生到軟件開發(fā)知識分享社區(qū)中尋找這些問題的答案,以解決問題。學生可訪問諸如Stack Overflow( https://stackoverflow.com/)、開源中國(http://www.oschlna.net/)、CSDN( https://www.csdn.net/)等軟件開發(fā)知識分享社區(qū),針對其遇到的問題搜尋相關(guān)回答,從而解決這些問題。一些軟件開發(fā)知識分享社區(qū)(如Stack Overflow)擁有幾千萬軟件開發(fā)者以及近億條知識問答條目,足以幫助學生解答實踐中遇到的各種問題。學生在實踐中遇到的95%以上的問題都可以在上述社區(qū)中找到相應(yīng)答案。對于那些找不到滿意答案的問題,學生可以在相關(guān)社區(qū)中提問,以尋求社區(qū)用戶的回答。無疑,到開源社區(qū)尋求問題解決方法可以幫助學生有效解決課程實踐中遇到的各類問題,從根本上解決“有問題找不到解答、獲得幫助的渠道有限、無法獲得有效指導”等問題。例如,假設(shè)學生在實踐中不知道“如何用Java訪問MySQL數(shù)據(jù)庫”。針對這一問題,學生可以訪問Stack Overflow網(wǎng)站,在查詢框中輸入“access MySQL database in Java”,系統(tǒng)將返回大約500個與此問題相關(guān)的回答。Stack Overflow還進一步描述了這些回答的詳細信息,如提出者是誰、問題提出時間、提供回答數(shù)目、用戶點贊情況等,學生可以進一步點擊相關(guān)超鏈獲得具體回答信息。
3 實踐教學支撐軟件工具及教學案例資源
基于開源和群智的軟件工程課程實踐需要借助一系列的支撐軟件工具,以幫助教師和學生有效和高效地開展課程實踐,搜尋和利用開源軟件和群智知識,跟蹤實踐進展情況,開展問題解答和知識分享,具體包括:分布式協(xié)同開發(fā)平臺Trustie-Forge、開源軟件檢索和分析平臺Trust-ie-OSSEAN、開源代碼閱讀和標注工具Trustie-Codepedia、群體化學習工具LearnerHub等。
3.1 實踐任務(wù)管理與協(xié)同開發(fā)工具Trustie-Forge
Trustie-Forge部署在互聯(lián)網(wǎng)上,URL是http://course.trustie.net。它為軟件工程課程實踐開展提供了任務(wù)布置、人員組織、團隊組建、項目創(chuàng)建、成果提交、協(xié)同軟件開發(fā)等一系列功能和服務(wù)(見圖2)。
(1)人員組織和管理。支持對參與課程實踐的各類人員(包括教師、教輔和學生等)進行組織和管理,包括注冊、登錄、退出和關(guān)聯(lián)。經(jīng)過注冊后的用戶可以登錄到系統(tǒng)中,并根據(jù)所扮演的角色(如教師、教輔、學生等)操作相應(yīng)功能。
(2)實踐任務(wù)布置和管理。允許教師在課程中發(fā)布實踐任務(wù),支持學生采用兩種方式提交實踐成果:以文件方式提交和以版本庫的形式提交。Tru stie- Forge能夠搜集實踐人員的實踐活動信息(如提交代碼、合并代碼等),掌握實踐開展動態(tài)情況,并及時將這些信息告知給相關(guān)實踐人員。
(3)實踐軟件項目托管與協(xié)同開發(fā)。針對軟件工程課程實踐特點和要求,提供實踐軟件項目托管服務(wù),支持實踐人員之間的分布式協(xié)同開發(fā),具體包括:開發(fā)任務(wù)分配和跟蹤、實踐成果匯聚和合并、實踐成果版本管理、實踐成果質(zhì)量分析等。
(4)實踐信息采集和分析。搜集實踐人員參與實踐、開展軟件開發(fā)工作等方面的信息,包括實踐投入時間、發(fā)布的資源和帖子及回復帖子數(shù)量和質(zhì)量、作業(yè)提交次數(shù)等。基于這些實踐數(shù)據(jù),Trustie-Forge可以從實踐人員個體和項目團隊兩個層次,分析他們的實踐活躍度、開發(fā)貢獻度(如提交的程序代碼行數(shù)量)、實踐成果提交質(zhì)量(如程序代碼的質(zhì)量等級)等,并依此對不同的軟件開發(fā)者個體、項目團隊進行排名。
3.2 代碼閱讀與標注工具Trustie-Codepedia
Trustie-Codepedia部署在互聯(lián)網(wǎng)上,URL是http:llcodepedia.trustie.net,可為軟件工程課程實踐提供代碼加載、閱讀、標注、質(zhì)量分析等功能和服務(wù)(見圖3)。
(1)代碼閱讀和注釋。Trustie-Codepedia支持將開源軟件代碼加載到工具中,構(gòu)建面向閱讀和標注的開源軟件資源庫,并為代碼閱讀和標注提供軟件系統(tǒng)的總體結(jié)構(gòu)、類與方法、方法間調(diào)用關(guān)系等方面的視圖信息,以加強對開源軟件項目的理解和認知。在此基礎(chǔ)上,工具提供了代碼獨立標注的功能,實踐人員可以針對任何一行代碼或者一個代碼庫等進行標注。工具還集成了代碼分析工具,并基于分析結(jié)果形成相應(yīng)的引導問題,引導和培養(yǎng)學生編寫高質(zhì)量代碼的意識。
(2)標注質(zhì)量分析和評估。實踐人員對代碼理解是否準確和正確、標注質(zhì)量如何等,僅靠教師評估非常困難。Trustie-Codepedia工具提供了多種功能和服務(wù)以加強對標注質(zhì)量的分析和評估。工具支持實踐人員查看他人給出的代碼注釋,以幫助其更好地理解代碼的語義。工具還提供了贊與踩、匿名評論、交叉互評等功能,通過學生間的相互評閱,利用機器學習和自然語言處理技術(shù)對標注進行分析,從而對學生代碼注釋質(zhì)量進行科學分析和準確評估。
3.3 軟件開發(fā)知識與開源軟件檢索工具Trustie-Ossean
Trustie- Ossean部署在互聯(lián)網(wǎng)上,其URL是http://os-sean.trustie.net,可為實踐人員提供群智資源檢索和獲取服務(wù),包括開源軟件項目、軟件開發(fā)知識問答、技術(shù)博客等,幫助實踐人員解決實踐中遇到的多樣化和個性化問題,重用開源軟件,促進軟件系統(tǒng)開發(fā)。
(1)檢索和獲取開源軟件資源。互聯(lián)網(wǎng)上開源軟件托管社區(qū)(如CitHub、Sourceforge、碼云等)匯聚了海量針對不同應(yīng)用和需求的開源軟件資源。Trustie-Ossean通過爬取這些開源軟件托管社區(qū),建立起面向?qū)嵺`教學的大規(guī)模開源軟件資源庫。軟件開發(fā)人員可以通過查詢獲取所需開源軟件,進而支持軟件系統(tǒng)開發(fā)。
(2)檢索和獲取軟件開發(fā)知識?;ヂ?lián)網(wǎng)上開源社區(qū)(如Stack Oveflow、CSDN、開源中國等)匯聚了有不同軟件開發(fā)人員所提供的多樣化軟件開發(fā)知識(包括知識問答、技術(shù)博客等等)。它們既是對眾多軟件開發(fā)經(jīng)驗的總結(jié),也提供了針對不同軟件開發(fā)問題的常見解決方法。Trust-ie-Ossean通過與開源社區(qū)內(nèi)容同步等技術(shù)手段,建立起面向軟件工程課程實踐教學的大規(guī)模軟件開發(fā)知識庫。軟件開發(fā)人員通過查詢方式獲取和共享相應(yīng)的軟件開發(fā)知識,從而幫助他們解決實踐中遇到的困難和問題。
3.4 群體化學習工具LearnerHub
LearnerHub(也稱知士薈)部署在互聯(lián)網(wǎng)上,其網(wǎng)址是http://www.learnerhub.net/,它可以幫助實踐人員圍繞特定的主題(如軟件工程、軟件開發(fā)等)開展學習、交流、討論和分享。它采用在線社區(qū)的模式組織學習者,使得他們通過互聯(lián)網(wǎng)分享學習資源(如學習資料、技術(shù)博客、開發(fā)經(jīng)驗等)和知識。
(1)基于項目的群體化學習。LearnerHub支持學習者圍繞學習項目開展群體化學習,如創(chuàng)建學習資源、貢獻學習資源、提出問題、回答問題、投票回答等,進而支持互聯(lián)網(wǎng)大眾圍繞特定的主題開展自主化學習。LearnerHub允許用戶自由地創(chuàng)建學習項目(如軟件工程綜合實踐),接受互聯(lián)網(wǎng)用戶加人到學習項目中開展群體化學習。
(2)基于群組的學習者管理。LearnerHub采用學習群組機制組織和管理學習者,它允許用戶創(chuàng)建群組(如軟件工程課程實踐的學生群)并通過群組匯聚具有共同學習目標和興趣的學習者?;ヂ?lián)網(wǎng)用戶可以根據(jù)自己的興趣和意愿自由地加入到相應(yīng)的學習群組之中。群組中的用戶可以創(chuàng)建學習項目,從而使得群組中的成員可以圍繞學習項目開展群體化學習。LearnerHub允許一個群組創(chuàng)建一個或者多個學習項目,也可以在一個群組中創(chuàng)建一個或多個子群組。群組中的管理者(也稱群主)擁有對群組及其所關(guān)聯(lián)的學習項目的管理權(quán)限。加入群組后,群組中的成員可以跟隨群主的學習路徑和計劃一起開展學習,也可以結(jié)合各自學習需求在相關(guān)學習項目中進行交流和分享。
3.5 開源社區(qū)
軟件開發(fā)是一個知識密集型的活動,高效的知識獲取、分享和傳播可有效地促進軟件開發(fā)。目前,典型的軟件開發(fā)知識分享社區(qū)包括編程問答社區(qū)、技術(shù)資訊社區(qū)等。
(1)編程知識問答社區(qū)及Stack Overflow。編程知識問答社區(qū)主要圍繞編程過程中遇到的問題進行問題發(fā)布、回答、評論、搜索等活動。Stack Overflow是一個面向編程人員群體的垂直問答網(wǎng)站,也是目前最活躍、最具影響力的軟件開發(fā)知識問答社區(qū),問題主題非常寬泛,涉及Web開發(fā)、數(shù)據(jù)管理、安全、編程實踐等方方面面,涵蓋Android、iOS、Eclipse等軟件開發(fā)平臺,包括C++、Java、Python、Ruby等各種編程語言及技術(shù)。
(2)技術(shù)資訊社區(qū)及CSDN。技術(shù)資訊主要圍繞特定的編程開發(fā)技術(shù),供軟件開發(fā)人員發(fā)布其開發(fā)和實踐經(jīng)驗、使用體驗等,供相關(guān)人員開展交流和討論。同時,社區(qū)還可以圍繞特定的開源項目或者開源技術(shù),發(fā)布相關(guān)開源產(chǎn)品的最新信息等,典型技術(shù)資訊社區(qū)的代表是CSDN。CSDN是創(chuàng)立于1999年的中國IT社區(qū)和服務(wù)平臺,為軟件開發(fā)人員和IT從業(yè)者提供知識傳播、職業(yè)發(fā)展、軟件開發(fā)等服務(wù)。在CSDN中,用戶可以了解最新IT技術(shù)資訊,學習和發(fā)布技術(shù)博客。
3.6 實踐教學案例及資源
為了支撐基于開源和群智的軟件工程實踐教學及改革,本文以“空巢老人智能看護系統(tǒng)”為案例,提供了豐富的實踐教學資源,具體包括:軟件文檔及模板、分析和設(shè)計的UML模型、高質(zhì)量的程序代碼、實踐總結(jié)材料(包括軟件產(chǎn)品宣傳材料、演示視頻和匯報PPT等)。
案例資源可在LearnerHub工具中的學習空間“軟件工程課程實踐教學及改革(教師)”(見圖5)中獲得。教材[1]結(jié)合軟件工程實踐內(nèi)容詳細闡述了案例細節(jié)。
4 實踐成效分析
基于上述實踐教學方法,課題組在國防科技大學計算機學院開展了為期5年的軟件工程實踐教學改革與探索,成效顯著,具體表現(xiàn)為以下幾個方面:
(1)創(chuàng)意性。學生構(gòu)思并開發(fā)了許多有創(chuàng)意和特色的軟件系統(tǒng),如無人值守的圖書館信息系統(tǒng)、空巢老人智能看護系統(tǒng)、物流寶、多無人機聯(lián)合搜尋系統(tǒng)等。這些課程實踐成果先后獲得計算機作品賽、科技創(chuàng)新比賽、創(chuàng)新創(chuàng)業(yè)賽、網(wǎng)絡(luò)技術(shù)挑戰(zhàn)賽等的特等獎、一二等獎、金銀獎共計18項。
(2)規(guī)模性。課程實踐所開發(fā)的軟件系統(tǒng)代碼行數(shù)量絕大部分超過15 000+LOC。這意味著課程實踐中的軟件系統(tǒng)具有一定的規(guī)模性和復雜度,學生通過該實踐可以在一定程度上感受復雜系統(tǒng)開發(fā)的常見問題,體會和踐行軟件工程的基本原則和思想。
(3)集成性。課程實踐中的絕大部分軟件項目嘗試將軟件系統(tǒng)與智能手機、機器人、無人系統(tǒng)、互聯(lián)網(wǎng)云服務(wù)等系統(tǒng)和設(shè)備集成在一起,以解決實際問題,并尋求創(chuàng)新。所開發(fā)的軟件系統(tǒng)大多是分布式、異構(gòu)的人機物融合系統(tǒng)。
(4)綜合性。課程實踐中幾乎所有的軟件項目都綜合運用多種軟件開發(fā)技術(shù)、工具、語言和平臺,一些軟件系統(tǒng)包含有多個不同的異構(gòu)軟部件,運行在不同的計算平臺上(如機器人、智能手機等計算設(shè)備、Linux和Android操作系統(tǒng)等),采用多種編程語言實現(xiàn)(如C++、Java和Python),以滿足軟件系統(tǒng)在不同平臺上的開發(fā)、部署和運行需要。
(5)高質(zhì)量。學生在課程實踐中提交了多樣化的軟件制品,包括軟件模型、文檔、程序代碼等。通過對這些軟件制品的質(zhì)量分析可以發(fā)現(xiàn),學生提交的軟件系統(tǒng)具有較高的質(zhì)量,具體表現(xiàn)為UML模型表達準確,軟件文檔規(guī)范且文字表述較為簡潔和嚴謹、可讀性較好,程序代碼遵循編碼風格且具有較好的可理解性、可維護性等。
5 結(jié)語
軟件工程課是一門很難講好、教好和學好的專業(yè)課程,其實踐教學環(huán)節(jié)尤為關(guān)鍵。軟件工程課程實踐教學常常面臨著學生“做不了、做不出、做不好”,教師“缺乏工程經(jīng)驗、沒有足夠精力指導學生和解答問題”等突出問題,使得實踐教學流于形式。出現(xiàn)這種狀況的原因是多方面的,既有軟件工程課程實踐的特殊性,也有現(xiàn)行實踐教學方法的局限性。本文提出從培養(yǎng)“解決復雜工程問題能力”的高度確立軟件工程課程實踐教學目標,為此設(shè)計了支撐這一目標的實踐任務(wù)框架,對實踐任務(wù)的規(guī)模性、創(chuàng)新性、集成性、綜合性和高質(zhì)量等提出明確要求。為了達成這一實踐教學目標,解決實踐教學中的突出問題,應(yīng)對挑戰(zhàn),本文提出了基于開源和群智的方法,其核心思想是學習開源軟件中的成功經(jīng)驗、鼓勵學生借助開源軟件完成軟件開發(fā)、要求學生到開源社區(qū)尋求問題的答案。
基于上述方法,課題組進行了5年的改革和探索,成效顯著。整體而言,通過軟件工程實踐,學生創(chuàng)新實踐能力以及綜合運用知識和工具解決復雜工程問題的能力等得到了極大提升。詳細的實踐實施方法可以參見相關(guān)教材[1],支撐平臺LearnerHub( www.learnerhub.net)匯聚了教學改革的具體成果,包括:課件、模型、文檔、代碼、數(shù)據(jù)、工具等。
參考文獻:
[1] 毛新軍,王濤,余躍.軟件工程實踐教程:基于開源和群智的方法[M].北京:高等教育出版社,2019.
[2]SHAW M.Software engineering education:a roadmap[Cl. ICSE-Fu-ture of SE Track, 2000: 371-380.
[3]ARDIS M,F(xiàn)ORD G.SEI report on graduate software engineering edu-cation[C].SEI Conference on SoftWare Engineering Education, 1989:208-249.
[4]林健.面向未來的中國新工科建設(shè)[J].清華大學教育研究,2017,38(2):26-35.
[5] ALHAMMAD M M,MORENO A M.Gamification in software engineer-ing education:a systematic mapping[Jl. Journal of Systems and Soft-ware.2018, 141: 131-150.
[6] FASSBINDER A G D 0,F(xiàn)ASSBINDER M,BARBOSA E F,et al.Mas-sive open online courses in software engineering education[C].IEEEFrontiers in Education Conference. 2017: 1-10.
[7]NEILL C J,DEFRANCO J F,SANGWAN R S.Improving collabora-tive learning in online software engineering education [J]. EuropeanJournal of Engineering Education, 2016, 41(3):1-12.
[8] PAPADOPOULOS P M,STAMELOS I G,MEISZNER A.Enhancingsoftware engineering education through open source projects: Fouryears of students' perspectives[J].Education and Information Tech-nologies, 2013, 18(2):381-397.
(責任編輯:孫娟)
基金項目:科技部重點研發(fā)計劃項目( 2018YFB1004202);國家自然科學基金重點項目(61532004)
作者簡介:毛新軍(1970-),男,博士,國防科技大學計算機學院教授,研究方向為軟件工程方向的教學教改、人才培養(yǎng)。