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