摘要:本文通過分析軟件工程課程的特點和學(xué)生的實踐背景,指出了本課程傳統(tǒng)實驗教學(xué)過程中存在的一些局限性。針對這些不足,本文提出了在實驗教學(xué)中引入敏捷方法,并結(jié)合案例教學(xué)和團隊開發(fā)等教學(xué)手段和方法來提高學(xué)生的實踐能力。
關(guān)鍵詞:敏捷方法;Ruby on Rails;案例教學(xué)
中圖分類號:G64 文獻標(biāo)識碼:A
1軟件工程課程的特點
“軟件工程”是一門工程實踐性較強的課程,目標(biāo)是讓學(xué)生掌握求解軟件的基本思想、工具、技術(shù)、過程和方法,為后續(xù)的專業(yè)知識學(xué)習(xí)以及今后從事計算機軟件開發(fā)、測試與維護奠定良好的基礎(chǔ)。但本課程內(nèi)容較難講授,學(xué)生學(xué)習(xí)起來感到較抽象,有些空洞。其主要原因有:
(1) 學(xué)生實踐經(jīng)驗不足,動手能力不強。本課程是屬于實用工程學(xué)科,課本內(nèi)容采用將知識點從具體到抽象、對實踐經(jīng)驗進行概括總結(jié)的方法加以敘述,但是學(xué)生對實例并不了解,難以理解所講述的實踐經(jīng)驗和知識。而且授課對象是大二的學(xué)生,掌握的開發(fā)技術(shù)和工具很有限,動手能力有待提高。
(2) 課程的綜合性強。軟件開發(fā)是一項綜合性和系統(tǒng)性很強的工程,需要開發(fā)者具有程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)和開發(fā)工具環(huán)境等多方面知識和綜合運用能力。而學(xué)生學(xué)習(xí)的只是單一的課本知識,而且沒有系統(tǒng)化。
(3) 學(xué)生獨立性較強,不善于團隊合作和溝通。在程序設(shè)計和數(shù)據(jù)結(jié)構(gòu)等先修課程中主要是培養(yǎng)學(xué)生獨立的邏輯思考和編程能力,而忽視了溝通、交互與團隊合作。
通過收集以往選修該課程的學(xué)生反饋來看,不少同學(xué)反映對后續(xù)兩年在校期間的軟件項目開發(fā)幫助不大,所學(xué)的軟件工程的方法和技術(shù)并沒有得到很好的應(yīng)用。因此,應(yīng)該對實驗教學(xué)內(nèi)容進行適當(dāng)調(diào)整。通過引入敏捷Web開發(fā)框架、結(jié)對編程和測試驅(qū)動開發(fā)等敏捷方法,并結(jié)合案例教學(xué)和團隊開發(fā)等教學(xué)手段和教學(xué)方法,來培養(yǎng)學(xué)生開發(fā)軟件系統(tǒng)的工作能力、實際操作能力以及溝通能力。
2敏捷方法以及Ruby on Rails
在2001年召開的研討軟件過程未來發(fā)展趨勢的一次會議上,17位業(yè)界專家就什么是“敏捷”達(dá)成一致意見,成立了“敏捷聯(lián)盟”并發(fā)布了聯(lián)盟敏捷宣言。這份聯(lián)盟敏捷宣言是“敏捷軟件開發(fā)”價值和目標(biāo)的濃縮定義,并通過許多共同的原則進行了細(xì)化。敏捷的價值觀是:個體和交互勝過過程和工具;可以工作的軟件勝過面面俱到的文檔;客戶合作勝過合同談判;響應(yīng)變化勝過遵循計劃。敏捷方法強調(diào)應(yīng)加強開發(fā)人員之間的交互,加強與客戶的交互,注重有可工作的軟件和完善、不過分的文檔,積極、快速應(yīng)對客戶的需求變化,而不是回避。
Ruby on Rails是一個具備了敏捷特性的Web開發(fā)框架,使Web應(yīng)用的開發(fā)、部署和維護變得更容易。該框架非常強調(diào)人和交互,鼓勵用戶與開發(fā)團隊合作。Rails強烈要求遵循“不要重復(fù)你自己”和“慣例重于配置”兩個原則,使得當(dāng)需求變化時,Rails應(yīng)用需要修改的代碼量比用其它框架開發(fā)的應(yīng)用要少得多。Rails應(yīng)用是用Ruby編寫的,而Ruby能夠準(zhǔn)確、簡煉地描述程序概念,因此變化也更加容易地被限制在一個小模塊內(nèi)部,并且代碼修改也更容易。該框架強烈重視單元測試和功能測試。Rails的這些特點使該框架能很好地響應(yīng)變化。
3實驗教學(xué)改革及實施過程
通過分析敏捷方法的主要特征以及Rails框架的敏捷特性,在軟件工程課程實驗教學(xué)中引入敏捷方法有助于綜合提高學(xué)生對敏捷軟件工程關(guān)鍵性技術(shù)的全過程實踐與應(yīng)用,理解軟件需求與軟件測試、軟件開發(fā)的緊密關(guān)系,掌握現(xiàn)場需求捕捉、單元/功能/系統(tǒng)測試等方面的技術(shù)。因此,在軟件工程課程中的后期以案例驅(qū)動的方式講授應(yīng)用Rails進行敏捷Web開發(fā)。在實驗教學(xué)中,主講教師要求學(xué)生以分組的形式完成自擬作業(yè)題系統(tǒng)的敏捷Web開發(fā),并全程指導(dǎo)應(yīng)用結(jié)對編程、測試驅(qū)動開發(fā)等敏捷方法,鼓勵并促進小組成員之間的溝通與合作。
具體實施包括以下三個環(huán)節(jié):案例學(xué)習(xí)及重現(xiàn)、分組系統(tǒng)開發(fā)和系統(tǒng)評審環(huán)節(jié)。
(1) 案例學(xué)習(xí)及重現(xiàn)
在軟件工程教學(xué)中引入案例教學(xué)能有效地提高教學(xué)效果。在這個環(huán)節(jié)中,學(xué)生首先在課余時間認(rèn)真閱讀案例,并進行分析。老師同步在課堂上講授案例,包括一些主要任務(wù)、技術(shù)以及開發(fā)工具,然后學(xué)生在實驗課按照案例中步驟重現(xiàn)案例中的系統(tǒng)開發(fā)過程,最后總結(jié)歸納。
采用的案例是depot應(yīng)用系統(tǒng),該系統(tǒng)是一個采用Ruby on Rails實現(xiàn)的網(wǎng)上購書系統(tǒng),包括了貨品維護、分類顯示、購物車、結(jié)算、發(fā)貨以及用戶權(quán)限管理等功能。該案例真實、生動,且具有普遍性。學(xué)生在深入剖析該案例后,能模仿該案例來開發(fā)其他Web應(yīng)用系統(tǒng)。
學(xué)生先利用課余時間對案例進行一定的分析,教師則在課程上同步講授案例,以迭代開發(fā)的方式不斷改進depot應(yīng)用系統(tǒng)。在講授過程中,根據(jù)敏捷方法的特點,一開始進行了適當(dāng)?shù)男枨蠓治龊驮O(shè)計,包括數(shù)據(jù)建模、業(yè)務(wù)流程分析和對象建模,并撰寫了必要的文檔,包括了ER圖、活動圖以及類圖,然后進行系統(tǒng)實現(xiàn)。在實現(xiàn)過程中,教師既要充當(dāng)開發(fā)人員又要充當(dāng)客戶,從客戶的角度來看待系統(tǒng)。具體來看,先找到當(dāng)前首要任務(wù)進行迭代開發(fā),并從客戶的角度出發(fā)指出系統(tǒng)當(dāng)前的主要問題,然后立即按客戶要求進行修改。
在實驗課堂上,重點是按照老師講授的步驟重現(xiàn)depot系統(tǒng)開發(fā)。由于學(xué)生對于開發(fā)語言和工具不熟悉,所以實驗課上教師應(yīng)全程指導(dǎo),重點解決操作和代碼理解方面的問題。在實驗課上,學(xué)生也可以按照分組來進行討論,集體交流。
總結(jié)歸納是本環(huán)節(jié)的最后階段,要求學(xué)生總結(jié)在重現(xiàn)depot系統(tǒng)開發(fā)過程時獲得的經(jīng)驗和教訓(xùn),為以后開發(fā)新系統(tǒng)做準(zhǔn)備。
(2) 分組系統(tǒng)開發(fā)
本環(huán)節(jié)是實施過程中最重要的環(huán)節(jié),主要目標(biāo)是讓學(xué)生體驗敏捷軟件開發(fā)的全過程,且學(xué)會與他人合作,培養(yǎng)團隊精神。在本環(huán)節(jié)中,強調(diào)結(jié)對編程、測試驅(qū)動開發(fā)等敏捷方法的應(yīng)用。學(xué)生在此環(huán)節(jié)處于主導(dǎo)地位,教師只起輔助作用。學(xué)生按要求分成開發(fā)小組(每組最多不超過4人)。各個小組由小組長負(fù)責(zé)組織、分工、控制進度等,對小組成員的最終實驗成績有一定分?jǐn)?shù)浮動調(diào)整權(quán);組長帶領(lǐng)全組順利完成任務(wù),總評可以加一定分?jǐn)?shù)。在實踐中注意滿足學(xué)生的受“尊重的需要”和“自我實現(xiàn)的需要”,采取“角色扮演法”,根據(jù)每個同學(xué)的特點,盡可能發(fā)揮其在技術(shù)或管理方面的長處。
所有的小組都要求用Ruby on Rails開發(fā)自擬作業(yè)題系統(tǒng),這樣在評審時可以相對客觀地比較各組的成果。該系統(tǒng)的必需功能需求統(tǒng)一指定,但是各小組可以擴展功能,從而使得各小組有一定的開發(fā)自由度。
小組完成項目之后,除遞交系統(tǒng)和文檔外,還必須完成一份報告。報告中應(yīng)該包括項目分工情況說明、組員的貢獻以及他們參與系統(tǒng)開發(fā)過程的心得體會,讓學(xué)生自己在總結(jié)中學(xué)習(xí)知識,提高水平。
(3) 系統(tǒng)評審
每個小組都將匯報,展示自己的成果。所有小組構(gòu)成一個環(huán)來進行匯報和評審,匯報的順序由抽簽決定。匯報完的一組的組員將評審下一組的匯報,第一組的匯報由最后匯報的一組的組員來評審。教師先提前公布評分標(biāo)準(zhǔn),并在匯報現(xiàn)場準(zhǔn)備好評分表。在學(xué)生評審的同時,教師也應(yīng)該對每個小組的匯報情況、系統(tǒng)的質(zhì)量、文檔以及報告進行評審、打分,并寫出評語,但不能影響學(xué)生的評審。教師評定成績占小組成績的70%,學(xué)生評定的平均成績占30%。最后,教師要對小組的表現(xiàn)進行總結(jié)點評,幫助學(xué)生整理敏捷開發(fā)過程中的技術(shù)內(nèi)容,鼓勵積極性,但也要適當(dāng)?shù)刂赋鱿到y(tǒng)開發(fā)中的不足。
4結(jié)束語
目前,在軟件工程專業(yè)方向的“軟件工程”課程實驗教學(xué)中已經(jīng)引入了敏捷方法。當(dāng)引入敏捷方法后,學(xué)生普遍反映開始能夠較好地理解并掌握軟件工程項目的開發(fā)理論和方法。和前期和中期的教學(xué)相比,后期的教學(xué)內(nèi)容和方式更容易讓人接受。而且在實驗經(jīng)驗和專業(yè)知識有限的前提下,學(xué)生能夠參與完成一個具體的Web系統(tǒng)開發(fā)項目,能極大地激發(fā)學(xué)習(xí)興趣和主動性,增強在今后的學(xué)習(xí)過程中開發(fā)中小型軟件項目的專業(yè)能力和信心。
總結(jié)起來,經(jīng)探索提出的該教學(xué)方案,其主要特色可以歸納為三方面:
(1) 在學(xué)生實踐經(jīng)驗不足和專業(yè)知識不全面的前提下,通過引入敏捷方法能降低學(xué)生開發(fā)一個實用軟件系統(tǒng)的門檻,使學(xué)生能在開發(fā)實用系統(tǒng)的同時自覺應(yīng)用軟件工程思想,包括敏捷軟件開發(fā)的原則來分析問題和解決問題,從而激發(fā)了學(xué)生的學(xué)習(xí)熱情。
(2) 采用案例學(xué)習(xí)、重現(xiàn)系統(tǒng)開發(fā)以及開發(fā)新系統(tǒng)相結(jié)合的教學(xué)手段,使學(xué)生在深入理解案例的基礎(chǔ)上能效仿該案例,運用其中的技術(shù)來開發(fā)新系統(tǒng)。
(3) 在分組系統(tǒng)開發(fā)過程中,鼓勵學(xué)生通過角色扮演、組內(nèi)討論交流以及網(wǎng)絡(luò)途徑找到獲取需求以及解決一些技術(shù)難題的辦法。
參考文獻
[1] 李勁華,楊厚俊. 普通高?!败浖こ獭闭n程教學(xué)的探索與實踐[J]. 計算機教育,2007,(10):29-31.
[2] 沈備軍,陳誠,居德華. 敏捷軟件過程的研究[J]. 計算機研究與發(fā)展,2002,39(11):1456-1463.
[3] Dave Thomas, David Hansson 著. 林芷薰譯. 應(yīng)用Rails進行敏捷Web開發(fā)[M]. 北京:電子工業(yè)出版社,2006.
[4] 葉俊民,胡金柱,李蓉. 軟件工程案例教學(xué)研究[J]. 計算機教育,2007,(7):19-21.
[5] 張引,楊小虎,陳越. “軟件工程”課程實踐中激勵機制的探索[J]. 計算機教育,2007,(5):30-32.