ASD: Agile Software Development、 敏捷軟件開發
什么是敏捷軟件開發?
敏捷軟件開發是一個概念意義上的框架,用來取代軟件工程項目的概念;它強調在項目的整個生命周期中,擁抱并促進由于軟件進化式的發展所帶來的變化。
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最精辟的論述。
請注意其中的三個關鍵詞:
在項目的整個生命周期中:這就涉及到了【敏捷項目管理】、【敏捷需求獲取】、狹義的【敏捷軟件開發】三個主要的領域和過程。要注意的是,上述三個過程并不是互相分開的,而是你中有我,我中有你。
擁抱并促進變化:世界上唯一不變的是變化。不論在任何領域,漠視、甚至否認、抗拒變化,都不是一個理性,嚴肅的人所應有的態度。學會如何識別變化的大勢,并在可能的時候,促使變化向好的方向發展。這才是面對變化的正確應對之法。
軟件進化式的發展:雖然上面提到促進變化的發展,但是軟件的演化過程,我相信是有其自身內在邏輯的,存在一些根本規律和指導方針;并不是完全以人的主觀意識為主導。
老子講“順勢而為,無為無不為”,我認為是對上述后兩點的精確概括與指導。
了解了這三個方面,下面就要引入大名鼎鼎、如雷貫耳、耳朵都要磨出糨子來的敏捷宣言(Manifesto for Agile Software Development)了,讓我們看看2001年提出的第一版的敏捷軟件開發宣言怎么說:
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 interactions 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.
我們正在通過實踐和幫助其他人實踐,揭示更好的開發軟件的方法。我們從實踐中得出的價值觀是:
☆ 人和交互重于過程和工具。
☆ 可以工作的軟件重于求全責備的文檔。
☆ 客戶合作重于合同談判。
☆ 隨時應對變化重于循規蹈矩。
雖然右項也具有價值,但我們認為左項具有更大的價值。
經過六年的演變,敏捷大師們又提出了敏捷宣言的重構版本,由于尚未形成共識,暫不在此提出。
在敏捷宣言的背后,有其遵循的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 sponsors, developers, and users should be able to maintain a constant 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.
★ 我們最優先要做的是通過盡早的、持續的交付有價值的軟件來使客戶滿意。
★ 即使到了開發的后期,也歡迎改變需求,敏捷過程利用變化來為客戶創造競爭優勢。
★ 經常性地交付可以工作的軟件,交付的間隔可以從幾個星期到幾個月,交付的時間間隔越短越好。
★ 在整個項目開發期間,業務人員和開發人員必須天天都在一起工作。
★ 圍繞被激勵起來的個體來構建項目。給他們提供所需的環境和支持,并且信任他們能夠完成工作。
★ 在團隊內部,最具有效果并且富有效率的傳遞信息的方法,就是面對面的交流。
★ 工作的軟件是首要的進度度量標準。
★ 敏捷過程提倡可持續的開發速度。責任人、開發者和用戶應該能夠保持一個長期的、恒定的開發速度。
★ 不斷地關注優秀的技能和好的設計會增強敏捷能力。
★ 簡單--使未完成的工作最大化的藝術---是根本的。
★ 最好的構架、需求和設計出自于自組織的團隊。
★ 每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然后相應地對自己的行為進行調整。