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