李娜 任志宏 張萍


摘要:引入真實的校企項目是促進人才培養的重要手段之一,項目成功的實踐過程對于項目成員的成長體驗尤為重要。該文選取校企項目之一的微信小程序作為敏捷開發試點,在項目的指導和交付過程中引入了Scrum敏捷開發方法,即在項目的啟動階段、執行階段、結束階段融合Scrum方法進行環境搭建、角色分配、產品Backlog劃分、進度跟蹤和控制、項目評審等核心環節,取得了預期良好的效果。在該校企項目的敏捷交付實踐過程中,Scrum框架的應用有助于控制項目進度和提高項目交付質量,從而得到用戶的良好反饋;同時也有效提升西安歐亞學院軟件工程專業學生的實踐開發能力和工程素養。
關鍵詞:敏捷開發方法;Scrum框架;微信小程序;工程素養
中圖分類號:TP393? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)12-0048-03
開放科學(資源服務)標識碼(OSID):
基于“新工科”提出的問技術發展改內容,更新工程人才知識體系。將產業和技術的最新發展、行業對人才培養的最新要求引入教學過程,更新教學內容和課程體系,建成滿足行業發展需要的課程和教材資源,打通“最后一學里”。推動教師將研究成果及時轉化為教學內容,向學生介紹學科研究新進展、實踐發展新經驗,積極探索綜合性課程、問題導向課程、交叉學科研討課程,提高課程興趣度、學業挑戰度。西安歐亞學院軟件工程專業自2018起搭建了一個產學研型項目孵化基地,從2018年起每年會引入一些真實校企項目,研發團隊核心成員由來自多年企業工作背景的教師指導參與孵化基地項目開發的學生實踐完成。
前面幾年校企項目采用的是傳統的瀑布模式進行開發,按照由需求分析、概要設計、詳細設計、編碼、測試和交付等階段,瀑布開發重文檔、輕交流,學生的文檔功底比較薄弱,進而忽視文檔、不看文檔、導致后期產品交付嚴重超期、用戶不滿意最終產品的設計等軟件危機的產生。基于以上經驗,根據軟件需求不是很明確、用戶交付日期緊急等特點的校企項目,嘗試引入近年來軟件企業里盛行的敏捷開發方法,結合產業和技術的最新發展、適應行業對人才培養的最新要求。
1 敏捷開發方法
2011年2月11日到13日,17位軟件開發領域的領軍人物聚集在美國猶他州的滑雪勝地(Snowbird)雪場。經過兩天的討論,“敏捷”(Agile)這個詞被全體聚會者所接受,用以概括一套全新的軟件開發價值觀。這套價值觀通過一份簡明扼要的《敏捷宣言》傳遞給世界,宣告了敏捷開發運動的開始。
敏捷開發是以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發,主要方法有極限編程(XP)、水晶方法(Crystall)、動態系統開發方法(DSDM)、精益開發(Lean)、Scrum等,相對于傳統的瀑布式開發方法來說,敏捷開發過程具有透明性、每個迭代過程都有客戶溝通檢查、強調適應性而非預測性以及強調以人為導向而非過程導向[1]。敏捷開發方法具有快速交付、降低風險、適應變化、質量更好、持續改善、滿意度高等開發優勢。
2 Scrum框架
Scrum是目前全球最受歡迎的敏捷框架,Scrum聯盟和敏捷聯盟創始人之一Mike Cohn對Scrum的定義:Scrum是一個讓我們關注于在最短時間里交付高質量商業價值的敏捷框架.所以Scrum不是方法或者流程,而是一個框架。框架則提供更靈活的平臺,根據環境的不同,它可以采用不同的方法和技術[2]。
Scrum是一個用戶開發和維持復制產品的框架,是一個增量的、迭代的開發過程。在這個框架中,整個開發過程由若干個短的迭代周期組成,一個短的迭代周期稱為一個Sprint,每個Sprint的建議長度是2到4周(互聯網產品研發可以使用1周的Sprint),可根據項目的復雜度決定。在Scrum中,使用產品Backlog來管理產品的需求,產品Backlog是一個按照商業價值排序的需求列表,列表條目的體現形式通常為用戶故事。
Scrum團隊總是先開發對客戶具有較高價值的需求。在Sprint中,Scrum團隊從產品Backlog中挑選出最高優先級的需求進行開發。挑選的需求在Sprint計劃會議上經過討論、分析和估算得到相應的任務列表,稱為Sprint backlog。在每個迭代結束時,Scrum團隊將遞交潛在可交付的產品增量。Scrum起源于軟件開發項目,但它適用于任何復雜的或是創新性的項目。
3 敏捷方法在校企合作項目實踐中面臨的挑戰
歐美大部分IT企業已經采用敏捷開發,北美已經有55%的企業采用敏捷開發,像微軟、谷歌、英特爾等世界名企已經廣泛展開。而國內近幾年受外企和軟件外包的帶動,中國IT公司也逐漸開始采用敏捷開發模式,但是由于敏捷開發對IT人才綜合能力要求較高,很多企業心有余而力不足。學生在校只注重編程類知識的學習、所學的專業知識都是獨立的,缺乏真實項目的實踐,對自己所學的專業知識沒有一個宏觀上的認識,做真實項目時缺乏一定的溝通力和協調力。故IT界的轉變推動大學課程的變革,學校培養人才的模式也要緊跟行業的變化,一方面教師提升自己緊跟時代步伐,保持行業知識技術的同步更新;另一方面,學生需要學到現階段行業先進技術和工作方法,在以后的就業中能夠更快、更好地適應企業的需求,做好強有力的支撐。
4 敏捷開發在校企合作項目中的引入與落地
為了更好地打通“最后一公里”,西安歐亞學院軟件工程專業也創辦了軟件孵化基地,為了能把業界先進的Scrum開發模式引入校企項目的交付中,筆者以自己曾經在企業有過多年敏捷項目開發經驗、2年企業Scrum Master背景出發,根據現有校企項目的特點,決定以西安歐亞學院創業孵化平臺的項目作為敏捷開發的試點項目。在項目正式開發之前對Scrum框架進行適當剪裁,選取適合項目的工具和方法,將Scrum框架逐漸落地。本文主要從企業級敏捷開發環境的構建、項目分組(角色分工)、價值驅動交付(產品的Backlog實現價值驅動)、迭代執行、項目評審等方面進行探索和總結。
4.1 企業級敏捷開發環境的構建
“工欲善其事,必先利其器”,為了讓學生在校企項目的迭代開發中最大限度地體驗到接近企業級的敏捷開發流程,我們前期搭建了企業級的敏捷開發環境。從基于團隊開發的代碼版本管理工具SVN使用、主流項目管理工具Jira的選用(可進行迭代需求管理、Scrum團隊成員任務分配、項目進度監控、缺陷管理等)、到開發代碼每天的自動化持續集成工具Jekins的部署使用,Jekins 可實現開發人員代碼的自動編譯和自動化部署的過程,在華為、匯豐銀行等軟件系統研發部門大廠的自動化持續集成都采用Jekins工具,該工具可提高開發人員的編碼效率、可進行按需定時構建、實時化構建等非常靈活的代碼構建過程,并且還能第一時間發現最新提交代碼的質量,便于代碼問題及時、快速地定位。學生通過代碼開發過程中對環境、工具的學習和使用,提前掌握了目前企業級軟件開發的主流工具鏈,開拓了學生的視野、激活了專業知識體系、提高了學習興趣。
4.2 角色分配
Scrum團隊由三種角色組成:產品負責人(Product Owner, 簡稱PO)、Scrum Master(簡稱SM)和Scrum開發團隊。企業中,通常由系統架構師擔任產品架構師擔任負責人,由資深員工擔任Scrum Master,由研發成員組成Scrum開發團隊。一個理想的Scrum 團隊建議在5~9人左右,推崇小團隊和高效[3]。
本試點項目由1位多年ERP企業背景實戰的教師和1位用戶代表充當產品負責人PO,1位擁有多年企業敏捷開發背景的老師充當敏捷教練引導學生進行敏捷實踐,13位學生組成3個Scrum團隊,每個團隊選出一個能力強的學生擔任Scrum Master負責組內的工作任務安排、進度監控,每個組內的同學分別由大三、大二、大一不同年級結構的學生組成,實現程序員技術結構上的高級、中級、初級不同角色的劃分,在整個項目開發中以端到端交付為目標、團隊內以老帶新,團隊成員協作完成,有效培養了學生的領導力、團隊協作力、團隊溝通力、沖突解決能力等。激發學生的項目工匠精神,引導學生從真實職場角色定位來做出決策,團隊成員不僅有Scrum Master, 也有Group Leader、Developer、Tester,尊重學生的興趣選擇,為學生日后就業能更快適應崗位需求、更專業、更優秀地工作打好基礎。
4.3 價值驅動交付
基于敏捷開發的特點,選取需求不是很明確、用戶需求變更頻繁的項目作為敏捷開發的首選。《敏捷開發的藝術》強調:避免選擇低價值的項目作為“學習機會”,因為這樣做很難使客戶參與并取得組織層面的成功。即使項目本身是成功的,組織上仍然可能認為項目是失敗的[4]。文中以服務高校的產、教、資、政融合的一個關于創業孵化平臺的項目為試點項目,該項目計劃從2021年4月份需求調研開始到2021年10月底V1.0結束,通過面對面溝通引導用戶列出自己產品的真實需求、按照商業價值交付的優先級協助用戶梳理出本產品的功能列表(Product Backlog),在根據需求的優先級制定出每個迭代的沖刺列表(Sprint Backlog),整個過程由敏捷教練老師帶領學生跳出以往僅僅關注編碼的層面,真實體驗企業級用戶需求獲取、需求定義的全過程,如圖1所示是對需求從產品Product Backlog到迭代沖刺Sprint Backlog的梳理過程。以3周為一個迭代周期,每次迭代交付時必須經過產品評審、測試等閉環過程,驗證已交付的迭代產品特性是可用的。該敏捷實踐過程如圖2所示。
4.4 迭代執行
基于敏捷開發的透明性的特點,從Sprint Planning 開始,讓每個小組開始領任務,到帶領學生做迭代任務量的估算,正式開發過程中采用白板的形式,開發人員將自己的任務寫在便貼紙上粘貼在白板上,每天協調一個固定的時間進行10~15分鐘的每日站會(Stand-up meeting),對項目的最新開發狀態進行可視化動態收集,以及開發團隊內遇見的Block issue,敏捷教練協調Scrum master幫助組內成員去解決,組內成員解決不了可以協調外部資源來解決,比如需求澄清問題,開發過程中遇見不清楚的需求還是需要跟PO人員進行面對面的溝通交流,進行需求的再次確認。
敏捷開發整個迭代過程的執行非常重視成員之間的溝通交流,從而激發了學生在項目開發過程中的主動性,培養學生項目執行過程中的計劃能力、溝通能力、問題表達力和問題解決能力。通過迭代過程的執行,培養學生工程化的思維方式,面對問題如何從降低風險發生的角度去思考解決,從而播散下項目風險管控的思想種子,在他們在以后的IT從業中生根發芽。
最后每個迭代交付前給用戶做產品Demo,收集用戶的反饋,快速響應變化,確保交付客戶的產品是可用的產品。每次迭代的回顧會議,引導學生們總結好的開發經驗分享、需要感恩的人和事、思考后期迭代開發中需要提升的地方。讓學生善于總結、善于思考,不僅收獲技術上的成長,也要收獲樂觀積極向上的心態。經過兩輪的迭代交付,團隊成員對迭代開發的流程已經掌握,知道每個時間點應該關注什么樣的具體事情,為日后的敏捷開發積淀了寶貴的實戰經驗。
4.5 項目評審
敏捷開發流程的全過程都無時無刻不貫穿著評審環節,試點項目主要從下面幾個維度對項目進行評審:
第一,從每個迭代的Sprint Planning開始,加入需求評審,由開發人員進行需求反串講,邀請PO和整個敏捷開發團隊成員參加,檢查開發人員對需求的理解是否正確。遵循了敏捷宣言中個體和交互勝過流程和工具,客戶合作勝過合同談判的原則。該過程鍛煉了學生對項目需求的把控和理解,真實體驗到需求評審環節對于項目成功的重要性。
第二,測試人員每個Sprint之初要設計一個測試分析,確保相關任務的開發人員參與并評審過程,開發人員與測試人員對需求分析用例設計的正確性、完整性達成一致,避免后期開發人員造成代碼分支或者條件判定的遺漏、功能的缺失等,降低代碼層面的低級錯誤。測試驅動開發的理念有效提升代碼開發的質量,該過程極大地讓學生從測試角色的角度去檢測自己代碼設計的覆蓋率。
第三,每個Sprint 收尾階段,團隊會做一個Retrospective meeting(回顧會議),團隊成員頭腦風暴總結出該迭代時期做得好的方面,然后發現做得不好的方面,最后提出團隊在下一個Sprint階段將如何改善。鼓勵團隊成員在敏捷開發過程中關注內部的持續改進,經驗分享。該階段的過程體驗啟發了學生在日后的工作崗位上如何成為一個善于思考、善于總結、迭代成長的IT職業人。
5 結束語
本文介紹了敏捷開發在西安歐亞學院微信小程序合作項目中的實踐探索,從企業敏捷開發環境的構建、到項目分組、價值驅動交付、迭代執行、項目評審等過程中,學生使自己的專業知識在實際項目中融會貫通,激發了專業課學習的動機,與傳統瀑布開發模式相比,敏捷開發過程更注重的是人與人的溝通交流、交付價值驅動、小步快跑的節奏,不僅激發了學生的硬核編碼能力,還培養了學生的團隊協作能力、溝通能力、沖突解決能力等核心軟實力。盡管項目一期交付可以成功地滿足用戶的需求,但是還需要在后續新特性的迭代開發中提高對于敏捷框架中基于價值交付實踐的提升,同時整個實踐項目基于角色體驗讓學生提前感受企業氛圍,進而提高學生的職業技能和職業素養,更加容易適應社會需求。
參考文獻:
[1] 張敬周,錢樂秋,朱三元.Agile方法研究綜述[J].計算機應用與軟件,2002,19(6):1-9,54.
[2] Goldstein I. Scrum捷徑:敏捷策略、工具與技巧[M].北京:清華大學出版社,2019.
[3] 葉俊文.融合Scrum敏捷開發的標準研制項目管理模式探索[J].中國標準化,2019(5):38-43,53.
[4] Cohn M.用戶故事與敏捷方法[M].北京:清華大學出版社,2010.
【通聯編輯:代影】