。當(dāng)你和客戶(hù)合作時(shí),你就將會(huì)問(wèn)一些問(wèn)題,并且取得他們所提供的信息(需求獲取)。同時(shí),你將處理這些信息以理解它們,并把它們分成不同的類(lèi)別,還要把客戶(hù)需求同可能的軟件需求相聯(lián)系(分析)。然后,你可以使客戶(hù)信息結(jié)構(gòu)化,并編寫(xiě)成文檔和示意圖(說(shuō)明)。下一步,就可以讓客戶(hù)代表評(píng)審文檔并糾正存在的錯(cuò)誤(驗(yàn)證)。這四個(gè)過(guò)程貫穿著需求分析的整個(gè)階段。 需求獲取可能是軟件開(kāi)發(fā)中最困難、最關(guān)鍵、最易出錯(cuò)及最需要交流的方面。需求獲取只有通過(guò)有效的客戶(hù)-開(kāi)發(fā)者的合作才能成功。分析者必須建立一個(gè)對(duì)問(wèn)題進(jìn)行徹底探討的環(huán)境,而這些問(wèn)題與產(chǎn)品有關(guān)。為了方便清晰地進(jìn)行交流,就要列出重要的小組,而不是假想所有的參與者都持有相同的看法。對(duì)需求問(wèn)題的全面考察需要一種技術(shù),利用這種技術(shù)不但考慮了問(wèn)題的功能需求方面,還可討論項(xiàng)目的非功能需求。確定用戶(hù)已經(jīng)理解:對(duì)于某些功能的討論并不意味著即將在產(chǎn)品中實(shí)現(xiàn)它。對(duì)于想到的需求必須集中處理并設(shè)定優(yōu)先級(jí),以避免一個(gè)不能帶來(lái)任何益處的無(wú)限大的項(xiàng)目。 需求獲取是一個(gè)需要高度合作的活動(dòng),而并不是客戶(hù)所說(shuō)的需求的簡(jiǎn)單謄本。作為一個(gè)分析者,你必須透過(guò)客戶(hù)所提出的表面需求理解他們的真正需求。詢(xún)問(wèn)一個(gè)可擴(kuò)充(open-ended)的問(wèn)題有助于你更好地理解用戶(hù)目前的業(yè)務(wù)過(guò)程并且知道新系統(tǒng)如何幫助或改進(jìn)他們的工作。調(diào)查用戶(hù)任務(wù)可能遇到的變更,或者用戶(hù)需要使用系統(tǒng)其它可能的方式。想像你自己在學(xué)習(xí)用戶(hù)的工作,你需要完成什么任務(wù)?你有什么問(wèn)題?從這一角度來(lái)指導(dǎo)需求的開(kāi)發(fā)和利用。
還有,探討例外的情況:什么會(huì)妨礙用戶(hù)順利完成任務(wù)?對(duì)系統(tǒng)錯(cuò)誤情況的反映,用戶(hù)是如何想的?詢(xún)問(wèn)問(wèn)題時(shí),以"還有什么能" ,"當(dāng)?時(shí),將會(huì)發(fā)生什么""你有沒(méi)有曾經(jīng)想過(guò)" ,"有沒(méi)有人曾經(jīng)"為開(kāi)頭。記下每一個(gè)需求的來(lái)源,這樣向下跟蹤直到發(fā)現(xiàn)特定的客戶(hù)。
有些時(shí)候,嘗試著問(wèn)一些"愚蠢"的問(wèn)題也有助于客戶(hù)打開(kāi)話(huà)匣子。如果你直接要求客戶(hù)寫(xiě)出業(yè)務(wù)是如何實(shí)現(xiàn)的,客戶(hù)十有八九無(wú)法完成。但是如果你嘗試著問(wèn)一些實(shí)際的問(wèn)題,例如:"以我的理解,你們收到訂單后,會(huì)..."??蛻?hù)立刻就會(huì)指出你的錯(cuò)誤,并滔滔不絕的開(kāi)始談?wù)摌I(yè)務(wù),而你,就在一邊仔細(xì)的聆聽(tīng)吧。這一招就叫做"拋磚引玉"。
需求討論會(huì)上必須要使用筆記本電腦,還要指定一個(gè)打字熟練的人把所有的討論記錄下來(lái),記錄的同時(shí)還要做一定的整理。如果不這樣做,那么你結(jié)束會(huì)議的時(shí)候就會(huì)發(fā)現(xiàn),所有的討論只剩下一個(gè)模糊的印象,需求對(duì)你來(lái)說(shuō)仍然是一件遙遠(yuǎn)的事情。在座談?dòng)懻撝?,記下所討論的條目(item),并請(qǐng)參與討論的用戶(hù)評(píng)論并更正。及早并經(jīng)常進(jìn)行座談?dòng)懻撌切枨螳@取成功的一個(gè)關(guān)鍵途徑,因?yàn)橹挥刑峁┬枨蟮娜瞬拍艽_定是否真正獲取需求。進(jìn)行深入收集和分析以消除任何沖突或不一致性。
盡量把客戶(hù)所持的假設(shè)解釋清楚,特別是那些發(fā)生沖突的部分。從字里行間去理解以明確客戶(hù)沒(méi)有表達(dá)清楚但又想加入的特性或特征。Gause 和Weinberg(1989)提出使用"上下文無(wú)關(guān)問(wèn)題"-這是一個(gè)高層次的問(wèn)題,它可以獲取業(yè)務(wù)問(wèn)題和可能的解決方案的全部信息??蛻?hù)對(duì)這些問(wèn)題的回答諸如"產(chǎn)品要求怎樣的精確度"或"你能幫我解釋一下你為什么不同意某人的回答嗎?"這些回答可以更直接地認(rèn)識(shí)問(wèn)題,而這是封閉(close-end)問(wèn)題所不能做到的。
需求獲取利用了所有可用的信息來(lái)源,這些信息描述了問(wèn)題域或在軟件解決方案中合理的特性。一個(gè)研究表明:比起不成功的項(xiàng)目,一個(gè)成功的項(xiàng)目在開(kāi)發(fā)者和客戶(hù)之間采用了更多的交流方式(Kiel and Carmel 1995)。與單個(gè)客戶(hù)或潛在的用戶(hù)組一起座談,對(duì)于業(yè)務(wù)軟件包或信息管理系統(tǒng)(MIS)的應(yīng)用來(lái)說(shuō)