需求開(kāi)發(fā)與管理是軟件項(xiàng)目中一項(xiàng)十分重要的工作,據(jù)調(diào)查顯示在眾多失敗的軟件項(xiàng)目中,由于需求原因?qū)е碌募s占到45%,因此,需求工作將對(duì)軟件項(xiàng)目能否最終實(shí)現(xiàn)產(chǎn)生至關(guān)重要的影響。雖然如此,在項(xiàng)目開(kāi)發(fā)工作中,很多人對(duì)需求的認(rèn)識(shí)還遠(yuǎn)遠(yuǎn)不夠,從本人參與或接觸到的一些項(xiàng)目來(lái)看,小到幾十萬(wàn)元,大到上億元的軟件項(xiàng)目的需求都或多多少的存在問(wèn)題,有的是開(kāi)發(fā)者本身不重視原因、有的是技術(shù)原因、有的是人員組織原因、有的是溝通原因、有的是機(jī)制原因,以上種種原因都表明做好軟件需求開(kāi)發(fā)是一項(xiàng)系統(tǒng)工作,而不是簡(jiǎn)單的技術(shù)工作,只有系統(tǒng)的了解和掌握需求的基本概念、方法、手段、評(píng)估標(biāo)準(zhǔn)、風(fēng)險(xiǎn)等相關(guān)知識(shí),并在實(shí)踐中加以應(yīng)用,才能真正做好需求的開(kāi)發(fā)和管理工作。本文將通過(guò)介紹關(guān)于軟件需求的基本知識(shí)和個(gè)人在實(shí)際工作中總結(jié)的一些經(jīng)驗(yàn),幫助讀者了解軟件需求,學(xué)習(xí)需求開(kāi)發(fā)的一些基本方法,避免因需求原因而導(dǎo)致的項(xiàng)目失敗。
1 什么是軟件需求和需求工程
1.1 軟件需求的定義
在IEEE軟件工程標(biāo)準(zhǔn)詞匯表(1997年)中定義軟件需求為:
(1)用戶解決問(wèn)題或達(dá)到目標(biāo)所需的條件或能力。
(2)系統(tǒng)或系統(tǒng)部件要滿足合同、標(biāo)準(zhǔn)、規(guī)范或其它正式規(guī)定文檔所需具有的條件或能力。
(3)一種反映上面(1)或(2)所描述的條件或權(quán)能的文檔說(shuō)明。 實(shí)通俗的講,“需求”就是用戶的需要,它包括用戶要解決的問(wèn)題、達(dá)到的目標(biāo)、以及實(shí)現(xiàn)這些目標(biāo)所需要的條件,它是一個(gè)程序或系統(tǒng)開(kāi)發(fā)工作的說(shuō)明,表現(xiàn)形式一般為文檔形式。
1.2 需求工程的定義
需求分析的過(guò)程,也叫做需求工程和需求階段,它包括了需求開(kāi)發(fā)和需求管理兩個(gè)部分。需求開(kāi)發(fā)是指從情況收集、分析和評(píng)價(jià)到編寫(xiě)文檔、評(píng)審等一系列產(chǎn)生需求的活動(dòng),分為四個(gè)階段:情況獲取、分析、制訂規(guī)格說(shuō)明和評(píng)審。這四個(gè)階段不一定是遵循線性順序的,他們的活動(dòng)是相互獨(dú)立和反復(fù)的。需求管理是軟件項(xiàng)目開(kāi)發(fā)過(guò)程中控制和維持需求約定的活動(dòng),它包括:變更控制、版本控制、需求跟蹤、需求狀態(tài)跟蹤等工作。
2 需求分析的風(fēng)險(xiǎn)
由于需求分析的參與人員、業(yè)務(wù)模式、投資、時(shí)間等客觀因素的影響和需求本身具有主觀性和可描述性差的特點(diǎn),因此,需求分析工作往往面臨著一些潛在的風(fēng)險(xiǎn)。這些風(fēng)險(xiǎn)主要表現(xiàn)在:
(1)用戶不能正確表達(dá)自身的需求。在實(shí)際開(kāi)發(fā)過(guò)程中,常常碰到用戶對(duì)自己真正的需求并不是十分明確的情況,他們認(rèn)為計(jì)算機(jī)是萬(wàn)能的,只要簡(jiǎn)單的說(shuō)說(shuō)自己想干什么就是把需求說(shuō)明白了,而對(duì)業(yè)務(wù)的規(guī)則、工作流程卻不愿多談,也講不清楚。這種情況往往會(huì)增加需求分析工作難度,分析人員需要花費(fèi)更多的時(shí)間和精力與用戶交流,幫助他們梳理思路,搞清用戶的真實(shí)需求。
(2)業(yè)務(wù)人員配合力度不夠。有的用戶日常工作繁忙,他們不愿意付出更多的時(shí)間和精力向分析人員講解業(yè)務(wù),這樣會(huì)加大分析人員的工作難度和工作量,也可能導(dǎo)致因業(yè)務(wù)需求不足而使系統(tǒng)無(wú)法使用。
(3)用戶需求的不斷變更。由于需求識(shí)別不全、業(yè)務(wù)發(fā)生變化、需求本身錯(cuò)誤、需求不清楚等原因,需求在項(xiàng)目的整個(gè)生命周期都可能發(fā)生變化,因此,我們要認(rèn)識(shí)到,軟件開(kāi)發(fā)的過(guò)程實(shí)際上是同變化做斗爭(zhēng)的過(guò)程,需求變化是每個(gè)開(kāi)發(fā)人員、項(xiàng)目管理人員都會(huì)遇到的問(wèn)題,也是最頭痛的問(wèn)題,一旦發(fā)生了需求變化,就不得不修改設(shè)計(jì)、重寫(xiě)代碼、修改測(cè)試用例、調(diào)整項(xiàng)目計(jì)劃等等,需求的變化就像是萬(wàn)惡之源,為項(xiàng)目的正常的進(jìn)展帶來(lái)不盡的麻煩。
(4)需求的完整程度。需求如何做到?jīng)]有遺漏?這是一個(gè)大問(wèn)題,大的系統(tǒng)要想窮舉需求幾乎是不可能的,即使小的系統(tǒng),新的需求也總會(huì)不時(shí)地冒出來(lái)。一個(gè)系統(tǒng)很難確定明確的范圍并把所有需求一次性提出來(lái),這會(huì)導(dǎo)致開(kāi)發(fā)人員在項(xiàng)目進(jìn)展中去不斷完