需求開發(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)目開發(fā)工作中,很多人對(duì)需求的認(rèn)識(shí)還遠(yuǎn)遠(yuǎn)不夠,從本人參與或接觸到的一些項(xiàng)目來看,小到幾十萬(wàn)元,大到上億元的軟件項(xiàng)目的需求都或多多少的存在問題,有的是開發(fā)者本身不重視原因、有的是技術(shù)原因、有的是人員組織原因、有的是溝通原因、有的是機(jī)制原因,以上種種原因都表明做好軟件需求開發(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)用,才能真正做好需求的開發(fā)和管理工作。
本文將通過介紹關(guān)于軟件需求的基本知識(shí)和個(gè)人在實(shí)際工作中總結(jié)的一些經(jīng)驗(yàn),幫助讀者了解軟件需求,學(xué)習(xí)需求開發(fā)的一些基本方法,避免因需求原因而導(dǎo)致的項(xiàng)目失敗。
1 什么是軟件需求和需求工程
1.1 軟件需求的定義
在IEEE軟件工程標(biāo)準(zhǔn)詞匯表(1997年)中定義軟件需求為:
(1)用戶解決問題或達(dá)到目標(biāo)所需的條件或能力。
(2)系統(tǒng)或系統(tǒng)部件要滿足合同、標(biāo)準(zhǔn)、規(guī)范或其它正式規(guī)定文檔所需具有的條件或能力。
(3)一種反映上面(1)或(2)所描述的條件或權(quán)能的文檔說明。 實(shí)通俗的講,“需求”就是用戶的需要,它包括用戶要解決的問題、達(dá)到的目標(biāo)、以及實(shí)現(xiàn)這些目標(biāo)所需要的條件,它是一個(gè)程序或系統(tǒng)開發(fā)工作的說明,表現(xiàn)形式一般為文檔形式。
1.2 需求工程的定義
需求分析的過程,也叫做需求工程和需求階段,它包括了需求開發(fā)和需求管理兩個(gè)部分。需求開發(fā)是指從情況收集、分析和評(píng)價(jià)到編寫文檔、評(píng)審等一系列產(chǎn)生需求的活動(dòng),分為四個(gè)階段:情況獲取、分析、制訂規(guī)格說明和評(píng)審。這四個(gè)階段不一定是遵循線性順序的,他們的活動(dòng)是相互獨(dú)立和反復(fù)的。需求管理是軟件項(xiàng)目開發(fā)過程中控制和維持需求約定的活動(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í)際開發(fā)過程中,常常碰到用戶對(duì)自己真正的需求并不是十分明確的情況,他們認(rèn)為計(jì)算機(jī)是萬(wàn)能的,只要簡(jiǎn)單的說說自己想干什么就是把需求說明白了,而對(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í)到,軟件開發(fā)的過程實(shí)際上是同變化做斗爭(zhēng)的過程,需求變化是每個(gè)開發(fā)人員、項(xiàng)目管理人員都會(huì)遇到的問題,也是最頭痛的問題,一旦發(fā)生了需求變化,就不得不修改設(shè)計(jì)、重寫代碼、修改測(cè)試用例、調(diào)整項(xiàng)目計(jì)劃等等,需求的變化就像是萬(wàn)惡之源,為項(xiàng)目的正常的進(jìn)展帶來不盡的麻煩。
(4)需求的完整程度。需求如何做到?jīng)]有遺漏?這是一個(gè)大問題,大的系統(tǒng)要想窮舉需求幾乎是不可能的,即使小的系統(tǒng),新的需求也總會(huì)不時(shí)地冒出來。一個(gè)系統(tǒng)很難確定明確的范圍并把所有需求一次性提出來,這會(huì)導(dǎo)致開發(fā)人員在項(xiàng)目進(jìn)展中去不斷完善需求,先建立系統(tǒng)結(jié)構(gòu)再完成需求說明,造成返工的可能性很大,會(huì)給開發(fā)人員帶來挫折感,降低他們完成項(xiàng)目的信心。
(5)需求的細(xì)化程度。需求到底描述到多細(xì),才算可以結(jié)束了?雖然國(guó)家標(biāo)準(zhǔn)有需求說明的編寫規(guī)范,但具體到某一個(gè)需求上,很難給出一個(gè)具體的指標(biāo),可謂仁者見仁,智者見智,并沒有定論。需求越細(xì),周期越長(zhǎng),可能的變化越多,對(duì)設(shè)計(jì)的限制越嚴(yán)格,對(duì)需求的共性提取要求也越高,相反,需求越粗,開發(fā)人員在技術(shù)設(shè)計(jì)時(shí)不清楚的地方就越多,影響技術(shù)設(shè)計(jì)。
(6)需求描述的多義性。需求描述的多義性一方面是指不同讀者對(duì)需求說明產(chǎn)生了不同的理解;另一方面是指同一讀者能用不同的方式來解釋某個(gè)需求說明。多義性會(huì)使用戶和開發(fā)人員等項(xiàng)目參與者產(chǎn)生不同的期望,也會(huì)使開發(fā)、測(cè)試人員為不同的理解而浪費(fèi)時(shí)間,帶來不可避免的后果便是返工重做。
(7)忽略了用戶的特點(diǎn)分析。分析人員往往容易忽略了系統(tǒng)用戶的特點(diǎn),系統(tǒng)是由不同的人使用其不同的特性,使用頻繁程度有所差異,使用者受教育程度和經(jīng)驗(yàn)水平不盡相同。如果忽略這些的話,將會(huì)導(dǎo)致有的用戶對(duì)產(chǎn)品感到失望。
(8)需求開發(fā)的時(shí)間保障。為了確保需求的正確性和完整性,項(xiàng)目負(fù)責(zé)人往往堅(jiān)持要在需求階段花費(fèi)較多的時(shí)間,但用戶和開發(fā)部門的領(lǐng)導(dǎo)卻會(huì)因?yàn)轫?xiàng)目遲遲看不到實(shí)際成果而焦慮,他們往往會(huì)強(qiáng)迫項(xiàng)目盡快往前推進(jìn),需求開發(fā)人員也會(huì)被需求的復(fù)雜和善變折騰的筋疲力盡,他們也希望盡快結(jié)束需求階段。
3 如何做好需求工作
需求分析是軟件項(xiàng)目開發(fā)中最困難的一項(xiàng)工作,它不僅要求分析人員具有豐富的需求分析經(jīng)驗(yàn)和良好的專業(yè)素質(zhì),還要求分析人員具有良好的學(xué)習(xí)能力、公關(guān)能力、語(yǔ)言能力和組織能力。在實(shí)際工作中分析人員要面對(duì)不同的單位、不同的部門、不同的人員、不同的文化、不同的關(guān)系、不同的管理水平等等不同的情況,面對(duì)如此紛繁復(fù)雜的環(huán)境,如何做好需求分析工作?首先需要建立一個(gè)有效的工作機(jī)制,只有建立了工作機(jī)制,才能保證需求工作按照既定方案執(zhí)行,需求開發(fā)和管理的參與者才會(huì)在一種有序的狀態(tài)下工作。其次才是充分運(yùn)用工作機(jī)制和個(gè)人能力去獲取問題、分析問題、編寫需求文檔和進(jìn)行需求管理。
3.1 建立需求分析工作機(jī)制需考慮的幾個(gè)因素
(1)抓住決策者最迫切和最關(guān)心的問題,引起重視。用戶方?jīng)Q策者對(duì)項(xiàng)目的關(guān)心重視程度是項(xiàng)目能否順利開展的關(guān)鍵,決策者的真實(shí)意圖也是用戶方的最終需求,因此,在開發(fā)過程中要利用一切機(jī)會(huì)了解決策者關(guān)心的問題,同時(shí)也要讓他們了解項(xiàng)目的情況。在諸如談判、專題匯報(bào)、協(xié)調(diào)會(huì)議、領(lǐng)導(dǎo)視察、階段性成果演示等過程中用簡(jiǎn)短明確的語(yǔ)言或文字抓住領(lǐng)導(dǎo)最關(guān)心的問題,引導(dǎo)他們了解和重視項(xiàng)目的開發(fā),當(dāng)決策者認(rèn)識(shí)到項(xiàng)目的重要性時(shí),需求分析工作在人力、物力、時(shí)間上就有了保障。
(2)建立組織保障,明確的責(zé)任分工。項(xiàng)目開發(fā)一般都會(huì)成立相應(yīng)的項(xiàng)目組或工程組,目前,常見的組織形式是:產(chǎn)品管理組、質(zhì)量與測(cè)試組、程序開發(fā)組、用戶代表組和后勤保障組,各組的主要分工是:產(chǎn)品管理組負(fù)責(zé)確定和設(shè)置項(xiàng)目目標(biāo),根據(jù)需求的優(yōu)先級(jí)確定功能規(guī)范,向相關(guān)人員通報(bào)項(xiàng)目進(jìn)展。程序管理組負(fù)責(zé)系統(tǒng)分析,根據(jù)軟件開發(fā)標(biāo)準(zhǔn)協(xié)調(diào)日常開發(fā)工作確保及時(shí)交付開發(fā)任務(wù),控制項(xiàng)目進(jìn)度。程序開發(fā)組負(fù)責(zé)按照功能規(guī)范要求交付軟件系統(tǒng)。質(zhì)量與測(cè)試組負(fù)責(zé)保證系統(tǒng)符合功能規(guī)范的要求,測(cè)試工作與開發(fā)工作是獨(dú)立并行的。用戶代表組負(fù)責(zé)代表用戶方提出需求,負(fù)責(zé)軟件的用戶方測(cè)試。后勤保障組負(fù)責(zé)確保項(xiàng)目順利進(jìn)行的后勤保障工作。
(3)建立良好的溝通環(huán)境和氛圍。分析人員與用戶溝通的程度關(guān)系到需求分析的質(zhì)量,因此建立一個(gè)良好的溝通氛圍、處理好分析人員與用戶之間的關(guān)系顯得尤其重要,一般情況,用戶作為投資方會(huì)有一些心理優(yōu)勢(shì),希望他們的意見得到足夠的重視,分析人員應(yīng)該充分的認(rèn)識(shí)到這一點(diǎn),做好心理準(zhǔn)備,盡量避免與他們發(fā)生爭(zhēng)執(zhí),因?yàn)槲覀兊哪康氖菐椭脩粽f出他們的最終需要。在溝通時(shí)分析人員應(yīng)注意以下幾個(gè)方面:1)態(tài)度上要尊重對(duì)方,但不謙恭。謙恭可能會(huì)讓用戶一時(shí)感到滿意,但對(duì)長(zhǎng)期合作并沒有好處,尤其是在發(fā)生沖突的時(shí)候,用戶會(huì)習(xí)慣性地感到自己的優(yōu)勢(shì),而忽略分析人員地意見。2)分析人員要努力適應(yīng)不同用戶的語(yǔ)言表達(dá)方式。每個(gè)人都有自己的表達(dá)方式,所以優(yōu)秀的分析人員應(yīng)該是一個(gè)優(yōu)秀的“傾聽者”,他們能很快的適應(yīng)用戶的語(yǔ)言風(fēng)格,理解他們的意思。3)善于表達(dá)自己,善于提問。分析人員在開口前應(yīng)該先讓對(duì)方充分表達(dá)他的意思,在領(lǐng)會(huì)了后,自己再說,盡量不要搶話。4)工作外的交流有助于增進(jìn)理解,加強(qiáng)溝通。
(4)需求質(zhì)量控制要制度化需求的變化是軟件項(xiàng)目不可避免的事實(shí),因此需求質(zhì)量控制是一項(xiàng)艱苦的工作,要保證該項(xiàng)工作的順利實(shí)施,就必須有制度保證,這個(gè)制度可以在項(xiàng)目質(zhì)量控制方案中制定,該方案主要是具體化、定量化的描述用戶要求,形成全面、一致、規(guī)范的軟件需求分析規(guī)格說明書,明確需求分析規(guī)格說明書的工作程序和要素,規(guī)范開發(fā)活動(dòng),為后續(xù)軟件設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、評(píng)審及驗(yàn)收提供依據(jù)。在方案中要明確項(xiàng)目組各部門關(guān)于需求質(zhì)量控制的職責(zé),制定需求分析的工作程序,包括編制需求分析工作計(jì)劃、編制《需求分析說明書》、《需求分析規(guī)格說明書》的評(píng)審和確認(rèn)、《需求分析規(guī)格說明書》修改控制、確定需求質(zhì)量控制的質(zhì)量記錄文檔規(guī)范等內(nèi)容。
3.2 需求開發(fā)與管理的一些方法
需求開發(fā)是一項(xiàng)復(fù)雜的工作,使用的方法也很多,不同的開發(fā)方式有不同的方法,這里簡(jiǎn)單介紹一些相關(guān)的方法:
(1)繪制關(guān)聯(lián)圖:繪制系統(tǒng)關(guān)聯(lián)圖是用于定義系統(tǒng)與系統(tǒng)外部實(shí)體間的界限和接口的簡(jiǎn)單模型。
(2)可行性分析:在允許的成本、性能要求下,分析每項(xiàng)需求實(shí)施的可行性,提出需求實(shí)現(xiàn)相關(guān)風(fēng)險(xiǎn),包括與其它需求的沖突,對(duì)外界因素的依賴和技術(shù)障礙。
(3)需求優(yōu)先級(jí):確定使用實(shí)例、產(chǎn)品特性或單項(xiàng)需求實(shí)現(xiàn)的優(yōu)先級(jí)別。以優(yōu)先級(jí)為基礎(chǔ)確定產(chǎn)品版本將包括哪些特性或哪類需求。
(4)系統(tǒng)原型:當(dāng)用戶自身對(duì)有的需求不十分清楚時(shí),我們可以建立一個(gè)系統(tǒng)原型,用戶通過評(píng)價(jià)原型更好地理解所要解決的問題。。
(5)圖形分析模型:繪制圖形分析模型是編制軟件需求規(guī)格說明重要手段。它們能幫助分析人員理清數(shù)據(jù)、業(yè)務(wù)模式、工作流程以及他們之間的關(guān)系,找出遺漏、冗余和不一致的需求。這樣的模型包括數(shù)據(jù)流圖、實(shí)體關(guān)系圖、狀態(tài)變換圖、對(duì)話框圖、對(duì)象類及交互作用圖。
(6)數(shù)據(jù)字典:數(shù)據(jù)字典是對(duì)系統(tǒng)用到的所有數(shù)據(jù)項(xiàng)和結(jié)構(gòu)的定義,以確保開發(fā)人員使用統(tǒng)一的數(shù)據(jù)定義。在需求階段,數(shù)據(jù)字典至少應(yīng)定義客戶數(shù)據(jù)項(xiàng),確保客戶與開發(fā)小組是使用一致的定義和術(shù)語(yǔ)。
(7)質(zhì)量功能調(diào)配:質(zhì)量功能調(diào)配是一種高級(jí)系統(tǒng)技術(shù),它將產(chǎn)品特性、屬性與對(duì)客戶的重要性聯(lián)系起來。該技術(shù)提供了一種分析方法以明確哪些是客戶最為關(guān)注的特性。它將需求分為三類:期望需求、普通需求、興奮需求。
需求管理的目的就是要控制和維持需求事先約定,保證項(xiàng)目開發(fā)過程的一致性,使用戶得到他們最終想要得產(chǎn)品。需求管理的方法主要包括以下一些方面:
1)確定需求變更控制過程。制定一個(gè)選擇、分析和決策需求變更的過程,所有的需求變更都需遵循此過程。
2)進(jìn)行需求變更影響分析。評(píng)估每項(xiàng)需求變更,以確定它對(duì)項(xiàng)目計(jì)劃安排和其它需求的影響,明確與變更相關(guān)的任務(wù)并評(píng)估完成這些任務(wù)需要的工作量。通過這些分析將有助于需求變更控制部門做出更好的決策。
3)建立需求基準(zhǔn)版本和需求控制版本文檔。確定需求基準(zhǔn),這是項(xiàng)目各方對(duì)需求達(dá)成一致認(rèn)識(shí)時(shí)刻的一個(gè)快照,之后的需求變更遵循變更控制過程即可。每個(gè)版本的需求規(guī)格說明都必須是獨(dú)立說明,以避免將底稿和基準(zhǔn)或新舊版本相混淆。
4)維護(hù)需求變更的歷史記錄。將需求變更情況寫成文檔,記錄變更日期、原因、負(fù)責(zé)人、版本號(hào)等內(nèi)容,及時(shí)通知到項(xiàng)目開發(fā)所涉及的人員。為了盡量減少困惑、沖突、誤傳,應(yīng)指定專人來負(fù)責(zé)更新需求。
5)跟蹤每項(xiàng)需求的狀態(tài)。可以把每一項(xiàng)需求的狀態(tài)屬性(如已推薦的,已通過的,已實(shí)施的,或已驗(yàn)證的)保存在數(shù)據(jù)庫(kù)中,這樣可以在任何時(shí)候得到每個(gè)狀態(tài)類的需求數(shù)量。
6)衡量需求穩(wěn)定性。可以定期把需求數(shù)量和需求變更(添加、修改、刪除)數(shù)量進(jìn)行比較。過多的需求變更"是一個(gè)報(bào)警信號(hào)",意味著問題并未真正弄清楚。
4 需求分析評(píng)價(jià)標(biāo)準(zhǔn)
如何判斷需求規(guī)格說明的好壞,不同的軟件工程規(guī)范都有自己的一套標(biāo)準(zhǔn),這里向大家介紹一個(gè)比較常見的NASA SEL推薦方法,它是由美國(guó)國(guó)家航空和航天局軟件工程實(shí)驗(yàn)室開發(fā)的五大常用國(guó)際軟件工程規(guī)范之一,它對(duì)軟件需求過程的評(píng)價(jià)標(biāo)準(zhǔn)是:清晰、完整、一致、可測(cè)試。
(1)清晰:目前大多數(shù)的需求分析采用的仍然是自然語(yǔ)言,自然語(yǔ)言對(duì)需求分析最大的弊病就是它的二義性,所以開發(fā)人員需要對(duì)需求分析中采用的語(yǔ)言做某些限制。例如盡量采用主語(yǔ)+動(dòng)作的簡(jiǎn)單表達(dá)方式。需求分析中的描述一定要簡(jiǎn)單,千萬(wàn)不要采用疑問句、修飾這些復(fù)雜的表達(dá)方式。 除了語(yǔ)言的二義性之外,注意不要使用行話,就是計(jì)算機(jī)術(shù)語(yǔ)。需求分析最重要的是和用戶溝通,可是用戶多半不是計(jì)算機(jī)的專業(yè)人士,如果在需求分析中使用了行話,就會(huì)造成用戶理解上的困難。
(2)完整:需求的完整性是非常重要的,如果有遺漏需求,則不得不返工,在軟件開發(fā)過程中,最糟糕的事情莫過于在軟件開發(fā)接近完成時(shí)發(fā)現(xiàn)遺漏了一項(xiàng)需求。但實(shí)際情況是,需求的遺漏是常發(fā)生的事情,這不僅僅是開發(fā)人員的問題,更多發(fā)生在用戶那里。要做到需求的完整性是很艱難的一件事情,它涉及到需求分析過程的各個(gè)方面,貫穿整個(gè)過程,從最初的需求計(jì)劃制定到最后的需求評(píng)審。
(3)一致:一致性是指用戶需求必須和業(yè)務(wù)需求一致,功能需求必須和用戶需求一致。在需求過程中,開發(fā)人員需要把一致性關(guān)系進(jìn)行細(xì)化,比如用戶需求不能超出預(yù)前指定的范圍。嚴(yán)格的遵守不同層次間的一致性關(guān)系,就可以保證最后開發(fā)出來的軟件系統(tǒng)不會(huì)偏離最初的實(shí)現(xiàn)目標(biāo)。
(4)可測(cè)試:一個(gè)項(xiàng)目的測(cè)試從什么時(shí)候開始呢?有人說是從編碼完成后開始,有人說是編碼的時(shí)候同時(shí)進(jìn)行單元測(cè)試,編碼完成后進(jìn)行系統(tǒng)測(cè)試,這些結(jié)論都不完全正確。實(shí)際上,測(cè)試是從需求分析過程就開始了,因?yàn)樾枨笫菧y(cè)試計(jì)劃的輸入和參照。這就要求需求分析是可測(cè)試的,只有系統(tǒng)的所有需求都是可以被測(cè)試的,才能夠保證軟件始終圍繞著用戶的需要,保證軟件系統(tǒng)是成功的。
|