如何實(shí)現(xiàn)敏捷軟件開發(fā)?
敏捷開發(fā)究竟是什么?通俗地講,他就是將項(xiàng)目分為多個(gè)獨(dú)立運(yùn)行,但又存在聯(lián)系地小項(xiàng)目,通過分別完成實(shí)現(xiàn)快速開發(fā)。整體來看,它的優(yōu)勢就是高效!
在軟件工程領(lǐng)域,有過很多軟件開發(fā)模型,如瀑布模型、快速原型模型、增量模型、螺旋模型、演化模型、噴泉模型、RAD模型、敏捷軟件開發(fā)模型、XP極端模型。這么多的模型各有各的應(yīng)用場景、各有各的適用范圍,但我認(rèn)為最實(shí)用開發(fā)模型還是敏捷軟件開發(fā)。
中國式軟件開發(fā)思路是什么樣的呢?從我接觸過的大多軟件項(xiàng)目來看,基本都有一個(gè)共同特點(diǎn)——就是必須快,客戶都是急脾氣,恨不得今天立項(xiàng),明天就要你拿出產(chǎn)品來。
面對公司和客戶如此快節(jié)奏的要求,我們有辦法嗎?人們從生產(chǎn)、生活中總結(jié)出來一套即高效又優(yōu)質(zhì)的開發(fā)模式——敏捷軟件開發(fā)。
一、什么是敏捷軟件開發(fā)呢?
敏捷開發(fā)是以用戶的需求進(jìn)化為核心,采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開發(fā)。在敏捷開發(fā)中,軟件項(xiàng)目在構(gòu)建初期被切分成多個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目的成果都經(jīng)過測試,具備可視、可集成和可運(yùn)行的特征。換言之,就是把一個(gè)大項(xiàng)目分為多個(gè)相互聯(lián)系、而又可以獨(dú)立運(yùn)行的小項(xiàng)目,并分別完成,從而實(shí)現(xiàn)快速開發(fā)的目的。
二、敏捷開發(fā)是如何實(shí)現(xiàn)的?
1. 將大的系統(tǒng)拆分成子項(xiàng)目
以前我們接受過的思想是立項(xiàng)后先要需求調(diào)研、分析,調(diào)研后出各種調(diào)研報(bào)告及需求說明書,需求搞定后,再進(jìn)行概要設(shè)計(jì)(UE設(shè)計(jì)、UI設(shè)計(jì)、交互設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)、框架設(shè)計(jì)),概要設(shè)計(jì)完成后再進(jìn)行詳細(xì)設(shè)計(jì)……這樣一個(gè)周期下來,耗費(fèi)太長,當(dāng)進(jìn)度進(jìn)入下一階段,當(dāng)上一階段有問題時(shí),會影響到整個(gè)項(xiàng)目流程的各個(gè)階段。
而敏捷方法是會將大的系統(tǒng)拆分成一個(gè)個(gè)子項(xiàng)目,再把子系統(tǒng)拆分成子模塊,盡量減少模塊間的耦合性、增加其內(nèi)聚性,這樣我們可以把團(tuán)隊(duì)分成多個(gè)小組,各組可以同時(shí)作業(yè)。另外,當(dāng)一個(gè)模塊需求發(fā)生變化時(shí),對其它模塊的影響也不會太大,以實(shí)現(xiàn)降低開發(fā)難度的目的。
在之前提到的房產(chǎn)信息網(wǎng)平臺建設(shè)中,我們就將系統(tǒng)拆分成自行成交、經(jīng)紀(jì)成交、用戶權(quán)限管理、建委等外部接口、大宗資產(chǎn)、交易管理、平臺后臺管理、網(wǎng)站前端等模塊分別進(jìn)行需求討論,需求討論后再將各模塊拆分成各個(gè)對象,對象與對象間只是通過公有變量傳遞信息,盡量減少與外部對象間產(chǎn)生關(guān)系。
總結(jié):化整為零個(gè)個(gè)擊破
2. 團(tuán)隊(duì)與客戶呆在一起
為了降低溝通成本,我們團(tuán)隊(duì)所有人員直接開到客戶現(xiàn)場,隨時(shí)與客戶溝通,通過面對面的溝通,減少了理解偏差。
在項(xiàng)目的各個(gè)階段,我們一直與客戶保持零距離接觸,隨時(shí)交流、溝通。通過這種辦法,可以第一時(shí)間獲取需求、第一時(shí)間解決問題,減少出錯(cuò)的可能性,提高開發(fā)效率,保證開發(fā)質(zhì)量。
而且,通過這種方式會更容易取得客戶信任,客戶能夠隨時(shí)了解到項(xiàng)目的工作狀態(tài)、工作進(jìn)度。當(dāng)相互間具備了信任關(guān)系后,余下的工作也會變得輕松、愉快。
在房產(chǎn)項(xiàng)目里,我們在客戶現(xiàn)場辦公,定期開會討論需求和設(shè)計(jì),當(dāng)有一些小的不確定問題,團(tuán)隊(duì)成員會直接找到客戶相關(guān)人確認(rèn)。在整個(gè)項(xiàng)目周期中沒有發(fā)生過大的需求變化。
總結(jié):與客戶面對面的交流,降低交流成本,促進(jìn)相互信任。
3. 用建模方式溝通
利用模型與客戶溝通,用模型來獲取用戶需求,而不是通過大量的文檔,編寫文檔費(fèi)時(shí)費(fèi)力,而且效果不好。實(shí)際,對于我們大多數(shù)人來說并不喜歡花大量時(shí)間看各種文字和參數(shù),而模型則會更直觀和立體。這里我說的模型不是單指我們平時(shí)設(shè)計(jì)的原型,它包括用例圖、類圖、部署圖、狀態(tài)圖、活動圖、包圖、對象圖、原型圖、效果圖、E-R圖等,利用不同圖形表達(dá)出產(chǎn)品的不同維度,使產(chǎn)品豐富而立體。
在房產(chǎn)項(xiàng)目里,我們用原型與客戶討論需求,用ER圖溝通數(shù)據(jù)庫設(shè)計(jì),用類圖來表達(dá)產(chǎn)品的對象,用部署圖確定硬件部署環(huán)境及網(wǎng)絡(luò)結(jié)構(gòu),用活動圖來說明信息交互流程,用時(shí)序圖來表達(dá)在時(shí)間軸下對象間的交互。通過各種圖表來表達(dá)產(chǎn)品,利用這種方法會比較直觀,而且當(dāng)發(fā)現(xiàn)錯(cuò)誤修改起來也容易,不像利用文檔方式,修改不方便、維護(hù)困難,也不利于閱讀、理解。
總結(jié):利用模型來代替文檔進(jìn)行交流。
4. 敢于迎接變化
市場環(huán)境是產(chǎn)品的風(fēng)向標(biāo),我們要隨時(shí)關(guān)注市場。為了迎合市場,產(chǎn)品也要隨時(shí)變化。
需求變化、設(shè)計(jì)變化……各種變化讓我們焦頭爛額,但做為產(chǎn)品人的我們同樣也應(yīng)該接受改變,只有產(chǎn)品的快速變化,才能很好的迎接未來。
我們歡迎變化,只要是合理的,哪怕是開發(fā)階段,需求也同樣可能發(fā)生變化。
敏捷開發(fā)允許變化,通過變化給客戶帶來更大的競爭力。敏捷開發(fā)利用圖表來記錄需求,所有代碼都采用模塊式設(shè)計(jì),將不同功能盡量分割,減少關(guān)聯(lián)。這就是它能夠、也敢于迎接變化的原因。
提到了敏捷的一個(gè)很重要思想就是“勇于迎接變化”。
就有人說了,你一定不是技術(shù)出身的吧。做技術(shù)的就討論變化,最不允許的就是確定的需求再修改。當(dāng)產(chǎn)品經(jīng)理與技術(shù)人員溝通時(shí),當(dāng)談的一個(gè)復(fù)雜性操作時(shí),經(jīng)常說:“你確定不會修改了吧,如果你確定需求不變,我就做!”,你要答應(yīng)了,再找技術(shù)修改時(shí)哪就等于堵死了自己的后路。
實(shí)際,哪能一定有不修改的需求呢?我們做產(chǎn)品不也是時(shí)刻在迎接市場的考驗(yàn)嗎?
在大海上航行,當(dāng)風(fēng)向變化,我們的大船不也得時(shí)刻準(zhǔn)備掉頭,準(zhǔn)備調(diào)整。變化,本身就是為了適應(yīng),沒有變化,就等于沒有進(jìn)步。
但作為產(chǎn)品經(jīng)理的我們,能做的應(yīng)該是利用自己的智慧和敏銳的市場洞察力,盡量的去感知風(fēng)向,盡量的控制需求,在需求發(fā)現(xiàn)初期就做好充足的調(diào)研。
怕變化,不是辦法,在項(xiàng)目初期就要做好靈活可調(diào)整的方案,如果需求真的變化了,我們應(yīng)該怎么辦,這才是敏捷的思想,需求的變化,我們誰能阻攔得了呢?
5.盡早、持續(xù)的交付可運(yùn)行的階段性成果
之前我曾經(jīng)說過,一個(gè)項(xiàng)目的失敗,一般不是技術(shù)原因,多是因?yàn)榭蛻魧ξ覀兪バ湃?。我們需要持續(xù)的、不斷的給客戶以信任感,一種是我們在客戶現(xiàn)場不斷的交流、溝通,讓客戶感受到我們的熱度。同樣,還需要盡早的、持續(xù)的給客戶提供相應(yīng)的成果物(可運(yùn)行的產(chǎn)品),讓客戶看到我們的能力。
當(dāng)然,這樣還有另一個(gè)好處是,能夠把問題提早的暴露出來,不要羞羞答答像個(gè)小女人,不敢見人,只有提前暴露,才能提早解決,問題越晚暴露越難解決。
在房產(chǎn)項(xiàng)目中,當(dāng)天完成的內(nèi)容在編譯沒問題后,會把修改的功能部署到平臺服務(wù)器上,以便于客戶隨時(shí)能夠看到變化,了解項(xiàng)目進(jìn)度。如有問題的話,也能夠盡早暴露出來。
總結(jié):為了降低項(xiàng)目風(fēng)險(xiǎn),盡早交付可運(yùn)行程序
6. 面對面的溝通
最快的交流方式就是面對面的溝通,在敏捷開發(fā)中,最提倡的方式是減少哪此冗余的、效率低下的溝通方式,用最快速的方法來直接溝通。讓技術(shù)人員、設(shè)計(jì)人員、客戶等所有團(tuán)隊(duì)成員都在一起辦公,減少信息交流的斷路,讓溝通變得順暢。
在房產(chǎn)項(xiàng)目中,當(dāng)有問題不理解,需要交流時(shí),都是直接找我,我不清楚的直接找客戶。當(dāng)我不在時(shí),同事們也會直接與客戶進(jìn)行溝通,任何人都可以直接獲取需求。
總結(jié):直接溝通,減少中間環(huán)節(jié)
7. 可工作的軟件是最主要的衡量標(biāo)準(zhǔn)
出再多的文檔、再多的中間產(chǎn)物,都沒有出結(jié)果來得真切??蛻糇钣^心的不是中間物,而是成果物。對于敏捷軟件開發(fā)來說,可以工作的軟件是評測開發(fā)進(jìn)度的最主要衡量標(biāo)準(zhǔn)。唱的再好,也不如做的好,做事要落地,實(shí)實(shí)在在、踏踏實(shí)實(shí)是敏捷開發(fā)的核心,不玩花拳繡腿。
總結(jié):做出可交付的軟件是項(xiàng)目的核心
8. 保持恒定的開發(fā)速度
項(xiàng)目開發(fā)是一次長跑,短期內(nèi)迅速的加速,并不是長跑的方式,我們應(yīng)該持續(xù)的、勻速的跑步方式,這樣才能保證團(tuán)隊(duì)成員能一直堅(jiān)持到最后。敏捷開發(fā)提供可持續(xù)的開發(fā)速度,這樣不僅團(tuán)隊(duì)成員不至于疲憊,也有利于制定項(xiàng)目開發(fā)進(jìn)度,控制開發(fā)周期。
總結(jié):項(xiàng)目開發(fā)過程是長跑,不要一開始就沖刺
9. 定期團(tuán)隊(duì)優(yōu)化
我們會每隔一段時(shí)間進(jìn)行一次團(tuán)隊(duì)建設(shè),進(jìn)行批評與自我批評,找出工作中的問題及影響個(gè)人與團(tuán)隊(duì)發(fā)展的瓶頸。我們通過交流、溝通方式找出團(tuán)隊(duì)及成員間的問題,然后進(jìn)行自我調(diào)整,通過不斷的優(yōu)化、升級自有團(tuán)隊(duì),打造出一個(gè)能戰(zhàn)斗的隊(duì)伍。
總結(jié):
如果項(xiàng)目管理者能夠很好的運(yùn)用敏捷開發(fā)思想,就相當(dāng)于在游戲世界里擁有了法器,美食世界里掌握了烹飪之道。
在敏捷開發(fā)里還有許多其它思想,但有的思想本人并不太認(rèn)同,如用“測試驅(qū)動開發(fā)”,在中國與在國外不同,在國外有CMMI,對測試要求非常高,測試實(shí)際就是質(zhì)量檢查部門、質(zhì)量控制部門,有著很高的權(quán)限,對測試人員也是更加尊重和認(rèn)同。
在國內(nèi),公司多重開發(fā)而輕測試,從你公司測試人員與開發(fā)人員的薪水上就能看得出來,誰更受重視。想讓測試人員驅(qū)動開發(fā),在目前的現(xiàn)狀中有些難以做到。
有時(shí)我想,前人已經(jīng)總結(jié)出了那么多好的思想,確實(shí)應(yīng)該多學(xué)學(xué)、多看看、多用用,但拿來的思想并不一定全適用,每種思想都有著自己的成長土壤,不是只要多施肥、多澆水就能長出好莊稼。有時(shí),也要看看,植物的習(xí)性,是否更適應(yīng)我們的環(huán)境。
本文由@飛鷹長空 原創(chuàng)發(fā)布與人人都是產(chǎn)品經(jīng)理,未經(jīng)允許,禁止轉(zhuǎn)載。
題圖來自Unsplash, 基于CC0協(xié)議
- 目前還沒評論,等你發(fā)揮!