趙逢禹 曹春萍
摘要:《面向?qū)ο蠊こ獭肥怯?jì)算機(jī)專業(yè)的核心課程,旨在培養(yǎng)學(xué)生采用面向?qū)ο蟮乃枷肱c工程化的建模技術(shù)解決復(fù)雜軟件開發(fā)問題的能力。本文針對這一要求,從教學(xué)內(nèi)容的選取、師資隊(duì)伍要求、教學(xué)方法、建模工具與項(xiàng)目實(shí)踐設(shè)計(jì)等方面進(jìn)行了探討并基于實(shí)踐效果提出了建議。
關(guān)鍵詞:面向?qū)ο?;課程體系;面向?qū)ο蠼?/p>
中圖分類號:G642 文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2013)08-0051-03
面向?qū)ο蠊こ贪嫦驅(qū)ο蟮男枨蠼?、面向?qū)ο蟮南到y(tǒng)分析、面向?qū)ο蟮慕鉀Q方案建模、軟件架構(gòu)設(shè)計(jì)和面向?qū)ο蟮膶?shí)施等內(nèi)容,旨在培養(yǎng)學(xué)生采用工程化的建模與開發(fā)方法解決復(fù)雜軟件開發(fā)的能力[1],該課程的教學(xué)要求學(xué)生已經(jīng)具有軟件結(jié)構(gòu)化分析與設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)等課程的基礎(chǔ)知識。盡管面向?qū)ο蟮睦碚摲椒ɑ痉€(wěn)定并趨于完善成熟,但隨著新技術(shù)的不斷發(fā)展和企業(yè)應(yīng)用的不斷更新,課程的教學(xué)內(nèi)容、教學(xué)案例、建模工具、實(shí)施方法需要適應(yīng)企業(yè)級開發(fā)平臺及先進(jìn)的開發(fā)工具,如果課程僅僅圍繞面向?qū)ο蟮慕;驀@UML工具介紹,會使教學(xué)偏離面向?qū)ο蠊こ痰暮诵模茈y完成培養(yǎng)學(xué)生具有很強(qiáng)的知識理論和實(shí)踐動手能力這一教學(xué)目標(biāo)。在本課程多年的教學(xué)實(shí)踐中,我們對師資培養(yǎng)、教學(xué)內(nèi)容、教學(xué)方法、建模工具與項(xiàng)目實(shí)踐設(shè)計(jì)等方面做了一些研究和探索,并取得了良好的效果。本文就這些實(shí)踐探索與結(jié)論予以總結(jié)。
一、明確課程目的
在軟件工程領(lǐng)域,存在兩套軟件分析與設(shè)計(jì)的工程化方法:面向功能的軟件工程化方法與面向?qū)ο蟮墓こ袒椒?。所謂面向功能的軟件工程方法即結(jié)構(gòu)化分析與設(shè)計(jì)方法、它以數(shù)據(jù)流為主線,分析系統(tǒng)的數(shù)據(jù)產(chǎn)生、處理邏輯、存儲,把整個(gè)系統(tǒng)看成是由處理功能組成。每個(gè)功能又稱為函數(shù),一個(gè)函數(shù)實(shí)現(xiàn)對一個(gè)輸入數(shù)據(jù)價(jià)格處理并返回函數(shù)結(jié)果,如果每個(gè)功能都能正確實(shí)現(xiàn),整個(gè)系統(tǒng)就能完成其設(shè)計(jì)的功能。而面向?qū)ο蟮墓こ谭椒ㄊ前颜麄€(gè)問題域采用對象的觀點(diǎn)進(jìn)行描述,它認(rèn)為整個(gè)現(xiàn)實(shí)世界是由對象組成的,因而問題域也是由對象組成的,對象本身包含數(shù)據(jù)與對數(shù)據(jù)的處理方法,對象間可以通過接口進(jìn)行交互[2]。圖1給出了一個(gè)簡化的樣本計(jì)算領(lǐng)域問題,該問題可以按照左邊箭頭示意抽象成函數(shù)處理。右邊的箭頭所示的抽象是按照對象的方法進(jìn)行的抽象??梢钥闯觯嫦蚝瘮?shù)的抽象與面向?qū)ο蟮某橄笫怯貌煌某橄蠓椒▽ο嗤膯栴}進(jìn)行建模,進(jìn)而構(gòu)造解決方案并求解。這兩種方法都有大量的成功案例,各有千秋。盡管如此,面向?qū)ο蠊こ谭椒ㄊ悄壳败浖_發(fā)的主流方法,它是軟件工程人才必須掌握的基礎(chǔ)知識和必備的能力。其原因有兩個(gè):第一個(gè)原因是面向?qū)ο蟮墓こ谭椒◤膯栴}域描述、抽象,到問題域解決方案構(gòu)建與實(shí)現(xiàn),均采用對象的觀點(diǎn),整個(gè)工程化過程非常流暢[3]。在這點(diǎn)上,面向功能的結(jié)構(gòu)化分析與設(shè)計(jì)存在不足,例如,當(dāng)問題域建模完成、需求描述清楚之后,總體的解決方案構(gòu)建需要設(shè)計(jì)人員的創(chuàng)造力,同一個(gè)問題,不同的設(shè)計(jì)人員會給出差異很大的解決方案。第二個(gè)原因是當(dāng)前流行的系統(tǒng)實(shí)現(xiàn)平臺都是基于面向?qū)ο蟮募夹g(shù),如Java、C#、C++等。
《面向?qū)ο蠊こ獭分铝τ谂囵B(yǎng)計(jì)算機(jī)各專業(yè)研究生問題分析能力和工程應(yīng)用能力。通過學(xué)習(xí)該課程,學(xué)生能夠利用UML建模方法進(jìn)行系統(tǒng)需求分析與設(shè)計(jì),掌握企業(yè)級開發(fā)平臺、設(shè)計(jì)模式、構(gòu)件技術(shù)、項(xiàng)目開發(fā)流程及文檔書寫能力。
二、根據(jù)學(xué)生水平,優(yōu)化教學(xué)內(nèi)容
我校開設(shè)的面向?qū)ο蠊こ陶n程是面向計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程、計(jì)算機(jī)技術(shù)三個(gè)碩士培養(yǎng)方向的一門核心課程。由于這三個(gè)專業(yè)的學(xué)生的學(xué)業(yè)背景與專業(yè)不同,導(dǎo)致對課程教學(xué)的接受與理解存在較大差異。有些學(xué)生已經(jīng)學(xué)習(xí)過面向?qū)ο蟮姆治雠c設(shè)計(jì),有的學(xué)生學(xué)習(xí)過UML建模語言,也有部分學(xué)生既沒學(xué)過軟件工程,甚至連面向?qū)ο蟮某绦蛟O(shè)計(jì)也沒學(xué)習(xí)過。由于學(xué)生知識層次存在較大的差異,這就給課程的組織提出了動態(tài)調(diào)整與適應(yīng)的要求。面向?qū)ο蠊こ陶n程的理論性和實(shí)踐性要求較高,對授課教師是一個(gè)很大的挑戰(zhàn)。授課教師一定要對面向?qū)ο蠹夹g(shù)有深刻的理解,還要有較強(qiáng)的實(shí)際項(xiàng)目開發(fā)經(jīng)驗(yàn)、工程管理與實(shí)施技術(shù)背景,這樣才能使教學(xué)做到理論結(jié)合實(shí)際,通過指導(dǎo)學(xué)生完成實(shí)踐項(xiàng)目,讓學(xué)生認(rèn)識到課程的重要性,從而產(chǎn)生強(qiáng)烈的學(xué)習(xí)興趣。面向?qū)ο蠊こ瘫旧硎且粋€(gè)實(shí)踐性很強(qiáng)的課程,而部分同學(xué)卻反映課程的理論性很強(qiáng),內(nèi)容抽象。這說明課程的講授方法存在問題,理論知識傳授過程中某些知識點(diǎn)的講授過細(xì),導(dǎo)致學(xué)生只看到細(xì)節(jié),無法切實(shí)讓學(xué)生清晰地領(lǐng)會教學(xué)內(nèi)容的脈絡(luò)。針對這一問題,在實(shí)際授課中,設(shè)計(jì)了具體的軟件開發(fā)項(xiàng)目,通過項(xiàng)目驅(qū)動學(xué)習(xí)。教師代表項(xiàng)目的甲方,學(xué)生是項(xiàng)目的開發(fā)者屬于乙方。由甲方提出項(xiàng)目目標(biāo)與基本需求,乙方采用面向?qū)ο蠊こ痰姆椒?、建模工具建模分析,?gòu)造解決方案與軟件架構(gòu)并予以實(shí)施[4,5]。由于部分同學(xué)沒有學(xué)習(xí)過軟件工程、面向?qū)ο蟪绦蛟O(shè)計(jì),對軟件的生命周期、軟件的開發(fā)過程、軟件體系架構(gòu)與實(shí)施基礎(chǔ)設(shè)施缺乏了解,在面向?qū)ο蠊こ痰慕虒W(xué)中,認(rèn)為同學(xué)們基本掌握了這些內(nèi)容,而不作為課程的重點(diǎn)進(jìn)行講授。為了使這部分同學(xué)能夠聽懂課堂教學(xué),需要教師能夠根據(jù)課堂反饋,用最少的時(shí)間給學(xué)生補(bǔ)上這部分知識,使課堂教學(xué)能夠順利地進(jìn)行。
三、加強(qiáng)實(shí)踐,改革教學(xué)結(jié)構(gòu)
1.課程實(shí)踐體系結(jié)構(gòu)的搭建。本課程教學(xué)的關(guān)鍵在于軟件項(xiàng)目工程化開發(fā)中用到的面向?qū)ο蟮男枨蠓治觯∣OA)、面向?qū)ο蟮脑O(shè)計(jì)、面向?qū)ο蟮膶?shí)現(xiàn)方法與建模技術(shù)應(yīng)用。在軟件項(xiàng)目的工程化方面,培養(yǎng)學(xué)生使用面向?qū)ο蟮募夹g(shù),設(shè)計(jì)開發(fā)實(shí)際項(xiàng)目的能力。課程以具體的實(shí)踐項(xiàng)目需求為導(dǎo)向,把面向?qū)ο蟮募夹g(shù)融入到項(xiàng)目的開發(fā)過程中,這是該課程教學(xué)的核心。為此我們首先需要搭建能夠承載本課程知識點(diǎn)的實(shí)踐體系。在搭建項(xiàng)目實(shí)踐體系的過程中,我們詳細(xì)篩選了一個(gè)軟件項(xiàng)目規(guī)模適中的實(shí)際項(xiàng)目,把面向?qū)ο蟮母髦R點(diǎn)、分析設(shè)計(jì)方法、建模工具應(yīng)用到該實(shí)際項(xiàng)目中。在分析與設(shè)計(jì)的各個(gè)階段,將面向?qū)ο笤O(shè)計(jì)文檔和課程的各個(gè)UML圖的使用進(jìn)行對接,把各個(gè)知識點(diǎn)通過項(xiàng)目實(shí)施串聯(lián)成線,形成了完備的課程實(shí)踐體系網(wǎng),學(xué)生在這樣的實(shí)踐體系中能更準(zhǔn)確、更清晰地理解實(shí)踐要點(diǎn)及理論要點(diǎn),并重現(xiàn)了真實(shí)的分析與設(shè)計(jì)過程,達(dá)到了良好的教學(xué)效果[6]。為了促進(jìn)UML建模工具的學(xué)習(xí),課程引進(jìn)了企業(yè)級的Enterprise Architecture建模工具,使繁瑣的建模過程變得簡單,也培養(yǎng)了學(xué)生適應(yīng)企業(yè)開發(fā)設(shè)計(jì)環(huán)境的能力。
2.課程知識體系結(jié)構(gòu)。面向?qū)ο蠊こ躺婕爸R點(diǎn)較廣,存在著學(xué)生先期準(zhǔn)備知識不完備性以及課程知識點(diǎn)之間的銜接不連續(xù)的問題,這些斷層導(dǎo)致學(xué)生知識的理解模糊以及對知識的掌握找不到切入點(diǎn)。因此有必要對知識體系結(jié)構(gòu)進(jìn)行改革和完善。面向?qū)ο蠊こ桃髮W(xué)生具備良好的抽象能力,要求學(xué)生能夠利用抽象方法將軟件需求轉(zhuǎn)化為分析結(jié)果,并用UML建模語言進(jìn)行描述。在需求分析階段,還要考慮軟件的質(zhì)量需求,包括軟件可靠性、安全性、操作友好性、可擴(kuò)展性、可維護(hù)性、可移植性等。在分析模型的基礎(chǔ)上,需要構(gòu)建軟件的解決方案,如軟件架構(gòu)的確定、問題域分析模型向設(shè)計(jì)模型的轉(zhuǎn)化、數(shù)據(jù)的存儲類設(shè)計(jì)、用戶界面類的設(shè)計(jì)等[7]。需求分析與基于分析結(jié)果給出的最優(yōu)化設(shè)計(jì)方案是開發(fā)出高量軟件系統(tǒng)的關(guān)鍵。當(dāng)前,學(xué)生在設(shè)計(jì)與優(yōu)化方面存在明顯的知識不足。對此,在課程的整個(gè)知識體系中,有必要將軟件結(jié)構(gòu)化分析與設(shè)計(jì)、軟件開發(fā)過程、軟件質(zhì)量與軟件復(fù)用等內(nèi)容根據(jù)課程內(nèi)容的需要,穿插在本課程中。
3.課程核心內(nèi)容。根據(jù)課程實(shí)踐性強(qiáng)、技術(shù)發(fā)展迅速的特點(diǎn),我們對教學(xué)內(nèi)容不斷更新,保證教學(xué)內(nèi)容的先進(jìn)性,反映本學(xué)科領(lǐng)域的最新發(fā)展成果,利用案例教學(xué),合理安排課程的教學(xué)內(nèi)容。①面向?qū)ο蠓椒ǜ耪?,講述面向?qū)ο蠓椒ǖ幕靖拍?、主要思想、特點(diǎn)、優(yōu)勢,面向?qū)ο蟮恼Z言產(chǎn)生,面向?qū)ο蠓治雠c設(shè)計(jì)的演進(jìn),面向?qū)ο蟮墓こ?。②面向?qū)ο蟮姆治觯ㄟ^研究問題域和用戶需求,發(fā)現(xiàn)問題域中與系統(tǒng)責(zé)任有關(guān)的對象、對象特征和相互關(guān)系,建立問題域模型,產(chǎn)生符合用戶需求的面向?qū)ο蠓治瞿P蚈OA。介紹UML在面向?qū)ο蠓治鲋械膽?yīng)用。③面向?qū)ο蟮脑O(shè)計(jì),在OOA基礎(chǔ)上,運(yùn)用面向?qū)ο蟮母拍钆c原則,按照具體的實(shí)現(xiàn)條件進(jìn)行系統(tǒng)設(shè)計(jì),產(chǎn)生一個(gè)可實(shí)現(xiàn)的面向?qū)ο笤O(shè)計(jì)(OOD)模型。在進(jìn)行設(shè)計(jì)時(shí),除需要細(xì)化OOA模型外,還要給出用戶界面類的設(shè)計(jì)、數(shù)據(jù)存取設(shè)計(jì)、網(wǎng)絡(luò)通信類設(shè)計(jì)等。④軟件體系結(jié)構(gòu),軟件一定運(yùn)行于某個(gè)體系架構(gòu)下,分析C/S、B/S、SOA等體系結(jié)構(gòu)的適用場景與特點(diǎn),通過案例給出不同的應(yīng)用所應(yīng)采取的架構(gòu)。
四、基于項(xiàng)目驅(qū)動的教學(xué)
課程采用理論教學(xué)與課外實(shí)踐項(xiàng)目驅(qū)動相結(jié)合的方式,將一個(gè)實(shí)際項(xiàng)目貫穿于課程學(xué)習(xí)的整個(gè)過程,將該課程理論教學(xué)與設(shè)定的軟件開發(fā)項(xiàng)目結(jié)合起來,使學(xué)生邊學(xué)習(xí)邊實(shí)踐。具體要求如下。
1.項(xiàng)目組劃分。一個(gè)項(xiàng)目組由4~5名學(xué)生組成,小組成員承擔(dān)項(xiàng)目組的不同角色,成員之間有合作和分工,按照企業(yè)項(xiàng)目的開發(fā)方式進(jìn)行規(guī)劃。
2.選擇合適的項(xiàng)目。本課程已經(jīng)開發(fā)了適合課程教學(xué)的實(shí)踐項(xiàng)目,項(xiàng)目的需求與目標(biāo)已經(jīng)明確提出,需求細(xì)節(jié)需要學(xué)生與教師交流,形成需求分析報(bào)告。根據(jù)學(xué)生掌握理論知識與應(yīng)用技能的程度不同,適當(dāng)開放設(shè)計(jì)文檔,以便同學(xué)學(xué)習(xí)。
3.技術(shù)要求。要求學(xué)生能夠按照軟件開發(fā)過程的原則,制定開發(fā)計(jì)劃,正確使用面向?qū)ο蟮慕9ぞ?,進(jìn)行分析與設(shè)計(jì)。加深學(xué)生對面向?qū)ο蠹夹g(shù)的理解以及系統(tǒng)質(zhì)量的評價(jià)標(biāo)準(zhǔn)[8]。
面向?qū)ο蠊こ探虒W(xué)從2004年開始,已經(jīng)開設(shè)了八屆。對于本課程教學(xué)已經(jīng)從單純的理論教學(xué),逐步轉(zhuǎn)向理論與實(shí)踐項(xiàng)目相結(jié)合的方式。提出以面向?qū)ο蠊こ碳夹g(shù)與軟件項(xiàng)目開發(fā)實(shí)踐相結(jié)合的方式。把軟件工程中過程管理方法與OOA/OOD結(jié)合起來,并采用Enterprise Architecture建模工具完成具體的開發(fā)項(xiàng)目。
參考文獻(xiàn):
[1]Hafedh Mili,Ali Mili etc.Reuse-Based Software Engineering:Technology,Organization and Controls[M].北京:電子工業(yè)出版社,2003.
[2][美]巴拉赫,蘭寶.UML面向?qū)ο蠼Ec設(shè)計(jì)(第2版)[M].車皓陽,楊眉,譯.北京:人民郵電出版社,2006.
[3][美]沙赫.軟件工程:面向?qū)ο蠛蛡鹘y(tǒng)的方法(原書第8版)[M].鄧迎春,等.譯.北京:機(jī)械工業(yè)出版社,2012.
[4]Dale Skrien.面向?qū)ο笤O(shè)計(jì)原理與模式[M].騰靈靈,仲婷,譯.北京:清華大學(xué)出版社,2009.4.
[5]Object-Oriented Methods Principles & Practice(3E),Ian Grahan.面向?qū)ο蟮姆椒ㄅc實(shí)踐[M].袁兆山,等.譯.北京:械工業(yè)出版社,2003.
[6]邵維忠,楊芙清.面向?qū)ο蟮南到y(tǒng)分析[M].北京:清華大學(xué)出版社,2006.
[7]刁成嘉.UML系統(tǒng)建模與分析設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2007.
[8]趙逢禹,曹春萍,等.軟件協(xié)同設(shè)計(jì)[M].北京:清華工業(yè)出版社,2011.