軟件項(xiàng)目需求分析是一個(gè)項(xiàng)目的開端,也是一個(gè)項(xiàng)目建設(shè)的基石。在失敗的開發(fā)項(xiàng)目中,80%是由于需求分析的不明確而造成的。因此,一個(gè)軟件開發(fā)項(xiàng)目想要成功的關(guān)鍵就是要做好需求分析。這是我經(jīng)過在上個(gè)月不堪回首的痛苦折騰后,才深深領(lǐng)悟到的真意。在這里我想把在這個(gè)項(xiàng)目得到的教訓(xùn)和經(jīng)驗(yàn)與大家分享。
在上個(gè)月,公司委派我負(fù)責(zé)一個(gè)小型的軟件開發(fā)項(xiàng)目。在接手這個(gè)項(xiàng)目時(shí),我看到該項(xiàng)目的需求比較簡(jiǎn)單,于是想當(dāng)然的就直接開始工作了。結(jié)果是由于在開發(fā)初期忽視了與用戶的信息溝通和深度需求分析,不但導(dǎo)致系統(tǒng)開發(fā)出來后不能很好地滿足用戶的需求,而且頻繁的需求變更返工不僅在技術(shù)上給開發(fā)人員帶來了巨大的麻煩,也使到軟件性能深受影響且造成人力、物力的浪費(fèi)。
輕視小型軟件項(xiàng)目需求分析之痛
一個(gè)軟件項(xiàng)目的開發(fā)主要分為五個(gè)階段:需求分析階段、設(shè)計(jì)階段、編碼階段、測(cè)試階段和維護(hù)階段。需求分析階段所得到的結(jié)果是軟件開發(fā)其它四個(gè)階段的必備條件。從這次項(xiàng)目的經(jīng)驗(yàn)來看,只要需求分析中有一個(gè)小小的偏差,就可能會(huì)導(dǎo)致整個(gè)項(xiàng)目無法達(dá)到預(yù)期的效果,或者說最終開發(fā)出的產(chǎn)品不是用戶所需要的。
因此,需求分析在許多大型軟件開發(fā)中都得到了很好的重視,但讓人遺憾的是在小型軟件項(xiàng)目中往往會(huì)認(rèn)為需求很簡(jiǎn)單從而很容易就忽視了需求分析這個(gè)重要的步驟。教條主義式的經(jīng)驗(yàn)使我在這個(gè)項(xiàng)目上犯了這個(gè)錯(cuò)誤,結(jié)果是讓我付出了更多的心力和更大的代價(jià)。反思這次的項(xiàng)目需求分析階段,我主要犯有以下幾個(gè)失誤:
(1)輕視用戶和開發(fā)人員之間的溝通
在軟件開發(fā)過程中主要有兩種角色:用戶和開發(fā)人員。需求獲取和需求調(diào)研是雙方溝通的第一步。在小型軟件項(xiàng)目中,由于雙方都認(rèn)為項(xiàng)目需求比較簡(jiǎn)單,就會(huì)對(duì)需求的描述產(chǎn)生一定的輕視,從而只用幾句簡(jiǎn)單的話來描述。但實(shí)際上即使需求調(diào)研時(shí)用了詳細(xì)的文字很完善的說明后,用戶與開發(fā)人員之間還是會(huì)存在著或多或少的理解差異。因?yàn)槲淖中缘拿枋隹偸侨狈_性,更何況只是幾句簡(jiǎn)單的描述。
實(shí)際上,就算是小型開發(fā)項(xiàng)目,其需求獲取也可能是最困難、最關(guān)鍵、最易出錯(cuò)的方面。原因是用戶可能會(huì)對(duì)軟件開發(fā)過程不熟悉,或?qū)ψ约旱男枨蟊磉_(dá)不清楚,而開發(fā)人員則對(duì)用戶的業(yè)務(wù)流程不熟悉。在這種場(chǎng)合下,開發(fā)人員如果單單通過問/答的方式,或者更惡劣一點(diǎn)--只聽不問的方式,是無法獲取到真正需求的。因?yàn)橛袝r(shí)候連客戶自己也不清楚自己想要的是什么。還有用戶表達(dá)的同一需求,不同的需求調(diào)研人員也可能會(huì)有不同的理解。而如果需求調(diào)研人員理解錯(cuò)了,就可能會(huì)導(dǎo)致以后的開發(fā)工作勞而無功。所以,如果因?yàn)樾枨蠛?jiǎn)單就輕視的話,必然會(huì)導(dǎo)致后期大量的返工和修改。
(2)需求在開發(fā)前沒有被準(zhǔn)確地描述
在反思這次項(xiàng)目的失敗原因時(shí),我發(fā)現(xiàn)有時(shí)連客戶對(duì)自己的需求也只有朦朧的感覺,或常常也說不清楚具體的需求。例如,用戶可能很善于敘述其目標(biāo)、對(duì)象以及他們想要前進(jìn)的大致方面,但對(duì)于他們想要實(shí)現(xiàn)的細(xì)節(jié)卻不甚清楚和難以確定。于是用戶就會(huì)要求需求分析人員替他們?cè)O(shè)想需求,但需求分析人員要想詳細(xì)而精確的定義用戶心中的需求無疑是很困難的。結(jié)果是我們開發(fā)完成后,客戶卻認(rèn)為這不是他們需要的。這種事情一而再,再而三的發(fā)生。不但讓我們的開發(fā)人員哭笑不得,而且還無言以對(duì)。
(3)用戶需求變更頻繁,造成開發(fā)模式日漸紊亂
隨著時(shí)間的推移,用戶會(huì)對(duì)系統(tǒng)的界面、功能和性能等方面提出更高更多的要求。例如,在開發(fā)項(xiàng)目過程中,用戶隨時(shí)會(huì)提出一些新的需求,有時(shí)是在開發(fā)階段中,有時(shí)在開發(fā)階段后。而且,這些需求往往是后一次的需求與前一次不一致,也就是所謂的需求變更。后果