軟件需求是整個(gè)軟件項(xiàng)目的最關(guān)鍵的一個(gè)輸入,軟件需求不像生產(chǎn)汽車、電腦等硬件的需求,是有形的、客觀的、可描述的、可檢測的,和傳統(tǒng)的生產(chǎn)企業(yè)相比較,具有模糊性、不確定性、變化性和主觀性的特點(diǎn),是軟件項(xiàng)目最難把握的問題。它的復(fù)雜性體現(xiàn)在以下方面:
一、需求的描述問題
筆者曾經(jīng)被緊急委派主管一個(gè)已經(jīng)進(jìn)入了編碼后期階段的項(xiàng)目,該項(xiàng)目已經(jīng)換過2次項(xiàng)目經(jīng)理了,這是第3次更換項(xiàng)目經(jīng)理,用戶方的IT部經(jīng)理找筆者抱怨:"我已經(jīng)是第3次來給你們講補(bǔ)貨申請的處理規(guī)則了!"。我只能表示抱歉,因?yàn)槲覠o法找到原來的需求描述,這是一個(gè)變更的需求,前任的項(xiàng)目經(jīng)理講他只是將當(dāng)時(shí)與用戶交流的需求記到2頁草稿紙上,不幸的是,那2頁珍貴的手稿現(xiàn)在已經(jīng)找不到了!更不幸的是,該IT部經(jīng)理是在轉(zhuǎn)述業(yè)務(wù)部門的需求,當(dāng)軟件開發(fā)完畢后,業(yè)務(wù)部門講"這不是我們最初給IT部反映的需求,我們說的不是這樣的!"。缺少正式的完整的需求文檔浪費(fèi)了大量的人力物力,但是有了需求文檔又出現(xiàn)了新的問題。曾經(jīng)有多個(gè)項(xiàng)目經(jīng)理向我抱怨,在用戶方進(jìn)行的需求評審會完全是走形式,因?yàn)橛脩舾静蝗ヂ犓x那上百頁的需求文檔。不同層次的客戶(用戶)關(guān)心的問題是不一樣的,想要每個(gè)客戶都成為需求專家是不現(xiàn)實(shí)的。
二、需求的完備程度問題
需求如何做到?jīng)]有遺漏?如何準(zhǔn)確劃定系統(tǒng)的范圍?這確實(shí)是一個(gè)兩難問題,稍微大一點(diǎn)的系統(tǒng)要想窮舉需求幾乎是不可能的,每次開需求評審會時(shí),總會冒出新的需求,以至于系統(tǒng)沒有一個(gè)準(zhǔn)確的范圍界定。即使是這樣,系統(tǒng)還是要開發(fā),沒辦法,系統(tǒng)的范圍還要硬性的劃定一個(gè),從而建立一個(gè)基線。
三、需求開發(fā)的工期問題
在需求上花費(fèi)了大量的時(shí)間(而不是人*工時(shí),因?yàn)樾枨箅A段人多了也沒有作用),客戶、軟件公司是否能夠忍受?為了確保需求的正確性,完備性,項(xiàng)目經(jīng)理往往堅(jiān)持要在需求階段花費(fèi)大量的時(shí)間,但是客戶與公司的高層領(lǐng)導(dǎo)卻會為項(xiàng)目遲遲看不到實(shí)際可運(yùn)行的軟件擔(dān)心不已!他們往往會逼迫項(xiàng)目組盡快往前推進(jìn),而項(xiàng)目組的成員往往也會為系統(tǒng)復(fù)雜的善變的需求折騰的筋疲力盡,他們也希望盡快結(jié)束此階段。
四、需求的細(xì)致程度問題
需求到底描述到多細(xì),才算可以結(jié)束了?仁者見仁,智者見智,并沒有定論,如果時(shí)間允許,要想細(xì)總可以細(xì)下去的。但是,需求的周期越長,可能的變化越多,對設(shè)計(jì)的限制越嚴(yán)格,對需求的共性提取要求越高,所以只要大家(客戶、用戶、需求分析人員、設(shè)計(jì)人員、測試人員)認(rèn)為描述清楚了,就可以進(jìn)入設(shè)計(jì)階段了。
五、軟件需求的復(fù)用問題
筆者曾經(jīng)遇到過一位領(lǐng)域?qū)<?,他在?0多年的領(lǐng)域工程經(jīng)驗(yàn),積累了大量的領(lǐng)域需求,可是在其每進(jìn)行一次產(chǎn)品開發(fā)時(shí),他總是感到他所理解的需求無法為與他配合的分析人員、設(shè)計(jì)人員所接受。當(dāng)我們一起來討論這個(gè)問題的時(shí)候,共同的一個(gè)觀點(diǎn)就是:沒有對需求進(jìn)行有效的管理,已經(jīng)形成的需求文檔沒有很好的復(fù)用。所以需求管理一個(gè)很重要的目標(biāo)應(yīng)是提高軟件需求的復(fù)用率。
基于上述的問題,必須對需求進(jìn)行管理,使需求能夠真正成為軟件工程和管理的基線,使軟件計(jì)劃、活動和工作產(chǎn)品同軟件需求保持一致,使需求可以復(fù)用。
六、需求的變化問題
在軟件開發(fā)過程中如果只有一條真理的話,那一定是:需求的變化是永恒的,需求不可能是完備的。軟件開發(fā)的過程實(shí)際上是同變化做斗爭的過程,需求的變更不一定是壞事,也有可能是好事,是商業(yè)機(jī)會,對市場敏感的人可以從需求的變化中發(fā)現(xiàn)市場機(jī)會。