敏捷软件开发(Agile Software Development)简介之:什么是敏捷软件开发?
?http://www.ruby-lang.org.cn/read--tid-604.html
敏捷軟件開發(fā)(Agile Software Development)簡介之:什么是敏捷軟件開發(fā)?
本文部分內(nèi)容來自:http://en.wikipedia.org/wiki/Agile_software_development縮略詞說明:
ASD: Agile Software Development、 敏捷軟件開發(fā)
什么是敏捷軟件開發(fā)?
敏捷軟件開發(fā)是一個概念意義上的框架,用來取代軟件工程項目的概念;它強調(diào)在項目的整個生命周期中,擁抱并促進由于軟件進化式的發(fā)展所帶來的變化。
Agile software development is a conceptual framework for undertaking software engineering projects that embraces and promotes
evolutionary change throughout the entire life-cycle of the project.
這段定義來自wikipedia,我認為是我接觸ASD以來,對ASD最精辟的論述。
請注意其中的三個關(guān)鍵詞:
在項目的整個生命周期中:這就涉及到了【敏捷項目管理】、【敏捷需求獲取】、狹義的【敏捷軟件開發(fā)】三個主要的領(lǐng)域和過程。要注意的是,上述三個過程并不是互相分開的,而是你中有我,我中有你。
擁抱并促進變化:世界上唯一不變的是變化。不論在任何領(lǐng)域,漠視、甚至否認、抗拒變化,都不是一個理性,嚴肅的人所應有的態(tài)度。學會如何識別變化的大勢,并在可能的時候,促使變化向好的方向發(fā)展。這才是面對變化的正確應對之法。
軟件進化式的發(fā)展:雖然上面提到促進變化的發(fā)展,但是軟件的演化過程,我相信是有其自身內(nèi)在邏輯的,存在一些根本規(guī)律和指導方針;并不是完全以人的主觀意識為主導。
老子講“順勢而為,無為無不為”,我認為是對上述后兩點的精確概括與指導。
了解了這三個方面,下面就要引入大名鼎鼎、如雷貫耳、耳朵都要磨出糨子來的敏捷宣言(Manifesto for Agile Software Development)了,讓我們看看2001年提出的第一版的敏捷軟件開發(fā)宣言怎么說:
We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:
☆ Individuals and interacti***** over processes and tools
☆ Working software over comprehensive documentation
☆ Customer collaboration over contract negotiation
☆ Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
我們正在通過實踐和幫助人實踐,揭示更好的開發(fā)軟件的方法。我們從實踐中得出的價值觀是:
☆ 人和交互重于過程和工具。
☆ 可以工作的軟件重于求全責備的文檔。
☆ 客戶合作重于合同談判。
☆ 隨時應對變化重于循規(guī)蹈矩。
雖然右項也具有價值,但我們認為左項具有更大的價值。
經(jīng)過六年的演變,敏捷大師們又提出了敏捷宣言的重構(gòu)版本,由于尚未形成共識,暫不在此提出。
在敏捷宣言的背后,有其遵循的12條原則:
Principles behind the Agile Manifesto
We follow these principles:
☆ Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
☆ Welcome changing requirements, even late in development. Agile processes harness change for the customer\'s competitive advantage.
☆ Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
☆ Business people and developers must work together daily throughout the project.
☆ Build projects around motivated individuals. Give them the environment and support they need,
and trust them to get the job done.
☆ The most efficient and effective method of conveying information to and within a development
team is face-to-face conversation.
☆ Working software is the primary measure of progress.
☆ Agile processes promote sustainable development. The sp*****ors, developers, and users should be able to maintain a c*****tant pace indefinitely.
☆ Continuous attention to technical excellence and good design enhances agility.
☆ Simplicity--the art of maximizing the amount of work not done--is essential.
☆ The best architectures, requirements, and designs emerge from self-organizing teams.
☆ At regular intervals, the team reflects on how to become more effective, then tunes and adjusts
its behavior accordingly.
★ 我們最優(yōu)先要做的是通過盡早的、持續(xù)的交付有價值的軟件來使客戶滿意。
★ 即使到了開發(fā)的后期,也歡迎改變需求,敏捷過程利用變化來為客戶創(chuàng)造競爭優(yōu)勢。
★ 經(jīng)常性地交付可以工作的軟件,交付的間隔可以從幾個星期到幾個月,交付的時間間隔越短越好。
★ 在整個項目開發(fā)期間,業(yè)務人員和開發(fā)人員必須天天都在一起工作。
★ 圍繞被激勵起來的個體來構(gòu)建項目。給他們提供所需的環(huán)境和支持,并且信任他們能夠完成工作。
★ 在團隊內(nèi)部,最具有效果并且富有效率的傳遞信息的方法,就是面對面的交流。
★ 工作的軟件是首要的進度度量標準。
★ 敏捷過程提倡可持續(xù)的開發(fā)速度。責任人、開發(fā)者和用戶應該能夠保持一個長期的、恒定的開發(fā)速度。
★ 不斷地關(guān)注優(yōu)秀的技能和好的設(shè)計會增強敏捷能力。
★ 簡單--使未完成的工作最大化的藝術(shù)---是根本的。
★ 最好的構(gòu)架、需求和設(shè)計出自于自組織的團隊。
★ 每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然后相應地對自己的行為進行調(diào)整。
?
==============
http://blog.csdn.net/barfoo/article/details/2595942
這周5和周6參加了兩天公司組織的Agile相關(guān)知識的培訓,對Agile的認識比以前更多了一些。初次接觸Agile大概在四五年前,大約是剛上研究生的時候。在學校的圖書館中看到了敏捷開發(fā)和極限編程(XP)等字眼的書,當時沒太在意,感覺自身的專業(yè)方向不搭邊,隨便翻翻看,發(fā)現(xiàn)也沒怎么看懂,囧。
???? 從這幾年的工作經(jīng)驗來開,當時沒看懂是應該的,看懂了才是怪事。Agile的開發(fā)模式需要有相當經(jīng)歷的開發(fā)經(jīng)驗的人才能夠理解,因為這是一個“草根”的開發(fā)模式,或者說做事哲學。
??? ? ?? 1. Agile是什么?
???? ? ? ? ? ?? 很難對Agile有個明確的定義說明什么是Agile的,什么不是Agile的。Agile從出生開始即是為了解決軟件開發(fā)中過重的開發(fā)模式而誕生的,為了減少文檔驅(qū)動的開發(fā)模型中反饋周期過長,難以應對需求變化而誕生的。它是針對這些缺點而提出的改進方式。Agile的哲學是“結(jié)果是最重要的,所有的過程手段都是為結(jié)果服務的;如果過程導致結(jié)果不理想,那就改進這個過程”。因此,Agile的開發(fā)模式是一個逐漸改進的方式,直到Team能夠應付不斷的需求變化,能夠快速響應,能夠快速的給客戶創(chuàng)造價值。我的理解:能夠滿足上述要求的開發(fā)模式都可以認為是Agile的。
?? ? ? ? 2. 文檔驅(qū)動 VS 測試驅(qū)動
??? ??? ???? ? 常規(guī)的開發(fā)模式是以文檔驅(qū)動的。需要有很詳細的需求文檔,根據(jù)需求文檔進行初始設(shè)計、詳細設(shè)計,然后是編碼實現(xiàn)和測試。這種模式有其優(yōu)點存在,比較適用于需求變化不是很大,變化速度不快的項目,典型的例子就是軍方的武器系統(tǒng)的開發(fā)。但這種模式對民用軟件行業(yè),特別是互聯(lián)網(wǎng)行業(yè)的項目而言就顯的太沉重了,基本上完全不能快速的響應政策、市場和客戶的變化。
??? ??? ???? ?? Agile提出了以測試驅(qū)動的開發(fā)模式。Agile中的測試強調(diào)自動化的單元測試和自動化的集成測試。以大量的可以自動化運行的單元測試保證任何微小的改動在check in代碼庫中之前都是邏輯正確的,自動化的集成測試則可以保證不同模塊之間的漏洞能夠盡早的發(fā)現(xiàn),能夠盡早的fix bug,減少后期修改bug的成本。
???? ??? ???? Agile的開發(fā)模式中,是測試先行的方式。它的特點如下:
???? ??? ???? 首先根據(jù)User Story編寫測試代碼,然后根據(jù)測試代碼的要求完成邏輯代碼。在這個階段不關(guān)注邏輯代碼的任何編碼標準和規(guī)范,也不關(guān)注代碼性能,以最小的時間代價實現(xiàn)正確的功能為終極目標。完成后開始運行測試代碼,直到所有的測試點都通過。
???? ??? ???? 完成上述任務后,我們就已經(jīng)初步擁有了一個可以正常運行,完成核心功能的系統(tǒng)了,這時候可以讓客戶參與進來,和客戶確認做出來的東西是不是真的是用戶需要的。與此同時,開發(fā)team需要對代碼進行重構(gòu),每次重構(gòu)都需要進行所有的測試代碼進行測試,保證重構(gòu)后不會引入新的bug。好的代碼結(jié)構(gòu)是不停重構(gòu)出來的。
??? ??? 3. Agile與技術(shù)架構(gòu)的矛盾
??? ??? ???? Agile要求迅速響應變化,但變化經(jīng)常給原有的設(shè)計帶來挑戰(zhàn)。Agile并不是不要設(shè)計直接進行開發(fā),Agile模式仍然是需要一定的預先設(shè)計的。特別是系統(tǒng)的核心,如數(shù)據(jù)存儲是DB還是文件系統(tǒng),而且這些核心設(shè)計是不能夠被推翻的,否則代價巨大不可接受。
總結(jié)
以上是生活随笔為你收集整理的敏捷软件开发(Agile Software Development)简介之:什么是敏捷软件开发?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Confluence与Jira整合之统一
- 下一篇: 极限编程XP