[敏捷開(kāi)發(fā)與傳統(tǒng)開(kāi)發(fā)方式的比較]

[敏捷開(kāi)發(fā)與傳統(tǒng)開(kāi)發(fā)方式的比較]

敏捷開(kāi)發(fā)的起源

在90年代末期砌函,傳統(tǒng)軟件開(kāi)發(fā)的方式因?yàn)槠浞彪s的過(guò)程,以及對(duì)文檔的過(guò)于嚴(yán)格的要求材鹦,造成了很大程度上的效率下降屹蚊,也就是人們所說(shuō)的“重型化危機(jī)”。因?yàn)檫@一原因坝辫,人們開(kāi)始反思傳統(tǒng)方法的利弊篷就,并對(duì)其弊端進(jìn)行了改進(jìn)射亏,提出了敏捷方法近忙。

2001年2月竭业,由Martin Fowler,Jim Highsmith等17位軟件開(kāi)發(fā)專家起草的敏捷宣言發(fā)表及舍,敏捷聯(lián)盟成立未辆。敏捷開(kāi)發(fā)作為一種新的方法正式誕生。敏捷宣言中所表述的價(jià)值觀分為四個(gè)方面:

(1)個(gè)體和互動(dòng) 高于 流程和工具
(2)工作的軟件 高于 詳盡的文檔
(3)客戶合作 高于 合同談判
(4)響應(yīng)變化 高于 遵循計(jì)劃

同時(shí)敏捷宣言還包括12條原則锯玛。這十二條原則是以上四條主要的價(jià)值觀在實(shí)際工作中的體現(xiàn)咐柜。

敏捷開(kāi)發(fā)的12準(zhǔn)則:

  1. 我們的最高目標(biāo)是,通過(guò)盡早和持續(xù)地交付有價(jià)值的軟件來(lái)滿足客戶攘残。

  2. 歡迎對(duì)需求提出變更——即使是在項(xiàng)目開(kāi)發(fā)后期拙友。要善于利用需求變更,幫助客戶獲得競(jìng)爭(zhēng)優(yōu)勢(shì)歼郭。

  3. 要不斷交付可用的軟件遗契,周期從幾周到幾個(gè)月不等,且越短越好

  4. 項(xiàng)目過(guò)程中病曾,業(yè)務(wù)人員與開(kāi)發(fā)人員必須在一起工作牍蜂。

  5. 要善于激勵(lì)項(xiàng)目人員,給他們以所需要的環(huán)境和支持泰涂,并相信他們能夠完成任務(wù)鲫竞。

  6. 無(wú)論是團(tuán)隊(duì)內(nèi)還是團(tuán)隊(duì)間,最有效的溝通方法是面對(duì)面的交談逼蒙。

  7. 可用的軟件是衡量進(jìn)度的主要指標(biāo)从绘。

  8. 敏捷過(guò)程提倡可持續(xù)的開(kāi)發(fā)。項(xiàng)目方其做、開(kāi)發(fā)人員和用戶應(yīng)該能夠保持恒久穩(wěn)定的進(jìn)展速度顶考。

  9. 對(duì)技術(shù)的精益求精以及對(duì)設(shè)計(jì)的不斷完善將提升敏捷性。

  10. 要做到簡(jiǎn)潔妖泄,即盡最大可能減少不必要的工作驹沿。這是一門藝術(shù)。

  11. 最佳的架構(gòu)蹈胡、需求和設(shè)計(jì)出自于自組織的團(tuán)隊(duì)渊季。

  12. 團(tuán)隊(duì)要定期反省如何能夠做到更有效,并相應(yīng)地調(diào)整團(tuán)隊(duì)的行為罚渐。

總體來(lái)說(shuō)却汉,敏捷開(kāi)發(fā)作為一種新的軟件工程方法,與傳統(tǒng)方法相比更加注重人的因素荷并。不再把開(kāi)發(fā)者當(dāng)作一個(gè)物化的合砂,投入多少時(shí)間可以完成相應(yīng)數(shù)量代碼的代碼開(kāi)發(fā)機(jī)器;而是注重開(kāi)發(fā)者之間的互動(dòng)以及開(kāi)發(fā)者和用戶之間的互動(dòng)源织,同時(shí)因?yàn)樵黾恿私涣骱蛥f(xié)作使得開(kāi)發(fā)的項(xiàng)目更加靈活和易于修改翩伪。

