進入項目組到現在也就大概一年半,而在這短短的一年半時間内,經曆了傳統的瀑布開發模型、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 但并不是每一個都能很好的執行,後面會陸續就這13practise,以及一些相關的工具的使用寫一些記錄下來。 |