劉強
摘 要:研究和分析了當前廣泛開展的OBE教育方法,結合清華大學軟件工程專業的軟件工程教學,基于OBE理念對整個教學方案進行了改造和優化,重新設計了課程學習目標、教學內容框架、項目實踐方法和課程實驗環境等部分。重塑后的教學方案體現“價值塑造、能力培養、知識傳授”的教學思想,以學生的課程學習效果為目標驅動,注重軟件技術能力、工程實踐能力以及解決復雜軟件問題能力的培養,實施先進的工程教育教學方法,通過科學的評價方法來評估學生的課程學習效果,持續改進教學質量。
關鍵詞:軟件工程;OBE模式;教學設計;能力評價;實踐教學
一、引言
以互聯網為核心的新一輪科技和產業革命正在驅動著新經濟的形成與發展,工程科技的進步和創新成為推動人類社會發展的重要引擎,尤其是軟件技術和產業的發展水平也成為國家“硬實力”的一種象征。隨著云計算、大數據、人工智能、物聯網等技術引領的智能時代的到來,當前軟件工程人才的培養正在面臨著技術的快速發展、軟件系統規模和復雜性的不斷增長、工業界對工程能力要求的日趨提升等諸多方面的挑戰。因此,如何培養適應新經濟發展以及產業轉型升級需要的高水平軟件工程人才,成為我國高等學校軟件工程教育面臨的一項重大挑戰。
在新經濟的環境下,面向未來的知識和技術的更替越來越快,產業結構的不斷調整以及產業的優化升級對軟件人才的知識、能力和價值觀等方面提出了更高的要求。從國內高校軟件工程教育的現狀來看,課程體系和教學內容難以跟上新經濟時代軟件工程的最新發展,教學設計并未從根本上突破傳統的以學科知識體系為核心的組織模式,缺乏有效的工程思維訓練與工程能力培養,與課程教學配套的實驗環境更是與業界流行的基于云服務的開發運維一體化平臺相差甚遠。面對新的問題與挑戰,軟件工程教學應該秉承新工程范式的教育理念,以新經濟時代對提升工程素質和實踐能力的要求為出發點,在課程體系、教學設計和實踐環節上進行改造和重塑,為培養高水平、厚基礎、強能力的軟件工程人才打下堅實的基礎。
二、以學習成效為導向的教育模式
進入以新技術、新業態、新產業為特點的新經濟時代,工程教育開始從片面強調基礎研究回歸到追求工程實踐的本真,重視學生的工程能力培養已經成為世界各國高等工程教育的共識和新趨勢。近年來,隨著國內外工程教育認證的發展[1-3],成果導向教育(Outcome-Based Education,OBE)成為各國工程教育改革的主流理念,以工程能力為核心的學習產出被視為一項重要的質量準則。
OBE教育理念是由斯帕蒂(Spady)在1981年提出的,它的關注重點并不在于課程的教授內容,而是在于學生的學習成效,即學生真正擁有的知識、能力和素質。自2006年開始,教育部在國內推進實施工程教育認證工作,OBE教育模式在國內高校逐漸興起,傳統的“以內容為本”的教學理念開始向“以學生為本”的模式轉變,課程教學設計以學習目標和結果為導向,注重學習成效和畢業要求的達成,并通過持續改進來提升工程教育的質量。
OBE模式是一種面向產業需求的、強調能力培養和能力訓練的教育模式,圖1給出了這種模式的整體框架。從整個專業教育來說,應該面向行業需求,以專業培養目標和學生培養成效為導向,構建整個專業的培養方案和課程體系,通過課程學習、專業實踐、畢業設計等環節培養學生應具備的知識、能力和素質。然而,專業教育的培養目標和學習成效需要映射到各門課程來達成,課程學習是專業教育的基礎培養環節。從課程教學來說,需要明確課程學習對學生培養成效的貢獻度,以此為依據設計課程教學方案,包括學習目標、教學內容、教學模式和評價方法,以成果為導向實施課程教學,對學生的學習成效進行分析和總結,并持續改進課程教學質量。
三、基于OBE模式的軟件工程教學設計
在計算機科學和軟件工程專業,軟件工程課程是本科生階段的一門重要課程。在新經濟時代,我們應該從行業對現代軟件工程人才的需求出發,采用OBE理念對課程教學進行設計和重塑,形成以學習成效為導向的新型教學方案。在這里,將從課程目標、教學內容、項目實踐和實驗環境等部分,介紹基于OBE模式的課程教學方案。
1.課程學習目標
清華大學軟件工程專業的培養目標是學生應該掌握軟件工程領域的基礎理論與專業知識,能夠選擇和運用合適的技術、方法和工具,系統地分析和有效地解決復雜軟件問題,具備良好的溝通交流和團隊協作能力,致力于終身學習并追求職業發展,能夠提出有創造性的見解并推動技術創新,具有高度的社會責任感和職業道德,在個人職業生涯中彰顯自信和技術實力,并在產業、學術和管理等方面發揮引領作用。
結合軟件工程專業的培養目標,進一步明確了學生畢業時通過專業學習和培養所能達到的“知識、能力、素質”要求,即學生的培養成效:
SO1.應用數學、計算機科學和軟件工程知識的能力;
SO2.設計和實施實驗以及分析和解釋數據的能力;
SO3.考慮在經濟、環境、社會、政治、道德、健康、安全、易于加工、可持續性等現實約束條件下, 設計和開發滿足用戶需求的軟件系統的能力;
SO4.在多學科團隊中工作的能力;
SO5.發現、提出和解決軟件工程問題的能力;
SO6.了解軟件工程專業的職業道德和責任;
SO7.有效溝通的能力;
SO8.具備寬廣的知識面,能夠認識到軟件工程方案在全球、經濟、環境和社會范圍內的影響;
SO9.認識到終身教育的重要性,并有能力通過不斷學習而提高自己;
SO10.具備從軟件工程專業角度理解當代社會和科技熱點問題的知識;
SO11.綜合運用技術、技能和現代工程工具來進行軟件工程實踐的能力。
在清華大學軟件工程專業的培養方案中,“軟件工程”課程是一門核心的專業必修課,包括48課內學時和96課外學時,在三年級秋季學期開設。根據專業培養目標和學生培養成效,以及該課程對學生培養應起到的支撐作用,我們定義了下面的課程學習目標:
LO1.理解軟件工程基本概念、軟件過程和開發技術等方面的基礎知識;
LO2.運用敏捷開發方法進行軟件開發;
LO3.能夠獲取軟件需求以及編寫需求規格說明;
LO4.理解不同的可選方案,能夠權衡現實約束條件提出適當的技術方案;
LO5.設計和實現滿足期望需求的軟件系統;
LO6.實施有效的評審和檢查,對所開發的軟件進行系統測試;
LO7.選擇和運用適當的方法和工具進行軟件開發實踐;
LO8.充分理解團隊合作的重要性,具備個人工作和團隊協作的能力;
LO9.以口頭和書面等形式進行有效的溝通;
LO10.認識到軟件工程在產業界的發展以及在社會變革中的影響;
LO11.利用網絡資源進行自主學習,不斷拓展自己的知識面;
LO12.自覺遵守知識產權的相關約定,有識地分享知識和經驗。
在OBE模式中,課程學習目標不再單純強調理論知識的學習,而是注重“知識學習、能力培養、素質提高”的綜合目標,強調學生運用軟件工程的原理、方法和技術解決復雜軟件問題的能力。因此,課程學習目標需要與學生培養成效相關聯,并給出每一個學習目標對應培養成效的關聯矩陣,如表1所示。其中,課程目標與培養成效之間存在三種關聯,C-Covered表示課程內容涉及該能力的培養,E-Emphasized表示課程內容強調該能力的培養,AE-Assessed & Evaluated表示課程要對該項能力進行評價。
2.教學內容框架
在本科生教育階段,課程學習應該讓學生對各種技術和技能背后的科學基礎和基本原則有透徹的理解和扎實的掌握,從而可以很快適應未來不斷發展的環境。另外,軟件工程教學除了講授核心知識以外,與實踐緊密相關的應用技術也是不可忽視的重要內容,它們是核心知識的運用示范,起到構建理論和實踐的橋梁作用。因此,我們結合課程學習目標,以軟件工程的基本原理和解決問題的技術能力為核心,結合現代互聯網的開發技術和真實項目的教學案例重構教學內容,形成了如圖2所示的教學內容單元。
在上述課程體系的重構中,一方面要注重軟件工程的根本性和永久性原則,諸如權衡和選擇方案、抽象和封裝、模塊化和重用、工程化開發過程等,關注軟件系統的復雜性問題以及演化性規律;另一方面應強調解決復雜軟件問題的技術能力,更多關注現代軟件開發環境下新型軟件工程形態的技術和方法,諸如敏捷開發方法、Web應用開發框架、測試驅動開發方法、自動化測試、持續集成與交付等內容,完全反映軟件工程領域的前沿技術和最佳實踐。另外,考慮到大多數本科生基本沒有參與實際項目開發的經驗,采用說教式的知識講授對他們來說猶如“天書”,很難理解和掌握軟件工程的基礎理論,更不用說在實際開發中加以運用,因此課程應該采用案例式教學方法,把抽象的理論內容融入具體的案例場景中,再通過“啟發—提問—引導”的方法培養工程思維模式,實現理論知識的轉化以及理論與實踐的結合,從而讓學生在案例學習中把知識掌握“活”。
3.項目驅動的實踐教學
如前所述,軟件工程課程是一門綜合性和實踐性很強的課程。項目驅動的實踐教學是以項目為主線、實踐為導向、任務為載體,把軟件工程的原理、方法和技術內化在整個項目開發過程中,通過團隊協作的方式來解決實際問題,從而培養學生處理復雜軟件問題的能力。這種方法具有情景真實、目的明確、趣味性強的特點,可以更好地激發學生自主學習的興趣和主動探索創新的積極性,使學生在真實的項目環境中鍛煉工程化的思維和實踐能力,養成良好的職業素養。
圖3給出了項目驅動實踐教學方法的關鍵要素,其中項目選題是項目驅動教學方法的關鍵部分。項目選題應基于真實的問題和用戶需求,綜合考慮學生的基礎知識和認知能力,選擇可體現學習目標、有一定挑戰度和學生感興趣的項目。教師需要對項目驅動的教學過程進行認真規劃,一方面學生要發揮學習的主體作用,在項目實施過程中設計階段性的目標以及與之匹配的任務情景,激發學生通過自主學習和協作學習的方式進行問題求解和完成任務;另一方面,教師要發揮引導和啟發作用,結合問題和案例講解有關的重點和難點內容,通過互動交流的方式指導學生進行實踐。
在清華大學軟件學院的課程實踐教學中,我們要求學生以團隊(通常由4~5人組成)的方式開發一個具有一定復雜度的軟件系統,將項目開發與課堂教學、單元作業和學習評價相融合,注重學生的職業素質訓練和實踐能力培養。
(1)團隊組建。學生自愿組建團隊,選擇成員需要綜合考慮技術能力、投入時間、工作態度、配合程度等因素,所有成員在團隊工作模式和規則上達成共識。
(2)項目選題。教師預先提供若干結合校園應用場景的真實項目選題,校園應用場景適合學生理解應用問題,也方便與實際用戶進行溝通。當然,學生也可以發揮創造性進行自主選題,但必須有明確的應用背景和用戶代表,技術難度和工作量與教師提供的預選題目相當。
(3)開發過程。項目采用敏捷方法進行迭代式開發,實行基于Git的協作開發和持續集成。在項目啟動和每次迭代開始階段,教師將引導學生制訂產品規劃和迭代計劃,開發團隊以兩周為一個迭代周期,通過任務分工協作完成迭代開發。在每一個迭代結束后,教師和助教對開發過程和迭代成果進行檢查和驗收,并結合學習目標評價學生的學習效果。
(4)交付要求。開發團隊最終交付一個完整可用的系統,產品成熟度需要達到上線提測標準,系統可以成功部署運行。交付制品作為項目實踐的最終結果,需要從用戶滿意程度、設計和編碼的質量等多個維度進行評價。
(5)職業素養。尊重他人的知識產權,使用開源或他人的成果(諸如代碼、文檔、 設計方案等)需要獲得允許并按照協議使用,明確注明并給出具體來源;個人應有責任參與行業發展和技術進步,鼓勵發布博客文章進行技術和經驗分享。
4.課程實驗環境
工欲善其事,必先利其器。在軟件工程中,開發工具和平臺對工程化開發的支持至關重要,強大的開發環境可以有效提高開發效率和產品質量。隨著敏捷開發方法的普及和發展,開發運維一體化(DevOps)成為業界流行的模式,強調在云平臺的基礎上使用技術工具,把傳統的手工模式轉變為自動化流程,實現高效協作、快速迭代、持續集成和可靠交付。因此,為了支持課程實驗項目的工程化開發,我們構建了基于云服務的DevOps開發環境,實現對課程項目實踐的有力支撐。
圖4展示了一個支持Web應用項目開發的DevOps工具鏈,具體內容如下:
(1)基于Github Projects+Issue的管理模式,實現團隊成員之間的任務管理,同時使用Wiki進行文檔協作編寫;
(2)采用基于Git的版本管理系統,有效維護和控制代碼變更;
(3)在代碼檢查、單元測試、功能測試和性能測試等不同測試環節,使用工具實現測試的自動化,有效保證代碼質量;
(4)使用支持不同開發語言的包管理工具,實現組件化開發和構建管理;
(5)基于Jenkins或Travis CI以及Docker等工具,實現持續集成、持續交付和自動化的部署;
(6)使用日志采集分析系統ELKStack,實時監控和分析系統運維日志數據。
四、面向工程能力的課程評價方法
基于OBE模式的課程教學始終圍繞學生的學習成效進行設計和實施。傳統的知識考核更多反映了知識記憶的效果,簡單粗放的項目評價也只是一個總體成績,這些都無法分析和評價學生在課程目標上的實際達成度。因此,需要建立一種OBE模式的課程評價標準,從多個維度進行系統化的全面評價,檢驗學生在知識、能力和素質方面所取得的學習效果。
根據課程的重點考核目標,我們定義了相關目標的評價方法,如表2所示。其中,關于基礎知識部分,以期末考試的形式進行考核,主要涉及軟件工程的基本概念和方法;對于學生在課堂上的表現,以問題討論和項目迭代匯報進行評價,著重于問題分析和溝通表達等方面;對于個人技術能力,采用單元作業的形式,重點評價組件設計、代碼質量和單元測試等方面的能力;課程項目是學習的考核重點,以團隊分工和過程制品進行評價,項目評價細化到每一次迭代的結果和表現,在評價整個團隊的同時還會考慮個人的貢獻度。從表2的示例數據中可以看出,SO3的培養成效并未達到期望值,經過進一步分析得知測試部分的訓練還需要加強。
軟件工程強調工程開發實踐能力,上述評價體系將基礎知識、課堂表現、個人作業和團隊項目結合在一起,具備了知識考核和能力評價的雙重功效。整個體系突出對項目實踐效果的評價,在系統需求、軟件設計、代碼質量、產品測試、 過程管理、軟件工程文檔等多個方面細化考核項,反映出學生在課程學習過程中的真實效果和獲得的能力。
教學是一個不斷迭代和持續改進的過程,根據課程學習目標以及培養成效的評價結果,我們可以分析課程教學的成效和存在的問題,并進一步形成課程教學的改進方案,從而不斷提升教學質量。
五、結語
軟件工程是以工程的形式應用計算機科學和數學原理,從而經濟有效地解決問題,軟件開發的工程思維訓練和實踐能力培養成為人才培養的關鍵因素。現實中,軟件工程領域的發展變化非常迅速,往往一個特定的開發技術或應用技能在幾年后就會過時甚至消失。因此,軟件工程是一門比較難教和難學的課程,傳統的教學模式無法取得良好的教學效果。
我們采用OBE教育理念對軟件工程課程教學進行重塑,突出新經濟時代軟件工程的最新發展,強調解決問題的能力和軟件工程實踐,實行“以學為中心”的教學方法,使學生在基礎知識與技能、團隊協作、分析與解決問題、談判與溝通等方面得到良好的訓練,具備良好的綜合素質和解決問題的技術能力,樹立軟件開發系統化與工程化觀念和質量意識,為將來從事復雜軟件系統的開發與維護打下堅實的
基礎。
參考文獻:
[1]朱永東,葉玉嘉. 美國工程教育專業認證標準研究[J]. 現代大學教育,2009(3):46-50.
[2]Accreditation Board of Engineering and Technology (ABET)[EB/OL]. http://www.abet.org.
[3]中國工程教育專業認證協會. 工程教育專業認證標準[EB/OL]. http://www.ceeaa.org.cn.
[責任編輯:余大品]