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