李秀娟,郭曄,趙夫群
(西安財經大學 信息學院,陜西 西安)
以計算機為核心的信息社會,軟件技術日新月異,飛速發(fā)展。這也為高校軟件工程專業(yè)相關課程帶來挑戰(zhàn),目前大部分高校的計算機科學與技術和軟件工程等專業(yè)都已開設《軟件設計與體系結構》這門課程,課程為軟件分析師、軟件工程師及軟件架構設計師的培養(yǎng)打下了一定的基礎。隨著軟件規(guī)模的逐漸增大,軟件復雜度的不斷上升,軟件危機的加劇,軟件體系結構設計在整個軟件設計與開發(fā)過程中的作用突顯,人們已經意識到軟件體系結構設計比對算法的設計和數據結構的選擇重要的多。
最近幾年對于軟件體系結構的研究已完全獨立于軟件工程的研究,成為計算機科學的一個最新的研究方向和獨立學科分支。《軟件設計與體系結構》這門課程正是適應了行業(yè)的發(fā)展,針對軟件工程更高的人才培養(yǎng)要求而開設的課程。通過該課程的學習,使學生能夠理解在軟件設計和開發(fā)中,軟件體系結構的地位與作用,正確選擇體系結構風格,通過Kruchten “4+1”模型對體系結構的組成進行描述,掌握基于體系結構的軟件開發(fā)方法,并通過應用實例使學生掌握軟件體系結構相應的理論與實踐。
《軟件設計與體系結構》課程針對大型復雜軟件設計中遇到的各種問題,以工程的思想、技術和方法,對軟件體系結構理論和方法系統講解和介紹。主要內容包括Kruchten “4+1”體系結構建模,管道/過濾器為主的數據流風格,調用/返回風格,虛擬機風格等經典的體系結構風格講解,ADL、UML體系結構描述語言,動態(tài)軟件體系結構模型建立,SOA基于服務的體系結構,軟件體系結構分析、測試、評估,軟件產品線體系結構,云計算的體系結構等內容。
(1)建立構建軟件系統架構一般方法的感性認識,理解并掌握軟件系統架構分析、體系結構建模與架構設計的相關理論知識,培養(yǎng)軟件架構設計的基本能力,能從內部模塊規(guī)劃設計、系統層次結構的構建開始,掌握構建系統結構的一般技術和方法。
(2)在構建軟件系統的過程中,學習應對不同需求的系統對策和設計實現技術,初步具備一定的系統架構分析與設計能力,深入理解各種典型框架技術及原理,并具備運用設計思想模式及輔助工具開展軟件詳細設計的能力。
(3)理解并掌握軟件體系結構的重要概念、術語和系統化方法,建立軟件架構設計的理念,了解當前流行的框架技術,并理解其原理。另一方面,以加深知識理解和培養(yǎng)初步架構設計能力為目的,并在項目開發(fā)中加以實踐;在實踐環(huán)節(jié)中重點培養(yǎng)運用典型框架進行項目構建的能力和使用設計模式進行細化設計的能力。
通過歷年的教學實踐,以及不同高校教學研討和同課程教師的探討與交流,總結出該課程自身發(fā)展和教學中存在的問題有:
軟件行業(yè)是迅速發(fā)展的行業(yè),我國起步相對較晚,對于體系結構沒有引起足夠的重視,相關 研究開展也相對較晚。軟件體系結構研究早期對體系結構的定義、建模、描述和標記方法也比較模糊,沒有統一的規(guī)范,尋找解決方案也沒有固定統一的途徑可遵循。
《軟件設計與體系結構》是在《數據結構》《算法分析與設計》《面向對象編程》等核心專業(yè)課程后開設的課程。課程內容高度抽象,難度遞進。要結合前面專業(yè)課程內容,引導對大型軟件頂層架構設計的學習,要求學生以UML、ADL等為工具,完成體系結構的描述和架構。這一過程抽象程度較高,對于大部分從未實際參與過大型軟件研發(fā)工作的學生來講難以理解,也容易感到枯燥。
課堂教學環(huán)節(jié)教師理論講解多,而學生基本處于被動的學習狀態(tài)。課堂氣氛不活躍,學生積極性不高,教學效果不理想。大量理論知識的學習,卻少有參加到軟件設計與開發(fā)的具體工作中,更不要說復雜度高的大型軟件,學生難以將所學理論運用到體系結構設計實踐中,致使部分學生對該課程學習興趣不高,教學效果差強人意。
OBE基于學習成果為導向的教育模式(Outcomes-based Education)最早在1981年由美國的Spady提出,提倡以明確的課程結束后取得的成果、達到的目標為導向的教學理念。該教育模式自提出以后,經過多年的實踐、完善,從目標設計,過程實現、監(jiān)督,到課程評價整個體系結構完善,目前在美國、加拿大、新西蘭、南非等國家受到歡迎及普及。2013年6月,我們國家引入OBE教育理念引導工程教育改革。所謂的成果即課程結束后達到的學習結果,學生能夠證明用所學內容和自己知道的實際能做什么。這個成果能夠反映出學生使用信息、內容、構思和具體工具的能力的表現。OBE教育模式強調關注學生運用知識的能力和實踐能力,是對傳統重視理論學習,高分低能現象的改革。我們可以很好結合互聯網+下微課、慕課等碎片化的知識學習方法,提高時間利用率。而學生能力的提升是全面的、整體性的。借助該全新的教育理念推動我國高校工科類專業(yè)教育質量的全面提升探索。OBE教學模式注重責任機制的重要性,責任機制者為任課教師及課程評價人員,他們能對學生的表現負責,給予學生指導。
OBE教學模式實質上體現了規(guī)劃、交付和評估的全新教學模式。要求評估者、管理者、任課教師和學生將學習的關注力和努力集中在期望的教育成果上。作者將以西安財經大學軟件工程專業(yè)《軟件設計與體系結構》課程為例,課程改革引入OBE教育模式,課程目標細化、教學內容、教學方法和考核等方面探索課程教學改革,以期提高教學效果。
基于OBE的課程設置,我們將課程目標和畢業(yè)要求分解到各章知識點中。首先,我們將《軟件設計與體系結構》課程的教學目標分為四個層次:
(1)通過本課程的學習,使學生理解軟件體系結構的基本概念和理論,熟悉軟件體系結構的研究范圍和應用現狀,了解軟件體系結構的應用前景和發(fā)展方向。
(2)理解軟件體系結構的不同風格和特點,熟悉軟件體系結構描述語言、軟件體系結構生命周期模型等內容,掌握現代軟件體系結構的內容和設計方法。
(3)掌握軟件體系結構的建模方法、描述方法,并通過實踐對軟件體系結構產生感性認識,進一步提高學生綜合運用所學的軟件體系結構風格,進行軟件設計和開發(fā)的能力,為日后從事軟件設計與開發(fā)工作打下良好的基礎。
(4)通過該課程的學習,培養(yǎng)學生具有分析和解決問題的基本思路,能夠把所學的原理應用到具體的實踐中去,培養(yǎng)學生發(fā)現、分析和解決問題的能力等。
并給出以上目標對專業(yè)畢業(yè)要求的支撐。例如專業(yè)畢業(yè)要求3為:能夠設計針對軟件工程領域復雜工程問題的解決方案,設計與開發(fā)滿足特定需求的軟件系統,并能夠在復雜軟件系統設計環(huán)節(jié)中體現創(chuàng)新意識,考慮社會、健康、安全、法律、文化以及環(huán)境等因素。而我們的目標2和3是對以上畢業(yè)要求的支撐。
課程教學內容的組織,要服務于課程目標的達成,助于學生專業(yè)能力的提升,這也正是OBE的設計理念。我們根據課程目標及專業(yè)畢業(yè)能力要求,對《軟件設計與體系結構》課程章節(jié)知識具體到每一章節(jié),進行內容的整合和優(yōu)化。對于目標達成意義不大的內容壓縮課時或者作為選讀內容,列出具體的核心能力,每一個核心能力應有明確的要求,每個要求應有詳細的課程對應。在學時分配上,適當壓縮理論教學,向案例教學和項目實踐傾斜,以教學中“典型軟件體系結構風格與應用”章節(jié)為例,教學要求包括:
(1)熟悉管道-過濾器風格、公共對象請求代理體系結構風格、正交軟件體系結構風格、基于層次消息總線的體系結構風格以及主程序-子程序等各種經典軟件體系結構風格的特點及其應用場景。
(2)在具體的項目實踐中能正確選擇和應用體系結構風格完成體系結構設計。
以上內容及重點對應到課程目標2和課程目標3,對應到我校該專業(yè)畢業(yè)要求為:
1)能夠基于科學原理并采用科學方法對軟件工程領域的復雜問題進行研究,包括設計實驗、分析與解釋數據、并通過信息綜合得到合理有效的結論。
2)能夠開發(fā)、選擇與使用恰當的計算機技術、軟件和設備,對軟件工程領域的復雜工程問題進行分析和設計,并能夠理解相關技術與設備的局限性。
例如,對于軟件體系結構風格的講解,我們的教學要求為熟悉課程講授的各種經典軟件體系結構風格的特點及其應用模式;能夠運用這些軟件體系結構風格;并參考其在工程實踐中的應用案例來解決實際的軟件系統體系結構的設計問題。對應的是課程目標2理解軟件體系結構的不同風格和特點,掌握現代軟件體系結構的內容和設計方法。課程目標3掌握軟件體系結構的建模方法、描述方法,進一步提高學生綜合運用所學的軟件體系結構風格,進行軟件設計和開發(fā)的能力。
好的教學效果一定要有好的教學實施過程。案例教學對于這門課程是必不可少的。但是不能流于形式,對于案例選擇和設計都需要精心準備。我們的課程改革在經典的傳統MIS系統設計與開發(fā)基礎上,校企結合,增加了微信小程序設計與開發(fā)項目案例。在體系架構中,我們引入**市一碼通架構,介紹了項目中所運用Spring、Spring MVC、Struts、Hibernate等主要框架技術,以及微信小程序WXSS、WXS等前端相關技術,從實際項目入手分析,教學效果良好。
考慮人工智能的迅速發(fā)展,也大膽嘗試了將相關案例引入課堂。例如我們引入了深度學習中經典的手寫識別圖像分類案例,這些案例深深吸引了學生的注意力,學習熱情極高。讓學生意識的軟件及人工智能開發(fā)的迅速發(fā)展,如何應對環(huán)境及框架的發(fā)展,如何快速上手。上手之前,講解所需預備知識,如圖像基礎,給學生推薦高質量學習資料,以及開發(fā)環(huán)境搭建和框架基礎知識,讓學生主動自覺學習。這些內容緊跟技術發(fā)展前沿,和行業(yè)對接,因此學生積極性極高。教師在課堂教學中對架構及程序的講解幫助學生對手寫識別分類深刻理解,再動手實踐。通過精心挑選的案例的講解和完成,不僅提高了學生學習積極性,也極大增強了學生自信心。通過這個案例,教師起到拋磚引玉的作用,很多同學舉一反三去學習目標檢測、分類及分割相關模型及知識。
案例講解的目的是要讓學生先會,因過程和生產是軟件設計課程中不可或缺的一部分,布置項目任務是非常重要的,項目任務以團隊的形式完成提交。幫助學生分階段迭代式完成可工作的軟件產品,扶學生“上馬”,在開發(fā)過程中逐步建立從基本編程到開發(fā)系統的信心,通過反饋機制監(jiān)督和督促學生,適時調整課程內容與節(jié)奏,幫助控制小組項目開發(fā)的落地實施。
在具體的教學過程中我們還采用啟發(fā)式教學手段,在課堂上留有一定時間專門就案例展開討論,鼓勵學生通過爭論來比較和掌握軟件構架設計方案。例如,學生都實際使用過選課系統,選取該系統作為案例,學生就很樂意參與討論并給出建議。這些手段的采用取得良好的教學效果,加深了學生對抽象的軟件架構設計思想的理解。
傳統的理論考試對于《軟件設計與體系結構》這門課的考核弊端比較明顯,很多學生通過記背,對課程內容的理解,能取得不錯的成績。但是一上手對系統建模、設計和開發(fā)就顯得力不從心,無從下手,達不到相應的課程目標和畢業(yè)要求。因此,我們強調了學生前面提到的任務驅動的完成情況,通過不斷的反饋機制對學生軟件設計及開發(fā)能力給予客觀評價。
為此我們設計多個規(guī)模較大的、完整的軟件項目作為考評,項目要求涵蓋體系結構設計各個階段,包括分析、設計、實現、軟件維護、軟件重用、對現有軟件的擴展,以及團隊合作、項目管理等等。學生以小組的形式提交作業(yè)方案,不僅提交紙質版的設計實驗報告,更重要的是架構設計方案及程序等相關內容。課程結束時,安排專門的時間,由每個團隊向全班同學演示自己的實驗成果,并由學生和教師共同對實驗結果進行評價和給分,極大地調動了學生的積極性,評分過程中的議論則幫助學生進一步加深了對軟件架構設計方法的理解。
隨著軟件技術的向前發(fā)展,《軟件設計與體系結構》課程的改革與完善永遠在路上。筆者以OBE的理念,從教學目標、課程內容,案例教學和任務驅動的教學方法以及過程評價等方面試圖探索《軟件設計與體系結構》課程的改革,調動學生的主體學習作用,激發(fā)學生的學習熱情和創(chuàng)造力。同時也形成“目標—教學—考核—改進”的課堂生態(tài)體系,讓我們的課堂活起來,讓學生的手動起來,最終目的是教學目標的達成,讓課程專業(yè)知識與專業(yè)就業(yè)對接,學生分析問題、解決問題能力的培養(yǎng)和提高。