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