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