摘要:本文在分析軟件體系結構課程特點和面臨問題的基礎上,從提高學生學習興趣、課程銜接、組建以設計師為主的開發(fā)團隊、構建實踐教學平臺和師資隊伍建設等五個方面分析了課程教學中所運用的方法和手段。
關鍵詞:軟件體系結構;案例教學;實踐教學平臺
中圖分類號:G642文獻標識碼:B
建大廈必須進行設計,而建平房則不需要設計。傳統(tǒng)觀點認為需求分析是項目開發(fā)成敗的一個關鍵,項目的失敗或夭折主要是由于需求分析不充分造成的,但對如何做好需求分析卻苦無良策。在軟件開發(fā)的早期,軟件代碼量不大,對設計重要性的認識也不充分,程序員可以設計、編碼一肩挑,但隨著軟件規(guī)模的擴大,人們在大型軟件的開發(fā)面前顯得力不從心,因而產(chǎn)生了軟件體系結構理論。現(xiàn)代觀念認為通過需求與設計之間的迭代,并根據(jù)設計建立系統(tǒng)原型,能夠較為充分地理解需求并得到滿足需求的設計。
軟件體系結構的設計在中大型軟件項目中更易于顯示它的意義,這也是軟件體系結構課程產(chǎn)生的原因?!败浖w系結構”作為高等學校軟件工程專業(yè)的一門核心課程,是根據(jù)人們的軟件設計經(jīng)驗總結出來的理論與實踐相結合的課程。“上梁不正下梁歪”,體系結構的設計是現(xiàn)代軟件開發(fā)中最為重要的一環(huán),它設計得是否合理直接關系到軟件的成敗。隨著軟件規(guī)模變得越大越復雜,軟件開發(fā)對軟件架構師提出了更高的要求。
1課程特點與面臨的問題
1.1軟件體系結構課程的特點
(1) 軟件體系結構的設計原則、技術、方法較為抽象
軟件體系結構的設計原則、技術、方法可以應用在不同的軟件項目中,其目的是為了在給定的時間、經(jīng)費等條件限制下設計出高質(zhì)量的軟件,它們位于所有具體項目之上,針對全體軟件項目,因而是抽象的。
(2) 軟件設計的效果體現(xiàn)在軟件開發(fā)的后續(xù)階段中
軟件生命周期包括可行性分析、需求分析、設計、編碼、測試、運行維護等多個階段,設計對軟件成敗的影響往往在這個階段反映不出來。設計階段做出的一個決定,可能要到編碼、測試甚至是后續(xù)的維護階段才能顯現(xiàn)它的效果。
(3) 軟件體系結構的設計往往是折衷與權衡的產(chǎn)物
軟件中的一些質(zhì)量要素經(jīng)常是相互沖突的,即軟件的質(zhì)量要素之間既有正相關,也有負相關,因此在實際的軟
件系統(tǒng)設計過程中,必須根據(jù)具體情況對各種要素進行折衷與權衡,從而得到總體上滿足用戶要求的軟件。怎么折衷和權衡,必須結合具體項目,根據(jù)項目的實際情況去把握。
1.2教學中面臨的問題
(1) 軟件體系結構的抽象理論容易使學生感到枯燥乏味
由于授課對象是大三學生,項目開發(fā)經(jīng)驗有限,學生很難在頭腦中將軟件體系結構的抽象理論和實際聯(lián)系起來,因此較難對這門課產(chǎn)生興趣。在接受抽象的理論時,容易產(chǎn)生枯燥乏味的感覺。
(2) 學生缺乏完整項目的體驗
學生參與的課程設計實踐一般僅限于小型項目,很少有機會參與軟件開發(fā)和運行的全過程,難以體會到軟件體系結構設計中關于正反經(jīng)驗的總結。例如,可維護性是軟件的一個重要質(zhì)量指標,但學生很少有機會去參與真正的軟件維護,所開發(fā)的系統(tǒng)大多只是給任課教師大概地檢查一下,一般不會交付使用,沒有經(jīng)受用戶的真正檢驗,設計里的很多錯誤被隱藏起來了。但學生看不到錯誤,就不能對這些錯誤進行維護,也就不能體會到設計階段工作對可維護性造成的影響。而且對于經(jīng)驗欠缺的多數(shù)學生來說,軟件設計中的折衷與權衡難以想象,不容易理解和把握,包括各種質(zhì)量屬性之間以及與很多非技術因素的折衷與權衡。
如何搞好這門課的教學,是擺在教師面前的一道緊迫課題,對教學方法、手段和個人經(jīng)驗都提出了很高的要求。我們提出通過本課程學習要達到以下三個目標:
(1) 幫助學生了解軟件架構的基本概念,初步掌握中大型軟件系統(tǒng)構架的分析與設計方法。
(2) 使學生了解軟件系統(tǒng)的成敗不僅取決于用戶的功能需求是否被滿足,還和各種外部約束條件有關,如設計師的素質(zhì)與經(jīng)驗、開發(fā)組織的目標以及政策法規(guī)限制等,從而提高軟件設計的基本素養(yǎng)。
(3) 引導學生認識系統(tǒng)的性能、可用性、安全性等質(zhì)量屬性都是受軟件構架制約的,或者說這些屬性的實現(xiàn)影響著設計師的設計選擇。
2強化案例教學,建設符合學生接受能力的案例
本課程較為抽象,要求學生有一定的軟件設計經(jīng)驗,為了彌補學生在設計經(jīng)驗上的不足,我們在本課程中采用以案例教學為主的方法和手段,盡量將理論講授和實際案例結合起來。案例選取有三方面的要求:一是要選取學生能聽得懂、能理解的案例,案例本身不能過于復雜,超出學生的可接受范圍;二是案例不能太簡單,應稍高于學生的現(xiàn)有經(jīng)驗,這樣才能提高學生的學習興趣并幫助學生提高;三是案例要和每階段的教學內(nèi)容相匹配。經(jīng)過幾年的教學積累,我們以實際系統(tǒng)為基礎,建立了多個符合學生理解和接受能力的案例,如軟件學院的研究生選課系統(tǒng)、軟件學院的圖書管理系統(tǒng)、學生宿舍管理系統(tǒng)、訂票系統(tǒng)、軟件學院校友管理系統(tǒng)、超市進銷存系統(tǒng)等。這些系統(tǒng)都是真實的,也是學生經(jīng)常接觸的,有很強的參照性,學生容易接受。我們還把這些系統(tǒng)作為課程實踐的選題,提供原有設計方案和源代碼,讓學生使用并提出意見,找出原先設計的不足并改進,大大提高了學生實踐的感知能力。
在學時分配方面也做到向案例教學傾斜,本課程總共48學時,除了8個學時的專門案例分析和8個學時的上機實踐,在課堂理論教學時還穿插大量案例,案例教學占課堂授課比例的40%左右。我們還采用啟發(fā)式教學手段,在課堂上留有一定時間專門就案例展開討論,鼓勵學生通過爭論來比較和掌握軟件構架設計方。例如,學生都實際使用過選課系統(tǒng),選取該系統(tǒng)作為案例,學生就很樂意參與討論并給出建議。這些手段的采用取得良好的教學效果,加深了學生對抽象的軟件架構設計思想的理解。
3教學內(nèi)容與教學手段
(1) 激發(fā)學習興趣和熱情
我們從課堂氣氛、內(nèi)容選擇、語言表達三個方面入手。在營造課堂氣氛方面,講解時盡量營造探究氣氛,鼓勵學生參與討論,避免學生被動地聽,增強教師與學生的交流互動。在內(nèi)容選擇方面,選一些容易引起學生興趣的素材。例如,在講到架構風格時,我拿了一個自己編寫的對戰(zhàn)游戲程序給學生看,由于這種游戲?qū)W生普遍都感興趣,因此在講解架構風格時,學生注意力都很集中,收到了較好的教學效果。語言表達方面,在講課時多用一些形象、有趣的事例或類比來說明或代替那些抽象、枯燥的理論陳述。例如,在談到滿足不同質(zhì)量屬性需要權衡時,列舉了斑馬為什么有黑白條紋的例子。
(2) 注意與其他課程的銜接
軟件體系結構的教學內(nèi)容與軟件工程、軟件項目管理以及軟件文檔寫作等課程緊密相關、甚至有部分重疊,我們針對不同課程的特點進行了妥善安排,在教學內(nèi)容上注意相關課程內(nèi)容的相互滲透。大三上學期首先講授軟件工程,使學生對軟件工程有一個初步認識,緊接著是軟件文檔寫作的訓練。大三下學期軟件體系結構和軟件項目管理同步講授,要求學生運用軟件體系結構的理論、技術和方法進行軟件設計和評審,同時運用項目管理的知識組織項目開發(fā),最終驗證軟件設計的合理性。設計和實現(xiàn)的題目鼓勵沿用軟件工程課程上所用的項目、人員組成也鼓勵保持一致,使學生對某個項目能保持一個學年左右的長期接觸。
(3) 建立以設計師為主的開發(fā)團隊
以小組(四人為一組)為單位開展課程實驗,每個人扮演不同角色。首先他們是一個設計師團隊,但其中要有一人負責,這也是軟件設計的一條重要原則;其次,還有項目經(jīng)理、需求分析師、程序員和測試員等角色需要擔當,也就是說每個人要承擔多個角色。實驗綜合運用軟件工程、軟件體系結構設計、軟件文檔寫作、軟件項目管理以及其它課程的知識,來體會如何圍繞軟件體系結構進行開發(fā),體會軟件體系結構設計的原則和方法。
(4) 建立實踐教學平臺
軟件體系結構的教學應使學生通過對這門課的學習,加上對其他專業(yè)知識的綜合運用,能夠在實際工作中應付真正的項目設計,因此有必要讓學生參與一個長期(不少于一學年)的軟件項目。為此我們設計多個規(guī)模較大的、完整的軟件項目作為實踐教學平臺,這種項目包括分析、設計、實現(xiàn)、軟件維護、軟件重用、對現(xiàn)有軟件的擴展,以及團隊合作、項目管理等等。讓學生長期接觸某個項目,使他們可以在這個平臺上觀察和動手實踐自己的軟件設計方案,或者對現(xiàn)有方案進行改進,這樣既有機會獲得正面成功經(jīng)驗,也有機會得到反面失敗的教訓。
實驗與教學進度保持匹配,使學生在實驗中主動運用所學設計理論,并和傳統(tǒng)設計方法進行對比,幫助學生迅速地把所學知識轉(zhuǎn)換成實際的軟件設計能力。設計過程要求采用Raional等工具進行分析和設計。
課程結束時,安排專門的時間,由每個團隊向全班同學演示自己的實驗成果,并由學生和教師共同對實驗結果進行評價和給分,極大地調(diào)動了學生的積極性,評分過程中的議論則幫助學生進一步加深了對軟件架構設計方法的理解。
團隊提交的實踐結果:需求說明書、體系結構設計說明書、體系結構評審報告、個人總結報告、演示Demo,要求說明每個人的角色和工作量。
評分標準:項目文檔描述60%;個人總結報告20%;Demo20%。
上述評分標準以團隊為基礎,改變了傳統(tǒng)的針對個人實踐結果的考評模式,避免了相互抄襲。通過以團隊評分為主,個人表現(xiàn)為輔的評價方式,達到培養(yǎng)學生學會與他人合作,培養(yǎng)團隊精神的目的;通過以軟件文檔評分為主,以實踐結果為輔的評分體系,達到學生對軟件設計過程和方法的掌握。
其次,讓學生參與教師的研究課題,加強實踐基地建設,構建課程實訓環(huán)境,鼓勵學生到社會上的軟件公司去實習、兼職。學院已與國內(nèi)外多家軟件領域的著名公司和研發(fā)基地建立了合作關系,建立了全方位、多層次的課程實踐教學環(huán)境。
(5) 構建高素質(zhì)的師資隊伍
根據(jù)國家示范性軟件學院工程型人才的培養(yǎng)目標,考慮軟件體系結構設計課程實踐性很強的突出特點,構建了三三制的師資隊伍結構,即專職教師、IT公司教師和境外教師。完善了校內(nèi)專任教師到軟件企業(yè)一線參與實際軟件項目研發(fā)和交流、軟件企業(yè)的工程技術和項目管理人員到學校兼職授課的制度和機制,形成了一支了解行業(yè)需求、教學經(jīng)驗豐富、專兼結合、國內(nèi)國外、校企聯(lián)合的高素質(zhì)的教師隊伍。
4教學效果
我院針對軟件體系結構課程教學中存在的不足,從教學方法、手段等方面提出了改進方案,融理論、案例與實踐為一體,系統(tǒng)地闡述了軟件體系結構的設計過程,體系結構設計師的主要工作和職責,輔助以實際案例向?qū)W生傳授軟件架構的理論、方法和技巧,并以小組為單位完成課程實驗。通過本課程學習,學生可以在較短時間內(nèi)掌握軟件體系結構的基本知識和實踐能力。
參考文獻
[1] 裴小兵. 基于軟件開發(fā)團隊的軟件工程教學實踐研究[J]. 計算機教育,2008,(2):55-56.
[2] 林.巴斯著,車立紅譯. 軟件構架實踐(第2版)[M]. 北京:清華大學出版社,2004.