需求分析活動(dòng)解決軟件開(kāi)發(fā)"做什么"的問(wèn)題??蛻魧?duì)于需求的認(rèn)知并不清晰,且經(jīng)常同時(shí)包含了幾個(gè)層次的需求概念,提交給軟件項(xiàng)目組,要求按需求實(shí)現(xiàn)。需求分析活動(dòng)的目標(biāo),是為后續(xù)各活動(dòng)提供一個(gè)穩(wěn)定的需求文檔,作為軟件開(kāi)發(fā)的"輸入"。
一、需求的層次
需求通常分為3個(gè)層次:業(yè)務(wù)需求、用戶需求、功能需求。業(yè)務(wù)需求即客戶希望通過(guò)該系統(tǒng)實(shí)現(xiàn)的業(yè)務(wù)目標(biāo),例如通過(guò)該系統(tǒng)運(yùn)行某種業(yè)務(wù)獲得收入,以及與其它應(yīng)用系統(tǒng)在概念層次上的分工等。業(yè)務(wù)需求描述的是業(yè)務(wù)領(lǐng)域的問(wèn)題,應(yīng)當(dāng)向客戶方負(fù)責(zé)人或業(yè)務(wù)專家收集獲得。業(yè)務(wù)需求一般最穩(wěn)定,不會(huì)發(fā)生顯著變更。
用戶需求是指具體的"用戶"希望如何使用該系統(tǒng)。行業(yè)應(yīng)用系統(tǒng)都有很多類(lèi)別的用戶,例如:采編錄入信息的采編員、面向公眾客戶的業(yè)務(wù)受理員、班組長(zhǎng)、使用報(bào)表的各級(jí)領(lǐng)導(dǎo)??梢酝ㄟ^(guò)向各個(gè)用戶走訪獲取用戶需求,匯總成文檔后,再向客戶負(fù)責(zé)人進(jìn)行確認(rèn)。由于各個(gè)用戶對(duì)于系統(tǒng)應(yīng)當(dāng)如何使用系統(tǒng)的想法是不同的,有時(shí)甚至是沖突的,因此,用戶需求比較容易發(fā)生變更。
功能需求是指軟件系統(tǒng)應(yīng)實(shí)現(xiàn)的功能。功能需求的視角不是用戶,而是軟件開(kāi)發(fā)者。確保功能需求盡可能不發(fā)生變更,是需求分析的目標(biāo)之一。
二、需求分析活動(dòng)
縱觀50年軟件工程史,無(wú)數(shù)失敗的項(xiàng)目與需求的不確定有關(guān)。在項(xiàng)目之初,確定了一個(gè)需求范疇,而當(dāng)項(xiàng)目深入,需求的反復(fù)變更耗盡了所有人的心力,最終草率收?qǐng)龌蚴遣涣肆酥?。軟件開(kāi)發(fā)是對(duì)真實(shí)世界的模擬,行業(yè)應(yīng)用軟件則模擬了客戶企業(yè)的業(yè)務(wù)流程。這就需要一個(gè)先抽象,再具象的過(guò)程。需求分析,是將客戶企業(yè)實(shí)際運(yùn)作的流程,以及各個(gè)用戶所希望運(yùn)作的流程抽象出來(lái),成為軟件開(kāi)發(fā)者可以理解的文本。之后,再由軟件開(kāi)發(fā)者通過(guò)設(shè)計(jì)、編碼實(shí)現(xiàn)等活動(dòng),將其具體化,成為可操作的軟件系統(tǒng)。
因此,需求分析活動(dòng),重在分析??蛻艨陬^或書(shū)面提出的需求文本,可能包括業(yè)務(wù)需求,也包括用戶需求,甚至還會(huì)對(duì)功能模塊的查詢條件、作出指定。這些不同層次的需求應(yīng)當(dāng)分類(lèi)整理。對(duì)于業(yè)務(wù)需求,應(yīng)當(dāng)充分理解,勾勒出客戶的業(yè)務(wù)流程圖,盡管這個(gè)業(yè)務(wù)流程可能超出了本系統(tǒng)的范圍。對(duì)于用戶需求,應(yīng)仔細(xì)鑒別,各個(gè)用戶的要求是否存在沖突,是否與業(yè)務(wù)需求沖突?對(duì)于功能需求,應(yīng)當(dāng)理清用戶到底想要什么,實(shí)際上,他們并不真的關(guān)心功能需求,而只是在表述時(shí)將其表達(dá)為功能需求。例如,對(duì)于報(bào)表需求,可能表述為需要哪幾張報(bào)表,報(bào)表的格式是什么。實(shí)際上,他們真正想要的,是那些特點(diǎn)列的業(yè)務(wù)數(shù)據(jù)能夠被方便的獲得。
三、需求的概念完整性
一份完整的需求,應(yīng)是一個(gè)完整的體系,即《人月神話》一書(shū)中反復(fù)出現(xiàn)的一個(gè)詞匯:概念完整性。業(yè)務(wù)需求,體現(xiàn)了客戶高層對(duì)系統(tǒng)的目標(biāo)和定位;從業(yè)務(wù)需求層次看來(lái),系統(tǒng)與周邊系統(tǒng)的關(guān)系清晰,使用一張數(shù)據(jù)流圖,能夠清晰的看到數(shù)據(jù)從周邊系統(tǒng)如何流入該系統(tǒng),如何加工,再如何流出到周邊系統(tǒng)。如果一類(lèi)數(shù)據(jù)不是由本系統(tǒng)錄入的,也沒(méi)有其他數(shù)據(jù)來(lái)源,卻能夠直接流向周邊系統(tǒng),那么一定是哪里遺漏了。系統(tǒng)能夠表述的很簡(jiǎn)單,這就是業(yè)務(wù)需求層面的概念完整性。
在用戶需求層次,各個(gè)用戶使用系統(tǒng)的方式都被充分表述,同一個(gè)業(yè)務(wù)功能被多個(gè)用戶使用,在操作權(quán)限上或有不同,但不存在明顯沖突。用戶需求與業(yè)務(wù)需求一致,也可以認(rèn)為用戶需求是業(yè)務(wù)需求的一種實(shí)現(xiàn)(具體化)。業(yè)務(wù)需求的各個(gè)數(shù)據(jù)流都在各個(gè)用戶節(jié)點(diǎn)上充分表達(dá),即體現(xiàn)為具體用戶對(duì)業(yè)務(wù)數(shù)據(jù)的操作。
功能需求是軟件開(kāi)發(fā)者視角的需求,由于功能需求的側(cè)重點(diǎn)在于系統(tǒng)功能,而非業(yè)務(wù)屬性,因此對(duì)概念完整性的要求是:不丟失用戶需求信息。由于大多數(shù)開(kāi)發(fā)者不可能直接接觸用戶,因此