張 錦,蔡美玲,楊曉春,劉 宏
(1. 湖南師范大學 信息科學與工程學院,湖南 長沙 410081;2. 上海成趣信息科技有限公司,上海 200000)
隨著移動互聯網、人工智能等新技術的迅速興起,軟件人才需求日益強烈,但相關人才培養的速度和質量難以滿足需求。根據工業和信息化部統計數據,我國軟件和信息技術服務業發展迅猛:2018年實現收入63 061億元(占GDP比重達3.6%),增速14.2%居國民經濟各行業之首;從業人員同比增長4.2%,達643萬人;工資總額增長13.4%,人均工資增長8.8%。雖然高校承擔著高級軟件工程人才培養的重任,但是軟件自身的特點和高校現有的人才培養模式,使得既熟悉業務、又具備軟件工程能力的復合型人才極難大批量培養。2017年、2018年連續兩年的全國軟件工程實踐教學研討會分別以“消除教育界和工業界的鴻溝”和“如何培養解決復雜工程能力”為主題展開專題研討。實際上,高校工科專業都面臨著人才培養難以滿足社會和國家需求的問題。教育部從國家層面進行了一系列頂層設計,從2010年6月提出的“卓越工程師教育培養計劃”到工程教育認證,以及目前如火如荼的“新工科”建設,其最基本的目的是培養大量具有工程師基本能力的工程人才。這也是“新工科”建設自從2017 年教育部繼“復旦共識”“天大行動”“北京指南”三部曲之后迅速全面推進的背景之一,其核心是滿足國家戰略需求,培養適應新形勢的創新型戰略人才[1]。
“以本為本”的理念特別關注高校課程和課堂教學質量,軟件工程課程作為軟件工程等計算機類專業的核心課程,一直是研究重點并提出了多種建設思路。面向工程教育認證以成果導向教育(Outcome-Based Education,OBE)展開軟件工程的課程重塑[2]、實踐教學[3]等教學實踐得到了較為廣泛的關注;在課程教學方面,從不同角度提出了許多具有借鑒意義的教學思路和教學方法,包括基于項目驅動的軟件工程課程設計理念[4],基于OBE模式重新梳理軟件工程課程教學內容[5],將競賽引入軟件工程的課堂教學[6],將開源社區引入軟件工程課程教學以提高學生解決復雜工程問題的能力[7]等。
軟件工程課程作為軟件人才培養體系的核心課程之一,一直是計算機教育教學所關注的焦點領域。文獻[8]從人才培養目標定位、工程教育理念、教師隊伍實踐經驗、校企育人等方面分析了軟件工程人才培養存在的問題;文獻[4]在軟件工程課程中提出了項目驅動教學法;文獻[9]提出了軟件工程教學中“五個一”工程課程培養體系,以精化軟件工程課程教學內容;文獻[10]提出了基于高質量開源軟件閱讀以培養軟件工程能力的思路。
在整個軟件工程學科的背景下,分析軟件工程課程教學中存在的問題及其原因,大致可以歸納為如下幾個方面。
雖然自2011年軟件工程已經被設置為與計算機科學與技術平行的一級學科,具有了完整的本碩博培養體系,但是由于軟件工程脫胎于計算機,使得“軟件屬于計算機一部分”的觀點混淆了原本嚴謹的學科劃分;研究內容間的緊密聯系也使得計算機與軟件難以區分。一般而言,“計算機類”包括計算機硬件和計算機軟件,這是常見的劃分,與學科無關,相互借鑒無關緊要,但實際在學科層面二者的區分相對明晰,計算機科學與技術一級學科包括計算機系統結構、計算機軟件與理論、計算機應用技術和信息安全這4個二級學科,而軟件工程包括軟件工程理論與方法、軟件工程技術、軟件服務工程和領域軟件工程這4個二級學科。
簡而言之,在國家的頂層設計中,軟件工程學科具備獨立發展的基礎和條件,因此,領域內教學科研人員必須具有獨立發展軟件工程學科的理念和立場,這是軟件工程學科進一步發展的基礎所在。依附于計算機學科發展軟件工程的思路,無疑將壓縮軟件工程的發展空間,最終也難以發展出獨立的軟件工程學科,也難以與計算機學科形成合力發展壯大信息學科和產業。
出于專業排名、院內資源分配等種種原因,相當一部分業內人士將軟件工程與計算機科學與技術相互混淆介紹,無意之中將軟件工程與計算機軟件與理論相互等同。無疑這種長期以來的專業處理和平衡方式,難以理清軟件工程的本質屬性,也難以深刻理解軟件工程的各個方面,從而設計有利于軟件工程專業的發展模式。在新的環境下,軟件和軟件工程的深度和廣度已經更勝往昔,在人機物融合環境下、在智慧環境下需要進一步明晰其本質屬性。
軟件工程學科以培養解決復雜軟件系統的能力和結合領域的工程應用能力為主,其教學模式要求以此為核心目標。這兩方面能力的培養,需要大型軟件工程實踐以及對不同領域知識的深度認知,而這在目前絕大部分高校教學中是難以達到的要求,因此,如何構建適合軟件工程核心能力培養的教學模式是目前軟件工程專業教學亟須解決的核心問題之一。
軟件工程專業在我國的發展時間只有短短的20年,其科研和教學水準與國外同行相比仍然有相當大的距離;同時,軟件工程與實踐結合緊密的特點,對師資提出了更高要求,特別是目前高校以SCI類科研論文為主的考評方式,對軟件工程的實踐師資隊伍建設提出了挑戰。如何構建滿足高質量軟件工程人才培養要求的師資隊伍,是軟件工程發展中最為關鍵的隱憂之一。
軟件開發需要各類軟件工具和軟件資源(文檔、組件等)的支撐,以提高軟件開發效率和質量。教學過程同樣如此,為每位學生建立個性化教學模式由于成本高昂而不可行,高校規模的人才培養模式在人才培養成本和人才培養質量之間進行平衡。缺乏完整的軟件工程人才教學資源支撐體系,是難以高效率培養高質量軟件工程人才的關鍵制約因素。借助MOOC項目和開源軟件,有可能逐步構建滿足教學要求的資源支撐平臺。文獻[7]借助開源社區資源探索彌補師資團隊的掣肘;文獻[11]借助Trustie教學平臺支持群體化實踐教學支持,實現對教學過程的管理和評估,這在之前是難以實現的;文獻[12]探討了基于MOOC構建混合式課內教學模式及翻轉課堂團隊學習模式,以提高教學效率和質量。
(1)在教學內容上,基于課程群重新分配授課內容。所謂課程群,就是介于單門課程和專業課程體系之間,在多門關聯課程之間相互協調統籌安排,以實現教學資源、教學效果、教學內容優化配置的一種精細化課程組織方式。課程群構成一般是由同一專業內多門(不少于3門)內容之間相互耦合的課程組成。文獻[13]探討了課程群理念在軟件工程專業的完整課程體系中的應用,提出了“三段兩層”的課程群結構,尚未涉及具體某一門課程的內容如何基于課程群進行分配。在提出的教學模式中,將課程群理念應用于同一學期、同一專業開設的課程中,將目標課程內容進行分解并分配到關聯課程中,將學時集中到解決重點教學內容中,以提高整體教學效率和效果。
(2)在教學形式上,以軟件項目為載體培養軟件工程能力。在軟件工程專業教學中,通過項目培養學生實踐能力的教學方式得到了較為廣泛的應用。文獻[4]中選擇圖書館管理系統作為貫穿整門課程的軟件項目,這種以特定項目驅動的軟件工程教學設計是項目式教學在具體課程中的應用實現。在提出的教學模式中,項目式課程教學在教學內容上不僅要貫穿軟件工程的教學內容,還要成為銜接課程群內多門課程的核心;同時,不僅要鍛煉軟件能力,還要培養溝通、表達等“軟技能”。
(3)在教學考核上,建立以過程考核為核心的評估方式。教學是一個復雜的交互過程,單純以考試為考核手段最終只能導向“紙面能力”,因此,提出的教學模式應建立以過程考核為核心的考評方式。考核不僅包括個人考核,還包括團隊考核;以實踐考核為主,以考試考核為輔;以分階段考核為主,以最終考核為輔。通過考核的變化,學生和教師將考核焦點遷移到能力培養中,在分階段完成的任務中全面、合理、準確地評估學生的軟件工程能力。
(4)在教學工具上,大規模、有目的地引入互聯網開源工具。教學自身是一項高投入的工作,提出的教學模式更需要教學資源投入。此外,軟件工程自身需要大量軟件工具的支持,盡早讓學生習慣和適應利用工具提高效率也是合格軟件從業者的一項基本技能。提出的教學模式可以有目的、大規模引入主流的互聯網開源工具,以提高教學效率和質量。所引入的工具可以根據教學內容、教學目的有選擇地使用。文獻[2]給出了清華大學在軟件工程專業教學中集成的從開發到運行監控過程全覆蓋的DevOps 工具鏈。
軟件工程不僅是軟件工程專業的核心課程,還是專業課程體系中對于工程理念體現最為充分的一門課程。種種制約因素的存在,使得相當部分高校在實施軟件工程課程教學時,都是以理論講授為主,或者附帶部分實驗學時講授部分工具使用,很少涉及工程能力培養或者團隊協作能力培養。為此,本文將提出的教學模式首先應用于軟件工程的課程教學中,為軟件工程專業的相關課程教學提供參考。
2.2.1基于課程群理念重新分配軟件工程課程的教學內容
基于課程群理論,將同一個學期內的軟件工程、系統分析與設計、軟件工程綜合實踐(二)3門課程打通形成小課程群,并且根據不同課程的特點,將軟件工程的教學內容有機整合到另外兩門課程中,見表1。將教師、課堂學時等教學資源優化配置,重組教學內容,借助相關課程的教學資源達到事半功倍的效果。這種方式對教學內容涵蓋較廣的課程尤為重要,軟件工程課程涵蓋幾乎所有軟件工程專業課程中的內容,將所有涉及內容講授一遍,既沒有必要,又不會有明顯效果,將重點集中在項目實踐管理、領域知識、可行性分析、需求分析等方面反而能夠凸顯教學重點;課程涉及的其他內容,通過協調相關課程只需要概述即可,相關課程在主講該門課程時有所側重就完全可以達到效果。
此外,在具體落地課程群時,可以根據教學實際設計跨度不同的課程群,如學期課程群、學年課程群、專業課程群等;課程內容重組需要根據培養計劃個性化設置,如如果培養計劃中有需求工程課程,軟件工程課程教學就可以減少需求分析的講解。根據不同學校的實際調整相關措施,可以達到提高教學效率和質量的目的。
2.2.2設計多種形態的軟件項目適應不同水平學生提升軟件工程能力
軟件項目是該教學模式的核心環節之一,在應用于具體課程教學時,必須解決兩個問題:①項目來源問題;②如何提升軟件工程能力。
針對項目來源,建立多種形態的軟件項目以適應不同水平和需求的學生。本次教學所完成的軟件項目見表2,大致可以分為4類:①傳統軟件系統開發項目;②具有實際需求的軟件項目;③結合算法研究類軟件項目;④基于開源代碼標注與提升的軟件項目。學生首先組成項目組,然后再確定項目,通過立項答辯的項目方可被正式啟動;通過這種方式限定項目的難度、規模等,保證項目在預定的時間和團隊能力范圍內能夠完成。

