軟體專案的苦水:需求說不清
資訊工程師花費了好多心血,去分析軟體的需求,經過三週的努力,終於寫出許多「使用案例圖」 (Use Case Diagram)以及文件。滿心以為搞定了,於是請使用單位簽字認可。使用者一看,傻眼了,大聲說:「叫我怎麼畫押嘛!錯誤一堆、而且根本不完整。」工程師一頭霧水,喃喃說到:「那妳們究竟要甚麼呢?」這種情境屢屢出現,所幸工程師有先將需求規格先給使用者看,多半的情況更慘:尚未獲得使用者確認,便急急忙忙開始寫程式,直到軟體全部完成了,使用者測試時才說:「拜託喔,這根本不是我要的東西!」這樣的問題幾乎是軟體人員最大的噩夢,統計恆逸眾多夥伴們執行專案的苦水,其中「需求說不清」佔了第一位(如圖),第二位是「需求變不停」,雖然屬於另一種苦水,但其根源仍與「需求說不清」難以脫鉤。
需求說清楚:大大的挑戰
「需求說不清」的事實,不能責怪使用者、業務員、專案經理、工程師、或是老闆等…任何個人,因為各種不同職務的人,有其專業背景,而使用者的需求,卻來自五花八門商業背景,而且隱藏諸多「難以寸管形容」的角落,並非一般人可以單槍匹馬地分析,然後直接進入程式撰寫的。那麼,難道這樣就無解了嗎?未必。世界上的軟體開發在起始階段,也都面臨相同問題,但仍有為數眾多的專案終究能克服這個先天性困難,成功地交給用戶使用。那麼他們使用何種技巧呢?PMBOK在「蒐集需求」流程中提供了11種工具,「定義範疇」流程又提供了4種工具,兩個流程有個共同的工具:「促進研討會」 (Facilitated Workshop),而這個工具也的確是簡單、有效;不需增加額外人力、時間與成本,只要在作業方式給予調整,其結果往往就會有出乎意料的改善。
促進研討會:把每個人零碎的認知編織成完整的大網
簡單而言,就是把使用者、業務員、專案經理、工程師等…相關人員齊聚一堂,針對使用者需求一一盤點、一項項由淺入深地反覆討論。例如:建置「銀行防制洗錢系統」專案,針對銀行公會的「同一帳戶於同一營業日之現金存、提款交易,分別累計達一定金額以上,且該交易與客戶身分、收入顯不相當或與本身營業性質無關者,要由系統偵測出來」,單獨這樣的需求是不足以編寫程式的,必須透過促進研討會,把其中可能的細部作法、以及可能面臨之技術與風險問題,一一展開討論。在上述案例討論中,就要釐清:「一定金額」是指多少錢?在現有系統中,這樣的數據從何而來?「交易與客戶身分、收入顯不相當」,將依據何種條件來判定?面對為數眾多的銀行客戶,每個人的收入數又從何得知?「營業性質」亦然,哪種營業算是「性質無關」?這些問題都不是單獨一個人可以解答,但在運作良好的促進研討會中,往往就容易獲得相對完整的解答,再由設計工程師就技術立場提出自己需澄清的部分,如果會議中無法獲得完整解答,則要指定專人澄清;如果公司內部無法解答,就要去詢問銀行公會或法律顧問,這樣反覆詢問、反覆推演,就容易把需求完整而詳細地規劃出來,同時一併談妥接收測試的方法與準則,讓最終使用者當場同意。
當然一定會有人說:「在我們公司,每個人都很忙,要聚在一起開會2-4小時,是超級困難的事。」所以通常形成這樣的結果:不是零零散散來開會、就是派些菜鳥來充數;談過之後,老是說:我不能決定,要帶回去問老闆。所以若要不讓這樣的情況發生,就要請公司各階主管重視這樣的研討會,務必全力支持專案經理來推動,参與成員要被授權代表該單位發言,否則主管要親自出席;直到需求確定之後,由公司副總或總經理批定,就是需求凍結點,再來開始進行軟體設計,過程中若有修改,則依據PMBOK的「整合變更」處理,一般而言,需求明確之後,再讓工程師專心設計軟體,往往勢如破竹、順利結案。
促進研討會:效益超高的需求分析工具
在國內業界,由於多數人、特別是主管們,並不了解促進研討會的超高效益,所以多半不予以重視。專案經理:「老闆,我們6個人明天要一起去台中召開促進研討會,與客戶進行需求訪談,高鐵票價4,000元,請同意。」老闆:「去那麼多人幹嘛?又不是打群架,業務去談就好,回來再告訴你們不就得了?」身為國際級的專案經理,我們一定要克服這樣錯誤的認知,向主管們尋求支援,善用促進研討會。以促進研討會不厭其煩地澄清需求(花費全案時程的20%~50%),是備極辛勞的事,但是這樣的付出只是「流汗」;如果需求未澄清,便匆匆忙忙去開發程式,將會演變成「流血」!先謀定而後動、以「流汗」防止「流血」,是多麼合算的一件事呢。
促進研討會緣於1970年代IBM所創立「聯合應用發展會議」 (Joint Application Development, JAD),它的效益如下(附註): 1. 將「需求不可控」的風險自80%降到10% 2. 資源不變的前提下,Function Points提升40%至85% 有這麼好的工具,能幫助我們脫離苦海,為何不好好運用呢!
附註:引用自Gottesdiener / Facilitated Workshops in Software Development Projects Paper for Software Management 2001
|