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