陳國明 李振鵬 張嘉琛 周如旗 陳強 朱雄泳



關鍵詞:軟件工程;Spring Cloud;教學;CDIO-OBE
1引言
高校課程改革的一個重要目標就是培養應用型人才,因此以成果教育為導向(Outcome BasedEducation,OBE)的模式蓬勃發展。OBE是以最終成果為導向的一種工程教育模式,旨在培養掌握專業知識、專業技能,能夠快速融人社會的畢業生。OBE的基本理念在于實施課程時把握反向設計方法,以軟件工程的課程內容、結構和典型成果為基礎,選擇教學內容,使學生深入理解知識,能夠綜合應用各方面知識解決實際問題。其中,課程實施過程包括學習成果呈現方式和對成果的評價方法。學習過程應注重基礎知識的掌握和環境工具的使用,以實踐操作為中心,綜合應用知識,提升創新能力。
在教學案例整體設計中,要合理銜接專業知識與社會需求,引導學生掌握科學的思維方法,辨明研究方向。通過“案例項目驅動”的教學模式,培養學生由被動學習到主動創新研發的能力:借助線上線下多種學習媒介,提高學生的學習能力和創新意識。CDIO工程教育模式代表構思(Conceive)、設計(Design)、實現(Implement)和運作(Operate),符合軟件行業對應用型人才的培養要求,被廣泛應用到軟件工程教學改革實踐中。
CDIO-OBE工程教育模式有利于提高學生的學習、模仿、探索、分析、創新等能力。以學生為中心的教學實踐,有利于學生獲得操作體驗與知識技能,進而促進學生能力的發展。根據軟件行業技術發展的實際需要和企業工作所需要具備的技能、知識、素養要求,重構教學案例,讓學生明確掌握重要知識,并學會如何適應這些知識,為學生的可持續發展以及就業奠定良好的基礎。教學內容需要緊跟時代發展步伐,強調科技創新的新技術、新方法,同步課程改革內容,按照內容分解任務重構教學案例,培養學生的創新精神。引入CDIO-OBE工程教育模式理念,優化軟件工程課程的教學資源案例,既能夠提升學生解決實際問題的能力,也能培養學生的創新精神。
20BE和CDIO教育理念的融合
OBE起源于1990年前后,是由美國教育家威廉.G.斯派迪提出的教學教育以學生為導向,以結果為導向的教育教學模式。目前,OBE已在新西蘭、美國、澳大利亞等國家進行實施,并取得了良好的教學反饋。在中國,OBE被稱為以結果為導向的教育模型,它強調的三個核心概念模型是面向輸出的、以學生為中心的、連續的改進,這些概念代表了工程教育改革方向和先進教育理念。
CDIO工程教育模式是一種體現時代創新特性,以工程教育為背景的教學模式。最初由麻省理工學院和瑞典皇家理工學院通過長期研究、探索和教學實踐創建的。作為新興的教育模式和教學理念,伴隨著信息技術的飛速發展,CDIO成為工程教育的一次深刻變革。CDIO代表了構思(Conceive)、設計(Design)、實現(Implement)和運作(Operate)[3]。以軟件需求到軟件運維的生命周期為載體,讓學生親自操作,親身經歷情景,以直接體驗為基礎,強調全程參與,以邊做邊學的方式進行工程學習。CDlO注重培養學生的工程基礎知識與專業技能、強調團隊合作能力,培養學生因用科學思維方法完成軟件的構思、設計、實現和運作,使其成為符合時代需要,能應對未來挑戰,實現終身發展的創新型工程人才。
在OBE的理念下,專業訓練計劃遵循回溯原則設計,通過設置期望學習輸出來設計教學案例。期望學習輸出來自對專業職位、職責和軟件開發能力的調查。以學生為中心建立課程案例,在實地調研學生實習的單位或企業的基礎上,根據現實需求探索軟件工程教學案例改革,基于OBE-CDIO的教育理念來設計教學案例。課程案例對應課程培養的能力和知識,明確每個人的期望學習輸出,嚴格執行CDIO教育示范工程,保證工程教學效果。課堂教學以學生為中心,教師在課堂積極答疑,通過設計教學過程來指導學生完成項目,并監控工程質量。課程案例采用多種教學方法,引導學生積極學習,培養良好的學習習慣,并在各個階段進行定期總結、反思以及評估實際學習輸出與期望學習輸出,科學分析實施過程出現的問題,及時調整計劃并改進教學策略。
2.1軟件工程案例教學模塊的設計
軟件工程的課程案例是以一個餐飲信息管理系統為主線,根據CDIO-OBE模式特征,圍繞課程理論知識與實踐內容,還需要更好地體現以學生為中心的自主學習方式[6]。在課程教學案例的設計中,強調各個知識模塊之間的相互作用,通過模塊的系統學習,學生應該掌握軟件工程項目實施的基本方法。教師上課之前對照知識點模塊,可以很清楚地把握教學內容。軟件工程案例的教學按照知識模塊一共劃分為四個模塊,即餐飲信息管理系統軟件結構的設計與數據模型設計(設計Design)、MVVM方案的構思(構思Conceive)、Spring Cloud框架(運作Operate)、實現網頁前端(實現Implement)。在該教學案例中,各個模塊的學習成果可以通過可視化的形式展現出來,因此可在此基礎上進行教學評價與質量檢測。
2.2餐飲信息管理系統軟件結構設計以及數據模型設計(設計,Design)
在融合OBE和CDIO的教學案例設計中,前期信息系統需求分析包括系統功能建模、系統對象建模、系統動態建模。以數據模型設計(提供餐飲信息管理系統的數據模型)為例,通過建立基本的概念數據模型、邏輯數據模型以及物理數據模型,在CDIO中強調設計(Design)的理念,范例中的數據模型可供學生參考,并由學生提出改進方案。
本案例中初始的數據庫設計概念模型如圖1所示,主要涉及菜品種類表(category)、菜品信息表(product_info)、訂單概述表(order_summary)、訂單詳情表(order_detail)以及用戶表(dinner_user)。其中,菜品種類和菜品信息為一對多關系,訂單概述與訂單詳情是一對多關系,訂單詳情與菜品信息是一對一關系。
2.3MVC模式與MVVM模式(構思,Conceive)
2.3.1MVC模式
構思是設計過程中的一種模式,在這種模式中,學生將精力集中在構思的產生上。CDIO中的構思比較抽象,學生難以迅速集中注意力進行訓練,學習難度較大。良好的案例有助于學生對工程設計內容的理解,突破難點,改善訓練環境。好的設計模式還能使軟件更容易修改和維護,其結構經過長期發展形成解決方案,體現出創作構思的整體性。這種構思在實施可行的基礎上具有一定的創新性。
所謂MVC模式,即模型一視圖一控制器(Model-View-Controller)模式,三個部分分別對應內部數據、數據表示和輸入/輸出控制部分,把它們分開獨立設計,其過程是:首先,控制器接收用戶的請求,并決定調用哪個模型進行處理;然后,模型用業務邏輯來響應用戶的請求并返回數據:最后,控制器用視圖來表示模型返回的數據,將其呈現給用戶。模型側重數據和功能,視圖側重數據顯示,控制器側重用戶輸入,其優點是把數據和業務規則分開表示。
(1)模型對象
模型對象是應用程序中用于處理應用程序數據邏輯的部分,其變化通過事件處理通知視圖和控制器對象。
(2)視圖對象
視圖對象代表GUI對象,并且以用戶需要的格式表示模型狀態,是交互系統與外界的接口。它包含子視圖,子視圖用于顯示模型的不同部分。通常而言,每個視圖對象對應一個控制器對象。
(3)控制器對象
控制器對象代表事件,主要處理用戶的輸入行為,給模型發送業務事件,將其解析為模型執行的動作。同時,模型的更新與修改經由控制器通知視圖,實現各視圖與模型的一致。
2.3.2MVVM模式
MVVM模式改進了MVC模式,更好地分離了視圖和模型。MVVM的組成結構如下。
(1)模型層(Model):指數據模型,或指代表內容的數據訪問層,在前后端分離的架構中,可以理解為后端往前端傳遞的數據。
(2)視圖層(View):即用戶界面。
(3)視圖模型層(ViewModel):該層主要負責Model層與View層的通信以及數據與視圖之間的綁定。可以將數據封裝并傳遞至視圖層,或將視圖的行為與狀態的變換傳遞到Model層。
本文的課程案例采用前后端分離的架構開發。在該架構中,后端對應MVVM模式中的Model層,圍繞數據庫系統進行業務邏輯的處理,封裝數據(主要為JSON格式)并傳輸至前端。前端對應MVVM模式中的ViewModel層和View層。前端從后端獲取的數據通過JavaScript代碼進行二次封裝,以生成符合View層使用預期的視圖數據模型,以HTML加CSS的形式進行展示。當視圖發生變化時,前端根據與后端約定好的接口規則,通過JavaScript代碼向后端發起請求。而MVVM模式降低了模塊之間的耦合度,前后端分離架構提高了開發效率。
2.3.3CDIO中的構思
以學生為中心的教學模式,強調學生個性化學習。在前后端分離的技術應用中,項目里有很多代碼都是重復的。例如,幾乎每個基礎模塊的代碼都有增刪改查的功能,而這些功能都大同小異,如果這些功能都要自己去寫,將會降低開發的效率[8]。啟發學生積極思考,自己尋求解決方法,這種重復性的代碼可以使用代碼生成(前后端代碼的生成Java,html,xml,sql),也就是通過統- JSON數據格式設計,通過導人數據庫的表來生成代碼。
2.4Spring aoud微服務框架(運作,Operate)
2.4.1CDIO的運作(Operate)與Spring Cloud微服務框架
利用有限的時間將難懂的專業術語向學生描述清楚,使學生在操作的過程中因加深了對知識的理解而收獲成就感,從而增強學生的主動性、創造性和實踐能力。并且.教師通過設計詳細的運作文檔把過程中每一步的配置操作都記錄下來:學生通過對典型案例進行閱讀、思考、分析、討論、交流和操作復現,提高其分析問題和解決問題的能力[9]。學生掌握后端Spring Cloud微服務框架基本的運作,通過對SpringCloud的部署以及對環境的設置,使得項目得以正常運作。其運作的成果如圖2所示,基礎的點餐服務的各組件可以正常運行以及展示。
Spring Cloud Netflix微服務框架作為后端架構,在學生了解MVC設計模式、前后端分離技術以及SpringBoot框架的基礎上,為學生介紹分布式應用架構設計理念。微服務架構就是將原來單體應用,按照一定粒度拆分為多個獨立的服務,從而降低項目耦合度,實現快速擴容和彈性伸縮。本案例使用VM Ware虛擬機進行后端本地部署,操作系統使用CentOS 8,同時需要啟動餐飲信息管理系統所需要的各個組件。將相關組件啟動后,運行啟動腳本,即可完成部署,所有注冊成功的微服務都可以在Eureka注冊中心中進行查看。
2.4.2主要類圖與項目流程簡介
Controller類圖(API接口)如圖3所示,Service類圖(業務實現類)如圖4所示。以添加菜品為例,前端按照后端接口文檔給定參數,包括菜品名(name)、菜品圖標(icon)、菜品介紹(desc)、菜品價格(price)、菜品狀態(status)和菜品庫存(stock),并將其封裝成JSON對象,根據路由發送到后端。數據會先經過Zuul網關,判斷用戶是否登錄以及請求路徑是否合法等,然后會根據請求路徑分發到對應服務的Controller接口并轉換成對應的DTO對象進行數據校驗。在接口中會調用Service的方法進行業務邏輯處理,如果沒有出現錯誤,則會將DTO對象轉換為持久層(Mapper)對象,并調用持久層相應的添加方法將數據寫入數據庫中,完整的請求調用鏈可以通過Zipkin等分布式鏈路追蹤工具進行查看。
2.4.3服務組成結構
項目部署架構如圖5所示。
(1) DINNER-SERVER
Eureka注冊中心,提供服務注冊服務,其本身也屬于一個服務,各個節點啟動后,會在Eureka Server中進行注冊。Eureka Server不需要注冊自身,且不需要拉取配置文件。Eureka會定時刪除不健康的服務節點,當大批服務節點宕機時,Eureka會認為自身網絡故障,便會開啟自我保護模式,不再刪除節點,在該項目中將該功能關閉。并且,Eureka具有服務緩存的功能,當某個服務節點宕機時,微服務的Provider和Consumer仍可以依托緩存繼續通信。
(2) DINNER-CONFIG-SERVER
分布式配置中心,集中管理每個微服務的配置文件,使用Citee統一存儲,實現配置文件的版本控制。在配置文件中填人Gitee相關參數,當項目啟動時,Config Server會從遠程倉庫中拉取相關配置文件。
(3) MANACER-CATEWAY
餐飲信息管理系統賣家端人口,采用Spring CloudZuul作為API網關,可以根據訪問的路由將請求分發到相應的服務,自定義白名單對訪問名單內路由的所有請求直接放行。Hytrix為Spring Cloud Netflix的容錯組件,當遠程調用超出所設置的時間時,Hytrix將會執行相應的保護措施。Ribbon為Spring Cloud Netflix的負載均衡組件,當連接超出所設置的時間時,Ribbon將會根據相應的負載均衡算法,重新選擇服務節點,在本案例的多數服務中都有相關配置。
(4) CUSTOMER-CATEWAY
餐飲信息管理系統買家端的人口,同樣采用Spring Cloud Zuul作為API網關,其主要配置與MANACER-CATEWAY基本相同。在CUSTOMER-GATEWAY中對訂單服務等服務配置了服務降級處理,當遠程調用超時或錯誤時,將會返回托底數據,避免服務雪崩。
(5) DINNER-PRODUCT
菜品服務,買家端能夠查看菜品信息,賣家端能夠對菜品信息進行增刪改查等操作。在需要拉取配置文件的服務中編寫bootstrap.yml文件,編寫要獲取的配置文件的相關參數,Spring Boot會優先讀取該文件,然后訪問DINNER-CONFIG-SERVER獲取相應的配置文件,并使之生效。
(6) DINNER-ORDER
訂單服務,為買家提供下單功能,賣家能夠對訂單信息進行增刪改查等操作。
(7) DINNER-USER
用戶服務,提供買家與賣家用戶信息的各種操作。
(8) DINNER-AUTH
認證服務,負責賣家與買家的賬號登錄以及退出等操作。
案例提供Spring Cloud Netflix相關資料,可以讓學生可以更深入地了解Spring Cloud Netflix的相關知識。而項目的詳細結構、業務實現以及代碼邏輯等板塊,則可以讓學生自行閱讀源代碼進行研究[10]。
2.5網頁前端的實現(實現,Implement)
網頁前端的實現模塊提供美觀的圖形化網頁操作界面,屬于人機交互的界面接口設計以及CDIO的實現部分( Implement)。可供學生運行以及調試的網頁前端界面成果如圖6所示。
本案例前端技術采用React框架,UI框架使用Ant Design Pro,修改Nginx服務器配置文件,啟動Nginx即可完成前端部署。本案例前端架構基于AntDesign Pro框架開發,采用了TypeScript,React,Umi.js等前端技術棧,實現前后端分離的模式進行開發。通過React構建View層視圖以及ViewModel層的業務邏輯,利用Umi.js完整的插件體系與webpack進行前端工程化的模塊開發。其中,后臺管理界面采用的是ProComponents頁面組件進行構建,而權限管理、數據流、網絡請求服務、跨域代理、mock數據等業務則是通過Umi的各種播件進行開發。
2.6教學過程概述
(1)在課堂上為學生介紹項目基本情況,包括項目主題、項目模塊、相關技術等,并為學生提供所需要用到的軟件工具、基本項目代碼以及操作手冊。操作手冊提供圖文并茂的項目介紹、運行環境的安裝、項目部署步驟以及相關技術的參考資料[11]。但考慮到學生的能力水平不一致,需要鼓勵學生組隊合作,按照操作手冊的指示完成項目的部署。
(2)要求學生在課下認真研讀項目源碼,必要時可以根據操作手冊提供的資料對相關技術進行學習。教師需要收集學生在項目部署以及閱讀源碼時遇到的問題,在教學社群或課堂上予以解答。另外,建議學生根據技術偏好進行分工,如前端開發、后端開發、項目測試與項目運維,讓學生真實地了解軟件項目的開發流程以及生命周期,并應用軟件工程相關知識撰寫項目手冊,在課堂上進行展示和考查。
(3)在初次教學實踐中,有學生反饋項目部署與運行方面的問題。此后的教學中將會收集相關問題以及解決方案,不斷迭代操作手冊的內容。在成果展示中發現有更為優秀的項目,能夠作為新的項目模板進行教學,完成對教學案例的迭代。
3基于OBE和CDIO的實施要點
案例的基本簡化模塊已經在對計算機學院軟件工程專業學生的教學中進行實施,并提供了一定設計構建的經驗,通過在課程中注入模塊來加強學生對產品系統生命周期的了解。課程案例及實踐項目需要緊跟軟件行業的發展趨勢,學生的學習成果需要適應企業要求,通過教學案例改革,培養學生的軟件工程應用能力、軟件項目開發與測試能力、專業素質等,使學生熟悉軟件項目開發流程和規范,不僅要開發出好的軟件,還要培養良好的開發習慣。而且,通過教學案例提高了學生使用所學知識的能力以及根據實際情況解決具體問題的能力,也能培養學生的創新意識和團隊合作精神。更重要的是,學生可以通過案例接觸到最前沿的新技術,不會出現“閉門造車”的現象,能有效促進學生的成長[12]。
可見,理論和實踐是教學過程的兩個重要方面,兩者缺一不可,相輔相成。軟件開發的實踐體系要緊跟軟件產業的發展,注重軟件人才的綜合素質和創新意識的培養。因此,軟件開發的實際系統應該是分層的。首先,將課程案例劃分為知識塊,為每個知識模塊提供教學、模仿、升級、綜合項目。其次,這些項目是CDIO的項目,階段之間是多個知識塊的綜合應用。課堂以學生為中心,通過設計項目案例模塊,完善每個模塊的詳細操作指引文檔,引導學生按照文檔步驟完成各個模塊的任務,細心引導、幫助、培養學生完成任務,提高學生的學習興趣,耐心點撥學生困惑,使學生不斷進步。教師在教學的過程中要注重教育,讓學生享受成功的喜悅。最后,學生需要在課前根據教學微視頻提前完成知識學習,而教師需要在課堂上進行基礎項目的教學,引導學生從簡單到復雜,前后銜接,使得教學更深入、更徹底。
隨著項目實踐的增加,大部分學生都能在學習中自行解決問題,循序漸進地總結,最終形成理論。應用CDIO教育理念,設計項目教學環節,目的是激發學生的興趣、好奇心和熱情,帶動學生團隊和個人努力探索新知識。因此,闖關流程分為個人級別和團隊級別、強制級別和可選級別。案例項目的設計要滿足學生的個體差異,引導學生積極學習新知識。
4結束語
本文探討了CDIO-OBE教育模式下的軟件工程教學案例模塊的設計與實施。軟件工程案例的教學按照知識模塊一共劃分為四個模塊,即餐飲信息管理系統軟件結構的設計與數據模型設計(設計Design)、MVVM方案的構思(構思Conceive)、Spring Cloud框架(運作Operate)和網頁前端的實現(實現Implement),并在案例各模塊充分展現基于成果的教育(OBE)。在案例中,項目的學習成果可以通過可視化的形式展現出來。同時,以CDIO-OBE為導向,教學內容緊跟時代發展步伐,強調科技創新的新技術和新方法,同步課程改革內容,按照內容分解任務,重構教學案例,并為每個模塊設計詳細實現文檔,然后布置相應的案例任務來指導學生按照文檔內容逐步去實現。通過期望學習輸出,使學生清晰地了解學習課程后將要達到的學習成果,提高課程的教學質量,為學生就業打下良好的基礎。基于CDIO-OBE的工程教育模式理念能夠培養學生的創新精神,也能提升學生解決實際問題的能力,是強化實踐的有效手段。從審查及評價結果可以看出,采用此教學理念模式的教學效果明顯,具有一定的理論價值與應用價值。