需求總是在變化,客戶總會(huì)有新的想法,項(xiàng)目好像沒(méi)有終結(jié),我們軟件開(kāi)發(fā)人員應(yīng)對(duì)軟件需求變化時(shí),為了擁有更多的準(zhǔn)備,應(yīng)該做些什么呢?
這個(gè)世界唯一不變的就是變化了。月有陰晴圓缺,潮漲潮落,千年前的滄海是現(xiàn)在的良田,這是自然界的變化;人有悲歡離合,生老病死,這是人情世故。變化是并不一定總是給我們帶來(lái)驚喜,更多的是帶來(lái)意外,使得我們被迫去作一些改變來(lái)適應(yīng)這種變化。
所以,變化也是我們?nèi)祟惖靡詮暮?jiǎn)單生物進(jìn)化到今天的推動(dòng)力。
回到我們軟件需求這個(gè)論題上來(lái),無(wú)疑,變化是需求的一個(gè)基本特性。
沒(méi)有一成不變的需求,無(wú)論我們?cè)谡綐?gòu)建之前對(duì)需求進(jìn)行了多么深入的開(kāi)發(fā),和客戶進(jìn)行了多少回合的反復(fù)驗(yàn)證,而最終卻不得不接受這樣的現(xiàn)實(shí):系統(tǒng)正式上線之后,在客戶提交的試運(yùn)行報(bào)告中,客戶的需求發(fā)生了變化,或者客戶又提出了新的需求等等。
我們的軟件開(kāi)發(fā)人員陷入了這樣的一個(gè)困境:需求總是在變化,客戶總會(huì)有新的想法,項(xiàng)目好像沒(méi)有終結(jié),即使驗(yàn)收通過(guò),那也是草草完事,而不是想象中的那么完美。
這是一個(gè)殘酷的現(xiàn)實(shí)。之所以Fred Brooks敢在1987的《沒(méi)有銀彈》這篇論文中強(qiáng)調(diào)即使不存在銀彈,也能使得軟件工程的生產(chǎn)力在十年之內(nèi)提高十倍,這也是基于軟件需求自身復(fù)雜性的原因。
在本文中,筆者從項(xiàng)目管理的角度來(lái)討論對(duì)變化需求管理的策略。首先是討論在構(gòu)建前需求的質(zhì)量,然后說(shuō)明了如何在構(gòu)建過(guò)程中對(duì)需求進(jìn)行跟蹤,最后講述了當(dāng)真正發(fā)生需求變更的時(shí)候,我們應(yīng)該如何去面對(duì)。
我們先來(lái)看軟件需求的生命周期,正如軟件項(xiàng)目具有一般的過(guò)程,軟件需求也有著一個(gè)普遍的生命周期。
圖1中的項(xiàng)目階段反映的是一般的項(xiàng)目過(guò)程,不管采用瀑布模型還是迭代開(kāi)發(fā)或者是其他的軟件開(kāi)發(fā)生命周期模型,這樣的一個(gè)基本過(guò)程都是需要遵循的。而需求的生命周期和項(xiàng)目的階段也是一一對(duì)應(yīng)的。
在項(xiàng)目的啟動(dòng)階段,我們需要對(duì)項(xiàng)目進(jìn)行可行性分析,完成立項(xiàng)報(bào)告,在這個(gè)階段,也就種下了需求的“種子”,這個(gè)“種子”也決定了下面所有階段的努力是否有成果,如果項(xiàng)目根本就是不可行的,那么就別提最后的“結(jié)果”了,“種子”是否能“萌芽”也都是個(gè)未知之?dāng)?shù)。
如果通過(guò)了可行性分析,完成了項(xiàng)目的啟動(dòng)過(guò)程。接下來(lái)我們就要把需求這顆“種子”種下去,通過(guò)需求調(diào)研和需求分析階段的努力,需求的“種子”開(kāi)始“萌芽”,并且一直“成長(zhǎng)”,直到“成熟”,需求“成熟”之后,我們就可以構(gòu)建需求基線,進(jìn)入項(xiàng)目構(gòu)建階段。
如果對(duì)還沒(méi)有“成熟”的需求就開(kāi)始構(gòu)建,那么后果就是在構(gòu)建階段需求的反復(fù)變化,開(kāi)發(fā)人員疲于奔命。
對(duì)“成熟”的需求進(jìn)行構(gòu)建,我們所交付的才是優(yōu)質(zhì)的“果實(shí)”,當(dāng)然,項(xiàng)目后期也不可避免有需求變更,這時(shí),只要我們按照規(guī)定的流程進(jìn)行需求變更,將變更控制在一個(gè)可以接受的范圍,這是不會(huì)影響到我們最終的交付的“果實(shí)”。
做好需求變更的管理,最終的目的是為了有優(yōu)質(zhì)的交付品。從上面的圖中,我們可以得知,首先必須要有良好的“種子”和健康的“果樹(shù)”,最后才有可能結(jié)出優(yōu)質(zhì)的“果實(shí)”。所以,做好需求開(kāi)發(fā)是有效需求變更管理的基礎(chǔ)。
重視需求開(kāi)發(fā)
需求開(kāi)發(fā)是在問(wèn)題及其最終解決方案之間架設(shè)橋梁的第一步,是軟件需求過(guò)程的主體。一個(gè)項(xiàng)目的目的就是致力于開(kāi)發(fā)正確的系統(tǒng),要做到這一點(diǎn)就要足夠詳細(xì)地描述需求,也就是系統(tǒng)必須達(dá)到的條件或能力,使用戶和開(kāi)發(fā)人員在系統(tǒng)應(yīng)該做什么,不應(yīng)該做什么方面達(dá)成共識(shí)。
我們都知道開(kāi)發(fā)軟件系統(tǒng)最為困難的部分就是準(zhǔn)確說(shuō)明開(kāi)發(fā)什么,最為困難的概念性工作便是編寫出詳細(xì)技術(shù)需求,這包括所有面向用戶、面向機(jī)器和其它軟件系統(tǒng)的接口。
需求開(kāi)發(fā)就是為了解決這些問(wèn)題,它必不可少的成果