劉靜靜
摘要:隨著對需求響應(yīng)的速度越來越快,瀑布模式已經(jīng)跟不上現(xiàn)在需求的快速變化,越來越多的企業(yè)都開始往敏捷開發(fā)的方向轉(zhuǎn)型。敏捷可以更快的適應(yīng)市場的需求,大大縮短了從客戶提出需求到客戶可以使用新功能的時(shí)間,有很多企業(yè)甚至可以做到對部分功能的當(dāng)日提出當(dāng)日上線。所以,項(xiàng)目實(shí)例開發(fā)課程,也使用敏捷開發(fā)的方式來進(jìn)行,使學(xué)生在通過實(shí)例開發(fā)鍛煉項(xiàng)目開發(fā)的同時(shí),也學(xué)習(xí)目前企業(yè)最流行的軟件開發(fā)方式,學(xué)生畢業(yè)后可以更快的融入公司的開發(fā)團(tuán)隊(duì)之中。
關(guān)鍵詞:敏捷;課程;項(xiàng)目開發(fā)
1 引言
在IT領(lǐng)域,需求變得越來越復(fù)雜和多樣化,項(xiàng)目開發(fā)的失敗率越來越高,于是幾個(gè)軟件開發(fā)領(lǐng)域的專家聚在一起,討論如何來應(yīng)對這一難題,在各種分析和討論之后,他們提出了一種新的開發(fā)思想,并命名為敏捷。同時(shí)提出了敏捷開發(fā)的四個(gè)價(jià)值觀和十二條原則[1]。
敏捷軟件開發(fā)最常用的目前是Scrum,其軟件開發(fā)方式如下[2]。
Scrum 規(guī)定了5個(gè)正式事件,用于檢視與調(diào)整:需求梳理會(huì)議、Sprint計(jì)劃會(huì)議、每日 Scrum 站會(huì)、Sprint評審會(huì)議、Sprint回顧會(huì)議。
Scrum 團(tuán)隊(duì)定義了三種角色:產(chǎn)品負(fù)責(zé)人、開發(fā)團(tuán)隊(duì)和Scrum Master。
Sprint是Scrum的核心,其長度(持續(xù)時(shí)間)為一個(gè)月或更短時(shí)間的限時(shí),在這段時(shí)間內(nèi) 構(gòu)建一個(gè)“完成的”、可用的和潛在可發(fā)布的產(chǎn)品增量。
Scrum 工件包括:產(chǎn)品待辦列表、Sprint 待辦列表、增量。
2 敏捷在項(xiàng)目實(shí)例開發(fā)中的運(yùn)用
首先,我們會(huì)把學(xué)生進(jìn)行分組,每個(gè)小組包含8個(gè)人左右,每個(gè)小組為一個(gè)Scrum團(tuán)隊(duì)。每個(gè)Scrum團(tuán)隊(duì)的任務(wù)都是去完成冬夏令營系統(tǒng),為方便描述,下面我們以夏令營系統(tǒng)為例。
每個(gè)Scrum會(huì)首先從需求入手,使用用戶故事形式來寫需求,并使用用戶故事地圖的方式來組織需求。然后按照Sprint的方式來把一個(gè)項(xiàng)目分為幾個(gè)迭代,讓學(xué)生練習(xí)Scrum里面的5個(gè)實(shí)踐。
每個(gè)Scrum團(tuán)隊(duì)為夏令營系統(tǒng)創(chuàng)建用戶故事,然后使用用戶故事地圖[3]來組織史詩故事和用戶故事。見圖1.
每個(gè)團(tuán)隊(duì)會(huì)持續(xù)更新上面的用戶故事地圖,每一行代表一個(gè)版本。每個(gè)Scrum團(tuán)隊(duì)會(huì)使用三個(gè)迭代來完成這個(gè)系統(tǒng),每個(gè)迭代兩周。
團(tuán)隊(duì)先開始計(jì)劃會(huì)議,來計(jì)劃第一個(gè)迭代要做的用戶故事,以及創(chuàng)建任務(wù)并進(jìn)行分工。然后迭代里的每一天,大家會(huì)開站會(huì),每次15分鐘。團(tuán)隊(duì)在當(dāng)前迭代還會(huì)開展產(chǎn)品梳理會(huì)議,我們這個(gè)會(huì)議設(shè)置在迭代的第六天。在迭代的最后一天,大家會(huì)進(jìn)行評審會(huì)議,一起來演示當(dāng)前迭代完成的功能。最后一天還會(huì)進(jìn)行回顧會(huì)議,團(tuán)隊(duì)一起來總結(jié)當(dāng)前迭代做得不錯(cuò)的地方以及需要調(diào)整的地方,并制定出相應(yīng)的行動(dòng)事項(xiàng)。
如此往復(fù),一直到系統(tǒng)完成。我們會(huì)選定一些會(huì)議讓大家在課堂上來開,比如評審會(huì)議,團(tuán)隊(duì)會(huì)演示當(dāng)前完成的系統(tǒng)給課程老師,老師會(huì)給出一定的反饋和評價(jià)。課程上還會(huì)進(jìn)行回顧會(huì)議,課程老師也會(huì)對學(xué)生們的合作以及代碼給出反饋,讓團(tuán)隊(duì)下個(gè)迭代可以做的更好。課堂上盡量安排讓每次會(huì)議都進(jìn)行幾次,來提高學(xué)生對Scrum的運(yùn)用水平。除了課堂上進(jìn)行的部分,剩下的都有學(xué)生在課下自己完成。
除了Scrum本身,我們還讓學(xué)生練習(xí)了敏捷的工程實(shí)踐。第一個(gè)是整潔代碼規(guī)范,讓大家寫出更易讀,更易維護(hù)的代碼。
第二個(gè)是單元測試,本系統(tǒng)使用Junit[4]。同時(shí),使用Jacoco[5]來為單元測試生成代碼覆蓋率。
第三個(gè)工程實(shí)踐是重構(gòu),讓學(xué)生們使用重構(gòu)來不斷地提高代碼的質(zhì)量。
第四個(gè)工程實(shí)踐是自動(dòng)化測試,如果每次都把已經(jīng)完成的功能重新測試一次,每個(gè)迭代開發(fā)的時(shí)間就會(huì)越來越短,如圖2所示。
所以在Scrum的模式下,自動(dòng)化測試是非常關(guān)鍵的工程實(shí)踐,我們選取Cucumber[6]和Selenium 來實(shí)現(xiàn)系統(tǒng)的自動(dòng)化測試。
為了體現(xiàn)團(tuán)隊(duì)合作等方面的一些信息,我們使用了一些圖表來反映團(tuán)隊(duì)的情況。圖3是迭代的燃盡圖,圖4是累積流圖,圖5是周期時(shí)間分布圖,圖6是缺陷控制圖。
3 應(yīng)用結(jié)果分析
通過使用Scrum的方式來完成項(xiàng)目實(shí)例開發(fā)這么課程,比起原來只是簡單的讓大家完成一個(gè)系統(tǒng)的開發(fā),能夠同時(shí)讓學(xué)生可以學(xué)習(xí)到目前最為流行的軟件開發(fā)方法,并實(shí)際參與到一個(gè)敏捷開發(fā)項(xiàng)目之中,體驗(yàn)每一個(gè)環(huán)節(jié)。除了方法本身的學(xué)習(xí)之外,也鍛煉了目前最為流行的幾項(xiàng)工程實(shí)踐。第三,學(xué)生還對數(shù)據(jù)分析和度量有了深入的了解和認(rèn)識(shí),為以后在工作中不斷取得進(jìn)步打下了良好的基礎(chǔ)。使用這樣的方式完成項(xiàng)目實(shí)例開發(fā)這么課程后,可以讓學(xué)生在畢業(yè)以后可以快速的融入公司使用的開發(fā)方法之中,甚至還能為其過程和方法做出應(yīng)有的貢獻(xiàn)。
參考文獻(xiàn):
[1]敏捷宣言 http://agilemanifesto.org/iso/zhchs/manifesto.html
[2]Scrum指南http://www.scrumguides.org/docs/scrumguide /v2017
[3]《用戶故事地圖》
[4]https://junit.org/junit4/
[5]https://www.eclemma.org/jacoco/
[6]https://cucumber.io/