我們需要什么樣的敏捷開發(fā)?
作者 alande
敏捷一詞對(duì)于我們來講已經(jīng)不再陌生,在業(yè)界已經(jīng)成為一種軟件開發(fā)活動(dòng)的推薦模式。那為什么要敏捷?
這個(gè)答案很多,每個(gè)開發(fā)者心中都有一個(gè)自己答案,其實(shí)答案本身并不重要,重要是思考的過程。這個(gè)問題也沒有一個(gè)標(biāo)準(zhǔn)答案,就像每個(gè)軟件開發(fā)男都有一個(gè)自己心中的女神,女神可能是不一樣的,女神是否相同并不重要。
言歸正傳,個(gè)人觀點(diǎn)如下。回答敏捷是什么?為什么要敏捷?回答“為什么要敏捷”的前提是回答“敏捷是什么”,因此首要任務(wù)是要先回答第一個(gè)問題,從敏捷技術(shù)的觀點(diǎn)看,核心是敏捷價(jià)值觀、敏捷價(jià)值觀外層為敏捷管理,比如XP或者Scrum;最外層為敏捷技術(shù)實(shí)踐,比如CI、TDD和結(jié)對(duì)編程等技術(shù),從這個(gè)結(jié)構(gòu)看最里層是一種敏捷文化、中間層為軟件開發(fā)過程管理方法,最外層為具體技術(shù)實(shí)踐,因此敏捷運(yùn)行核心要素是通過軟件開發(fā)過程管理方法連接內(nèi)層敏捷價(jià)值觀和外層敏捷開發(fā)技術(shù)實(shí)踐,對(duì)外呈現(xiàn)出一種開發(fā)模式和方法。
其次回答第二個(gè)問題,首先要解決敏捷不可替換價(jià)值在哪里?如果說敏捷是交付有價(jià)值的軟件產(chǎn)品,那么非敏捷方式難道就不能交付有價(jià)值的軟件產(chǎn)品?這個(gè)推論站不住腳,我們同樣也可以使用非敏捷方法交付有價(jià)值的軟件產(chǎn)品,現(xiàn)在仍然有大量的軟件產(chǎn)品按照非敏捷的方式進(jìn)行開發(fā),同樣也在交付價(jià)值。在我看來,一個(gè)字可以回答“為什么要敏捷”,這個(gè)字在于“變”,我們需求的變化。
三種場(chǎng)景需要敏捷開發(fā)
在我看來,需求的變化有以下三種場(chǎng)景:
場(chǎng)景一,需求從用戶環(huán)節(jié)到開發(fā)環(huán)節(jié),這個(gè)漫長(zhǎng)的需求鏈條在傳遞過程中出現(xiàn)了關(guān)鍵信息丟失,導(dǎo)致軟件開發(fā)產(chǎn)品交付后,與用戶需求嚴(yán)重不一致,導(dǎo)致軟件重大改動(dòng)、甚至重新設(shè)計(jì);
場(chǎng)景二,用戶對(duì)于需求的描述定義不準(zhǔn)確,導(dǎo)致軟件開發(fā)產(chǎn)品開發(fā)出現(xiàn)偏差,軟件產(chǎn)品交付后,需要軟件進(jìn)行重大改動(dòng)、甚至重新設(shè)計(jì);
場(chǎng)景三,需求本身已經(jīng)有了變化和位移,移動(dòng)互聯(lián)網(wǎng)發(fā)展非常快,需求本身可能每天都在變化,即使你搞清楚了之前的需求,等你軟件產(chǎn)品交付后,該需求已經(jīng)不成立或者有了重大變化和位移,也會(huì)導(dǎo)致軟件重大改動(dòng)、甚至重新設(shè)計(jì);
需求變化這么快,需求有可能存在偏差,怎么辦?解決方法,可以看看電影功夫中的片段,快,足夠的快,快得很抓住子彈。本著“天下功夫,無堅(jiān)不破,唯快不破”的原則,提升我們軟件開發(fā)的速度,適應(yīng)這種變化。
兩種途徑提高開發(fā)速度
怎么能夠提升我們軟件開發(fā)的速度,敏捷方法提供了2個(gè)解決途徑:
第一 提升人件,通過敏捷團(tuán)隊(duì)運(yùn)作,激發(fā)出每一隊(duì)員的最大潛能,以最大合力完成軟件產(chǎn)品開發(fā)。就拿敏捷中Scrum來說,Scrum的原始含義,就是橄欖球比賽對(duì)抗,要讓團(tuán)隊(duì)最大力量集中起來,集中一點(diǎn),取得突破。如何能夠激發(fā)出每個(gè)人的最大潛能,讓自己當(dāng)老板,讓自己成為軟件產(chǎn)品的老板,軟件產(chǎn)品就是我自己,通過自組織團(tuán)隊(duì),讓開發(fā)人員真正的當(dāng)家作主,成為軟件開發(fā)的主人,以此激發(fā)隊(duì)員的最大潛能;同時(shí)敏捷文化鼓勵(lì)隊(duì)員之間的技術(shù)交流和分享,在這種技術(shù)交流和分享過程中提升開發(fā)人員的自身水平和能力,達(dá)到個(gè)體戰(zhàn)斗力的最大化。
第二 軟件開發(fā)過程提升,軟件開發(fā)過程包括需求分析、系統(tǒng)設(shè)計(jì)、編碼、測(cè)試、交付、部署、上線這些環(huán)節(jié),要做到快速,就必須從多方面入手。
首先,需要把大需求拆分為小需求、從一次完成大而全軟件系統(tǒng)交付轉(zhuǎn)換為每次提供一個(gè)核心和關(guān)鍵功能最小軟件系統(tǒng)快速交付,及時(shí)獲取用戶反饋,這樣即使在需求環(huán)節(jié)出現(xiàn)偏差,也可以減低對(duì)于軟件產(chǎn)品開發(fā)影響,減小需求偏離度,提升軟件產(chǎn)品準(zhǔn)確命中用戶需求要點(diǎn)的能力;
其次,需要提升整個(gè)軟件開發(fā)彈性,引入代碼走查、鼓勵(lì)重構(gòu)、結(jié)對(duì)編碼和編碼風(fēng)格調(diào)整這些舉措,讓軟件編碼具有彈性,可以讓軟件對(duì)于后續(xù)變化和需求快速響應(yīng);
再者,由于需求經(jīng)常變化,隨時(shí)都會(huì)對(duì)于軟件進(jìn)行改動(dòng),為了保證軟件產(chǎn)品具備快速交付能力,必須通過持續(xù)構(gòu)建來解決系統(tǒng)經(jīng)常代碼改動(dòng)對(duì)于軟件產(chǎn)品交付能力的影響,分散產(chǎn)品發(fā)布帶來的風(fēng)險(xiǎn);通過自動(dòng)測(cè)試來進(jìn)行回歸測(cè)試、集成測(cè)試以及系統(tǒng)測(cè)試,通過機(jī)器測(cè)試來換取測(cè)試壓縮,解決人力測(cè)試無法滿足測(cè)試路徑快速覆蓋的場(chǎng)景,隨時(shí)具備軟件產(chǎn)品交付能力。
綜上所述,敏捷的核心要素在于快,通過人件和軟件開發(fā)融合發(fā)力,實(shí)現(xiàn)軟件開發(fā)過程“快”,以快來取得“準(zhǔn)”,以“準(zhǔn)”來破“變”,實(shí)現(xiàn)軟件產(chǎn)品價(jià)值成功交付。