任何從事IT行業(yè)的人員都清楚,軟件開發(fā)項(xiàng)目失敗的其中一個(gè)主要原因是項(xiàng)目在啟動(dòng)的時(shí)候功能需求模糊,導(dǎo)致開發(fā)過程的不斷修改,讓項(xiàng)目不斷延誤,功能不斷擴(kuò)張,資源越來越吃緊,最終影響交付的質(zhì)量和客戶的滿意度。希賽網(wǎng)軟件工程頻道有很多文章介紹如何去把握需求,很多業(yè)內(nèi)人士也常在網(wǎng)上分享他們把握客戶需求的方法,可惜效果并不太理想。因?yàn)槲覀兘^對不能夠把握基本上不存在的“客戶需求”。
作為一個(gè)軟件工程的專業(yè)人員,如何能夠從客戶所提供的模糊需求建立一個(gè)明確的范圍,然后從這個(gè)范圍中建立整個(gè)系統(tǒng)的功能需求,讓我們可以控制軟件開發(fā)的過程,減少項(xiàng)目的范圍變動(dòng),降低開發(fā)過程中的修改需求,讓我們能夠按預(yù)算、按工期,提交符合質(zhì)量要求的交付物,達(dá)到客戶的預(yù)期目標(biāo),我們便需要理解問題的根源,打破過去的工作習(xí)慣,尋找一套可行的方法。
在項(xiàng)目管理知識(shí)體系(PMBOK)中我們學(xué)習(xí)范圍變動(dòng)管理,而不是需求變動(dòng)管理,范圍變動(dòng)才是需求變動(dòng)的主要原因。其實(shí)在這里PMBOK做了一個(gè)假設(shè),就是有了明確的范圍便可以建立明確的功能需求,如果能夠控制范圍,便能夠控制功能需求。
功能需求變動(dòng)是導(dǎo)致軟件工程在開發(fā)過程中進(jìn)行修改的主要原因,那是說我們在軟件工程項(xiàng)目啟動(dòng)的時(shí)候沒有把握好項(xiàng)目的范圍,才會(huì)發(fā)生我們面對的問題。所以,我們首先需要理解范圍與功能需求的關(guān)系,什么是范圍?什么原因?qū)е滦枨竽:?能夠明確理解兩者的異同,才能夠找出解決的方法,建立明確的項(xiàng)目范圍,轉(zhuǎn)換成功能需求。讓我們能夠從模糊的需求轉(zhuǎn)變成為明確的需求。
建立明確的項(xiàng)目范圍代替不明確的范圍,才能夠減少開發(fā)過程中的修改。本人最近一直從過去30多年的科技項(xiàng)目開發(fā)和管理經(jīng)驗(yàn)中,結(jié)合近年回國后對國內(nèi)IT企業(yè)運(yùn)營模式的理解,我國技術(shù)人員的工作習(xí)慣,客戶的思維、心態(tài)和期盼,總結(jié)出一套建立明確項(xiàng)目范圍的方法,特在此與讀者分享,共同改善我國軟件企業(yè)的困境(請參考希賽顧問黃紹良教授的《我國軟件企業(yè)的未來生存空間》一文)。
70年代的項(xiàng)目范圍與需求
項(xiàng)目范圍與項(xiàng)目需求是兩個(gè)完全不同的概念,但兩者卻不能單獨(dú)處理。讓我們回到上世紀(jì)70年代的時(shí)候,國外企業(yè)正進(jìn)行自動(dòng)化的過程。項(xiàng)目基本上是把人工作業(yè)流程轉(zhuǎn)變成計(jì)算機(jī)程序。那時(shí)候并沒有項(xiàng)目范圍這個(gè)名稱,我們用Terms of Reference (ToR)來界定項(xiàng)目的邊界,采用文字描述的方法說明這個(gè)項(xiàng)目要做什么。例如,要為希賽公司建立一個(gè)庫存管理系統(tǒng),這個(gè)項(xiàng)目的ToR會(huì)說明貨品從進(jìn)入倉庫開始,到貨品因應(yīng)生產(chǎn)或銷售申領(lǐng)要求離開倉庫為止,其中包括貨品存入量的統(tǒng)計(jì),存放位置記錄,總庫存量統(tǒng)計(jì)、申領(lǐng)數(shù)目、檢貨、提取貨品、準(zhǔn)備出倉,最后更新貨品存量統(tǒng)計(jì)等工作過程。這個(gè)項(xiàng)目的Term of Reference只說明這個(gè)項(xiàng)目的范圍,包括一些需要執(zhí)行的工作和記錄等。
在項(xiàng)目實(shí)施過程中,系統(tǒng)分析員會(huì)對庫存管理全過程進(jìn)行調(diào)查或調(diào)研,采用訪談或觀察等方法,記錄上述范圍中的整個(gè)工序的過程,每一個(gè)數(shù)據(jù)的更新,參考記錄數(shù)據(jù)的報(bào)告格式和任何有關(guān)的工作單據(jù)。這些工序,數(shù)據(jù)更新時(shí)間和地點(diǎn),報(bào)告打印等工作最后便成為系統(tǒng)的功能需求。這些需求能夠讓最終用戶明確開發(fā)人員已經(jīng)把握了整個(gè)工作流程,明確每一個(gè)工作的內(nèi)容,保證完成的系統(tǒng)能夠提供庫存管理的功能?! ?
這段時(shí)間軟件工程的焦點(diǎn)是在范圍確認(rèn)后的信息搜集(Facts Finding)和需求分析(Requirement Analysis)中。依據(jù)PMBOK的論述,我們在20世紀(jì)70年代,的確可以從范圍的建立帶出明確的功能需求,減少開發(fā)過程中的修改,降低項(xiàng)目延誤的風(fēng)險(xiǎn)。這個(gè)模式在我國軟件產(chǎn)業(yè)發(fā)展初期采用,大概是20世紀(jì)