田英愛 王鐵峰 史家俊 馬力妮
摘要:網絡架構系統(tǒng)的開發(fā)與部署是軟件開發(fā)類課程中的綜合性實踐課程,目的是培養(yǎng)學生企業(yè)級軟件開發(fā)及工程運用能力。文章主要針對課程的具體教學方法和教學內容組織兩方面進行闡述,從軟件開發(fā)和實際教學相結合的角度,說明該課程在軟件工程專業(yè)CDIO課程體系中的實踐和理論方面體現(xiàn)出較深層次的專業(yè)特色。
關鍵詞:CDIO;教學方法;教學內容組織;軟件開發(fā)框架與體系
0、引言
網絡架構系統(tǒng)的開發(fā)與部署是北京信息科技大學軟件工程專業(yè)從2008級培養(yǎng)方案開始設置的一門綜合性較強的實踐課程。所設置的課程體系主要以Java系列技術為主,并基于CDIO培養(yǎng)模式,十分注重學生工程實踐能力的培養(yǎng)。依據(jù)CDIO模式的主要目標,在其培養(yǎng)方案中,每學期都會根據(jù)學生對專業(yè)知識的學習進度,設置一門綜合性的軟件開發(fā)類實踐課程,網絡架構系統(tǒng)的開發(fā)與部署課程設計被設置在本科教學的第6學期,它綜合了程序設計語言技術、數(shù)據(jù)庫技術、軟件工程、軟件設計模式、軟件體系結構、信息系統(tǒng)設計、Java Web開發(fā)技術以及XML技術,對學生綜合運用技術工具以及解決實際問題能力的培養(yǎng)有幫助;同時該課程的設置還可以幫助學生整合專業(yè)知識,進一步形成合理的專業(yè)知識體系,為學生的專業(yè)學習和工程實踐提供有力的實踐和支持。
在以Java系列開發(fā)技術為主的教學課程體系中,網絡架構系統(tǒng)的開發(fā)與部署課程是學生獨立進行開發(fā)技術培養(yǎng)的最后一門綜合性實踐內容,最終目的是讓每個學生能進一步了解和體會專業(yè)知識在軟件開發(fā)方面如何綜合運用,進而達到初級軟件系統(tǒng)工程師的水平。然而,目前有關JavaEE體系方面的教學還主要在社會的一些培訓機構或專門培訓教育中進行,課程學時相對較長,學費較為昂貴;此外,因該課程對授課教師理論與實踐能力要求較高,授課學時的設置相對受限等原因,很少有學校將其作為獨立的程被納入到正式的教學體系中。我們從2008級的培養(yǎng)方案開始,主要依據(jù)CDIO辦學的理念,為更好地培養(yǎng)學生工程實踐能力,進一步加強校企教學方面的銜接,將其作為一門綜合性實踐課程設置到培養(yǎng)方案中,共設置32學時,其中講授8學時,實踐24學時。
如何合理利用學時、如何組織課堂理論和實踐教學、如何設置具體教學內容等問題則成為影響該課程教學效果的主要方面。通過近3年來對北京信息科技大學軟件工程專業(yè)學生的教學實踐,不斷改進教學方法,調整教學內容,逐步取得了良好的效果。
1、課程的主要教學方法
1.1 教學內容設置的銜接問題
軟件工程專業(yè)教學培養(yǎng)計劃是多位經驗豐富的教授通過遵循CDIO理念,經多方調研、推敲、整理后定制出來的。可以說從Java技術的連續(xù)性、軟件工程理論體系的貫穿性、各門課程的前后銜接、專業(yè)發(fā)展的軟件開發(fā)、測試方向及職業(yè)規(guī)劃等方面,都考慮得較為全面,但在對連續(xù)幾屆高年級學生的調查中也發(fā)現(xiàn)了一些問題。學生對于所學知識,大多不太清楚每門課程之間存在怎樣的銜接關系,課程學習完會對將來有什么用途。有些學生每門課程均拿到高分,但遇到編程,就手足無措,違背了工程培養(yǎng)的初衷。此外,某些學生建立軟件工程的思想相對較早,自身注重編程能力的培養(yǎng),對于軟件開發(fā)問題可以很快搭建總體框架,解決程序開發(fā)與調試中的問題,然而,大部分學生在看似編程能力很強的表象下,系統(tǒng)理論不扎實,對于軟件調試問題只知道按照技術支持所給定的方法修改調試,卻不知道為何修改,軟件構造粗糙而無法交付用戶實際使用。這些因素導致其失去了對學習的積極性。本質上,除學生自身差異及努力程度不同外,產生這些問題的另一主要原因,在于學生對課程體系的銜接關系以及課程在高度層次上的體系認識方面沒有很好地理解與把握。
該課程的核心內容是網絡環(huán)境下如何構建軟件的開發(fā)環(huán)境并解決開發(fā)中的各種問題。其中最具代表性的是以SSH(strots-Spring-Hibernate)為核心的開發(fā)框架、基于Web Services的SOA(Service-Oriented-Architecture)應用與服務體系等。教師如要講授清楚以上技術課程,必須梳理好各種框架、體系與軟件開發(fā)的關系。如何組織該課程的教學,教學過程是如何構建,是教師必須認真思考的問題。
1.2 具體教學過程構建
該課程在培養(yǎng)計劃中,共計32學時,其中講授8學時,實踐24學時。如何在短期內盡可能達到教學要求和效果,對授課教師的要求較高。(1)授課教師要對Java開發(fā)技術熟悉,有豐富的工程實踐經驗;(2)教師能夠對課程體系及其教學內容,有相當程度的了解。在目前高校中,具有高級軟件開發(fā)經驗的人才緊缺,鼓勵教師參加培訓并加強與軟件開發(fā)企業(yè)間的交流是一種快捷的途徑;(3)教師應進一步加強軟件工程理論體系的科研工作,把握軟件工程相關理論的新技術、新動態(tài),建立長期積累經驗的環(huán)境。
如何合理利用所分配的學時制定講授內容,根據(jù)課程特點,有針對性地把學生需要掌握的內容提煉并講解清楚,主要包括幾個方面:
(1)中、大型軟件協(xié)作開發(fā)的主要問題是什么,SSH框架和SOA體系的優(yōu)勢有哪些,將來的發(fā)展會怎樣。
(2)具體分析框架、體系與軟件工程的關系,并分析其與各門課程的關系如何。
(3)深入剖析框架體系,結合案例說明軟件如何構造,如何把握關鍵的技術點及實現(xiàn)方法。
(4)軟件開發(fā)實踐與科學研究的總體方向會如何,學生應如何把握。
如何把握時間進度,合理組織實踐過程,從學生學習的角度非常困難,實踐教學的學時過于集中會影響學生對所學知識的消化吸收,起不到預期效果,將時間段拉長,學生會產生疲憊感,產生投機和應付的心態(tài),嚴重影響其對學習的積極性。目前所采用的方法是將講授和實踐內容在2.5~3個月內完成,以項目驅動方式Ⅲ,結合學生軟件開發(fā)和軟件測試的學習方向,讓學生組成3~4人的小組共同協(xié)作完成一個軟件項目,由軟件開發(fā)動手能力相對較強的同學搭建開發(fā)框架,其他同學按照項目的功能點擔任業(yè)務功能的研發(fā)及參與項目最后的整合、測試、驗收及文檔的撰寫。對已完成該課程學習的3屆學生總體調查來看,此種方式普遍得到認可。endprint
課程考核是綜合類實踐課程,學生小組開發(fā)的軟件制品,完成了教學的基本要求,應作為考核的基礎。為避免學生“照貓畫虎”完成軟件制品,我們采用獨立答辯方式,讓學生在自主選擇項目角色,在承擔定量工作的基礎上,接受一些被動強化學習的知識理論,評定教師對相關理論、開發(fā)技術以及具體的操作能力,進行綜合評定。此外,為激勵學生把握開發(fā)理論學習、進行新技術探索、加強能力培養(yǎng),授課教師公開量化了考核等級的具體要求及激勵分數(shù),給定了優(yōu)、良、中、及格、不及格的軟件驗收、答辯、文檔等的具體指標要求,依據(jù)綜合平時成績、新技術應用加分激勵,給出最后的總評成績。從執(zhí)行此考核方法近2年的學生反饋意見來看,該考核方式被普遍認同。
2、課程重點內容的組織
為更好地讓學生掌握網絡架構軟件系統(tǒng)的構造及編程思想,案例驅動是當前最理想的方式。隨著Java技術不斷發(fā)展和成熟,很多編程高手相繼在書籍和網絡上分享了很多系統(tǒng)案例,這些都可以成為該課程的輔助教學資源。如何篩選案例、整理講義和組織教學才能夠讓學生獲得更多的收益是任課教師必須考慮和面對的問題。筆者在不斷改進的課程教學中,選出了相對開發(fā)較為完善、學生較為熟悉的業(yè)務系統(tǒng)作為案例展開教學。
2.1 教學課程體系內容的結合
圍繞案例,各小組按照視頻教學將開發(fā)部署的軟件環(huán)境搭建完成并調試。初步讓學生體會軟件開發(fā)環(huán)境的框架結構。以目前較為流行的JavaEE體系的SSH框架為例,讓學生認識Web瀏覽器、應用開發(fā)集成環(huán)境、Web應用程序以及相應服務器(如Tomcat)之間是如何通信的。這樣學生就可以綜合以往學過的課程及內容,思考到各門課程內容之間的銜接關系口]。例如請學生思考以下問題:
(1)JavaWeb程序設計課程的Servlet編程與框架編程是何種關系?
(2)框架編程中如何支持計算機網絡中的HTTP協(xié)議?
(3)軟件工程中的面向對象和面向方面編程、封裝和抽象、模塊解耦與復用、系統(tǒng)易維護與可擴展性,在框架中以何種方式體現(xiàn)?
(4)XML技術的可配置、數(shù)據(jù)共享及數(shù)據(jù)交換等功能在框架中是如何運用的?
(5)框架技術中哪些結構體現(xiàn)了設計模式?
讓學生獨立查閱資料,組內和組間進行討論,使其重溫所學課程的內容并進一步體會和理清課程的銜接與貫穿關系,對其框架高度理解很有幫助。
2.2 網絡架構系統(tǒng)的框架層次認識
要求學生仔細讀程序,梳理程序包結構及包間的關系,總結出系統(tǒng)的總體層次結構。這一過程主要讓學生進一步學習在SSH等框架下構造的軟件應用程序,在其層次上是如何組織的,從而讓學生初步理解本課程教學的核心內容,并在后續(xù)任課教師的講解中得到進一步學習,主要包括如下內容:
(1)Web層開發(fā)技術的原理,包括基于MVC完成表現(xiàn)層和控制業(yè)務邏輯層的交互、主要文件元素和屬性的作用及配置方法,Web層關鍵類的作用及用法。
(2)業(yè)務層框架設計的基本原理和體系結構以及利用框架(如Spring)將Web層、Service層、DAO層和持久層無縫整合的方法。
(3)持久層框架設計的基本ORM原理和體系結構、框架配置文件的內容、作用和配置方法,此外還有一些核心類和接口的使用方法。
(4)如何利用框架協(xié)調各層關系,依托集成開發(fā)環(huán)境完成業(yè)務系統(tǒng)的設計、部署和運行應用。
在具體課程的講授過程中,從軟件框架開發(fā)和部署的實例角度,帶領學生進一步認識框架層次,闡明各門課程內容在框架開發(fā)中的體現(xiàn)及其作用。引導學生深入體會軟件開發(fā)中需注意的問題及在框架中的實現(xiàn),理解軟件工程的開發(fā)理論、設計模式等,讓學生分析基于框架的開發(fā)對軟件測試產生的影響。
2.3 網絡架構系統(tǒng)的關鍵問題構造與實現(xiàn)
進一步深入學習案例程序,指導學生分析系統(tǒng)的功能點構造、非功能點構造以及實現(xiàn)方式。從本質上是對網絡架構系統(tǒng)核心思想的學習。對于軟件工程專業(yè)的學生培養(yǎng),不僅是培養(yǎng)出能進行編碼開發(fā)的人才,更關鍵是能培養(yǎng)出高級的軟件架構師,能夠有能力組織項目的協(xié)調開發(fā)與管理,此外也希望為將來從事軟件工程學科的科學研究奠定基礎。
該內容教學按照以下4個方面進行。
1)學生首先結合案例,分析系統(tǒng)基本的業(yè)務功能需求,案例系統(tǒng)的代碼中哪些是基本數(shù)據(jù)的增刪改查與統(tǒng)計、數(shù)據(jù)信息的計算、轉換等的業(yè)務功能類,哪些是具有特定服務功能的類或接口等。對于系統(tǒng)所需求的業(yè)務和服務功能的設計與實現(xiàn),目前多數(shù)學生基本都能理解并掌握。在實際的系統(tǒng)項目中,學生的小組團隊基本能夠將系統(tǒng)所需的基本業(yè)務功能設計和實現(xiàn)出來,因此在該課程中只進行簡單的概述和說明。
2)要求學生找出案例系統(tǒng)中與業(yè)務功能看似無關但系統(tǒng)中又必須具有的非功能類,分析其存在的意義。利用框架和軟件構造體系是采用何種技術將這些非功能類與系統(tǒng)進行無縫結合的?對于沒有實際項目經驗的學生而言,此部分的概念薄弱,因此可以通過向學生提出思考題的方式,讓學生很好地思考系統(tǒng)非功能點的問題。比如,一個可實用的Web應用系統(tǒng)是否需要設定用戶的訪問及操作權限?對于隨意的用戶輸入是否需要對輸入的數(shù)據(jù)信息進行校驗,需要在客戶端校驗還是在服務器端校驗?在所支持的業(yè)務功能中,是否存在公共數(shù)據(jù)的大量訪問與修改,其中數(shù)據(jù)訪問的事務和并發(fā)監(jiān)聽是否得到妥善處理?為使系統(tǒng)安全得到保障,系統(tǒng)是否為用戶操作記錄日志?對于后臺數(shù)據(jù)是否進行了敏感數(shù)據(jù)的加密、防SQL注入等保護?是否考慮用戶使用群體的語言語種?國際化和本地化工作是否應作為該Web應用系統(tǒng)的一部分,其編碼和字符集應如何設置?為防止專業(yè)人員的直接頁面獲取,系統(tǒng)頁面訪問的次序是否做了攔截等約束?由上述問題,經學生思考和查閱資料,引出框架中主要使用的技術,如SSH框架中的StrutsMVC、Spring MVC、攔截過濾、AOP以及WS等,并通過小案例,講述實現(xiàn)過程,給學生詳細的感性認識。endprint
3)在詳細介紹了相關技術及應用后,讓學生進一步思考,這些技術體現(xiàn)了軟件工程哪些方面理論,與后期學生真實項目中的開發(fā)和測試工作關系如何。例如,系統(tǒng)如何利用MVC、DAO和ORM體現(xiàn)了分層、模塊化與解耦?ORM的本質是什么?模塊的復用是如何實現(xiàn)的,其中在一些系統(tǒng)中的Js、表達式、動態(tài)菜單等,與軟件框架的復用、解耦什么關系?框架體系中的易維護性和可擴展性如何體現(xiàn)?在相關內容的測試中,該如何組織測試和管理?對上述問題的講解,會使學生進一步認識自己所學的課程內容,明確專業(yè)方向,為其就業(yè)打下基礎。
4)體會框架和體系目前是否還存在缺點,未來的發(fā)展會怎樣,有哪些方向可以進行深入探索和研究等。在該方面的講授中,主要提及框架的智能性,而在框架集成一些非功能點上,是否考慮過應用系統(tǒng)的特殊人群,即系統(tǒng)的無障礙設計。目前的框架對于結構化數(shù)據(jù)處理很有優(yōu)勢,而對于越來越多的非結構化數(shù)據(jù),是否能夠完全適用?同時大數(shù)據(jù)處理和語義技術會給未來的軟件開發(fā)帶來怎樣的變化?這些內容則以激勵學生進一步深入學習和提高科研的興趣為主。
3、結語
2008年以來,北京信息科技大學軟件工程專業(yè)就以CDIO模式對學生進行工程化教育和培養(yǎng),從近3屆本科畢業(yè)的學生就業(yè)情況來看,取得了良好效果,學生就業(yè)率較高,多數(shù)學生選擇了本專業(yè)相關的開發(fā)和測試工作。該課程教學已開設4年,在學生對課程和教師的綜合評價方面取得了理想的成績。在對已就業(yè)學生的回訪中,從事相關工作的學生對該課程有較好認可,認為所講內容實用,對其工作發(fā)展幫助較大。
對于軟件工程網絡架構系統(tǒng)的開發(fā)與課程部署盡管取得了良好效果,但未來的工作還需不斷完善該課程內容、調整教學模式以適應軟件發(fā)展對高校相應人才的需求。
(1)還需進一步加強軟件工程課程體系的一體化建設。不斷調整相互銜接課程的具體教學內容,給系列課程的教師一個良好的教學、科研交流平臺,加強教師之間的溝通。
(2)加強校企聯(lián)合培養(yǎng),對于軟件開發(fā)很多先進的開發(fā)技術思想不是在書本或高校,而是在公司企業(yè)能夠建立校企聯(lián)合機制,并進行有效地交流互通,達到企業(yè)和高校師生雙贏的目的。
(3)靈活教學管理,加強師資培養(yǎng)。目前很多高校的教學和管理被分成較為獨立的兩條線,容易產生不同步現(xiàn)象,相互協(xié)調較難,在靈活教學管理的同時,充分信任教師教學,進一步加強軟件工程專業(yè)的師資建設。endprint