敏捷開(kāi)發(fā)的主要特點(diǎn)

與傳統(tǒng)開(kāi)發(fā)方法相比微猖,在敏捷開(kāi)發(fā)的整個(gè)過(guò)程中,有以下幾個(gè)主要的特點(diǎn):

(1)敏捷開(kāi)發(fā)的過(guò)程有著更強(qiáng)的適應(yīng)性而不是預(yù)設(shè)性缘屹,從敏捷宣言的第四條響應(yīng)變化高于預(yù)設(shè)計(jì)劃便可以看出來(lái)凛剥。因?yàn)檐浖_(kāi)發(fā)過(guò)程的本身的不可預(yù)見(jiàn)性,很多用戶在項(xiàng)目開(kāi)始時(shí)不可能對(duì)于這個(gè)項(xiàng)目有著一個(gè)完整而明確的預(yù)期轻姿。很多對(duì)軟件的預(yù)期都在后期的修改和完善過(guò)程中產(chǎn)生犁珠。因此高適應(yīng)性顯然更加符合軟件工程開(kāi)發(fā)的實(shí)際。而敏捷開(kāi)發(fā)實(shí)現(xiàn)其適應(yīng)性的方式主要在于互亮,第一犁享,縮短把項(xiàng)目提交給用戶的周期;第二豹休,增加用戶饼疙,業(yè)務(wù)人員,開(kāi)發(fā)人員這三者之間的交流慕爬;第三窑眯,通過(guò)減少重構(gòu)的成本以增加軟件的適應(yīng)性。

(2)敏捷開(kāi)發(fā)的過(guò)程中医窿,更加的注重人的因素磅甩。在傳統(tǒng)軟件工程中,個(gè)人的因素很少的被考慮到分工中姥卢,每個(gè)個(gè)體都是只是整個(gè)代碼開(kāi)發(fā)機(jī)器的一個(gè)小小的螺絲釘卷要,個(gè)人的意志和創(chuàng)造力很大程度上的被抹去為了更好的為集體服務(wù)。而在敏捷開(kāi)發(fā)過(guò)程中独榴,每個(gè)個(gè)人的潛力被充分的考慮僧叉,應(yīng)用什么技術(shù)很大程度上直接由在第一線開(kāi)發(fā)的技術(shù)人員決定;每個(gè)人的特點(diǎn)和創(chuàng)造力都可以充分地發(fā)揮棺榔,這樣開(kāi)發(fā)出來(lái)的軟件更加的具有生命力瓶堕,因?yàn)樗谌肓碎_(kāi)發(fā)者的心血和創(chuàng)意,開(kāi)發(fā)者不再是進(jìn)行機(jī)械的乏味的堆砌症歇,而是創(chuàng)造屬于自己的藝術(shù)品郎笆,這樣的條件下產(chǎn)生的代碼必然在質(zhì)量上更占優(yōu)勢(shì)。

(3)在敏捷開(kāi)發(fā)的過(guò)程中忘晤,整個(gè)項(xiàng)目是測(cè)試驅(qū)動(dòng)的而不是文檔驅(qū)動(dòng)的宛蚓。不僅每個(gè)模塊有著自己的相應(yīng)的測(cè)試單元,開(kāi)發(fā)人員在開(kāi)發(fā)自己的模塊的過(guò)程中必須保證自己所開(kāi)發(fā)的模塊可以通過(guò)這一單元的測(cè)試设塔,并且集成測(cè)試貫穿了整個(gè)開(kāi)發(fā)過(guò)程的始終凄吏。集成測(cè)試每天會(huì)進(jìn)行十幾次甚至幾十次,而不是像傳統(tǒng)方法一樣只有當(dāng)各個(gè)模塊的編碼都結(jié)束了之后再進(jìn)行聯(lián)合調(diào)試。這樣痕钢,在軟件開(kāi)發(fā)的進(jìn)程中每一點(diǎn)改動(dòng)所引起的問(wèn)題都容嘉容易暴露出來(lái)表谊,使得更加容易在錯(cuò)誤剛剛產(chǎn)生的時(shí)候發(fā)現(xiàn)問(wèn)題從而解決問(wèn)題。這樣就避免了在最后整個(gè)系統(tǒng)完成時(shí)錯(cuò)誤隱藏的太深給調(diào)試造成極大的困難盖喷。

