摘要:敏捷開發(fā)是一種以人為核心、迭代、循序漸進的開發(fā)方法,是為了解決項目的復雜性,以最快最科學的方式實現(xiàn)需求的開發(fā)方式。軟件團隊中最常見的一種方式就是小規(guī)模團隊開發(fā),一般保持在3到5人。在大量的中小規(guī)模公司中,只要公司生產(chǎn)的產(chǎn)品需要軟件支撐,都組建規(guī)模較小的團隊進行專門的軟件開發(fā)。本文通過對敏捷開發(fā)的介紹和對小規(guī)模團隊敏捷開發(fā)的應用,介紹如何在開發(fā)人數(shù)不多的情況下進行高效率、有序的和科學的開發(fā)工作,有效地提高團隊的生產(chǎn)力和價值。
關(guān)鍵詞:敏捷開發(fā);軟件工程;模塊化;持續(xù)集成;最大化生產(chǎn)力
1 概述
敏捷開發(fā)不是一個時興的概念。2001年2月,一組由17位在DSDM、XP、Scrum、FSD等領(lǐng)域的專家組成的代表團齊聚美國猶他州,尋找敏捷、高效開發(fā)方法的共同點。最終,這些專家制定并宣布了敏捷開發(fā)宣言,并成立了敏捷聯(lián)盟。十年間,敏捷開發(fā)思想得到了全面的發(fā)展。在軟件工業(yè)界,敏捷開發(fā)已經(jīng)成為眾多高效開發(fā)團隊的制勝法寶。中國的外企、外包公司和許多知名企業(yè)也都開始采用了敏捷方法。例如,騰訊內(nèi)部幾乎所有的開發(fā)團隊都在實施敏捷方法。敏捷方法給這些企業(yè)帶來了巨大收益。據(jù)業(yè)內(nèi)資深人士和長期從事敏捷咨詢的服務公司透露,采用敏捷開發(fā)的團隊一般會提高3-10倍的效率,軟件的質(zhì)量也有了更加可靠的保證。同時,敏捷開發(fā)的應用也給團隊內(nèi)的每個成員提供了良好的發(fā)展機會。他們的技術(shù)和合作水平都能得到相應的提高。
2. 敏捷開發(fā)思想
2.1 概念
敏捷開發(fā)是一種以人為核心、迭代、循序漸進的開發(fā)方法。是為了解決項目的復雜性,以最快最科學的方式實現(xiàn)需求的開發(fā)方式。
在敏捷開發(fā)中,軟件項目的構(gòu)建被切分成多個子項目和各個子階段,各個子項目和各個子階段的成果都經(jīng)過測試,具備集成和可運行的特征,而各個子階段是串接在一起的,在上一個子階段完成和測試審查后才進行下一個子階段。換言之,就是把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目和子階段,并分別完成,在此過程中軟件一直處于可使用和可演示狀態(tài)。
從上圖可以看出,敏捷開發(fā)具有以下幾點優(yōu)勢:敏捷開發(fā)過程比傳統(tǒng)開發(fā)要為項目和產(chǎn)品帶來更低的風險(RISK);敏捷開發(fā)擁著比傳統(tǒng)開發(fā)更大的透明度(VISIBILITY);敏捷開發(fā)模式使產(chǎn)品和團隊自身都有很強的適應力(ADAPTABILITY)和生命力。
2.2 以人為核心
敏捷開發(fā)的關(guān)鍵思想是以人為核心,認為人是軟件開發(fā)過程中最為關(guān)鍵的因素,整個軟件開發(fā)過程能不能實現(xiàn)敏捷化,能不能最終取得完全的成功,主要是看在人這個因素上能不能處理得當。
敏捷開發(fā)中所指的“人”實際上是指兩個方面。一是開發(fā)設(shè)計者,即在軟件整個項目中的程序分析、構(gòu)建、設(shè)計和測試等等相關(guān)人員。他們是項目開發(fā)的最終實現(xiàn)者,對軟件的質(zhì)量、進度等起到?jīng)Q定性作用。二是客戶。這里的客戶不但是指軟件最終用戶,也可以指上級領(lǐng)導和大項目經(jīng)理等這些本單位上層領(lǐng)導。敏捷開發(fā)的思想,就是以本設(shè)計團體為中心,和外界各類人員進行配合的過程。
2.3 開發(fā)人員的素質(zhì)
作為項目的直接實現(xiàn)者,敏捷開發(fā)對開發(fā)人員指出明確的要求或價值觀,典型的具有這么幾個方面:溝通、簡單、勇氣、謙遜。分別介紹如下:
A. 溝通
敏捷開發(fā)認為,溝通是開發(fā)人員最重要的一項任務,只有不斷的溝通才能提高開發(fā)人員之間的默契,避免誤解和犯錯的可能性,提高代碼的準確率,并在一定程度上甚至是很大的程度上提高了軟件的開發(fā)效率。
溝通需要融洽的氛圍。在團隊內(nèi)部要創(chuàng)造良好的人與人之間的關(guān)系,只有這樣才能以最大的可能性提高溝通的質(zhì)量和效率。
B. 簡單
敏捷開發(fā)建議,可以用圖或模型的這些簡單的方式,甚至是一些簡單的工具,來描述程序的結(jié)構(gòu)和思想,這種方法可以清晰地表達開發(fā)設(shè)計人員的想法,能以一種統(tǒng)一的方式在開發(fā)人員之間進行溝通,還能更容易地發(fā)現(xiàn)新的想法和改進。
C. 勇氣
在敏捷開發(fā)中,設(shè)計者尤其是高層人員開發(fā)人員,比如分析師和構(gòu)建師,如果發(fā)現(xiàn)當初的決策證明是不合適的時候,就需要在短時間內(nèi)放棄或重構(gòu)(refactor)工作,修正方向,實施正確的調(diào)整,以最小的代價修正錯誤。這種情況下,這類人員的勇氣是非常重要的,能以最大的可能性減少項目的損失。
D. 謙遜
敏捷開發(fā)要求開發(fā)團體中的每一位成員,都要擁有謙遜的美德,能聽取意見,并能認識到自己的不足。事實上,無論是開發(fā)人員還是客戶,項目小組的所有成員都要有他們自己的專業(yè)領(lǐng)域,都能夠為項目做出貢獻。一個有效的做法是假設(shè)參與項目的每一個人都要有相同的價值,都應該被尊重。這是營造高效率團體,促成項目成功的重要條件之一。
2.4 客戶交流
2.4.1 有效的溝通和參與
在敏捷開發(fā)思想中,與客戶的溝通是非常重要的。敏捷開發(fā)認為,必須始終保證開發(fā)過程中的方向的準確性,才能使開發(fā)具有實際價值,并最終取得成功。為了達到這個目標,就需要圍繞客戶開展工作,積極地與客戶進行深入溝通,保證需求目標的準確性。
敏捷開發(fā)的一個建議,就是讓客戶參與到開發(fā)過程來,客戶的身份是觀察員和顧問,對開發(fā)過程中可能出現(xiàn)的偏差,能及時得到更正,并且開發(fā)人員能在第一時間直接與客戶進行協(xié)商,解決問題,以最大可能提高開發(fā)的效率和準確度。
2.4.2 積極的反饋
對敏捷開發(fā)來說,反饋是非常重要的事情,通過積極的、連續(xù)的回饋,可以對客戶,和單位的上層領(lǐng)導增強信心,不但能展示軟件開發(fā)的進度,讓客戶和上層領(lǐng)導對軟件開發(fā)做到心中有數(shù),而且還能及時發(fā)現(xiàn)開發(fā)過程可能出現(xiàn)的錯誤,并及時得到修正。因此,通過積極反饋這種方式,保證了項目健康的進行,和始終保持準確的進行方向。
敏捷開發(fā)的建議是,通過圖片或?qū)嶋H軟件演示的方式來展示當前項目的進展程度,采用這種直觀的方式可以使客戶和領(lǐng)導清楚了解項目的進展程度,而且也是對軟件開發(fā)的階段性簡單小結(jié),具有積極意義。
2.5 項目管理
正如對客戶的積極反饋一樣,項目也要積極進行小結(jié)。這兩者的區(qū)別在于:反饋是按時間單位定期進行的,項目管理的小結(jié)是按項目的計劃安排進行的;反饋針對是客戶和領(lǐng)導相關(guān)人員,而項目的小結(jié)是開發(fā)團體內(nèi)部的事務。
項目在規(guī)劃的時候,要劃分為若干的子階段和子項目,每個子階段和子項目完成,都要進行測試、審查和歸檔,以保證項目每一個階段和每一部分都達到目標。在此前提下,才能保證后續(xù)階段和后續(xù)的其它部分的開發(fā)的正確性,從而避免了在軟件開發(fā)后期才發(fā)現(xiàn)前期問題的重大事故。
2.6 開發(fā)策略
2.6.1 簡單策略
軟件開發(fā)的目標主要是解決當前要求的需求。因此,最簡單的解決方案就是最好的解決方案,不要實現(xiàn)額外的功能,盡量減少對未來的擴展的考慮,以最簡單的方式構(gòu)建出軟件。如果日后需求有變更時,再來考慮和重構(gòu)這個系統(tǒng)。
簡單的策略也指對工作的精簡。項目在設(shè)計過程中必然需要進行建模和編寫文檔等這些步驟,如果不是非常必須,可以簡化建模和編寫文檔的流程,有的甚至可以取消,以減少在意義不大的事情上注入過多的精力。
2.6.2 積極接受變化
客戶非常有可能在一開始并不能清楚地表達出自己的需求,在項目進行中甚至可能更改自己的需求。另外,團隊在開發(fā)過程中,很可能也會有變化,比如人事的調(diào)整、領(lǐng)導的策略的變化等等。因此,隨著項目的進行,項目環(huán)境也會在不停的變化,在開發(fā)方法中必須要能夠反映和應對這種現(xiàn)實。具體的方式就是積極的反饋進度,總結(jié)軟件開發(fā)階段,對可能的調(diào)整盡早開始。只有這樣,才能實現(xiàn)高效的應變性。
2.6.3 高質(zhì)量的工作
好的軟件成果一定是基于高效率、專心的工作,如果工作效率低下,不但會影響工作進度,而且軟件中可能會出現(xiàn)大量的Bug,為軟件后期帶來更多的甚至成倍的工作量。發(fā)生這種情況,不如停止工作進行調(diào)整。
3 小規(guī)模團隊的敏捷開發(fā)
3.1 簡介
在軟件開發(fā)團隊中,以3至5人的小規(guī)模團體開發(fā)居多。一般常見于非軟件公司,因為軟件只是這些公司的附帶產(chǎn)品或支持產(chǎn)品,所以不需要進行大規(guī)模的開發(fā),只需要小規(guī)模團隊就能完成所有的軟件開發(fā)任務。
小規(guī)模的團隊的敏捷開發(fā)方式,基本上是和典型的敏捷開發(fā)思想一致的。但由于規(guī)模效小,因此也具有一些鮮明的特點,在能動性上和效率上能保持更佳的水平。
3.2 特點
3.2.1 人員精簡
一支全面的敏捷項目開發(fā)的團隊,至少需要擁有具備不同職能的 7 名成員:1名UCD(User Centered Designer),1名Visual Designer,1名測試人員(Tester),1名Information Developer和3名開發(fā)人員(Developer)。而對于小規(guī)模的團隊來說,人員數(shù)量一般是不足的,只有3到5 人,在這種情況下,一個人可能需要承擔多個不同的職能任務。
3.2.2 個人素質(zhì)高
由于團隊的規(guī)模較小,所以對個人能力就會要求高。一方面,一個人往往要承擔多個方面的開發(fā)和相關(guān)工作,要求開發(fā)人員具有它所承擔的這些方面的專業(yè)知識和一定的經(jīng)驗,以使開發(fā)人員能夠勝任工作的需要。另一方面,為了應對的人員的暫時調(diào)整,開發(fā)人員需要承擔的任務也會發(fā)生變化,因此也需要開發(fā)人員具有他所面對的新方向的技術(shù)技能。總之,小規(guī)模團體中,個人素質(zhì)的要求是比較高的,能夠勝任多方面的工作任務。
3.2.2 加強協(xié)作溝通能力
協(xié)作和溝通對小規(guī)模的團隊開發(fā)顯得異常重要。因為小規(guī)模的團隊中的人員較少,有效的協(xié)作和溝通,將成倍提高的開發(fā)的速度和效率,從而在一定程度上彌補人員較少所帶來的不足。如果能達到一定的默契和精干,開發(fā)的速度甚至可能超過中等規(guī)模的團隊。由此可見,對于小規(guī)模團隊,良好的協(xié)作和溝通是實現(xiàn)敏捷開發(fā)的關(guān)鍵之一。
3.2.3 決策由團隊做出
由于團隊人員較少,每個人都具有舉足輕重的地位。因此,大部分決策都可以由團隊里的全部人員共同討論商量而定。這樣不但可以在一定程度上保證決策的正確性,還能同步設(shè)計人員的設(shè)計思想,使所有人步調(diào)一致,方向一致,從而提高開發(fā)的效率。
3.2.4 容易激發(fā)創(chuàng)新意識
小規(guī)模團隊中的每位開發(fā)人員都負責著多個方面的開發(fā)任務。在這種情況下,每一位開發(fā)人員對他們所負責的部分的開發(fā)效率和質(zhì)量都起到了決定性作用,并賦予了更多的自由度和靈活性,更容易發(fā)揮創(chuàng)新意識。
4 項目實例分析
4.1 項目背景
2008年年初,筆者所在單位和陜西省某煤管局簽訂了一份公路檢重的合同。本合同是要在其所管瞎的三個收費站上安裝全套的動態(tài)自動計量系統(tǒng),用于對過往的運煤車輛進行稱重和登記。本系統(tǒng)的軟件部分,不但要求控制全套動態(tài)計重系統(tǒng)的運作,同時要求對車輛進行管理,能夠自動計算車輛的凈重,而且要求能夠監(jiān)控整個系統(tǒng)的運作,具有聯(lián)動報警功能,同時對于每個站點的情況和整個系統(tǒng)的車輛信息,具有網(wǎng)絡(luò)查詢功能。由筆者任組長,帶領(lǐng)另外三人組成一個小規(guī)模的開發(fā)團體,共同完成軟件部分的開發(fā)和設(shè)計工作。
4.2 需求分析
需求分析的制訂用了比較長的時間。
首先是下現(xiàn)場調(diào)研,搞清楚各個站點的實現(xiàn)情況,包括了計算機使用情況、網(wǎng)絡(luò)情況及車輛計費流程等等。期間,也對站上的工作人員的情況進行了了解,對他們的計算機的使用能力進行了匯總。
其次,重點和煤管局負責本次項目的機電科的相關(guān)人員進行了深入分析和溝通,在此基礎(chǔ)上,和客戶一起,將軟件部分所有的功能進行了匯總,對各個功能進行了詳細說明,對軟件的所有功能板塊的邏輯關(guān)系進行了圖表繪制。完成這些任務后,確定了技術(shù)基本需求分析文檔。
4.3 Demo開發(fā)和初步評審
在已有的需求分析的基礎(chǔ)上,需要著手進行Demo程序的開發(fā)。Demo程序是一個演示程序,它的目的是展示軟件的大致結(jié)構(gòu)和使用方式。Demo程序在快速地開發(fā)完成后,和客戶一起評審這個程序,完成后,該軟件的開發(fā)階段就正式啟動。
4.4 開發(fā)環(huán)境與過程
4.4.1 客戶監(jiān)督
為了在軟件開發(fā)過程中最大程度地實現(xiàn)和滿足客戶的實現(xiàn)意圖,及開發(fā)人員能及時與客戶之間進行溝通,并展示開發(fā)進度。本項目在開發(fā)過程中,專門請入煤管局機電科的一名技術(shù)人員作為顧問定期地來本單位,展示工程進展情況,并糾正需求中不足或不明確的地方。
4.4.2 工作環(huán)境
軟件小組有專門的辦公室,所有的人都在同一個開發(fā)環(huán)境中工作。辦公室中有飲水機、茶點,還有一個大白板及一個小型的會議桌。
每周標準40小時工作制,不提倡加班。每天早上所有人員首先碰個頭,了解系統(tǒng)各個方面的進展情況,解決之前遇到的各類問題。工作時間里,每位人員都積極進行自己的工作,并和其他人之間進行經(jīng)常性溝通,保持活躍的氣氛,和高效率的工作狀態(tài)。
工作時可以聽音樂,但不能影響其他人。
4.4.3 持續(xù)集成
開發(fā)團隊是由四個人組成的,分別負責:主體開發(fā);數(shù)據(jù)庫和網(wǎng)絡(luò)開發(fā);硬件模塊和流程模塊開發(fā);文檔管理、集成測試和項目協(xié)調(diào)。
本項目分為四個開發(fā)階段,每個階段又分為若干個結(jié)點。在到每一個結(jié)點時,就進行系統(tǒng)集成一次,保證包括測試在內(nèi)的每個部分都能正確地集成在一起使用。每個部分都要通過測試樁和測試用例的測試,以保證已開發(fā)的內(nèi)容沒有錯誤,并保證已開發(fā)的內(nèi)容準確地實現(xiàn)了既定的要求。
每次進行集成的時候,都把集成的結(jié)果演示給客戶,讓客戶了解當前軟件的進度。
4.4.4 編程
編程是代碼的最終實現(xiàn)過程,為了保證代碼的正確性和高效率的實現(xiàn),做到了以下幾點:
一是所有開發(fā)人員編程風格一致,變量前綴名稱、函數(shù)名稱和注釋的格式等等,都采用統(tǒng)一的標準。軟件的界面也都采用相同的風格。
二是采取相互檢查的機制,即采用自由組隊的方式,相互檢查對方的代碼。如果發(fā)現(xiàn)問題和難點,可以大家一起出主意,保持良好的工作氣氛。
4.4.5 測試
測試主要分為兩部分:一部分是設(shè)計人員自己的測試;另一部分是系統(tǒng)集成測試。
設(shè)計人員的測試,不做檢查,但是提倡進行,并做一定記錄,以保證在最后系統(tǒng)集成測試的通過率。系統(tǒng)集成測試包括了針對軟件的全部測試,包括了功能測試、整合測試、負荷測試和系統(tǒng)測試等。在系統(tǒng)集成測試這一步,團隊里私下規(guī)定,誰的錯誤最多,就要受到一定的懲罰,例如一周的值日等等。而多次集成測試中保持無錯誤者,則可獲得物質(zhì)獎勵。
4.5 項目驗收
在軟件開發(fā)的最后一步,就是項目的驗收。驗收工作是在客戶相關(guān)人、軟件組長、項目經(jīng)理之間進行的。通過驗收后,隨即在各個站點和煤管局安裝了系統(tǒng),并試運行,還培訓了各個站點的工作人員,制定了計算機、系統(tǒng)使用的各類注意事項。在這些完成后,開始進行資料、代碼和文檔的歸檔工作。
5 小規(guī)模團隊開發(fā)的經(jīng)驗總結(jié)
5.1 提倡和保護個人的創(chuàng)新意識
創(chuàng)新能夠為企業(yè)帶來新發(fā)展契機,創(chuàng)造新價值。因此,創(chuàng)新對于企業(yè)還是個人而言都非常重要的。小規(guī)模團隊中的每一個人都需要創(chuàng)新意識,只有這樣才能實現(xiàn)新技術(shù)的突破,解決遭遇到的許多新挑戰(zhàn)、新困難,每個人都能獨擋一面,并成為他們所負責方向的專家。
5.2 技術(shù)風格統(tǒng)一,格調(diào)一致
風格一致是非常重要的。對敏捷開發(fā)來說,只有和所在團隊規(guī)定的格式一致時,代碼和成果才有意義。因為只有這樣才能方便地對其他人的代碼的理解,對于人事上調(diào)動,原工作人員的大量工作成果也能得到保留。需要指出的是,對于小規(guī)模團隊開發(fā)來說,要盡量避免人事調(diào)動,因為每個人在團隊所在地位是其他人不能取代的,人事的調(diào)動必然會影響到團隊的整體結(jié)構(gòu),也可能會大大影響正在進行項目的進度。
5.3 要創(chuàng)造最大化的生產(chǎn)力
小規(guī)模團隊由于人員較少,其開發(fā)目標應更重視是有效率地生產(chǎn)出可用的產(chǎn)品而不是詳細文檔??梢员苊庖恍┎怀S玫奈臋n的糾葛,對于一些必須的文檔,內(nèi)容也可以簡潔從事。對于小規(guī)模團隊而言,文檔的繁多并不能從任何方面促進工作的效率,同時文檔也不是最佳的溝通方式,直接的交流和溝通才是最有效的,復雜的文檔說明只會增加溝通成本。因而小規(guī)模團隊的敏捷開發(fā),測試的文檔不需要長篇累讀,需要的是簡潔,清晰。任何一段清楚的文字,甚至一張圖片、照片都是我們認可的敏捷文檔。
小規(guī)模團隊的敏捷開發(fā)模式要最大化的提高團隊的工作效率。無論是依靠剪除冗余的文檔工作,還是提供民主的、通暢的溝通平臺都是為了幫助團隊能夠集中有限的精力處理有意義的問題。
5.4 民主的團隊和榮辱與共
小規(guī)模的團隊應該是一支民主的團隊,團隊關(guān)系是平行的,每個團隊成員能夠平等的參與討論,決策。這是非常重要的事情。團隊脫離了任何一個成員的工作都必然是不完整的。所以我們應當足夠尊重其他成員的勞動果實和表達對其他成員的充分信任。推薦的方法是面對面交流、每日匯報、回顧會議。要求能夠開展生動有趣的會議,提煉和開發(fā)全員的想法,并盡量減少勾心斗角。
參考文獻
[1]《敏捷開發(fā)的藝術(shù)》,James Shore,Shane Warden,機械工業(yè)出版社,2009年。
[2]《Visual Studio 2010:助力敏捷開發(fā)》,CSDN,2010年。
[3]《精益和敏捷開發(fā)大型應用實戰(zhàn)》,Craig Larman, Bas Vodde,機械工業(yè)出版社,2010年
[4]《敏捷開發(fā)走過十年》,鄒大斌,計算機世界,2010年
[5]《敏捷軟件開發(fā):原則、模式與實踐》,Robert C. Martin,清華大學出版社,2003年
[6]《欲善敏捷開發(fā) 先利敏捷工具》,IT168.com,2008年
[7]《精益和敏捷開發(fā)大型應用實戰(zhàn)》,(加拿大)Craig Larman,機械工業(yè)出社,2010年
[8]《可伸縮敏捷開發(fā):企業(yè)級最佳實踐》,Dean Leffingwell,電子工業(yè)出版社,2009年