專案管理中的需求變更分析和解決之道
一、令人煩惱的需求變更
作為一個軟體專案經理,在專案開發進行中,你是否遇到過這樣的問題:客戶的一個電話,就推翻了之前你與客戶、與你自己的開發團隊,經過再三討論而確認定下來的需求。之後你就重新開始了和客戶、和你的開發團隊進入新一輪的需求談論中,甚至是無休止的談論,甚至要重新設計現有的架構。
而面對這種情況,作為專案經理的你是否會說:“我們無法拒絕客戶,但也無法立即滿足他的新需求,所以只好是推到以後再進行完善。”或者,更極端些的想法:客戶總是在異想天開,客戶的需求在技術上根本無法實現……
在與客戶新的需求論證中,你是否會對需求確認的重要性產生懷疑。因為在一開始已經多次和客戶溝通,也在沒有任何異議的情況下得到了明確的答覆,但當開發專案在不斷演進,客戶對系統的理解逐步加深之時,他們最終還是推翻以前自己想要的需求。而這時你會認為對於需求,只有獲取,沒有確認。
而因為需求變更的原因,致使專案多次的延期後,客戶仍然說這不是他們想要的。你還是在抱怨客戶的需求像天氣一樣一直變個不停,最終,無論是你的抱怨還是客戶的需求變更只會令專案組中的開發人員疲於奔命,無所適從。
在你的軟體專案進行開發之前,你和你的專案成員是否有過這樣的想法,在這次軟體專案開發中,一定要消除需求變更,不讓談論好的需求發生任何的變更?
首先,這種想法和認識是錯誤的,軟體專案開發中的需求變更是不能被完全消除的。無論是專案經理還是專案開發人員,最好在專案開始之前就消除這種想法。需求變更是不可能被消除的,而“消除需求變更”的想法卻需要被消除。消除需求變更的所有的努力和想法,在專案開發進行中通常都是費力不討好。
專案開發過程中,需求的變更是不可避免的。
雖然一般情況下,專案經理花費了大量的心力和氣力去避免需求變更,可最後需求變更總是會出現。但這並不意味著專案不應該做這方面的工作,無論是專案經理,還是開發人員對於需求變更的正確態度應該和對待軟體測試的態度一樣,在需求變更發生之前儘量減少需求變更發生的情況,以將需求變更帶來的風險降到最低。
二、需求變更的產生原因
在軟體開發專案中,需求變更可能來自方案服務商、客戶或產品供應商等,當然,也可能來源於專案組內部。
對於需求變更發生的原因,細細追究起來無外乎以下幾種原因:
1、範圍沒有圈定就開始細化
細化工作是由需求分析人員完成的,一般是根據使用者提出的描述性的、總結性的短短几句話去細化的,提取其中的一個個功能,並給出描述(正常執行時的描述和意外發生時的描述)。
當細化到一定程度並開始系統設計時,範圍會發生變化,那細節用例的描述可能就有很多要改動。如原來是人工手動新增的資料,要改成根據資訊系統計算出來,而原來的一個屬性的描述要變成描述一個實體等。
2、沒有指定需求的基線
需求的基線是指是否容許需求變更的分界線。
隨著專案的進展,需求的基線也在變化。是否容許變更的依據是合同以及對成本的影響,比如軟體整體結構已經設計出來,是不容許改變需求範圍的,因為整體結構會對整個專案的進度和成本有初步預算。隨著專案的進展,基線將越定越高(容許的變更將越少)。
3、沒有良好的軟體結構適應變化
元件式的軟體結構就是提供了快速適應需求變化的體系結構,資料層封裝了資料訪間邏輯,業務層封裝了業務邏輯,表示層展現使用者表示邏輯。
但適應變化必須遵循一些鬆耦合原則,各層之間還是存在一些聯絡的,設計要力求減少會對介面入口引數產生變化。如果業務邏輯封裝好了,則表示層介面上的一些排列或減少資訊的要求是很容易適應的。如果介面定義得合理,那麼即使業務流程有變化,也能夠快速適應變化。因此,在成本影響的容許範圍內可以降低需求的基線,提高客戶的滿意度。
三、需求變更控制
前面已經說過了,在軟體開發專案開始之前,就要消除“絕不允許發生需求變更”的思想。在專案進行,一旦發生需求變更,更不要不一味的抱怨,也不要去一味地迎合客戶的“新需求”,而是要管理和控制需求變更。
1、分級管理客戶需求
軟體開發專案中,“客戶永遠是對的”和“客戶是上帝”並不完全的正確,因為在已經簽定的專案合同中,任何新需求的變更和增加除了影響專案的正常進行以外,還影響到了客戶的投入收益,所以有的時候專案經理反倒應該為客戶著想。
對於專案中的需求,可以實行分級管理,以達到對需求變更的控制和管理。
△一級需求(或變更)是關鍵性的需求,這種需求如果不滿足,意味著整個專案不能正常交付使用,前期工作也會被全部否定。這個級別的需求是必須滿足的,否則就意味著否定自已的專案成員和成員的所有努力,所以定為“Urgent”。這通常是屬於補救性的debug型別,要救火。
△二級需求(或變更)是後續關鍵性需求,它不影響前面工作內容的交付,但不加以滿足,新的專案內容無法提交或繼續,所以是“Necessary”。一般新模組關鍵性的基礎元件,屬於這個級別。
△三級需求是後續重要的需求,如果不被滿足會令整體專案工作的價值下降,為了體現專案價值,也是開發人員自已的技術價值的證明,所以定為“Needed”。一般性的重大的有價值的全新模組開發,屬於這個級別。
以上三個等級是應該實施的,但時間性上可以作優先順序的排列。
△四級需求是改良性需求,沒有滿足這類需求並不影響已有功能的使用,但如果實現了則會更好,定級為“Better”。介面和使用方式的需求,一般在這個檔次。
△五級需求是可選性需求,更多的是偶是一種設想,以及一種可能,通常只是客戶的的一種個人喜好而已,定級為“Maybe”。
對於四級需求,如果時間和資源條件都允許的話,不妨做下去。對於五級需求,正如對它的描述一樣,做與不做是“Maybe”。
2、全生命週期的需求變更管理
各種規模和型別的軟體專案的生命週期大致可以分為三個階段,即專案啟動、專案實施、專案收尾。不要以為需求變更的管理和控制只是發生在專案實施階段,而是要貫穿在整個專案生命週期的全過程中。
站在全域性角度的需求變更管理,需要採用綜合變更控制的方法。
(1)專案啟動階段的變更預防
正如前面強調的,對於任何軟體專案,需求變更都無可避免,也無從逃避,無論是專案經理還是開發人員只能積極應對,而這個應對應該是從專案啟動的需求分析階段就開始了。
對一個需求分析做得很好的專案來說,基準檔案定義的範圍越詳細清晰,使用者跟專案經理提出需求變更的機率就越小。如果需求沒做好,基準檔案裡的範圍含糊不清,被客戶發現還有很大的“新需求空間”,這時候專案組往往要付出許多無謂的犧牲。
如果需求分析做得好,文件清晰且又有客戶簽字,那麼後期客戶提出的變更就超出了合同範圍,需要另外收費。這個時候,專案經理一定要據理力爭,此時這並非要刻意賺取客戶的錢財,而是不能讓客戶養成經常變更的習慣,否則後患無窮。
(2)專案實施階段的需求變更
成功的軟體專案和失敗專案的區別就在於專案的整個過程是否是可控的。
專案經理應該樹立一個理念,即“需求變更是必然的、可控的,並且是有益的”。專案實施階段的變更控制需要做的是分析變更請求,評估變更可能帶來的風險和修改基準檔案。
控制需求漸變需要注意以下幾點:
△需求一定要與投入有聯絡,如果需求變更的成本由開發方來承擔,則專案需求的變更就成為必然了。所以,在專案的開始,無論是開發方還是出資方都要明確這一條:需求變,軟體開發的投人也要變。
△需求的變更要經過出資者的認可,這樣才會對需求的變更有成本的概念,能夠慎重地對待需求的變更。
△小的需求變更也要經過正規的需求管理流程,否則會積少成多。
在實踐中,人們往往不願意為小的需求變更去執行正規的需求管理過程,認為降低了開發效率,浪費了時間。但正是由於這種觀念才使需求逐漸變為不可控,最終導致專案的失敗。
△精確的需求與範圍定義並不會阻止需求的變更。
並非對需求定義得越細,就越能避免需求的漸變,這是兩個層面的問題。太細的需求定義對需求漸變沒有任何效果。因為需求的變化是永恆的,並非需求寫細了,它就不會變化了。
△注意溝通的技巧。
專案開發過程中的實際情況是使用者、開發者都認識到了上面的幾點間題,但是由於需求的變更可能來自客戶方,也可能來自開發方,因此,作為需求管理者,專案經理需要採用各種溝通技巧來使專案的各方各得其所。
(3)、專案收尾階段的總結
能力的提高往往不是從成功的經驗中來,而是從失敗的教訓中得來。許多專案經理不注重經驗教訓總結和積累,即使在專案運作過程中碰得頭破血流,也只是抱怨運氣、環境和團隊配合不好,很少系統地分析總結,或者不知道如何分析總結,以至於同樣的問題反覆出現。
事實上,專案總結工作應作為現有專案或將來專案持續改進工作的一項重要內容,同時也可以作為對專案合同、設計方案內容與目標的確認和驗證。專案總結工作包括專案中事先識別的風險和沒有預料到而發生的變更等風險的應對措施的分析和總結,也包括專案中發生的變更和專案中發生問題的分析統計的總結。
3、需求變更管理原則
雖然需求變更的內容和型別有各種各樣,但需求變更管理的原則卻是萬變不離其宗。實施需求變更管理需要遵循如下原則:
(1)建立需求基線。需求基線是需求變更的依據。在開發過程中,需求確定並經過評審後(使用者參與評審),可以建立第一個需求基線。此後每次變更並經過評審後,都要重新確定新的需求基線。
(2)制訂簡單、有效的變更控制流程,並形成文件。在建立了需求基線後提出的所有變更都必須遵循這個控制流程進行控制。同時,這個流程具有一定的普遍性,對以後的專案開發和其他專案都有借鑑作用。
(3)成立專案變更控制委員會(CCB)或相關職能的類似組織,負責裁定接受哪些變更。CCB由專案所涉及的多方人員共同組成,應該包括使用者方和開發方的決策人員在內。
(4)需求變更一定要先申請然後再評估,最後經過與變更大小相當級別的評審確認。
(5)需求變更後,受影響的軟體計劃、產品、活動都要進行相應的變更,以保持和更新的需求一致。