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