敏捷開發,聽到這個詞,想必大家也都不陌生,很多地方都在講敏捷——敏捷實踐、敏捷管理、敏捷開發等等。那他們所講的敏捷和我今天要講的敏捷開發,是不一樣的概念嗎?其實,說不一樣,是不太準確的。敏捷開發主要體現的是一種思想,敏捷的思想。這次我的分享是比較聚焦于軟件項目的敏捷開發實踐。但敏捷思想適用于所有的活動。
什么是敏捷開發?
敏捷開發(Aglie Development)不是指某一種具體的方法論、過程或框架,而是一組價值觀和原則。
怎么理解呢?
首先,敏捷并不是一門具體的技術,而是一種理念或者說是一種思想。他可以指導我們更加高效的開發。
其次,敏捷開發都具有以下共同的特征:
迭代式開發、增量交付、開發團隊和用戶反饋推動產品開發、持續集成、開發團隊自我管理等。
最后,相比于“傳統”的瀑布開發模式,敏捷開發是一種“現代”的開發模式。
以往的軟件工程已瀑布開發模式居多,瀑布開發模式比較適用于開發周期以年計算的大型軟件系統,任何環節都是基于上一個環節的輸出,才能往下進行的。
隨著互聯網的興起,信息變得透明,而且傳播速度之快,導致市場變化加速,用戶需求加速變化,如果用軟件工程的開發模式,做出來的軟件,沒有面世就被淘汰了。
敏捷開發順應時代的發展,追求的是快速迭代,靈活應對變化,弱工具、弱流程的管理方式,注重實效快速響應市場需求,所以說敏捷開發是一種“現代”的開發模式。
在敏捷開發中,軟件項目在構建初期就被切分成多個子項目,各個子項目的成果都經過測試,具備可視、可集成和可運行使用的特征。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用的狀態。
以古典老師的《超級個體》為例。全年的超級個體,可以看做是一個大項目(大目標),把這個大目標分解成一個一個小目標,每周一個主題,每個主題都是可以單獨完成,具備可單獨使用,也可以集成在一起使用。把每一周的主題集成在一起,最終就實現了《超級個體》這個大目標。
具體敏捷開發實踐
我們一直說敏捷開發是一種指導思想或開發方式,但經過20多年的發展,具體的軟件項目中敏捷開發有哪些呢?
Scrum,極限編程(XP),精益軟件開發(Lean Software Development),動態系統開發方法(DSDM),特征驅動開發(Feature Driver Development),水晶開發(Crystal Clear)等等。
我所比較了解的是Scrum,極限編程(XP)。區別是scrum有一套標準的流程規范,xp注重實踐。現實中2者結合使用。
《敏捷宣言》
通過身體力行和幫助他人來揭示更好的軟件開發方式。
經由這項工作,形成了如下價值觀:
個體與交互 重于 過程和工具
可用的軟件 重于 完備的文檔
客戶協作 重于 合同談判
響應變化 重于 遵循計劃
在每對比對中,后者并非全無價值,但我們更看重前者。
敏捷開發十二原則
1.我們的最高目標是,通過盡早和持續地交付有價值的軟件來滿足客戶。
2.歡迎對需求提出變更——即使是在項目開發后期。要善于利用需求變更,幫助客戶獲得競爭優勢。
3.要不斷交付可用的軟件,周期從幾周到幾個月不等,且越短越好
4.項目過程中,業務人員與開發人員必須在一起工作。
5.要善于激勵項目人員,給他們以所需要的環境和支持,并相信他們能夠完成任務。
6.無論是團隊內還是團隊間,最有效的溝通方法是面對面的交談。
7.可用的軟件是衡量進度的主要指標。
8.敏捷過程提倡可持續的開發。項目方、開發人員和用戶應該能夠保持恒久穩定的進展速度。
9.對技術的精益求精以及對設計的不斷完善將提升敏捷性。
10.要做到簡潔,即盡最大可能減少不必要的工作。這是一門藝術。
11.最佳的架構、需求和設計出自于自組織的團隊。
12.團隊要定期反省如何能夠做到更有效,并相應地調整團隊的行為。
敏捷開發宣言比較抽象,但是敏捷開發十二原則就非常具體了,上面的十二條原則都是開發過程的經驗總結。
例如第12條原則,團隊要定期的反省,也就是我們日常說的復盤,這一點上一期思想夜宴就做的不好。這一期開始調整,及時的復盤總結,今天的最后一項是總結互評,希望通過總結互評,感謝每一位的付出,也希望大家總結本次活動的優點及不足,怎么樣才能做出更好的思想夜宴活動。