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















 
 
 




 
 
 
 