我在去年做的幾個專案裡就開始嘗試使用迭代開發方法,直到了07年第三季度時我拜讀了的robert martin的《敏捷軟體開發:原則、模式與實踐》,於是就可以標榜自己是在嘗試敏捷開發了,俺也xp了。
我這麼xp了幾個專案下來,沒覺得專案組真正提高了多少需求響應速度,但很奇怪的是迭代開發方法的確大大提高了專案速度,尤其是alpha階段特別明顯。前陣子我一直沒想明白,我並沒有對部門固有的開發流程改變多少,工程師也都是第一次做專案的新手,但為什麼進度能比以前快很多了呢?現在終於是想通了,原來迭代開發還有乙個鮮為人知的好處,居然沒有哪本書上寫到。哈,個人發現。
什麼好處呢?
我們先說軟體的專案計畫方法是從木土、機械等傳統專案管理方法中繼承學習下來的。蓋房子顯然是傳統的瀑布型,先綁鋼筋,然後蓋模板,最後澆水泥,保養幾天等水泥硬度足夠後就再往上蓋一層。首先,這是序列開發,順序絕對不能顛倒;其次,這是絕對不可能用迭代方法的,比如先綁50%的鋼筋,隨便蓋個60%的模板,然後倒30%的水泥,回過頭來看看鋼筋不夠再往裡頭加剩餘的50%鋼筋。所以傳統的甘特圖也就特別適合表示這種「不能迭代的序列任務」。
而軟體呢,我覺得不同於傳統專案管理的主要特點之一,就是可以迭代開發。比如乙個嵌入式系統內,我可以先簡單把驅動層寫個讀寫等主要功能,次要功能都留空;然後應用程式先呼叫這幾個主要功能,ui上簡單畫幾個對話方塊和按鈕,這樣系統能初始化、能讀寫就是第一次迭代了,驗證完從硬體到ui的主要功能沒問題後,再做第二次迭代把細節功能做上去,比如原來執行引數是在**裡寫死的,現在允許動態修改啦,原來的函式結果出錯就程式退出了,現在提高健壯性會有ui提示然後退回到出錯操作前的狀態啦,等等,最後才往ui上新增漂亮的。這種可迭代性是軟體開發獨有的。
好了,關鍵點就在這裡:假設在該專案裡,硬體、驅動、應用、介面這是乙個序列開發過程(當然不是所有專案都會在這幾個問題上序列),硬體需要驅動來驗證正確性,驅動寫完介面需要應用的呼叫才能工作,而應用又通過介面被呼叫,最終由使用者操作。我們把任務抽象出來,假設在某次軟體開發中,abcd四個任務可能是像下圖那樣序列的。所以完成abcd四個任務一共需要11天。實際上任務bcd只用了a的一部分功能。(比如應用程式的驗證除錯只需要被人機介面呼叫,而與花哨的貼圖無關)
這時候我們用迭代方法,如下圖。a先用2天時間出乙個簡單的版本,實現了b和c需要用到的功能,然後提交該版本後,bc任務立即可以開始,所以到d任務完成只需要9天時間。而a在完成迭代1後,立刻開始迭代2的工作。假設迭代1的**在最終產品裡一點都不用,a仍然花了4天完成他的模組,但截止到abcd任務全部完成只需要9天。
結論如下:
(1) 通過迭代開發可以縮短序列任務中相互等待的時間。
(2) 只要發現任務變成序列的,會相互等待,那麼就應該考慮快速出迭代版本來「解開序列」。
(2) 在迭代開發中,某些工程師的工作量被增加了,但從全域性來看開發時間縮短了。
這就是本文標題所說「巧用迭代開發解開序列任務」的意思了。我還沒看到哪本書上明確講了用迭代開發可以解開序列任務等待。
但在實際操作中,最容易遇到的阻力就是:
(1)如果迭代1和迭代2由同乙個工程師完成,那麼多數工程師不願意額外增加自己的工作量。
以上圖的a為例,開發完任務模組需要4天,而多迭代一次則多做兩天,更令他惱火的是,這多花的2天裡做的第一次迭代只有4天的生命週期,4天後就被替代掉了,那些**再也用不到了。我在沒有明確提出這套理論之前,第一次迭代總是由自己完成,純給別人做墊腳了。但這樣一來工程師a也不樂意:你都把功能實現了,還要我幹嘛?你自己寫完得了。所以第二種阻力就是:
(2)如果迭代1和迭代2由兩個人分別完成,那麼迭代2的工程師工作積極性會受到打擊,感覺是給迭代1擦屁股的。
這就是我要寫這篇文章的主要原因。我們需要要有明確的理論指導,好讓團隊成員都明白用迭代方式解開序列任務的意義。卡耐基《人性的弱點》中描述了這種情形:激發他人高尚的動機。我們在迭代開發中多花費的個人精力、多寫一些甚至最終產品裡用不到的**,但是為他人的模組墊腳,減少序列任務中相互等待,從而提高整個專案速度,這是一件挺高尚的事。在實施迭代遇到阻力時,對團隊成員曉之以理,根據這套理論闡明工作意義,還是能取到比較好的效果。
專案規劃時,我可以立刻看到的序列任務有
實際上無論是xp也好,cmm也好,沒有哪套理論是真正的銀彈,教條作風對於工作無益,所謂招無定式,只有在合適的場合使用合適的方法有效推進了專案進展,才能算成功。
迭代方法可以有效地解開序列任務、可以讓客戶更早地看到產品、可以提高對需求變化的響應速度、可以靠持續的頻繁的里程碑來鼓舞士氣,但它也絕不是十全十美的,它增加了模組開發工作量、增加了整合工作量、增加了測試的工作量和壓力,所以關鍵看運用。總體來說,當序列任務相互等待、人員利用率因此達不到100%時,迭代開發就是值得的;但如果人員利用率已經滿負荷了,或者任務編排巧妙,避開了序列等待,那麼對於子模組的迭代方法就要慎重權衡利弊.
springmvc註解開發
1.配置dispatcherservlet 2.在springmvc中配置三大元件 3.在spring容器中配置action 使用 controller 與此同型別的還有 service responsitory component 使用spring容器的元件掃瞄,自動掃瞄到action在sprin...
Spring註解開發
spring註解開發 dao層用的註解 repository service層的註解 service controller表現層的註解 controller 以上的三個註解都是用 componment新增三個衍生的註解 屬性依賴注入 value的屬性注入 value wwtmy love 注入的是屬...
spring註解開發
第一步,設定xml約束檔案 第一步,設定xml約束檔案 xmlns xsi xmlns context xsi schemalocation spring beans.xsd spring context.xsd 第二步,定義bean 除了 component外,spring提供了3個功能基本和 c...