敏捷過(guò)程模型的一個(gè)實(shí)例:極限編程

敏捷過(guò)程作為一種開(kāi)發(fā)過(guò)程模型,產(chǎn)生了很多不同的可以應(yīng)用到實(shí)際中的編程方法难咕。這里介紹一種應(yīng)用的比較廣泛的開(kāi)發(fā)方法课梳,極限編程,來(lái)具體體現(xiàn)一些敏捷開(kāi)發(fā)過(guò)程的特點(diǎn)余佃。

極限編程過(guò)程分為策劃暮刃、設(shè)計(jì)、編碼和測(cè)試四個(gè)階段爆土。

(1)策劃階段

首先在策劃階段椭懊,用戶和開(kāi)發(fā)這進(jìn)行交流,開(kāi)發(fā)者總結(jié)出一系列“用戶故事”步势,描述軟件某一部分功能氧猬。之后客戶對(duì)這些功能進(jìn)行優(yōu)先級(jí)排序,xp團(tuán)隊(duì)評(píng)估每一個(gè)故事的成本坏瘩。之后客戶和xp團(tuán)隊(duì)共同決定在開(kāi)發(fā)的下一個(gè)版本中將會(huì)新增哪些功能盅抚。而在版本不斷的迭代的過(guò)程中,會(huì)進(jìn)行很多次這樣的策劃過(guò)程倔矾,每一次客戶都可以根據(jù)已有的功能來(lái)決定是否要新增一些功能妄均,以及要新增哪些功能。

(2)設(shè)計(jì)階段

在設(shè)計(jì)階段哪自,開(kāi)發(fā)人員會(huì)根據(jù)用戶故事丰包,提出這些用戶故事的實(shí)現(xiàn)方案。設(shè)計(jì)的過(guò)程中主要遵循簡(jiǎn)潔的原則壤巷,也就是盡量使用簡(jiǎn)介的表述而不是復(fù)雜的表述邑彪。而設(shè)計(jì)的另一個(gè)方面則是重構(gòu),重構(gòu)是一種通過(guò)不改變代碼的外部功能的情況下改變軟件模塊的內(nèi)部結(jié)構(gòu)從而優(yōu)化軟件系統(tǒng)的功能的過(guò)程胧华。這是一種改進(jìn)代碼的設(shè)計(jì)锌蓄。

在設(shè)計(jì)的這兩個(gè)層面中,我們可以看到在xp開(kāi)發(fā)過(guò)程中撑柔,設(shè)計(jì)和開(kāi)發(fā)是同步進(jìn)行的瘸爽。我們?cè)诓粩鄬?shí)現(xiàn)開(kāi)始設(shè)計(jì)的過(guò)程中,同時(shí)要對(duì)到嗎進(jìn)行優(yōu)化也就是重新設(shè)計(jì)铅忿。這樣剪决,大大的增強(qiáng)了整個(gè)軟件開(kāi)發(fā)的適應(yīng)性,而不是始終刻板的實(shí)現(xiàn)最開(kāi)始的第一版設(shè)計(jì)。

(3)編碼階段

xp開(kāi)發(fā)的第一件任務(wù)不是直接對(duì)初步的設(shè)計(jì)和用戶故事進(jìn)行編碼柑潦,而是針對(duì)這些設(shè)計(jì)全力開(kāi)發(fā)單元測(cè)試享言。完成了單元測(cè)試也就確定了開(kāi)發(fā)者要實(shí)現(xiàn)的所有功能。這樣開(kāi)發(fā)者就只需要全力通過(guò)單元測(cè)試渗鬼,而不必在實(shí)現(xiàn)什么功能上再浪費(fèi)不必要的時(shí)間和精力览露。這正體現(xiàn)了敏捷開(kāi)發(fā)的以測(cè)試驅(qū)動(dòng)的特點(diǎn)。

