是在開發(fā)中不斷補(bǔ)充的需求使到項(xiàng)目越變?cè)烬嫶螅灾鲁^(guò)其計(jì)劃及預(yù)算范圍。
正常的需求變更本來(lái)也沒(méi)有什么大事情,但由于我們?cè)陂_發(fā)模式上沒(méi)有對(duì)需求修改有足夠的準(zhǔn)備,結(jié)果是頻繁的變更把整體結(jié)構(gòu)變得日漸紊亂,補(bǔ)丁代碼使得整個(gè)程序難以理解和維護(hù)。不但插入的補(bǔ)丁代碼使模塊違背強(qiáng)內(nèi)聚、松耦合的設(shè)計(jì)原則,而且不斷的收回變更和刪除特性導(dǎo)致了更多的問(wèn)題,例如出現(xiàn)軟件質(zhì)量明顯下降等現(xiàn)象。
原型法工具使項(xiàng)目浴火重生
看著日漸走向失敗的項(xiàng)目,一籌莫展的我心里是哪個(gè)的焦急。這時(shí),一位資深的軟件需求分析前輩提示我,為何不嘗試一下原型法工具。后來(lái),我在應(yīng)用原型法進(jìn)行需求分析后,項(xiàng)目才得以起死回生。真所謂是:山窮水復(fù)疑無(wú)路 柳暗花明又一村;不經(jīng)一事,不長(zhǎng)一智。
(1)什么是開發(fā)項(xiàng)目的需求分析?
軟件開發(fā)中最為困難的是要準(zhǔn)確知道應(yīng)該要開發(fā)些什么。因?yàn)橐坏┬枨蠓治鲎鲥e(cuò)了,不但會(huì)給系統(tǒng)功能帶來(lái)極大的損害,并且不斷的修改也會(huì)浪費(fèi)資源。有資料表明,現(xiàn)在的軟件項(xiàng)目中返工開銷幾乎占了總開發(fā)的一半,而導(dǎo)致返工的主要原因就是需求分析不明確。
軟件需求分析(Software Requirement Analysis)是一個(gè)項(xiàng)目的開端,也是項(xiàng)目最重要的關(guān)鍵點(diǎn)。它的定義是指研究用戶想要得到的東西,完全理解用戶對(duì)軟件需求的完整功能,確認(rèn)用戶軟件功能需求,并建立可確認(rèn)的、可驗(yàn)證的一個(gè)基本依據(jù)。曾有調(diào)查報(bào)告顯示,軟件產(chǎn)品存在不完整性、不正確性等問(wèn)題,80%以上是由于需求分析錯(cuò)誤所導(dǎo)致的,而且由于需求分析錯(cuò)誤造成功能性問(wèn)題尤為突出。所以,一個(gè)成功的需求分析是軟件項(xiàng)目能否成功的關(guān)鍵一步。因此,在軟件開發(fā)中產(chǎn)生了一個(gè)核心問(wèn)題:如何在用戶需求不明確的情況下進(jìn)行系統(tǒng)開發(fā)?
(2)什么是原型法?
軟件需求分析方法有很多,如傳統(tǒng)方法、原型方法、模型驅(qū)動(dòng)方法、結(jié)構(gòu)化方法等。一般來(lái)說(shuō),選擇那種方法要根據(jù)項(xiàng)目的具體情況和資源來(lái)選擇,不能盲目套用。這里著重闡述原型法。
原型法(Prototyping)的理念是指在獲取一組基本需求之后,快速地構(gòu)造出一個(gè)能夠反映用戶需求的初始系統(tǒng)原型。讓用戶看到未來(lái)系統(tǒng)的概貌,以便判斷哪些功能是符合要求的,哪些方面還需要改進(jìn),然后不斷地對(duì)這些需求進(jìn)一步補(bǔ)充、細(xì)化和修改。依次類推,反復(fù)進(jìn)行,直到用戶滿意為止并由此開發(fā)出完整的系統(tǒng)。簡(jiǎn)單的說(shuō),原型法就是不斷地運(yùn)行系統(tǒng)的"原型"來(lái)進(jìn)行揭示、判斷、修改和完善需求的分析方法。
(3)原型需求分析法的特點(diǎn)
原型法是一種循環(huán)往復(fù)、螺旋式上升的工作方法,它更多地遵循了人們認(rèn)識(shí)事物的規(guī)律,因而更容易被人們掌握和接受。原型法強(qiáng)調(diào)用戶的參與,特別是對(duì)模型的描述和系統(tǒng)需求的檢驗(yàn)。它強(qiáng)調(diào)了用戶的主導(dǎo)作用,通過(guò)開發(fā)人員與用戶之間的相互作用,使用戶的要求得到較好的滿足。不但能及時(shí)溝通雙方的想法,縮短用戶和開發(fā)人員的距離。而且能更及時(shí)、準(zhǔn)確的反饋信息,使?jié)撛趩?wèn)題能盡早發(fā)現(xiàn)并及時(shí)解決,增加了系統(tǒng)的可靠性和適用性。
簡(jiǎn)單的說(shuō),原型法是將系統(tǒng)調(diào)查、系統(tǒng)分析和系統(tǒng)設(shè)計(jì)合而為一,使用戶一開始就能看到系統(tǒng)開發(fā)后是一個(gè)什么樣子。而且用戶參與了系統(tǒng)全過(guò)程的開發(fā),知道哪些是有問(wèn)題的,哪些是錯(cuò)誤的,哪些需要改進(jìn)等,就能消除用戶的擔(dān)心,并提高了用戶參與開發(fā)的積極性。同時(shí),用戶由于參與了開發(fā)的過(guò)程將有利于系統(tǒng)的移交、運(yùn)行和維護(hù)。
但需要注意的是,原型法的適用范圍是比較有限的。它只對(duì)于小型、簡(jiǎn)單、處理過(guò)程比較明確、沒(méi)有大量運(yùn)算和邏輯處理過(guò)程的系統(tǒng)比較合適。它的局限性是對(duì)于大型的系統(tǒng)不太適合,因?yàn)閷?duì)于