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