而在敏捷開(kāi)發(fā)中譬胎,很重要的一個(gè)提高效率的方式就是結(jié)對(duì)編程差牛。在結(jié)對(duì)編程的過(guò)程中,兩個(gè)開(kāi)發(fā)者共用一臺(tái)電腦堰乔,并各有分工偏化。其中一個(gè)人進(jìn)行實(shí)際的編碼實(shí)現(xiàn),另一個(gè)人在旁邊考慮代碼在宏觀上該如何實(shí)現(xiàn)镐侯,比如針對(duì)什么功能應(yīng)該使用什么樣的算法侦讨。這樣,在編碼者工作遇到問(wèn)題時(shí)苟翻,兩個(gè)人交換位置韵卤。這時(shí)在旁邊思考的人更有可能可以解決這一問(wèn)題。事實(shí)上崇猫,結(jié)對(duì)編程的形式不必拘泥于什么規(guī)矩怜俐。關(guān)鍵在于,兩個(gè)人共同開(kāi)發(fā)的過(guò)程中邓尤,兩個(gè)人的交流可以使得大部分的問(wèn)題可以在第一時(shí)間解決拍鲤。并且,因?yàn)閮蓚€(gè)人中只有一個(gè)人在進(jìn)行編程這一項(xiàng)比較疲憊的工作汞扎,另一個(gè)人較為輕松季稳,這樣可以保證開(kāi)發(fā)效率一直保持在一個(gè)比較高的狀態(tài)。

(4)測(cè)試階段

每一個(gè)模塊都通過(guò)自己的單元測(cè)試之后澈魄,開(kāi)發(fā)者會(huì)將所有的模塊集成到一起進(jìn)行測(cè)試景鼠。這樣可以及時(shí)發(fā)現(xiàn)每一模塊在最近一次改動(dòng)之中出現(xiàn)的問(wèn)題同時(shí)避免一些兼容性問(wèn)題。每一次改動(dòng)一點(diǎn)小問(wèn)題要比等到最后一次集中修改所有問(wèn)題要容易得多痹扇。

敏捷開(kāi)發(fā)生態(tài)系統(tǒng)

敏捷開(kāi)發(fā)模型在實(shí)際中有著很多表現(xiàn)形式铛漓。極限過(guò)程開(kāi)發(fā)(xp)時(shí)其中的最為廣泛應(yīng)用的一種。還有很多其他的鲫构,比如:自適應(yīng)軟件開(kāi)發(fā)浓恶、Scrum、動(dòng)態(tài)系統(tǒng)開(kāi)發(fā)结笨、Crystal包晰、特征驅(qū)動(dòng)開(kāi)發(fā)湿镀、精益軟件開(kāi)發(fā)、敏捷建模伐憾、敏捷統(tǒng)一過(guò)程等勉痴。這里只舉兩個(gè)例子介紹一下其主要的特點(diǎn)。

自適應(yīng)軟件開(kāi)發(fā)主要從整體上強(qiáng)調(diào)軟件項(xiàng)目團(tuán)隊(duì)具有自我組織的動(dòng)態(tài)性树肃、人與人之間的協(xié)作蒸矛、個(gè)人以及團(tuán)隊(duì)的學(xué)習(xí),從而使團(tuán)隊(duì)更有可能取得成功胸嘴。

Scrum開(kāi)發(fā)方法雏掠,這個(gè)開(kāi)發(fā)方法最大的特征就是每日例會(huì)。在每日例會(huì)中筛谚,每個(gè)人交流自己昨天干了什么,今天將要干什么停忿,以及自己在工作中遇到了哪些問(wèn)題驾讲。這樣大大地加強(qiáng)了團(tuán)隊(duì)成員之間的交流。

我們可以看到席赂,很多人都投入到了敏捷開(kāi)發(fā)的研究和使用中吮铭。敏捷開(kāi)發(fā)確實(shí)有著非常強(qiáng)大的生命力。

敏捷開(kāi)發(fā)與傳統(tǒng)開(kāi)發(fā)方法的比較

優(yōu)勢(shì)

