時(shí),我就會(huì)來(lái)告訴你”。基于不充分信息和未經(jīng)深思的對(duì)需求不成熟的估計(jì)很容易為一些因素左右。要作出估計(jì)時(shí),最好還是給出一個(gè)范圍(如最好的情況下,很可能的,最壞情況下)或一個(gè)可信賴的程度(我有9 0 %的把握,我能在8周內(nèi)完成)。未經(jīng)準(zhǔn)備的估計(jì)通常是作為一種猜測(cè)給出的,聽(tīng)者卻認(rèn)為是一種承諾。因此我們要盡力給出可達(dá)到的目標(biāo)并堅(jiān)持完成它。
什么是優(yōu)秀的需求
討論軟件需求的文章有很多,對(duì)于需求的標(biāo)準(zhǔn)也不盡相同,這里我想用NASA的軟件開(kāi)發(fā)過(guò)程中的概念,軟件需求過(guò)程的標(biāo)準(zhǔn)是:清楚(Clear)、完整(Complete)、一致(Consistent)、可測(cè)試(Testable),此外還有其他的概念,如可跟蹤的、可修改的等等。
清楚:目前大多數(shù)的需求分析采用的仍然是自然語(yǔ)言(因?yàn)槿绻捎眯问交Z(yǔ)言的話,和用戶的溝通將成為一個(gè)大問(wèn)題,這意味著客戶在開(kāi)發(fā)軟件之前必須先進(jìn)行形式化語(yǔ)言培訓(xùn),這是不現(xiàn)實(shí)的)。自然語(yǔ)言對(duì)需求分析最大的弊病就是它的二義性。所以我們不得不對(duì)需求分析中采用的語(yǔ)言做某些限制。例如盡量采用主語(yǔ)+動(dòng)作的簡(jiǎn)單表達(dá)方式。說(shuō)白了,需求分析中的描述讓人看上去像是剛學(xué)習(xí)寫作的小孩子就對(duì)了,千萬(wàn)不要采用疑問(wèn)句、修飾這些華麗的表達(dá)方式。
除了語(yǔ)言的二義性之外,主意不要使用行話,就是計(jì)算機(jī)術(shù)語(yǔ)。需求分析最重要的是和用戶溝通,可是用戶多半不是計(jì)算機(jī)的專業(yè)人士,如果在需求分析中使用了行話,就會(huì)造成用戶理解上的困難。
打個(gè)比方,如果你要做一個(gè)銀行的信用卡系統(tǒng),你就可以這樣描述軟件需求:銀行的卡部管理信用卡,每張信用卡只屬于一個(gè)帳戶。信用卡有卡號(hào)、余額。一張信用卡有多筆的交易記錄。
完整:再也沒(méi)有什么比軟件開(kāi)發(fā)接近完成是發(fā)現(xiàn)遺漏了一項(xiàng)需求更糟的事情了。需求的完整性是非常非常重要的,想象一下遺漏需求而不得不返工,這簡(jiǎn)直就是惡夢(mèng)??墒橇钊诉z憾的是,需求的遺漏是很經(jīng)常發(fā)生的事情,不僅僅是你的問(wèn)題,更多的問(wèn)題發(fā)生在用戶那里,他們不知道該做些什么。要做到需求的完整性是很艱難的一件事情,它涉及到需求分析過(guò)程的各方各面,貫穿了整個(gè)過(guò)程,從最初的計(jì)劃制定到最后的需求評(píng)審。至于完整性的詳細(xì)討論,我們會(huì)在下面的章節(jié)中討論,現(xiàn)在你只需要拼命的想象缺乏完整性的壞處,直到你出了一身的冷汗。出了嗎?好,那我們繼續(xù)。
一致:一致性也是一個(gè)比較大的概念,很難用幾句話講清楚。還記得我們?cè)陂_(kāi)始的時(shí)候提到的需求的層次嗎?簡(jiǎn)單的來(lái)說(shuō),就是用戶需求必須和業(yè)務(wù)需求一致,功能需求必須和用戶需求一致。嚴(yán)格的遵守不同層次間的一致性關(guān)系,就可以保證最后開(kāi)發(fā)出來(lái)的軟件系統(tǒng)不會(huì)偏離最初的實(shí)現(xiàn)目標(biāo)。在實(shí)現(xiàn)過(guò)程中,我們還必須把一致性關(guān)系細(xì)化。比如說(shuō)用戶需求不能超出先前指定的范圍。
可測(cè)試:大家覺(jué)得一個(gè)項(xiàng)目的測(cè)試從什么時(shí)候開(kāi)始呢?有人說(shuō)從編碼完成后開(kāi)始。更清楚一點(diǎn)的說(shuō)是編碼的時(shí)候同時(shí)進(jìn)行單元測(cè)試,編碼完成后進(jìn)行系統(tǒng)測(cè)試。這些都沒(méi)有錯(cuò)。但是實(shí)際上測(cè)試是從需求分析過(guò)程就開(kāi)始了。需求分析是測(cè)試計(jì)劃的輸入和參照。這就要求需求分析是可測(cè)試的。什么是可測(cè)試呢?“我們要用新的系統(tǒng)完成報(bào)表自動(dòng)化處理”,你覺(jué)得這個(gè)需求是可測(cè)試的嗎?當(dāng)然不是,報(bào)表包括哪些?自動(dòng)化處理的標(biāo)準(zhǔn)是什么?這些在需求中都沒(méi)有說(shuō)明。因此這項(xiàng)需求是無(wú)法測(cè)試的,就是不具有可測(cè)試性。說(shuō)到這里,大家可能就會(huì)明白之前的需求的幾項(xiàng)標(biāo)準(zhǔn)都是為了保證需求的可測(cè)試性的。事實(shí)就是這樣,只有系統(tǒng)的所有需求是可以被測(cè)試的,才能夠保證軟件始終圍繞著用戶的需要,保證軟件系統(tǒng)是成功的。大家真正在應(yīng)用一些科學(xué)的方法的時(shí)候也應(yīng)該記住,任何的方法都是為了保證軟件的成功,不要偏離這個(gè)目標(biāo),千萬(wàn)不要走火入魔了,呵呵,很容易的。