進入項目組到現在也就大概一年半,而在這短短的一年半時間內,經曆了傳統的瀑布開發模型、XP
編程模型探索、到現在的敏捷開發。
剛開始的半年是傳統的瀑布開發模型:一個月做需求,一個月做prototype,然後兩個月開發,開發出來之後QA才開始介入,然後就是兩個月的bug
fixing,最後產品上線。這種模式帶來兩個棘手的問題:1)如果需求變更頻繁(很正常的),特別是越到開發的後期,這種需求的變更往往會帶來越多的工作量和複雜度,而這樣往往又會引入很多新的defect,從而產品的品質變得很不穩定;2)從時間上看,從開始做需求,到客戶能夠看到產品(還未必能使用呢),至少需要半年的時間。而對於我們這個屬於市場探索型的項目組,半年的時間足以讓市場變兩番,也就是說產品跟不上市場。
於是大家就想著是不是可以用一些別的開發模型。由於沒有請諮詢公司,所以就只好自己摸索著來。剛開始選了XP編程中的幾個方法:Code Review, Standup Meeting,
Story wall, Pair programming. 但實施起來真的很難,有時連做都沒做,即使做了也從結果中看不出成效。就這樣大概掙紮了4-5個月,“機緣巧合”,我們項目組抽調到現在這個大項目組,做另外一個系統。而這個大項目組是按照敏捷編程(Agile programming)是來工作的,
他們之前請過一個蠻大的諮詢公司來指導實施Agile practice。所以我們也可以藉著這個機會,好好學習Agile programing應該如何實施。
維基百科上對Agile的解釋是這樣的:Agile software development
refers to a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams.
我們按照主謂賓來看看:1)敏捷開發是開發方法,但它不只是一個方法組成的,是由一組方法來實現的。2)它是基於反覆式開發法的。百度知道上的解釋是:這種每次只設計和實現系統的一部分,
逐步逐步完成的方法叫反覆式開發法,
每次設計和實現一個的一個階段叫做一個迭代. 也就是說,每一次只實現了系統的一部分功能,但這部分功能是完整的,使用者完全可以使用的。我覺得反覆式開發法是針對需求不穩定而生的,我們前面說到了瀑布開發模型對於需求變更會很煩,因為很多時候是基於需求穩定的全域設計,但需求一變就意味著整個系統都可能會變,這樣的事情太恐怖了。所以反覆式開發法出現了,一個完整的迭代大概就一個月,如果使用者覺得需要增加哪個功能,或者他要的不是這樣的頁面,沒關係,下個月客戶就可以看到他想要的。
一個迭代式開發的流程大概如:
除了定義之外,大家還為Agile設立了4個宣言:
1)Individuals and interactions over processes and tools(個體和互動
重於 過程和工具)
2)Working software over comprehensive documentation(可用的軟體
重於 完備的文檔)
3)Customer collaboration over contract negotiation(客戶協作
重於 合約談判)
4)Responding to change over following a plan(響應變化
重於 遵循計劃)
Agile的定義裡面說它是一組方法組成的,下面我們可以看看Agile的兵器庫有哪些:
林林總總大概有20個主流的實施,我們這邊採用的大概有13個,分別是:
1) Automated Build/Deployed
2) Automated Testing
3) Coding Standards
4) Continuous Integration
5) Pair Programming
6) Card Wall
7) User Stories
8) Refactoring
9) Simple Design
10) Test Driven Development
11) Retrospectives
12) Daily Stand-ups
13) Iteration