敏捷軟件開發(Agile Software Development)
From 《敏捷軟件開發 原則、模式與實踐》(Agile Software Development: Principles, Patterns, and Practices)
敏捷軟件開發宣言
我們正在通過親身實踐以及幫助他人實踐,揭示更好的軟件開發方法。通過這項工作,我們認爲:
個體和交互 勝過 過程和工具
可以工作的軟件 勝過 面面俱到的文檔
客戶合作 勝過 合同談判
響應變化 勝過 遵循計劃
雖然右項也具有價值,但我們認爲左項具有更大的價值。
敏捷宣言遵循的原則
我們遵循以下原則:
01. 我們最優先要做的是通過儘早的、持續的交付有價值的軟件來使客戶滿意。
02. 即使到了開發的後期,也歡迎改變需求。敏捷過程利用變化來爲客戶創造競爭優勢。
03. 經常性地交付可以工作的軟件,交付的間隔可以從幾個星期到幾個月,交付的時間間隔越短越好。
04. 在整個項目開發期間,業務人員和開發人員必須天天都在一起工作。
05. 圍繞被激勵起來的個體來構建項目。給他們提供所需的環境和支持,並且信任他們能夠完成工作。
06. 在團隊內部,最具有效果並且富有效率的傳遞信息的方法,就是面對面的交談。
07. 可以工作的軟件是首要的進度衡量標準。
08. 敏捷過程提倡可持續的開發速度。責任人、開發者和用戶應該能夠保持一個長期的、恆定的開發速度。
09. 不斷地關注優秀的技能和良好的設計會增強敏捷能力。
10. 簡單——使未完成的工作最大化的藝術——是根本的。
11. 最好的構架、需求和設計出自於自組織(self-organized)的團隊。
12. 每隔一定時間,團隊會在如何才能更有效地工作方面進行反省,然後相應地對自己的行爲進行調整。
極限編程(XP, eXtreme Programming)實踐
面向對象設計(OOD)的原則
開放-封閉原則(OCP, The Open-Closed Principle)
軟件實體(類、模塊、函數等)應該是可擴展的(功能上),但是不可修改(源代碼)。
單一職責原則(SRP, The Single Responsibility Principle)
就一個類而言,應該僅有一個引起它變化的原因。
里氏替換原則(LSP, The Liskov Substitution Principle)
子類型必須能夠替換掉它們的基類型。
依賴倒置(轉)原則(DIP, The Dependency Inversion)
抽象不應該依賴於細節,細節應該依賴於抽象。
接口隔離原則(ISP, The Interface Segregation Principle)
不應該強迫客戶依賴於他們不用的方法。接口屬於客戶,不屬於它所在的類層次結構。
重用發佈等價原則(REP, The Reuse/Release Equivalence Principle)
重用的粒度就是發佈的粒度。
共同封閉原則(CCP, The Common Closure Principle)
包中的所有類對於同一類性質的變化應該是共同封閉的。一個變化若對一個包產生影響,則將對該包中的所有類產生影響,而對其他的包不造成任何影響。
共同重用原則(CRP, The Common Reuse Principle)
一個包中的所有類應該是共同重用的。如果重用了包中的一個類,那麼就要重用包中的所有類。
無環依賴原則(ADP, The Acyclic Dependencies Principle)
在包的依賴關係圖中不允許存在環。
穩定依賴原則(SDP, The Stable Dependencies Principle)
朝着穩定的方向進行依賴。
穩定抽象原則(SAP, The Stable Abstractions Principle)
包的抽象程度應該和其穩定程度一致。