
【摘 要】在軟件開發(fā)實(shí)訓(xùn)教學(xué)中實(shí)施Scrum敏捷開發(fā)方法,比使用傳統(tǒng)的“瀑布模型”更有利于學(xué)生實(shí)踐能力的培養(yǎng)。具體實(shí)施辦法為:組建開發(fā)團(tuán)隊(duì),實(shí)行雙教師教學(xué);約定開發(fā)規(guī)范,精簡(jiǎn)開發(fā)流程;結(jié)對(duì)編程,以強(qiáng)帶弱,相互促進(jìn);持續(xù)集成、交換測(cè)試。
【關(guān)鍵詞】Scrum 敏捷開發(fā)方法 ?軟件開發(fā) ?實(shí)訓(xùn)教學(xué) ?應(yīng)用
【中圖分類號(hào)】 G ?【文獻(xiàn)標(biāo)識(shí)碼】 A
【文章編號(hào)】0450-9889(2014)12C-0059-03
一、問題的提出
1970年溫斯頓·羅伊斯在軟件開發(fā)中提出了著名的“瀑布模型”。該模型將軟件生命周期劃分為制訂計(jì)劃、需求分析、軟件設(shè)計(jì)、程序編寫、軟件測(cè)試和運(yùn)行維護(hù)等六個(gè)基本階段,各階段工作必須按次序自上而下開展,每個(gè)階段要撰寫大量文檔,并對(duì)工作結(jié)果進(jìn)行嚴(yán)格驗(yàn)證,只有上一階段工作結(jié)束,才能開啟下一階段工作。這種開發(fā)模式應(yīng)對(duì)上世紀(jì)60年代出現(xiàn)的軟件危機(jī)問題,是一種很好的解決方案,成為了軟件開發(fā)模型的經(jīng)典。
當(dāng)前,隨著軟件開發(fā)技術(shù)的進(jìn)步,人們發(fā)現(xiàn)“瀑布模型”靈活性差,不適用于需求不明確的軟件項(xiàng)目,很多軟件企業(yè)已不再使用“瀑布模型”,但它作為軟件開發(fā)模型的經(jīng)典仍廣泛應(yīng)用在高校軟件開發(fā)實(shí)訓(xùn)課堂中。實(shí)際上,應(yīng)用“瀑布模型”進(jìn)行教學(xué)的高校計(jì)算機(jī)軟件開發(fā)相關(guān)專業(yè)學(xué)生畢業(yè)時(shí)的動(dòng)手能力遠(yuǎn)遠(yuǎn)達(dá)不到企業(yè)的要求,這說明該教學(xué)方法和實(shí)訓(xùn)模式存在問題。為了提高學(xué)生實(shí)踐能力,很多高校與計(jì)算機(jī)軟件開發(fā)培訓(xùn)機(jī)構(gòu)或企業(yè)進(jìn)行聯(lián)合辦學(xué),以彌補(bǔ)學(xué)校實(shí)訓(xùn)教學(xué)能力的不足。
二、“瀑布模型”實(shí)訓(xùn)教學(xué)存在的問題
應(yīng)用“瀑布模型”進(jìn)行的實(shí)訓(xùn)教學(xué)中主要存在如下問題:
首先,學(xué)生把握項(xiàng)目需求的能力差,難以達(dá)到“瀑布模型”對(duì)開發(fā)者的要求。“瀑布模型”適用于需求明確的項(xiàng)目,要求開發(fā)者具有很強(qiáng)的整體把握能力和前瞻性。但是對(duì)于初學(xué)開發(fā)的學(xué)生來說,需求再明確的項(xiàng)目,他們也不能很準(zhǔn)確地把握細(xì)節(jié),導(dǎo)致實(shí)訓(xùn)進(jìn)程不能按計(jì)劃正常開展,影響了實(shí)訓(xùn)效果。在實(shí)際教學(xué)中,雖然很多實(shí)訓(xùn)項(xiàng)目在以往的教材中有類似的解決方案,但是區(qū)別還是存在的,學(xué)生看不到軟件在實(shí)際應(yīng)用中可能出現(xiàn)的問題,到了項(xiàng)目開發(fā)后期才發(fā)現(xiàn)錯(cuò)誤,導(dǎo)致實(shí)訓(xùn)項(xiàng)目失敗。
其次,在“瀑布模型”開發(fā)的每一個(gè)階段,都要求撰寫細(xì)致準(zhǔn)確的文檔,這大大占用了學(xué)生的實(shí)訓(xùn)時(shí)間。據(jù)統(tǒng)計(jì),如果嚴(yán)格按瀑布模型的要求來撰寫文檔,消耗的時(shí)間至少是整個(gè)實(shí)訓(xùn)時(shí)間的1/5。本來實(shí)訓(xùn)課堂留給學(xué)生實(shí)訓(xùn)的時(shí)間就不多,對(duì)一些效率低的學(xué)生來說,文檔還沒寫完實(shí)訓(xùn)期就結(jié)束了,整個(gè)實(shí)訓(xùn)過程變成了紙上談兵的演練。
最后,“瀑布模型”實(shí)訓(xùn)方式過時(shí),學(xué)生不能學(xué)以致用,實(shí)訓(xùn)技能與企業(yè)要求脫節(jié)。當(dāng)今的軟件開發(fā)中,已經(jīng)很難看見完全實(shí)施“瀑布模型”的企業(yè),大家都已對(duì)“瀑布模型”進(jìn)行了改進(jìn)或者實(shí)施其他更先進(jìn)的開發(fā)方法。教育部曾多次指出,高校教育應(yīng)服務(wù)地方和行業(yè),密切與行業(yè)、企業(yè)合作,為企業(yè)提供人才培養(yǎng)和技術(shù)服務(wù)支撐。這要求我們必須改革過時(shí)的實(shí)訓(xùn)模式,使教學(xué)與行業(yè)結(jié)合,與企業(yè)接軌。
三、Scrum敏捷開發(fā)方法概述
近年來,很多先進(jìn)的軟件開發(fā)模型在實(shí)際應(yīng)用中得到了推廣,這里要特別提出的是敏捷開發(fā)。著名IT組織VersionOne在2013年進(jìn)行的敏捷現(xiàn)狀調(diào)查結(jié)果顯示,在全世界收集的3501份調(diào)查報(bào)告中,使用敏捷開發(fā)方法的占88%,其中使用Scrum敏捷開發(fā)方法或Scrum變種開發(fā)方法的占73%。這個(gè)調(diào)查數(shù)據(jù)充分說明了敏捷開發(fā)方法在行業(yè)中的主導(dǎo)地位。
敏捷開發(fā)(Agile development)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法,它把項(xiàng)目分割分成多個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目的成果都經(jīng)過測(cè)試,具備集成和可運(yùn)行的特征。敏捷開發(fā)方法包括Scrum、Crystal和極限編程(XP)等,是一組開發(fā)方法的總稱。它也是軟件開發(fā)的一個(gè)過程管理框架,遵循了敏捷開發(fā)的主要價(jià)值觀:個(gè)人與交互重于開發(fā)過程與工具;可用的軟件重于面面俱到的文檔;與客戶的合作重于對(duì)合同的談判;響應(yīng)變化勝過遵循計(jì)劃。
Scrum敏捷開發(fā)過程是迭代的增量開發(fā),整個(gè)開發(fā)過程由若干個(gè)短周期的迭代組成,每一個(gè)迭代周期稱為Sprint(沖刺),每個(gè)迭代實(shí)現(xiàn)不同的特性,迭代中重大的、優(yōu)先級(jí)高或風(fēng)險(xiǎn)高的特性優(yōu)先實(shí)現(xiàn)。Scrum敏捷開發(fā)方法重視軟件的可用性,強(qiáng)調(diào)與客戶的溝通,開發(fā)過程能夠快速響應(yīng)用戶需求變更,盡早處理風(fēng)險(xiǎn)問題。
四、Scrum敏捷開發(fā)方法在軟件開發(fā)實(shí)訓(xùn)教學(xué)中的優(yōu)勢(shì)
相對(duì)于“瀑布模型”,Scrum敏捷開發(fā)方法具有更多適合軟件開發(fā)實(shí)訓(xùn)教學(xué)的優(yōu)勢(shì),主要表現(xiàn)在如下方面:
第一,能夠快速響應(yīng)需求變更。與實(shí)際開發(fā)相似,學(xué)生的實(shí)訓(xùn)項(xiàng)目都是在重復(fù)多次的修正需求、修改設(shè)計(jì)后才交付實(shí)現(xiàn)的。Scrum敏捷開發(fā)方法中的Sprint都很小,即使需求變更很大,也可以在短時(shí)間內(nèi)修改設(shè)計(jì)完成開發(fā)。而“瀑布模型”希望需求是穩(wěn)定的,但不變只是愿望,變化才是永恒。如果在軟件設(shè)計(jì)后期提出需求變更,那會(huì)是一種災(zāi)難。這種影響小則使實(shí)訓(xùn)進(jìn)度不可控,重則導(dǎo)致實(shí)訓(xùn)項(xiàng)目失敗。
第二,Scrum敏捷開發(fā)方法要求盡早編碼,盡快開發(fā)出系統(tǒng)原型,盡早使客戶見到可運(yùn)行的軟件,暴露項(xiàng)目的技術(shù)風(fēng)險(xiǎn),從而提出優(yōu)化意見。這恰好迎合了學(xué)生開發(fā)實(shí)訓(xùn)時(shí)急切渴望進(jìn)行編程實(shí)現(xiàn)的心理,激發(fā)了學(xué)生學(xué)習(xí)的積極性。而“瀑布模型”要求推遲實(shí)現(xiàn),要盡可能把需求分析透徹,設(shè)計(jì)完整,完成文檔編寫后才能進(jìn)行編碼實(shí)現(xiàn)。這個(gè)過程對(duì)急切渴望編程的學(xué)生無疑是一種打擊。
第三,Scrum敏捷開發(fā)方法不要求文檔面面俱到,更注重于軟件可用性設(shè)計(jì)。在敏捷開發(fā)中,很多文檔只是一個(gè)草圖,大部分文檔在集成測(cè)試階段產(chǎn)生,而且只寫有必要的文檔。所以實(shí)訓(xùn)團(tuán)隊(duì)不需要安排專人撰寫完備的開發(fā)文檔,從而使學(xué)生有時(shí)間專注于開發(fā)實(shí)訓(xùn)工作。
第四,Scrum敏捷開發(fā)方法能更全面地培養(yǎng)學(xué)生的軟件開發(fā)技能。在Scrum項(xiàng)目中,每個(gè)開發(fā)成員主動(dòng)認(rèn)領(lǐng)開發(fā)任務(wù),開發(fā)過程涉及的設(shè)計(jì)、編碼和單元測(cè)試全部是個(gè)人獨(dú)立完成,實(shí)際上一個(gè)人承擔(dān)了傳統(tǒng)開發(fā)模式中系統(tǒng)架構(gòu)師、程序員、測(cè)試員和產(chǎn)品構(gòu)建經(jīng)理等角色工作。這種實(shí)訓(xùn)方式有助于提升學(xué)生軟件開發(fā)的單兵作戰(zhàn)能力,從而快速適應(yīng)企業(yè)軟件開發(fā)工作的各個(gè)環(huán)節(jié)。
五、Scrum敏捷開發(fā)方法在軟件開發(fā)實(shí)訓(xùn)教學(xué)中的實(shí)施
綜上所述,在軟件開發(fā)實(shí)訓(xùn)教學(xué)中使用Scrum敏捷開發(fā)方法,可以更好地促進(jìn)教學(xué),提高學(xué)生實(shí)踐能力,實(shí)現(xiàn)教學(xué)與行業(yè)結(jié)合,與企業(yè)接軌。具體實(shí)施方法如下:
(一)組建開發(fā)團(tuán)隊(duì),實(shí)行雙教師教學(xué)
在實(shí)訓(xùn)中,可將教師和學(xué)生按Scrum敏捷團(tuán)隊(duì)角色分組,主要有以下三類角色:一是Product Owner(產(chǎn)品負(fù)責(zé)人)。該角色可安排熟悉產(chǎn)品需求的教師承擔(dān),負(fù)責(zé)產(chǎn)品需求的提煉、條目化和優(yōu)先級(jí)排序。二是Scrum Master(團(tuán)隊(duì)負(fù)責(zé)人)。該角色可安排熟悉Scrum開發(fā)流程的教師承擔(dān),負(fù)責(zé)整個(gè)Scrum團(tuán)隊(duì)的協(xié)作運(yùn)行,并協(xié)作解決非技術(shù)問題。三是Team團(tuán)隊(duì)成員。Team團(tuán)隊(duì)由Team小組長和3~5名小組成員組成。小組長由開發(fā)能力較強(qiáng)的學(xué)生擔(dān)任,其他成員根據(jù)開發(fā)能力強(qiáng)弱穿插分配。每班學(xué)生可分為若干個(gè)Team團(tuán)隊(duì),每個(gè)開發(fā)實(shí)訓(xùn)項(xiàng)目由一個(gè)或多個(gè)開發(fā)小組的學(xué)生在老師指導(dǎo)下完成開發(fā)任務(wù)。
在實(shí)訓(xùn)開發(fā)課堂中,之所以要實(shí)行雙教師教學(xué),一是開發(fā)團(tuán)隊(duì)角色需要,二是為了讓教師能在實(shí)訓(xùn)過程中相互討論,取長補(bǔ)短,彌補(bǔ)高校教師在實(shí)踐經(jīng)驗(yàn)上的不足,提高實(shí)訓(xùn)教學(xué)的整體質(zhì)量。
(二)約定開發(fā)規(guī)范,精簡(jiǎn)開發(fā)流程
實(shí)訓(xùn)開始前,開發(fā)團(tuán)隊(duì)?wèi)?yīng)約定統(tǒng)一的開發(fā)規(guī)范和流程,以便學(xué)生掌握?qǐng)F(tuán)隊(duì)開發(fā)方法,并養(yǎng)成良好的編碼習(xí)慣。圖1為經(jīng)過精簡(jiǎn)的Scrum實(shí)訓(xùn)開發(fā)過程模型。
圖1 ?Scrum開發(fā)過程模型
圖1是Scrum開發(fā)的一個(gè)迭代周期。其中,Product Backlog為軟件產(chǎn)品總的需求條目,這些需求多以用戶故事(User story)的形式展現(xiàn),Product Owned負(fù)責(zé)維護(hù);Sprint Backlog是Product Backlog的一部分,通過計(jì)劃會(huì)議(Planning Meeting)討論選定,是需要在當(dāng)前迭代(Sprint)中完成的需求條目;圓環(huán)為迭代開發(fā)(Sprint)的過程,一般周期為2~4周,迭代過程包含分析—設(shè)計(jì)—實(shí)現(xiàn)—測(cè)試等工作。迭代開發(fā)過程中,Team成員每天進(jìn)行15分鐘的站立會(huì)議(Daily meeting),主要匯報(bào)昨天做了什么、今天要做什么和遇到了什么問題。Scrum master每天負(fù)責(zé)繪制任務(wù)燃盡圖(Burn Down Chart),以曲線展現(xiàn)當(dāng)前Sprint任務(wù)的剩余量,這對(duì)團(tuán)隊(duì)開發(fā)有很大的鼓舞作用。每一次迭代開發(fā)完成后,教師要組織Team團(tuán)隊(duì)成員召開評(píng)審會(huì)議(Review Meeting),發(fā)布一個(gè)可執(zhí)行的軟件版本(Release),并讓相關(guān)人員和團(tuán)隊(duì)成員提出優(yōu)化意見。
(三)結(jié)對(duì)編程,以強(qiáng)帶弱,相互促進(jìn)
學(xué)生的學(xué)習(xí)能力和實(shí)踐能力是強(qiáng)弱不一的。在實(shí)訓(xùn)過程中,教師的指導(dǎo)作用固然重要,但師生間的溝通往往沒有學(xué)生間的溝通那么自如。因此,可以安排一個(gè)能力強(qiáng)的學(xué)生與一個(gè)能力弱的學(xué)生結(jié)對(duì)編程,充分發(fā)揮先進(jìn)學(xué)生的帶頭作用,讓后進(jìn)學(xué)生有機(jī)會(huì)學(xué)習(xí)別人優(yōu)秀的學(xué)習(xí)方法和實(shí)踐經(jīng)驗(yàn),互相監(jiān)督,互相促進(jìn),最終實(shí)現(xiàn)實(shí)訓(xùn)目標(biāo)。
(四)持續(xù)集成,交換測(cè)試
在我們的實(shí)訓(xùn)中,并沒有設(shè)立專門的軟件測(cè)試小組,開發(fā)團(tuán)隊(duì)只是對(duì)軟件進(jìn)行了簡(jiǎn)單的單元測(cè)試。如果整個(gè)項(xiàng)目都要等到軟件開發(fā)后期才進(jìn)行集成測(cè)試,項(xiàng)目失敗的風(fēng)險(xiǎn)就會(huì)很高。Scrum要求團(tuán)隊(duì)開發(fā)要盡可能頻繁地進(jìn)行集成測(cè)試,也就是持續(xù)集成。持續(xù)集成可以盡可能快地發(fā)現(xiàn)集成錯(cuò)誤,通常每個(gè)成員每天至少集成一次,也可能進(jìn)行多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯、發(fā)布、自動(dòng)化測(cè)試)來驗(yàn)證,減少開發(fā)團(tuán)隊(duì)進(jìn)行集成測(cè)試的時(shí)間消耗。實(shí)踐基礎(chǔ)好的團(tuán)隊(duì)可嘗試實(shí)施測(cè)試驅(qū)動(dòng)開發(fā)(TDD),即先編寫測(cè)試代碼,后編寫功能代碼,用測(cè)試代碼驅(qū)動(dòng)功能開發(fā),這可以降低自動(dòng)化測(cè)試的出錯(cuò)率,提高軟件運(yùn)行質(zhì)量。如要進(jìn)行人工測(cè)試,可安排各個(gè)開發(fā)團(tuán)隊(duì)進(jìn)行交換測(cè)試,因?yàn)樗藴y(cè)試比自己測(cè)試更容易發(fā)現(xiàn)軟件存在的錯(cuò)誤。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (下轉(zhuǎn)第87頁)(上接第60頁)
總之,Scrum敏捷開發(fā)方法是一種新興的軟件開發(fā)方法,很多實(shí)踐方法和理論還在不斷地研究中。實(shí)訓(xùn)教學(xué)終究是以傳授技能為主,不需要拘泥于Scrum開發(fā)的全部形式,教師可對(duì)Scrum開發(fā)方法進(jìn)行修剪和優(yōu)化,從而更好地實(shí)現(xiàn)教學(xué)目標(biāo)。自2013年起,柳州師范高等專科學(xué)校在軟件開發(fā)實(shí)訓(xùn)教學(xué)中實(shí)施Scrum敏捷開發(fā)方法,現(xiàn)已成功開發(fā)了教學(xué)質(zhì)量監(jiān)控系統(tǒng)、科研工作管理系統(tǒng)兩個(gè)真實(shí)項(xiàng)目,用戶對(duì)軟件的滿意度很高,實(shí)訓(xùn)教學(xué)取得了良好的效果,但相關(guān)管理制度和實(shí)訓(xùn)措施還需要進(jìn)一步探索和優(yōu)化。
【參考文獻(xiàn)】
[1]VersionOne Inc.8th Annual State of Agile[R]. VersionOne Inc,2013
[2]Mike Cohn. Scrum敏捷軟件開發(fā)[M].北京:清華大學(xué)出版社,2010
[3]Freder ick P.Brooks,Jr.人月神話[M].北京:清華大學(xué)出版社,2007
[4]陳國棟,羅省賢. Scrum敏捷軟件開發(fā)方法實(shí)踐中的改進(jìn)和應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011(12)
[5]Henrik Kniberg. Scrum and XP from the Trenches[M]. C4Media Inc,2007
[6]商惠華.計(jì)劃驅(qū)動(dòng)下敏捷開發(fā)過程的軟件質(zhì)量管理[J].汕頭大學(xué)學(xué)報(bào)(自然科學(xué)版),2011(4)
【基金項(xiàng)目】廣西高等教育教學(xué)改革工程項(xiàng)目(2013JGB301)
【作者簡(jiǎn)介】蒙煥念(1981- ?),男,廣西賓陽人,柳州師范高等專科學(xué)校教務(wù)處系統(tǒng)分析師(高級(jí)工程師),碩士,研究方向:軟件工程、教育信息化。
(責(zé)編 王 一)