段昭
摘 要 近年來隨著計算機及軟件系統(tǒng)進一步發(fā)展,各級企業(yè)乃至個體工商戶都對自己商業(yè)運作信息化提出要求,而承載企業(yè)信息化的主要媒介就是計算機系統(tǒng)。計算機系統(tǒng)主要由硬件和軟件組成的,目前由于硬件發(fā)展的速度遠超軟件發(fā)展的速度,軟件的發(fā)展已成為企業(yè)實現(xiàn)信息化的主要瓶頸,軟件是根據(jù)用戶需求而開發(fā)的,開發(fā)過程中也一定會遇到需求變更的情況。軟件開發(fā)與需求變更兩者之間的矛盾逐漸成為軟件業(yè)關(guān)注的焦點,本文重點關(guān)注矛盾產(chǎn)生的背景、原因以及后果,并努力探尋緩解矛盾的方法。
關(guān)鍵詞 軟件開發(fā) 需求變更 矛盾緩解
中圖分類號:TP311 文獻標識碼:A
1矛盾產(chǎn)生的背景
軟件開發(fā)是最早個體開發(fā),編程人員設(shè)法使程序在計算機上運行起來,并使用該程序解決預先設(shè)定的問題,如果使用過程中發(fā)生錯誤也由該人員修改。在軟件體量比較小、開發(fā)者和用戶是同一個或同一群人、相對的“客戶”就是自己的情況下,許多需求細節(jié)是可以忍受邊使用邊修改的,需求變更與軟件開發(fā)的矛盾處于內(nèi)部、易協(xié)調(diào)階段。而隨著分布式系統(tǒng)、網(wǎng)絡運用的出現(xiàn),軟件規(guī)模不斷擴大,軟件的開發(fā)不再是個體模式,而是以現(xiàn)代工程化、模塊化的模式進行設(shè)計、制作。軟件的用戶通常不再是軟件開發(fā)者自身,這時的矛盾涉及雙方,就不再是內(nèi)部、易協(xié)調(diào)的了。開發(fā)者需要在用戶給定的時間節(jié)點前交付滿足其需求的軟件產(chǎn)品,在開發(fā)周期內(nèi),受內(nèi)部自身意識的不斷改變與深化或外界環(huán)境變化,用戶或多或少都會對軟件的需求提出改變,要求開發(fā)者做出相應的修改以滿足自己需求的變化。更有甚者在軟件即將交付時還會提出需求變更,讓開發(fā)者陷入被動,也會影響用戶實際使用。這往往就是現(xiàn)今軟件開發(fā)中面臨的主要矛盾。
2造成矛盾的原因與后果
造成這種矛盾的原因主要包括兩個方面:首先,當一個系統(tǒng)變得相對龐大,軟件開發(fā)周期往往相對漫長。而正因為如此,用戶在提出需求之初,需求的內(nèi)容比較片面、粗略、寬泛,有時甚至于是錯誤的,用戶從自己對公司業(yè)務的理解角度出發(fā),提出相應需求,希望開發(fā)者能開發(fā)出滿足他們當下面臨的需求的軟件產(chǎn)品,這樣的結(jié)果就是改正了舊問題又出現(xiàn)了新問題,以至于極端情況下,最終實現(xiàn)的功能與起初提出需求的相差甚遠甚至是矛盾的;另一方面是因為開發(fā)者通常是軟件技術(shù)方面的專家,而對于用戶的業(yè)務及企業(yè)運行模式不了解,僅從技術(shù)角度去構(gòu)思如何通過軟件解決用戶需求,出現(xiàn)問題就補漏洞,客戶沒要求就不優(yōu)化。最后的軟件產(chǎn)品往往差強人意。
既然最終的產(chǎn)品與起初的構(gòu)想有偏差或者不滿意,那就需要修改,而當一個軟件產(chǎn)品或者說一個系統(tǒng)通過不斷的修改補充,規(guī)模無比復雜,很多功能可有可無。而必須要進行修改的一項或者幾項核心功能牽一發(fā)而動全身,當用戶需求變更涉及諸如數(shù)據(jù)庫表結(jié)構(gòu)的修改時,面臨的就是非常巨大的工作量,甚至會出現(xiàn)對于整個軟件系統(tǒng)來說毀滅性的結(jié)果:推倒重來。
3減少矛盾的方法
用戶需求的一再改變,開發(fā)者始終在追趕改變,設(shè)計過程從痛苦變?yōu)槁槟?,用戶對軟件產(chǎn)品遲遲不能交付也感到焦急萬分。一些開發(fā)者認為,對于先期沒有充分明確的需求,用戶在后期提出的修改可以列入軟件下一個版本進行更新,不用苦惱必須在當前版本交付之前做出這些修改,但這樣造成用戶的時間成本和經(jīng)濟成本雙重增加。而用戶后續(xù)提出的需求變更通常才是更為迫切的、需要盡快解決的問題,該矛盾并未解決。由于人的思維會隨著時間的遷移而不斷變化,同時企業(yè)的運作也不斷發(fā)展,這種軟件開發(fā)與需求不斷變化之間的矛盾就一直會存在且不可避免。雖不能避免,但通過以下方法可以減少這種矛盾。
3.1用戶與開發(fā)者需要進行換位思考,找到軟件開發(fā)的切入點
首先是用戶在描述需求的時候能從開發(fā)者的角度出發(fā)盡可能的詳細描述,這受限于用戶業(yè)務領(lǐng)域與軟件專業(yè)領(lǐng)域之間的差別;另一方面開發(fā)者在聽取用戶需求描述時能從用戶業(yè)務角度出發(fā)進行理解,并從業(yè)務的角度提出一些問題,讓用戶對潛在的需求有所意識并及時更新。這就要求開發(fā)者不光要精通于計算機軟件相關(guān)的技術(shù),還需要對各行各業(yè)的技術(shù)、業(yè)務相關(guān)知識有所了解,在交流中形成共同語言,這樣才能更準確地理解用戶的需求,找到軟件開發(fā)切入點,讓用戶和開發(fā)人員取得共識。
3.2在軟件需求分析環(huán)節(jié)下大工夫,抓住軟件開發(fā)的重點
這個環(huán)節(jié)的任務是對系統(tǒng)功能作出清晰、準確、具體的要求。需求分析的結(jié)果是進行軟件設(shè)計的基礎(chǔ),需求分析是在問題和解決問題的方案之間架設(shè)橋梁,是軟件需求過程的主體和重點。一個軟件項目的目標就是要開發(fā)正確的、能解決用戶問題的軟件,要做到這一點需要足夠詳細地描述用戶的需求,也就是軟件產(chǎn)品必須達到的要求或者能力。軟件開發(fā)最為困難的概念性工作就是通過分析,編寫出詳細技術(shù)需求,包括所有面向機器、面向用戶和其它系統(tǒng)接口的需求。這一階段的工作如果做錯,將會給系統(tǒng)帶來難以預料的極大的損害,需求上的改變,都將導致設(shè)計、實現(xiàn)和測試上的工作量的增加及大量返工,而這時消耗的將會遠遠超過仔細精確進行需求分析的時間和資源。
3.3完善需求管理制度,找到軟件開發(fā)的盲點
根據(jù)軟件項目中用戶所描述的需求的普遍理解,開發(fā)者和用戶就能找出這些需求的幾種解決方案,怎樣的需求可以用怎樣最優(yōu)方案來實現(xiàn),而變更這些需求就要一個控制管理機制,通過用戶和開發(fā)者共同參與的變更申請、評估、決策、回復、更新這五大步驟,形成一個完善的需求管理制度。通過這樣的管理制度,對于開發(fā)者可以認清用戶需求的邏輯和想要的結(jié)果,同時減少變更的風險。而對于用戶,根據(jù)管理制度將需求與變更形成文檔,通過分析可以進一步對潛在的需求進行挖掘,對不合理的需求進行控制,以達到需求的簡單化、合理化以及可控化。