齊山松
(中國航工業(yè)西安航空計算技術(shù)研究所第8研究室,陜西西安 710068)
敏捷方法是軟件工程的重大革新,即由傳統(tǒng)結(jié)構(gòu)化編程向新型結(jié)構(gòu)化編程技術(shù)的轉(zhuǎn)變。
隨著企業(yè)競爭的日益激烈,客戶對于軟件產(chǎn)品的要求和期望日益提升,現(xiàn)實(shí)條件下應(yīng)用的復(fù)雜性日益提高,帶來了軟件需求的頻繁變動,使得當(dāng)下的軟件項(xiàng)目面臨著嚴(yán)峻的挑戰(zhàn)。采用傳統(tǒng)的軟件開發(fā)流程往往使得測試人員面臨時間短、任務(wù)重、質(zhì)量難保證的尷尬處境,這也正是近年來敏捷開發(fā)過程逐漸興起和不斷發(fā)展的主要原因。
敏捷軟件開發(fā)是基于一種更接近人類活動現(xiàn)實(shí)情況的方法論,主要提倡隨時都能提供可以交付的軟件,并注重權(quán)利的下發(fā),充分發(fā)揮團(tuán)隊中人的主觀能動性。敏捷開發(fā)模型與傳統(tǒng)的瀑布模型相比更容易在項(xiàng)目的早期控制缺陷數(shù)目。在傳統(tǒng)的瀑布模型下,某個控制點(diǎn)前系統(tǒng)測試不能開始測試。所以在這之前不能發(fā)現(xiàn)缺陷,過了這個控制點(diǎn)后,突然增加巨大的測試對象以及缺陷數(shù)目急劇上升,將導(dǎo)致所有的質(zhì)量風(fēng)險在這一刻觸發(fā),缺陷收斂時間難以確定,這成為了進(jìn)度偏差的一個主要誘因。
圖1 瀑布軟件開發(fā)模型
在迭代模式下測試對象平緩持續(xù)增加,測試始終對可用系統(tǒng)進(jìn)行測試,質(zhì)量水平是真實(shí)可衡量可控的,質(zhì)量風(fēng)險不會累計到最后階段,同時發(fā)現(xiàn)問題的成本也較低,如圖2所示。
圖2 兩種模型的缺陷數(shù)目統(tǒng)計曲線
軟件開發(fā)是一種對人類智慧的管理,對人大腦思維的“工廠化”管理。軟件開發(fā)不僅是代碼編寫,而是人員的有效組織。如何既發(fā)揮人的主觀能動性,避免不利因素對工作的干擾,又可以使大家有效地溝通與交流,讓多個大腦的思路統(tǒng)一,快速完成目標(biāo),多年來軟件企業(yè)的管理者一直在不斷地探索。此外軟件是工具,開發(fā)的是客戶業(yè)務(wù)的應(yīng)用,但客戶不了解軟件,開發(fā)者不了解業(yè)務(wù),如何有效溝通是軟件質(zhì)量的重大障礙。而近年來興起的敏捷開發(fā)卻矯正了繁瑣的軟件開發(fā)過程。敏捷的目的在于加強(qiáng)開發(fā)者與用戶的溝通,保證變化的需求及時得到修正[1]。
與傳統(tǒng)軟件過程、傳統(tǒng)管理和開發(fā)方法相比,敏捷方法具有以人為本、輕載而靈活、成本低、開銷小、效率高、見效快等優(yōu)點(diǎn),尤其適合中小軟件研發(fā)企業(yè)或組織的軟件過程改進(jìn)和軟件需求比較發(fā)散及頻繁變動,且復(fù)雜性較高時間要求緊的項(xiàng)目。敏捷方法彌補(bǔ)了CMM/CMMI、ISO 9001等體系的不足,在過去10年中看到CMMI專家一直在研究敏捷,學(xué)習(xí)和吸收敏捷的長處,出現(xiàn)了CMMI主動擁抱敏捷、與敏捷集成或融合的顯著趨勢。既然CMMI要擁抱敏捷,就說明敏捷有CMMI所缺少的東西,如此龐大的 CMMI體系仍然是不全面的。敏捷能力是所有優(yōu)秀企業(yè)/組織、優(yōu)秀團(tuán)隊和優(yōu)秀個人都具有的一種基本特質(zhì)。因此,敏捷軟件工程、敏捷過程和方法,也率先被世界上優(yōu)秀的一批軟件研發(fā)領(lǐng)導(dǎo)企業(yè)、組織、團(tuán)隊所采用,目前業(yè)界熟知的有微軟、IBM、諾西、愛立信、華為等。
敏捷開發(fā)過程擺脫了一切對軟件開發(fā)不合理的約束,采用一種以人為本的方式,注重人在具體實(shí)踐當(dāng)中的活動,以便滿足逐漸變化的需求。敏捷強(qiáng)調(diào)構(gòu)建能夠隨時交付的軟件,開發(fā)過程類似植物的自然生長,通過迭代開發(fā)實(shí)現(xiàn)軟件功能的不斷完善,并且結(jié)合了盡可能多的客戶反饋。相對于傳統(tǒng)的軟件開發(fā)模式來講,敏捷開發(fā)過程具有更大的優(yōu)勢,主要體現(xiàn)在更能適應(yīng)不斷變化的客戶需求,團(tuán)隊中的成員更有激情,以及能夠創(chuàng)造出更大的價值。
Kent Beck等編寫的《敏捷軟件開發(fā)宣言》中,陳述了構(gòu)成所有敏捷方法學(xué)的4個核心價值觀,如圖3所示。
圖3 敏捷軟件宣言
敏捷軟件開發(fā)在最近幾年逐步得到認(rèn)可并運(yùn)用的一個原因是,該運(yùn)動的發(fā)起者在《敏捷軟件開發(fā)宣言》中明確表明了所信仰的東西,說出了敏捷的核心價值觀和持久的目的。團(tuán)隊為何存在,我們要創(chuàng)造什么產(chǎn)品,為誰而創(chuàng)造以及如何共同工作,這些組成了敏捷項(xiàng)目管理的核心原則。如果要創(chuàng)造優(yōu)秀的產(chǎn)品,就需要有優(yōu)秀的人,這就需要有優(yōu)秀的組織,這樣才能吸引和留住這樣優(yōu)秀的人。當(dāng)然,這個唯一的核心價值觀并不能創(chuàng)造產(chǎn)品,但核心價值觀定義了大多數(shù)敏捷主義對自己的認(rèn)識[2]。
敏捷項(xiàng)目管理應(yīng)用框架是解決復(fù)雜性、不確定性和高風(fēng)險性項(xiàng)目的一系列理念、過程和實(shí)踐的集合。它是對傳統(tǒng)項(xiàng)目管理的批判繼承。它源自軟件開發(fā)領(lǐng)域的敏捷開發(fā)運(yùn)動;隨著產(chǎn)品特別是電子產(chǎn)品開發(fā)中軟件的價值比例越來越高,敏捷的理念和實(shí)踐在產(chǎn)品開發(fā)的項(xiàng)目管理也逐漸發(fā)展起來。Scrum是眾多敏捷軟件開發(fā)的框架之一,而且也是被應(yīng)用最廣泛的一種[3]。
Scrum是一種靈活的軟件管理過程,它可以幫助駕馭迭代、遞增的軟件開發(fā)過程。這個輕量的過程可以作為包裝器,也就是說可以把Scrum與其他靈活的過程框架組合起來,比如說RUP。RUP(Rational Unified Process,Rational統(tǒng)一過程),是一種被廣泛使用的軟件過程框架。它可以很好地迎合軟件開發(fā)過程的需要,還可以容納其他技術(shù)。Scrum是一系列有趣的,用來包裝靈活軟件項(xiàng)目的項(xiàng)目管理模式。
Scrum提供了一種經(jīng)驗(yàn)方法,它使得團(tuán)隊成員能夠獨(dú)立地、集中地在創(chuàng)造性的環(huán)境下工作。它發(fā)現(xiàn)了軟件工程的社會意義。這一過程是迅速,有適應(yīng)性,自組織的,它代表了從順序開發(fā)過程以來的重大變化。Scrum認(rèn)為軟件的開發(fā)不應(yīng)使用和一般制造業(yè)相同的方法,也就是不應(yīng)采用一種反復(fù)的模式。這種重復(fù)使得輸入和輸出參數(shù)更加容易預(yù)測和描述,但這并不是當(dāng)今軟件工程的有益目標(biāo)?,F(xiàn)代軟件工程的主要挑戰(zhàn)包括上市時間,投資回報,以及影響顧客的需要等。RUP和其他敏捷軟件工程過程能夠迎接這些挑戰(zhàn)。
Scrum的骨干與核心如圖4所示。下放循環(huán)代表開發(fā)活動的迭代,這種循環(huán)相繼開發(fā)。每次迭代的產(chǎn)出成果便成為產(chǎn)品的增量。上方循環(huán)代替迭代過程中的每日檢查,團(tuán)隊成員舉行會議相互檢查選出其認(rèn)為在該迭代結(jié)束時能轉(zhuǎn)化為相應(yīng)完整功能增量的部分。迭代其余時間內(nèi),團(tuán)隊不受干擾,努力工作。迭代結(jié)束時,團(tuán)隊展示完成的功能,請利益相關(guān)者進(jìn)行檢查,以對項(xiàng)目作出及時調(diào)整。
圖4 Scrum開發(fā)的框架
Scrum方法中只有3個角色:產(chǎn)品負(fù)責(zé)人,團(tuán)隊和Scrum Master。產(chǎn)品負(fù)責(zé)人代表項(xiàng)目中每位利益相關(guān)者的權(quán)益,并為項(xiàng)目產(chǎn)品的軟件系統(tǒng)負(fù)責(zé)。產(chǎn)品負(fù)責(zé)人的職責(zé)是利用產(chǎn)品訂單,督促團(tuán)隊優(yōu)先開發(fā)最具價值的功能。團(tuán)隊的職責(zé)是開發(fā)軟件功能,其是自我管理、自我組織和跨職能的,他們負(fù)責(zé)找出可以在一個迭代中將產(chǎn)品待開發(fā)事項(xiàng)轉(zhuǎn)化為功能增量的方法,并管理自身工作,達(dá)到這一目標(biāo)。通常團(tuán)隊由5~9個人組成。Scrum Master則需對Scrum過程負(fù)責(zé),向所有項(xiàng)目參與者講授Scrum方法,負(fù)責(zé)實(shí)施Scrum,確保它既符合企業(yè)文化,又能交付預(yù)期利益,還需要督促全體成員遵從Scrum規(guī)則和實(shí)踐。
Scrum的流程,可以分為以下部分:(1)將整個產(chǎn)品訂單Backlog分解成為若干個迭代訂單Sprint Backlog,按照目前的人力物力條件可以完成的。(2)召開Sprint計劃會議,劃分,確定這個Sprint內(nèi)需要完成的任務(wù),標(biāo)注任務(wù)的優(yōu)先級并分配給每個成員。注意這個任務(wù)是以小時計算的,并不是以人天計算,長度不超過8小時。(3)進(jìn)入Sprint開發(fā)周期,每個Sprint迭代周期為2到4周,團(tuán)隊可根據(jù)項(xiàng)目特點(diǎn)來選擇。在這個周期內(nèi),每天需要召開每日Scrum簡會,時間為15分鐘。在會議中每個團(tuán)隊成員僅就以下3點(diǎn)發(fā)言:自上次Scrum會議后做了什么?從現(xiàn)在到下次Scrum會議的時間里你準(zhǔn)備做什么?你在工作中遇到了哪些困難?(4)整個Sprint周期結(jié)束,召開Sprint評審會議,將結(jié)果演示給產(chǎn)品負(fù)責(zé)人Product Owner,收集與會者的反饋進(jìn)而可以在下一個Sprint中進(jìn)行改進(jìn)。(5)團(tuán)隊成員最后召開Sprint回顧會議,總結(jié)經(jīng)驗(yàn)和發(fā)現(xiàn)問題。(6)這樣周而復(fù)始,按照同樣的步驟進(jìn)行下一次Sprint。
(《四月朔日,牛農(nóng)、曹(坤)邀予游崇效寺。 牡丹己過,芍藥未開。 向惠林上人索觀拙庵紅杏青松卷,題者甚火。 王漁洋、朱竹垞、查初白皆有手跡。 此卷康熙庚午歲作,百二十年物矣,亦可寶也?!?
Sprint計劃會議,每日簡會,評審會議,回顧會議共同構(gòu)成Scrum方法中的經(jīng)驗(yàn)性檢查及適應(yīng)調(diào)整部分。Scrum并非只關(guān)注商業(yè)價值增量,它更注重交付客戶提出的最重要最優(yōu)先的商業(yè)價值。
通常實(shí)施敏捷軟件框架Scrum,會用到APAPT模型。在這個模型中包含5個常見活動,這是成功,持續(xù)實(shí)施Scrum必備的5個活動。
這些活動是,意識,愿望,能力,推廣以及傳遞,使用其英文字母縮寫為ADAPT[4]。這些活動中意識,愿望和能力是相互重疊的,而推廣和傳遞在整個轉(zhuǎn)型過程中會重復(fù)出現(xiàn)。在開始轉(zhuǎn)型之后,這個循環(huán)還會隨著持續(xù)改進(jìn)而持續(xù)下去。
3.2.1 意識(Awareness)
當(dāng)前的過程已不能實(shí)現(xiàn)可接受的結(jié)果。變革始于不滿足于現(xiàn)狀的意識。盡管如此,意識到過去的工作方式不再有效是困難的。需要變革的時間點(diǎn)和第一次意識到需要變革之間,幾乎是有一個滯后區(qū)。如果公司經(jīng)營得良好,這個滯后可能會延長。其他一些個人形成變革意識可能很慢,其原因如下:(1)缺乏對大局觀的關(guān)注。(2)拒絕關(guān)注對與錯。(3)行動與進(jìn)展混為一談。(4)自吹自擂。
團(tuán)隊成員會在不同的時間意識到變革的需要。很早就有變革意識的人有機(jī)會協(xié)助和帶動其他人形成共識??梢酝ㄟ^一些工具來開發(fā)需要變革的意識:(1)通過溝通,說明問題的存在。(2)使用度量數(shù)據(jù):作為整體溝通策略的一部分,度量數(shù)據(jù)為變革個核心原因提供了巨大的支持??吹揭恍┕臼褂脝T工離職率,工作滿意度調(diào)查結(jié)果,人均收益率和其他簡單的度量數(shù)據(jù)來證明變革勢在必行。(3)接觸新的人與經(jīng)驗(yàn):鼓勵員工參見一些技術(shù)大會或培訓(xùn),讓他們了解一些新的技術(shù)和實(shí)踐。要么送員工參見一個所在行業(yè)的行業(yè)展會,讓他們看到競爭對手在發(fā)布什么產(chǎn)品。要么安排客戶和團(tuán)隊召開會議,讓他們聽到第一手的功能需求以及對時間的要求。(4)運(yùn)行一個試點(diǎn)項(xiàng)目,成功的試點(diǎn)項(xiàng)目證明事情能做的更好。(5)關(guān)注最重要的變革理由:要想促使人們樹立變革的意識,往往最好使用一個更短的清單。哪兩個或3個原因是大多數(shù)問題的根源?僅這些原因便足以證明實(shí)施Scrum是正確的。通過把一個完整的列表縮小為只包括關(guān)鍵原因的列表,是能使被關(guān)注且具有說服力的原因。
3.2.2 渴望(Desire)
3.2.3 能力(Ability)
有能力成功實(shí)施Scrum,如果沒有敏捷轉(zhuǎn)型的能力,再好的意識和愿望也都是徒勞。Scrum的成功實(shí)施不僅需要團(tuán)隊成員學(xué)習(xí)新的技能,還需要放棄一些舊的技能。并且需要學(xué)會用團(tuán)隊的方式思考和工作,以及在一個短的時機(jī)箱內(nèi)造出可以工作的軟件。有很多很好的方法可以幫助培養(yǎng)團(tuán)隊這方面的能力:(1)參加輔導(dǎo)和培訓(xùn):Scrum與傳統(tǒng)軟件開發(fā)的區(qū)別在于,通常必須有培訓(xùn)以及現(xiàn)場的教練或指導(dǎo)。最開始的一些培訓(xùn)對大多數(shù)公司來說貌似最有效,定位于激發(fā)嘗試Scrum的意愿和理解它的核心原則。這是一般的培訓(xùn),隨之而來的就是具體的實(shí)踐培訓(xùn)與指導(dǎo)。(2)賦予個體職責(zé):在提供輔導(dǎo)和培訓(xùn)的同時,員工需要知道他們有責(zé)任應(yīng)用企業(yè)花錢使其獲得的新技能。(3)共享信息:在開發(fā)敏捷能力的時候,團(tuán)隊成員的周圍將充斥著新的信息和挑戰(zhàn)。為他們提供分享信息和問題的機(jī)會。一種方法是使用團(tuán)隊間“相互取經(jīng)”:鼓勵團(tuán)隊成員偶爾參加其他團(tuán)隊的每日站會或Sprint評審會議。另一種選擇是使用公司內(nèi)網(wǎng),實(shí)踐社區(qū)和閱讀小組來傳播信息。(4)設(shè)置合理的目標(biāo):提出目標(biāo),成功的轉(zhuǎn)型,需要拆成更小的塊。同樣,組織必須平衡推動快速改進(jìn)和推動太多太快帶來的風(fēng)險。通過鼓勵團(tuán)隊選擇實(shí)際可行的目標(biāo),有助于消除他們在做任何重大承諾前可能出現(xiàn)的猶豫。(5)立即行動:不要拖延,不要等到知道所有的答案后再開始。開發(fā)新技能的最好方式是立即行動。
3.2.4 推廣(Promotion)
通過分享經(jīng)驗(yàn)來推廣Scrum,從而記住并能讓其他人也看到成功。推廣有3個目標(biāo)。第一,為接下來的ADAPT周期傳遞打好基礎(chǔ)。通過宣傳現(xiàn)在的成功,會對創(chuàng)造新一輪的改善意識有一個跳躍性的開始。第二,通過傳播其他團(tuán)隊獲得成功的一些好消息,加強(qiáng)現(xiàn)有團(tuán)隊的敏捷行為。最后是第3個目標(biāo),在直接參與Scrum實(shí)施的群體之外創(chuàng)造敏捷意識和興趣。許多這樣的群體如人力資源,銷售,市場營銷,運(yùn)維和設(shè)備,可以對成功轉(zhuǎn)型產(chǎn)生重要的影響。講述成功故事發(fā)揮著關(guān)鍵作用,特別重要的是在企業(yè)內(nèi)廣泛宣傳Scrum早期實(shí)施者的成功故事。麥肯錫公司的一項(xiàng)研究發(fā)現(xiàn),成功地變革在于鼓勵員工立足于成功,而不是讓他們?nèi)ソ鉀Q問題(2008年)。推廣活動有助于轉(zhuǎn)引員工的注意力,讓他們遠(yuǎn)離意識階段不能解決的問題,而去關(guān)注能夠取得成功。講述成功故事一個好辦法是使用內(nèi)部已經(jīng)實(shí)施Scrum的團(tuán)隊經(jīng)驗(yàn)報告的方式。身邊人的實(shí)踐最有說服力。
3.2.5 傳遞(Transfer)
把實(shí)施Scrum帶來的影響擴(kuò)大到整個公司。可以把Scrum比作火箭。火箭向前推進(jìn)依靠的是它的發(fā)動機(jī)功率。但將其拉回來的是重力。如果火箭被推得足夠遠(yuǎn),它可以進(jìn)入軌道。但如果它不能進(jìn)入軌道,必定會被拉到地面,回到起點(diǎn)。Scrum的影響必須推得足夠遠(yuǎn),使整個轉(zhuǎn)型不會因?yàn)椤捌髽I(yè)重力”而被拉回起點(diǎn)。開發(fā)團(tuán)隊只靠自己是不能永久保持敏捷的。如果Scrum效應(yīng)無法傳遞到其他部門,這些部門的“組織慣性”最終會使轉(zhuǎn)型所做的所有努力化為灰燼。
綜上所述,本文針對傳統(tǒng)軟件開發(fā)流程所面臨的挑戰(zhàn),論述了敏捷軟件開發(fā)的的現(xiàn)實(shí)意義。敏捷開發(fā)過程擺脫了一切對軟件開發(fā)不合理的約束,采用一種以人為本的方式,注重人在具體實(shí)踐當(dāng)中的活動,以便滿足逐漸變化的需求。與此同時,還探討了敏捷軟件開發(fā)的框架Scrum以及如何在企業(yè)或者公司里運(yùn)用Scrum。由此可見,相對于傳統(tǒng)的軟件開發(fā)模式來講,敏捷開發(fā)過程具有更大的優(yōu)勢,主要體現(xiàn)在更能適應(yīng)不斷變化的客戶需求,團(tuán)隊中的成員更有激情,以及能夠創(chuàng)造出更大的價值。
[1]CRAIG L.敏捷迭代開發(fā)管理者指南[M].張曉坤,林旺,曾毅,譯.北京:中國電力出版社,2004.
[2]吳丹,史爭印.軟件工程理論與實(shí)踐[M].北京:清華出版社,2003.
[3]ALISTAIR C.敏捷軟件開發(fā)[M].蘇敬凱,譯.北京:機(jī)械工業(yè)出版社,2008.
[4]MIKE C.Succeeding with agile software development using scrum[M].廖靖斌,呂梁岳,陳爭云,等,譯.北京:清華大學(xué)出版社,2010.