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