表1 軟件工程教學內容分配

表2 教學所完成的軟件項目列表
針對軟件工程能力提升問題,從兩個方面著手。首先,學生組成項目團隊共同完成具有一定難度的項目,團隊分工明確、相互協作,在項目完成期間鍛煉學生的溝通能力、表達能力、協調能力等軟技能。這類軟技能是在理論講述中無法鍛煉和涉及的。其次,基礎不同的團隊選擇不同軟件項目以最大化提升個人軟件工程能力。基礎相對落后的學生可以選擇傳統軟件系統開發類項目,這類項目的需求、軟件結構等相對清晰,重點在于提升編碼、設計等軟件能力;創新意識、個人能力較強的學生可以選擇具有實際項目需求的項目,或算法研究類項目等具有較大難度和不確定性的項目,以鍛煉軟件工程綜合素養。
2.2.3建立軟件過程考核為主的課程評估方式
提出的教學模式更注重過程質量的考核,而期末考試成績作為輔助。具體考核包括如下幾個方面。
(1)本次評估中軟件過程質量占比50%,后續將增加到70%;期末考試成績占比將逐步降低到不超過30%,期末考試以水平考核為主。同時,期末考試中應用部分考核與所選的項目有關,使得實際軟件過程內容考核占比接近60%。
(2)軟件過程考核評分由團隊分和個人分綜合獲得。團隊分是所有團隊成員均可以共享的,個人分是根據每個人的角色分工和工作質量分別確定,二者占比五五分。
(3)采用階段考核分階段評估項目質量。3門課程主講教師組成評審團隊,將項目分為需求分析階段、設計階段和實現階段,每個階段均進行公開答辯和演示,評審團隊進行綜合評分,其中軟件工程、軟件設計與分析和軟件工程綜合實踐課程的主講教師分別擔任3個階段的主評教師。
2.2.4集合教學過程支撐工具和軟件工程工具的教學自動化支撐工具環境
各類軟件工具的出現支撐著軟件生產效率和軟件質量的不斷提高。在軟件工程專業教學中,充分利用各類工具不僅是軟件行業的客觀現實,還是教學過程的主觀需要。
首先,軟件工程課程教學需要與行業發展相一致,因此在軟件工程各個階段需要熟悉主流軟件工具,否則學生一旦畢業就會有“學校內所學根本不是企業要求”這種錯覺;同時,軟件工具的確支撐項目的順利進行。本課程使用Git作為代碼管理和團隊開發協調工具,在需求階段、設計階段、編碼階段、測試階段都分別使用相關軟件工具以提高開發效率和產品質量。
其次,在教學過程中,采用Trustie-Educoder平臺(www.educoder.net)作為課程教學管理工具,可以極大節省教師精力。平臺具有項目管理、任務發布、Git集成等功能,使得有限的教師團隊能夠滿足1:20的師生比現狀。
在湖南師范大學2016級軟件工程專業本科生(部分2018級軟件工程專業研究生參與項目,這里不作統計)中實施了本教學模式,學生人數共計60人。學生自由組成項目團隊,每隊人數在3~5人之間,每隊必須選出一名且只有一名項目管理員。3門課程的主講教師組成教學團隊,每位老師指導4~5組,并全程參與。具體安排如下:①選題方面,根據團隊情況可以從提供項目中任選一個,或者自題目通過立項答辯后作為團隊項目。②教學工具支持方面,項目全過程在Educoder平臺中全程留痕跡。③時間安排方面,從2018年9月開始,到2019年1月結束。課程分為兩個階段,第一階段每月進行階段評審分別完成項目團隊組建、可行性分析、立項評審、需求評審等環節;第二階段是集中期末3個星期,完成編碼、測試、上線等環節,在該階段每周進行一次評審。
課題組從客觀數據和主觀評價兩個方面對教學模式的效果進行評估。在客觀數據方面,本課程教學基于Educoder平臺進行全過程、量化數據評估。相比于以前的教學方式,教學質量和效率明顯提升,如課程中借貸平臺項目的過程信息顯示,其版本庫更新了220次,資源庫積累了34項資源,核心成果經過多次更新(數據結構更新了6個版本等)。項目團隊很快熟悉了軟件行業中的典型開發方法、軟件工具等內容;同時,在項目過程中團隊協作、溝通交流等軟技能同樣得到了有效提升。在主觀方面,利用調查問卷對課程教學效果進行反饋評估,統計發現學生對課程教學認同度明顯提升。評分從1到10分,10分表示最滿意/最佳,其中,對課程整體安排的滿意度為8.15;對集中期末進行實踐的安排滿意度為8.1;對團隊形式進行實踐的滿意度為8.43;經過課程教學,對軟件的理解進一步加深評分為8.2;對文檔的重要性認識評分為8.28;對項目經理的評分為8.48,這個評分相當高,說明項目經理的確得到了團隊成員的認同;對團隊成員的滿意度評分為8.54,高于對項目經理的評分,說明團隊成員更重視相互之間的協作關系;對團隊中貢獻最少的組員評分為6.98,說明團隊中“打醬油”的確存在,而且團隊成員更認同大家都需要為團隊作出貢獻;對個人能力提升滿意度的評分為7.48,不到8分,說明大多數學生認識到需要進一步提高個人能力。
另外,在課程數學中也發現,原先不被看好的項目通過團隊努力拿到了大家都認可的高分,特別是音之軌跡項目團隊,成員并不是最強的,但是項目完整度、UI設計等發明的優秀工作,使得項目整體性和質量上了一個檔次。項目團隊之間的良性競爭,也極大改地變了學習氛圍,在最后3周集中實踐階段,下午不嚴格要求在實驗室,但實際的出勤率超過80%,而且基本上是整個團隊都一起努力,團隊精神初顯成效。
針對課程教學問題,我們提出面向軟件工程的課程教學模式,即基于課程群的項目式軟件工程教學模式,并將模式在湖南師范大學2016級軟件工程本科專業進行了實施。根據教學平臺記錄的數據以及課程調查問卷的統計結果表明,該教學模式具有較好的教學效果和效率,能有效提高學生的軟件工程能力以及提升一般課程教學難以涉及的軟技能等能力。在后續研究中將著重從以下幾個方面著手:①將該教學模式推廣到全校計算機基礎課以及計算機類專業課的教學中,探索不同類型課程所適合的教學模式;②考慮結合各類競賽活動,探索更有實戰性的項目式教學模式;③嘗試基于該教學模式,建立校企之間深度合作的產學合作協同育人模式。