敏捷開(kāi)發(fā)的高適應(yīng)性颅停,以人為本的特性谓晌,和輕量型的開(kāi)發(fā)方法即以測(cè)試為驅(qū)動(dòng)取代了以文檔為驅(qū)動(dòng),這三個(gè)主要的特點(diǎn)癞揉,也就是敏捷開(kāi)發(fā)相對(duì)與傳統(tǒng)開(kāi)發(fā)方式的主要有點(diǎn)纸肉。因?yàn)樗拥撵`活并且更加充分的利用了每個(gè)開(kāi)發(fā)者的優(yōu)勢(shì),調(diào)動(dòng)了每個(gè)人的工作熱情喊熟。

劣勢(shì)

與傳統(tǒng)開(kāi)發(fā)方式相比柏肪,敏捷開(kāi)發(fā)的最主要的劣勢(shì)在于敏捷開(kāi)發(fā)歡迎新的需求,而在每次新的需求產(chǎn)生時(shí)都可能引起整個(gè)系統(tǒng)的大幅度的修改芥牌。因?yàn)殚_(kāi)發(fā)者在開(kāi)發(fā)上一個(gè)版本的時(shí)候烦味,完全沒(méi)有考慮以后的優(yōu)化將要如何進(jìn)行。這樣的開(kāi)發(fā)方式實(shí)際的軟件開(kāi)發(fā)過(guò)程中壁拉,并不一定總是有效的谬俄。

而另一個(gè)方面,敏捷開(kāi)發(fā)因?yàn)槿狈芏嘣诿艚蓍_(kāi)發(fā)中被認(rèn)為“不重要”的文檔弃理,這樣在一個(gè)大型項(xiàng)目比如一個(gè)操作系統(tǒng)開(kāi)發(fā)的時(shí)候溃论,由于其項(xiàng)目周期很長(zhǎng),所以很難保證開(kāi)發(fā)的人員不更換痘昌,而沒(méi)有文檔就會(huì)造成在交接的過(guò)程中出現(xiàn)很大的困難蔬芥。

參考文獻(xiàn)

[1]基于scrum敏捷開(kāi)發(fā)的軟件過(guò)程管理研究 王敏

[2]敏捷開(kāi)發(fā)在軟件開(kāi)發(fā)的過(guò)程中的應(yīng)用研究 彭志楠

[3]敏捷軟件開(kāi)發(fā)技術(shù)研究 周瑩瑩

[4]敏捷軟件開(kāi)發(fā)應(yīng)用研究 范洪濤

[5]http://agilemanifesto.org/iso/zhchs/manifesto.html 敏捷軟件開(kāi)發(fā)宣言

[6]http://agilemanifesto.org/iso/zhchs/manifesto.html CSDN 敏捷開(kāi)發(fā)的優(yōu)缺點(diǎn)

[7]http://www.vaikan.com/agile-programming-10-years-on-did-it-deliver/ 外刊IT評(píng)論 敏捷十年梆靖,成效幾何?

[8]http://www.infoq.com/cn/news/2010/02/scrum-failings Bob大叔關(guān)于Scrum和敏捷的七條缺陷

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笔诵,一起剝皮案震驚了整個(gè)濱河市返吻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乎婿,老刑警劉巖测僵,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谢翎,居然都是意外死亡捍靠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門森逮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榨婆,“玉大人,你說(shuō)我怎么就攤上這事褒侧×挤纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵闷供,是天一觀的道長(zhǎng)烟央。 經(jīng)常有香客問(wèn)我,道長(zhǎng)歪脏,這世上最難降的妖魔是什么疑俭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮婿失,結(jié)果婚禮上钞艇,老公的妹妹穿的比我還像新娘。我一直安慰自己豪硅,他們只是感情好香璃,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著舟误,像睡著了一般葡秒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嵌溢,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天眯牧,我揣著相機(jī)與錄音,去河邊找鬼赖草。 笑死学少,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秧骑。 我是一名探鬼主播版确,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扣囊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了绒疗?” 一聲冷哼從身側(cè)響起侵歇,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吓蘑,沒(méi)想到半個(gè)月后惕虑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磨镶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年溃蔫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琳猫。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伟叛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脐嫂,到底是詐尸還是另有隱情统刮,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布雹锣,位于F島的核電站网沾,受9級(jí)特大地震影響癞蚕,放射性物質(zhì)發(fā)生泄漏蕊爵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一桦山、第九天 我趴在偏房一處隱蔽的房頂上張望攒射。 院中可真熱鬧,春花似錦恒水、人聲如沸会放。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咧最。三九已至,卻和暖如春御雕,著一層夾襖步出監(jiān)牢的瞬間矢沿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工酸纲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捣鲸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓闽坡,卻偏偏與公主長(zhǎng)得像栽惶,于是被迫代替她去往敵國(guó)和親愁溜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348