尹華 王志堅


摘要:針對采用傳統(tǒng)過程控制的軟件實訓(xùn)類課程中開發(fā)文檔與編碼脫節(jié),學(xué)生無法深入理解和應(yīng)用分析與設(shè)計理念等問題,介紹敏捷開發(fā)過程的基本思想以及Scrum敏捷開發(fā)過程引入軟件實訓(xùn)教學(xué)中的現(xiàn)狀,闡述新的基于Scrum敏捷開發(fā)過程的軟件實訓(xùn)教學(xué)方案以及一套完整的軟件實訓(xùn)案例,并總結(jié)分析該教學(xué)設(shè)計方案的有效性。
關(guān)鍵詞:軟件實訓(xùn);Agile;Scrum敏捷開發(fā);教學(xué)設(shè)計
引言
互聯(lián)網(wǎng)時代急需大量軟件人才,如何實現(xiàn)高校與產(chǎn)業(yè)界的銜接是軟件人才培養(yǎng)的一個核心問題。軟件實訓(xùn)作為理論聯(lián)系實際的橋梁,具有舉足輕重的作用。目前,國內(nèi)大部分高校軟件實訓(xùn)課程以項目為載體,以編碼結(jié)果為導(dǎo)向,讓學(xué)生通過完成項目鍛煉動手能力。信息技術(shù)發(fā)展飛速,當(dāng)下完成一個程序或是軟件(也就是說編寫代碼)對于多數(shù)大學(xué)生而言并不困難,真正的難點在于如何開發(fā)一個具有可擴展性、可維護性的優(yōu)質(zhì)軟件,這也是目前以及未來軟件實訓(xùn)課程轉(zhuǎn)換思路的方向。
從產(chǎn)業(yè)界看,優(yōu)質(zhì)軟件的前提是過程控制,這也意味著高校軟件實訓(xùn)課程的導(dǎo)向應(yīng)側(cè)重于課程過程控制。筆者在十幾年軟件實訓(xùn)課程的教學(xué)中發(fā)現(xiàn),傳統(tǒng)教學(xué)中采用的過程是瀑布模型,因為此模型采用分階段的方式,適合學(xué)生逐步完成項目,但這僅是理想狀態(tài),瀑布模型在教學(xué)中同樣也面臨產(chǎn)業(yè)界相同的問題。學(xué)生在經(jīng)歷了需求和設(shè)計等文檔撰寫階段后,往往難以將其與編碼匹配,到實際編碼階段又已臨近課程結(jié)束,只能草草完成。
2015年筆者在美國佩斯大學(xué)訪問期間,旁聽了佩斯大學(xué)計算機系主任Christelle Scharff教授的軟件工程課程,她在課程中引入Agile開發(fā)過程,以Serum敏捷開發(fā)過程結(jié)合先進開發(fā)應(yīng)用工具,使得學(xué)生將開發(fā)、管理和工具應(yīng)用在一個實際項目中聯(lián)結(jié)起來。Christelle教授采用Serum敏捷開發(fā)過程進行教學(xué)已經(jīng)多年,成功實現(xiàn)了美國學(xué)生與柬埔寨、印度等地學(xué)生的同步開發(fā)和教學(xué)。受此啟發(fā),筆者回國后將Serum敏捷開發(fā)過程應(yīng)用于軟件實訓(xùn)課程中,從實踐中體會到基于敏捷開發(fā)過程的軟件實訓(xùn)的有效性,也發(fā)現(xiàn)了其存在的問題。
1敏捷軟件開發(fā)
軟件過程模型是軟件開發(fā)過程控制的向?qū)А鹘y(tǒng)過程模型注重建立軟件過程中的軟件產(chǎn)品,尤其是軟件文檔,采用此類過程模型的軟件工程方法被稱為“重型軟件工程”。“重型軟件工程”通過建立完善的文檔系統(tǒng),實現(xiàn)細致的過程建模及檢測,以備維護與修改。另一類以人為核心的軟件開發(fā)思想“敏捷開發(fā)”,被稱為“輕型軟件工程”。敏捷開發(fā)強調(diào)開發(fā)人員的溝通、可持續(xù)交付可工作的軟件,以及對軟件需求和開發(fā)問題的快速靈活響應(yīng)。2001年,以Kent Beck等為代表的敏捷開發(fā)擁護者共同簽署了“敏捷軟件開發(fā)宣言”。據(jù)VersionOne公司2013年的調(diào)查顯示,在全球收集的3501份調(diào)查報告中有88%的公司采用敏捷開發(fā)方法,Google、華為等大型軟件公司也采用了敏捷開發(fā)。
1.1敏捷開發(fā)基本原則
敏捷宣言的價值陳述中,從過程和工具、文檔、合同談判以及遵循計劃4個基本原則,體現(xiàn)出一種現(xiàn)實的開發(fā)價值觀。軟件開發(fā)的終極產(chǎn)品是軟件,軟件產(chǎn)品的度量者是客戶,實現(xiàn)產(chǎn)品的是開發(fā)者,圍繞這3部分是開發(fā)的重點。所以,敏捷開發(fā)強調(diào)開發(fā)者的自主協(xié)作,強調(diào)可運行軟件的快速迭代,強調(diào)對于軟件需求的適應(yīng)性。這要求敏捷開發(fā)團隊成員的平衡性,也即只有具有自主開發(fā)意識、編程能力對等的成員才能夠較好地踐行敏捷開發(fā)過程。雖然敏捷開發(fā)適用于需求變化的場景,但對于大型項目而言,敏捷開發(fā)的實現(xiàn)還需要更為具體、完善和有針對性的過程。根據(jù)不同的應(yīng)用場景有不同的敏捷過程,如極限編程、Serum敏捷開發(fā)等。軟件開發(fā)中應(yīng)根據(jù)項目的具體情況選擇適當(dāng)?shù)拈_發(fā)過程。
1.2Scrum敏捷開發(fā)過程
在眾多敏捷開發(fā)方法中,成長最快的方法之一就是Serum敏捷開發(fā)過程。Ken Schwaber和Jeff Sutherland于1993年正式確立Serum,這一過程已經(jīng)被Yahoo、微軟、谷歌、摩托羅拉、思科等公司使用。許多使用Serum的團隊表示,Serum極大地提升了團隊的產(chǎn)能和士氣,是一種有效的團隊工程控制方法。
1.2.1Scrum基本要素
Serum是一個迭代增量框架,采用周期方式完成產(chǎn)品開發(fā),Serum將這些周期性的工作稱為Sprint,整個Serum框架都圍繞Sprint進行。Sprint的持續(xù)時間通常是1~4周,且一個緊接一個,一旦確定Sprint的完成周期,不論工作是否完成,結(jié)束時間都是特定的,永遠不會延遲。Sprint開始之初,項目團隊從需求的優(yōu)先列表中選擇需要完成的條項(item),并在Sprint結(jié)束前完成這些需求;Sprint期間,所需要交付的結(jié)果不會改變,每個工作日,團隊成員簡要匯報彼此的進度,并根據(jù)剩余工作更新燃盡圖(bum downchart); 結(jié)束后,項目團隊演示他們所做的工作,并且反饋需要融入下次,Sprint的工作。
1.2.2 Scrum角色
Serum有3類角色:產(chǎn)品負責(zé)人(productowner)、開發(fā)團隊(the team)和流程管理員(Serum master)。產(chǎn)品負責(zé)人收集來自顧客、終端用戶、項目團隊等多方面的需求信息,以獲得最大化商業(yè)價值為原則,得出需求優(yōu)先列表,以供后續(xù)開發(fā)團隊實現(xiàn)。開發(fā)團隊是軟件的實現(xiàn)者,具有高度自組織性。開發(fā)團隊決定了最終提交產(chǎn)品的質(zhì)量。一個軟件項目中的開發(fā)團隊包括分析師、開發(fā)者、接口設(shè)計者、測試員等。流程管理員是Serum成功最重要的元素,他需要全力以赴幫助開發(fā)團隊成功完成項目。流程管理員和產(chǎn)品負責(zé)人不能是同一人。做流程管理員的人可以是以前的項目經(jīng)理,但所做的工作卻與項目經(jīng)理非常不同。流程管理員不是開發(fā)團隊的管理員,而是為開發(fā)團隊提供服務(wù)的,旨在保障開發(fā)團隊不受干擾并引導(dǎo)團隊使用好Serum,他并不分配任務(wù)也不指揮人工作,其職責(zé)核心本質(zhì)就是服務(wù)Serum項目團隊的所有成員,為Serum過程掃清障礙。
1.2.3Scrum過程
Serum過程包括3大部分:
(1)開始Serum。由產(chǎn)品負責(zé)人列舉所有產(chǎn)品需求,根據(jù)全部需求明確優(yōu)先級,形成productbacklog,開始Sprint迭代。
(2)Sprint迭代。每個Sprint之前,先進行Sprint計劃會議(Sprint planning meeting)。第一件事由產(chǎn)品負責(zé)人和開發(fā)團隊一起回顧productbacklog,彼此交換對此backlog的看法。第二件事由開發(fā)團隊從product backlog中選擇此次Sprint結(jié)束需要提交完成的需求項,通常按照優(yōu)先級順序來完成。第三件事由開發(fā)團隊估計每個成員在此次sprint中完成任務(wù)需要投入的時間。確定時間后,開發(fā)團隊將優(yōu)先級最高的需求項分解為單個任務(wù),并記錄到Sprint backlog文檔中。任務(wù)確定后,團隊成員自愿認領(lǐng)任務(wù),需要考慮任務(wù)順序,估計每個任務(wù)的時間并確保每個成員工作負載平衡,然后順序完成各項需求。Sprint迭代開始后,開發(fā)團隊還需進行每日Serum——個15分鐘以內(nèi)的站立會議,每個開發(fā)團隊中的成員都要參加。這個會議主要是開發(fā)團隊成員一個接一個匯報進展和困難,由流程管理員記錄問題并在會后解決問題。站立會議不討論,只匯報,會議結(jié)束后開發(fā)團隊成員更新完成每項任務(wù)的剩余時間,由流程管理員繪制燃盡圖來顯示到提交還剩多少工作。一個Sprint結(jié)束后有一個Sprint評審(Sprint review)。在評審時,開發(fā)團隊需展示此次Sprint完成的demo,產(chǎn)品負責(zé)人、團隊成員、流程管理員、客戶、專家、投資人都可參加評審會并提問。評審結(jié)束后,項目團隊一起進行Serum回顧(Serum retrospective),發(fā)現(xiàn)此次Sprint中做得好或不好的地方。在Sprint評審結(jié)束后,產(chǎn)品負責(zé)人要為進入下一個Sprint做準(zhǔn)備,根據(jù)上次完成的結(jié)果修改product backlog,重新確定優(yōu)先級,完成新的product backlog后,進入新Sprint過程。Sprint不斷迭代,直到產(chǎn)品負責(zé)人明確可以發(fā)布產(chǎn)品則停止迭代,進行發(fā)布。
(3)發(fā)布產(chǎn)品。
1.3Scrum敏捷開發(fā)教學(xué)應(yīng)用
上述scrum過程由于迭代周期短,迭代時間可控,學(xué)生在整個學(xué)習(xí)過程中都可不斷看到可運行的程序,減少了學(xué)習(xí)的挫敗感,非常適用于具有固定時間(通常2~4個月)的軟件實訓(xùn)教學(xué)。目前Scrum在軟件實訓(xùn)教學(xué)中已有不少應(yīng)用。文獻針對高職軟件開發(fā)課程提出了引人敏捷開發(fā)對于實訓(xùn)模式的創(chuàng)新優(yōu)勢。文獻從啟動項目、實施項目和量化考核3個方面論述了引入Serum的軟件實訓(xùn),但其提供的方案過于籠統(tǒng),操作性不強。文獻從分組、實踐和評價3個方面給出了一套Serum軟件實訓(xùn)教學(xué)方案,并進行了2個學(xué)期的教學(xué)實踐,其方案基本遵循Serum的標(biāo)準(zhǔn)過程,在評價上采用了小組互評的方式,并且以小組互評方式為主(80%),教師評價為輔(20%)。此種評價方式從學(xué)生角度獲得相對公平的評價結(jié)果,但是學(xué)生的視點不同于教師,其評價具有更大的主觀性而缺少專業(yè)性,且單次評價方式缺少教師反饋,難以較好實現(xiàn)過程驅(qū)動與控制。文獻在同濟大學(xué)軟件工程課程中進行了一學(xué)期的軟件工程實驗實踐,提供了一套較為完整且有體系的Serum敏捷應(yīng)用框架,但該應(yīng)用框架主要是對Serum基本過程的細化。筆者在美國學(xué)習(xí)期間發(fā)現(xiàn),Serum過程的成功實施,更依賴基于軟件的過程控制以及教師的評價控制,因此,如何充分利用先進信息技術(shù)以及合理評價機制,是Serum成功應(yīng)用于軟件實訓(xùn)類課程的關(guān)鍵所在。
2基于Serum的軟件實訓(xùn)設(shè)計方案
將Serum過程引入軟件實訓(xùn)類課程的核心要點是明確教學(xué)目標(biāo)。軟件實訓(xùn)類課程的教學(xué)目標(biāo)是通過教師引導(dǎo)與管理,使學(xué)生能夠運用和掌握所學(xué)習(xí)的軟件開發(fā)原理和技能。基于Serum的軟件實訓(xùn)設(shè)計方案的精髓是把教師定位為教練,利用畢博平臺、Github、百度云盤等工具來實現(xiàn)項目管理控制,方案主要包括教學(xué)內(nèi)容、組織形式和評價方式。
2.1軟件實訓(xùn)內(nèi)容
軟件實訓(xùn)以項目為主導(dǎo)。項目選擇對于實訓(xùn)有很大影響,決定項目以及開發(fā)規(guī)范是軟件實訓(xùn)的主要內(nèi)容。實訓(xùn)項目選擇原則如下:
(1)項目來源:與學(xué)生生活和學(xué)習(xí)息息相關(guān)的領(lǐng)域。相關(guān)領(lǐng)域的需求可以讓學(xué)生作為使用者體會需求的有效性,作為開發(fā)者體會完成需求的難度。
(2)項目規(guī)模:小型可擴展項目。項目應(yīng)具備幾點核心功能,學(xué)生根據(jù)自身能力在Serum過程中調(diào)整擴展。
(3)開發(fā)規(guī)范:包括文檔規(guī)范和編碼規(guī)范。雖然Serum過程不強調(diào)文檔作用,但應(yīng)對product backlog和Sprint backlog中的內(nèi)容進行編號,在表達設(shè)計理念中應(yīng)采用UML描述。編碼規(guī)范推薦采用Google的lava編碼規(guī)范。
2.2軟件實訓(xùn)組織
基于Serum的軟件實訓(xùn)教學(xué)組織包括整體過程組織和過程實踐組織。整體過程分為3部分——基礎(chǔ)學(xué)習(xí)、過程實踐和評價反饋,如圖1所示。
在軟件實訓(xùn)的教學(xué)組織中,可以借助畢博平臺、GitHub管理、百度云盤等工具實現(xiàn)過程控制。畢博平臺負責(zé)學(xué)生的整體管理。作為教練,教師通過在畢博平臺上發(fā)布學(xué)習(xí)資源、學(xué)習(xí)時間進度和學(xué)生階段評價來控制學(xué)習(xí)過程;作為學(xué)習(xí)者,學(xué)生通過Github實現(xiàn)軟件版本控制,通過Wild實現(xiàn)文檔保存與更新,通過百度云盤實現(xiàn)團隊內(nèi)部文檔共享。評價反饋來自兩個部分:畢博平臺,在關(guān)鍵時間節(jié)點上,教師根據(jù)學(xué)生的項目完成情況,給與分數(shù)評價;Github,在學(xué)生提交代碼和文檔到Github資源庫后,教師根據(jù)提交內(nèi)容進行點評。
2.3軟件實訓(xùn)評價
軟件實訓(xùn)課程通常由多個學(xué)生組成團隊完成項目開發(fā)工作,最大的難點就是如何量化每位成員的工作,無法公平地量化學(xué)生的工作量則很難驅(qū)動不自覺的學(xué)生參與項目學(xué)習(xí)過程,這將導(dǎo)致由團隊中某一人全權(quán)負責(zé)項目的情況出現(xiàn)。基于Serum的開發(fā)則不存在這樣的問題,因為Serum的會議中每位成員都需要總結(jié)自己在項目開發(fā)中所做的工作以及遇到的問題,這樣教師就可以根據(jù)學(xué)生的記錄進行控制。
項目的最終評價主要包含3部分內(nèi)容:過程、代碼和演講展示。過程評價是針對學(xué)生對于Serum實踐的完成情況;代碼是針對學(xué)生完成的軟件及其結(jié)構(gòu)的合理性;演講展示針對學(xué)生對于該次開發(fā)的認識、陳述與總結(jié)。高質(zhì)量的實訓(xùn)應(yīng)該具備4點要素:團隊精誠合作;迭代式開發(fā)不論修正軟件;軟件的代碼結(jié)構(gòu)可維護性與擴展性強;演講陳述邏輯思路清晰。一個項目由團隊完成,所以一切評價的基礎(chǔ)是團隊,團隊成果強則評價基點高。在團隊評價結(jié)果之上,再根據(jù)組員對項目的貢獻度來進行區(qū)別式評價。組員的貢獻度體現(xiàn)在3個方面:Serum總結(jié);組員自身貢獻評價;Github代碼貢獻度計量。在Github中,對于每位組員所提交的代碼都有量化,但由于代碼的難度不一,所以此部分的評價比重應(yīng)更為弱化。基于相信原則,可由組員自身給出貢獻度評價,再由Serum總結(jié)給出最終評價。
3教學(xué)實踐分析
為了驗證該教學(xué)理念和設(shè)計的有效性,在廣東財經(jīng)大學(xué)三年級軟件工程專業(yè)的軟件工程課程設(shè)計中進行教學(xué)實踐試點。具體教學(xué)方案見表1。
之所以選擇開發(fā)App項目是因為其快速的特點,App開發(fā)周期短,同時其開發(fā)已經(jīng)具備較好的結(jié)構(gòu)。選擇兒童游戲App和公益項目App是因為這兩類App的需求都是由學(xué)生自身決定和修正的,貼近他們的生活,學(xué)生更容易體會開發(fā)出的軟件的可用性。之所以將項目規(guī)模確定為4~6個功能,是因為開發(fā)周期為8周,除去頭尾的講解與考核,只有6周可用于迭代,則每兩周完成一次Sprint迭代,對于學(xué)生而言,4~6個功能是6周的迭代可以控制的。本次實踐試點通過畢博平臺提供完整規(guī)范的文檔模板,學(xué)生直接填寫模板即可記錄整個開發(fā)過程。
一個學(xué)期的基于Scrum的軟件實訓(xùn)實踐后,學(xué)生反饋學(xué)會了使用有效工具來輔助管理,而且迭代式的開發(fā)降低了開發(fā)的難度,減少了實踐挫敗感,當(dāng)需求不明確時,完成少量的工作增加了后續(xù)開發(fā)的信心。最為重要的是,學(xué)生能發(fā)現(xiàn)所做的需求和設(shè)計工作能否和后續(xù)的代碼聯(lián)系起來。但是,實踐中也存在一些問題,主要體現(xiàn)在兩點:工具使用(尤其是Github的使用),學(xué)生還不能很好地利用版本控制工具提高合作效率;軟件結(jié)構(gòu)性問題,由于采用的是迭代增量開發(fā),學(xué)生暫時不具備良好的設(shè)計能力,往往在初期以完成為導(dǎo)向,在后階段的Sprint過程中發(fā)現(xiàn)軟件結(jié)構(gòu)的缺陷時難以及時修正,導(dǎo)致最終的軟件結(jié)構(gòu)可能存在不合理性。對于這兩點問題,最佳的解決方案是由教師介入,指導(dǎo)學(xué)生使用工具并提供合理的設(shè)計結(jié)構(gòu)。
4結(jié)語
基于Serum的軟件實訓(xùn)教學(xué)方案在大三學(xué)生中進行實踐應(yīng)用后顯示,引入敏捷過程的軟件實訓(xùn)課程可以使學(xué)生收獲更多有關(guān)軟件開發(fā)的應(yīng)用體會,且可視的軟件成果也為學(xué)生進行開發(fā)增強了信心。但是,此方案有正向反饋的同時,也存在一定的不足。目前,該教學(xué)方案的瓶頸是如何在有限時間內(nèi)將軟件工程的基本理論與技術(shù)充分引入,這也是下一步工作需要考慮的問題。