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