敏捷開(kāi)發(fā)基礎(chǔ)知識(shí)
敏捷軟件開(kāi)發(fā)宣言由下述4個(gè)簡(jiǎn)單的價(jià)值觀聲明組成:
(1)“個(gè)體和交互”勝過(guò)“過(guò)程和工具”
優(yōu)秀的團(tuán)隊(duì)成員是軟件開(kāi)發(fā)項(xiàng)目獲得成功的最重要因素,但不好的過(guò)程和工具也會(huì)使最優(yōu)秀的團(tuán)隊(duì)成員無(wú)法發(fā)揮作用。
團(tuán)隊(duì)成員的合作、溝通以及交互能力要比單純的軟件編程能力更為重要。
正確的做法是:先基于客觀條件構(gòu)建軟件開(kāi)發(fā)團(tuán)隊(duì)(包括成員和交互方式等),然后再根據(jù)需要為團(tuán)隊(duì)配置項(xiàng)目環(huán)境(包括過(guò)程和工具)
(2)“可以使用的軟件”勝過(guò)“面面俱到的文檔”
軟件開(kāi)發(fā)的主要目標(biāo)是向用戶提供可以使用的軟件而不是文檔,但是,完全沒(méi)有文檔的軟件也是一種災(zāi)難。開(kāi)發(fā)人員應(yīng)該把主要精力放在創(chuàng)建可使用的軟件上面,僅當(dāng)迫切需要并且具有重大意義時(shí),才進(jìn)行文檔編制工作,而且所編織的內(nèi)部文檔應(yīng)該盡量簡(jiǎn)明扼要和主題突出。
(3)“客戶合作”勝過(guò)“合同談判”
客戶通常不可能做到一次性地把他們的需求完整準(zhǔn)確地表述在合同中。能夠滿足客戶不斷變化的需求的切實(shí)可行的途徑是:開(kāi)發(fā)團(tuán)隊(duì)與客戶密切協(xié)作。因此,能指導(dǎo)開(kāi)發(fā)團(tuán)隊(duì)與客戶協(xié)同工作的合同才是最好的合同。
(4)“響應(yīng)變化”勝過(guò)“遵循計(jì)劃”
軟件開(kāi)發(fā)過(guò)程總會(huì)有變化,這是客觀存在的現(xiàn)實(shí)。一個(gè)軟件過(guò)程必須反映現(xiàn)實(shí),因此,軟件過(guò)程應(yīng)該有足夠的能力及時(shí)響應(yīng)變化。然而沒(méi)有計(jì)劃的項(xiàng)目也會(huì)因陷入混亂而失敗,關(guān)鍵是計(jì)劃必須有足夠的靈活性和可塑性,在形勢(shì)發(fā)生變化時(shí)能迅速調(diào)整,以適應(yīng)業(yè)務(wù)、技術(shù)等方面的變化。
在理解上述4個(gè)價(jià)值觀聲明時(shí)應(yīng)該注意,聲明只不過(guò)是對(duì)不同因素在保證軟件開(kāi)發(fā)成功方面所起作用的大小做了比較,說(shuō)一個(gè)因素更重要并不是說(shuō)其他因素不重要,更不是說(shuō)某個(gè)因素可以被其他因素代替。
另外,“敏捷宣言”中還包含以下原則。
1.最重要的是通過(guò)盡早和持續(xù)地交付有價(jià)值的軟件以滿足客戶需要。
2.即使在開(kāi)發(fā)后期也歡迎需求的變化。敏捷過(guò)程駕馭變化帶給客戶競(jìng)爭(zhēng)優(yōu)勢(shì)。
3.經(jīng)常交付可以使用的軟件,間隔可以從幾星期到幾個(gè)月,時(shí)間尺度越短越好。
4.業(yè)務(wù)人員和開(kāi)發(fā)人員應(yīng)該在整個(gè)項(xiàng)目過(guò)程中每天都在一起工作。
5.使用積極的開(kāi)發(fā)人員進(jìn)行項(xiàng)目,給他們提供所需環(huán)境和支持,并信任他們能夠完成任務(wù)。
6.在開(kāi)發(fā)小組中最有效率和效果的信息傳達(dá)方式是面對(duì)面的交談。
7.可以使用的軟件是度量進(jìn)度的主要標(biāo)準(zhǔn)。
8.敏捷過(guò)程提倡的是持續(xù)開(kāi)發(fā)過(guò)程。投資人、開(kāi)發(fā)人員和用戶應(yīng)該維持一個(gè)長(zhǎng)期穩(wěn)定的步調(diào)。
9.持續(xù)地追求卓越的技術(shù)與良好的設(shè)計(jì)會(huì)增加敏捷性。
10.簡(jiǎn)單(盡可能減少工作量)是最重要的。
?11.最好的架構(gòu)、需求和設(shè)計(jì)都來(lái)自于自組織的團(tuán)隊(duì)。
?12.團(tuán)隊(duì)要定期總結(jié)如何提高效率,然后相應(yīng)地調(diào)整自己的行為。
根據(jù)上述價(jià)值觀提出的軟件過(guò)程統(tǒng)稱為敏捷過(guò)程,其中應(yīng)用比較廣泛的是極限編程和Scrum。
