一、令人煩惱的需求變更
作為一個軟件項目經理,在項目開發(fā)進行中,你是否遇到過這樣的問題:客戶的一個電話,就推翻了之前你與客戶、與你自己的開發(fā)團隊,經過再三討論而確認定下來的需求。之后你就重新開始了和客戶、和你的開發(fā)團隊進入新一輪的需求談論中,甚至是無休止的談論。甚至要重新設計現有的架構。
而面對這種情況,作為項目經理的你是否會說:“我們無法拒絕客戶,但也無法立即滿足他的新需求,所以只好是推到以后再進行完善?!被蛘?,更極端些的想法:客戶總是在異想天開,客戶的需求在技術上根本無法實現……
在與客戶新的需求論證中,你是否會對需求確認的重要性產生懷疑。因為在一開始已經多次和客戶溝通,也在沒有任何異議的情況下得到了明確的答復,但當開發(fā)項目在不斷演進,客戶對系統(tǒng)的理解逐步加深之時,他們最終還是推翻以前自己想要的需求。而這時你會認為對于需求,只有獲取,沒有確認。
而因為需求變更的原因,致使項目多次的延期后,客戶仍然說這不是他們想要的。你還是在抱怨客戶的需求像天氣一樣一直變個不停,最終,無論是你的抱怨還是客戶的需求變更只會令項目組中的開發(fā)人員疲于奔命,無所適從。
在你的軟件項目進行開發(fā)之前,你和你的項目成員是否有過這樣的想法,在這次軟件項目開發(fā)中,一定要消除需求變更,不讓談論好的需求發(fā)生任何的變更?
首先,這種想法和認識是錯誤的,軟件項目開發(fā)中的需求變更是不能被完全消除的。無論是項目經理還是項目開發(fā)人員,最好在項目開始之前就消除這種想法。需求變更是不可能被消除的,而“消除需求變更”的想法卻需要被消除。消除需求變更的所有的努力和想法,在項目開發(fā)進行中通常都是費力不討好。
項目開發(fā)過程中,需求的變更是不可避免的。
雖然一般情況下,項目經理花費了大量的心力和氣力去避免需求變更,可最后需求變更總是會出現。但這并不意味著項目不應該做這方面的工作,無論是項目經理,還是開發(fā)人員對于需求變更的正確態(tài)度應該和對待軟件測試的態(tài)度一樣,在需求變更發(fā)生之前盡量減少需求變更發(fā)生的情況,以將需求變更帶來的風險降到最低。
二、需求變更的產生原因
在軟件開發(fā)項目中,需求變更可能來自方案服務商、客戶或產品供應商等,當然,也可能來源于項目組內部。
對于需求變更發(fā)生的原因,細細追究起來無外乎以下幾種原因:
1、范圍沒有圈定就開始細化
細化工作是由需求分析人員完成的,一般是根據用戶提出的描述性的、總結性的短短幾句話去細化的,提取其中的一個個功能,并給出描述(正常執(zhí)行時的描述和意外發(fā)生時的描述)。
當細化到一定程度并開始系統(tǒng)設計時,范圍會發(fā)生變化,那細節(jié)用例的描述可能就有很多要改動。如原來是人工手動添加的數據,要改成根據信息系統(tǒng)計算出來,而原來的一個屬性的描述要變成描述一個實體等。
2、沒有指定需求的基線
需求的基線是指是否容許需求變更的分界線。
隨著項目的進展,需求的基線也在變化。是否容許變更的依據是合同以及對成本的影響,比如軟件整體結構已經設計出來,是不容許改變需求范圍的,因為整體結構會對整個項目的進度和成本有初步預算。隨著項目的進展,基線將越定越高(容許的變更將越少)。
3、沒有良好的軟件結構適應變化
組件式的軟件結構就是提供了快速適應需求變化的體系結構,數據層封裝了數據訪間邏輯,業(yè)務層封裝了業(yè)務邏輯,表示層展現用戶表示邏輯。
但適應變化必須遵循一些松耦合合原則,各層之間還是存在一些聯系的,設計要力求減少會對接口入口參數產生變化。如果業(yè)務邏輯封裝好了,則表示層界面上的一些排列或減少信息的要求是很容易適應的。如果接口定義得合理,那么即使業(yè)務流程有變化