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