瘋狂的訂餐系統-軟體需求分析挑戰之旅 【轉】
阿新 • • 發佈:2018-12-31
摘要:
說教性質的需求分析理論,各位看了也白看,所以咱們就來一個真實個案——“訂餐系統”體驗一下。
“訂餐系統”貌似簡單,但陷阱重重,各種需求分析的經典場景將會一一重現,各位做好準備接受這個挑戰沒有?
特別宣告:
如需轉載此文,請給出指向本網站的連線,如下:
作者:張傳波
摘自:http://www.umlonline.cn
如不能按此要求,請不要轉載此文。 1.1某IT公司員工的吃飯問題 咱們出來幹活的,天天需要吃午飯,所謂“午飯吃不好,工作幹不好”。某IT公司深知這個道理,為了讓大家方便吃午飯,由公司統一訂餐,並且費用全包。 這樣的做法,大家當然開心了,不過行政部的同事就要辛苦一點,每天要“服侍”大家吃飯,我們看看怎樣個做法:
你非常光榮地接受了這個任務,領導任命你為訂餐系統的專案經理,你會如何展開需求分析工作呢?
可能你會這樣想:那還不容易,這麼簡單的系統,直接編碼就行了,還寫什麼需求!
夥計,不要衝動,看到這裡請你先停止閱讀,找張紙和筆,用你自以為合適的方式列出這個系統的需求。
請寫完後才繼續往下看噢!
不聽話了?沒寫完就往下看?
咱們先說說需求分析的一些大道理:
首先我們需要明確專案的背景,我們要回答這些問題:也就是為什麼會有這個專案?客戶為什麼想做這樣的一個專案?如果沒有這個專案會怎樣?
瞭解背景的基礎上,我們需要進一步瞭解以下內容:
接下來,就可以定詳細的需求規格說明書了,一般我們會對功能性需求和非功能性需求都列出詳細的要求,我們這裡把這些要求定義為“需求規格”。
圖1 背景、需要、需求規格
對於功能性需求,我們往往會描述成用例圖。
圖2 用例圖
對於非功能性需求,往往會對系統穩定性、效能、相容性等提出要求。
什麼是背景?
背景這東西比較籠統,簡單地說就是這個專案的來由,我們需要用說故事的方式講清楚專案的背景。
什麼是需要?
需要就是客戶真正想要的東東,是高層次的需求,我們可以把需要解決的問題、關鍵涉眾、專案的目標、範圍、專案成功標準等全部統稱為需要。
什麼是需求規格?
需求規格是很細級別的但又沒有細到詳細設計程度的需求了,描述出系統與使用者是如何互動的,系統要滿足怎樣的一些非功能要求。
需求分析過程,無非就是由背景到需要到需求規格的過程,這個過程是螺旋前進的。需求分析中最難解決的問題往往就是搞不清需求之根源,把握不清背景和需要,往往就會被繁瑣的需求規格所困住,被客戶牽著鼻子走。理論是完美的,現實是殘酷的,我們現實的需求分析工作,往往會出現這些問題:
系統給出選單
使用者選擇選單並確認選擇
系統儲存使用者的選擇,提示訂餐成功。 答案點評: 1)用例圖全面地描述了系統使用者與用例,條理清晰、一目瞭然。 2)對於每一個用例,還可以進一步描述使用者與系統是如何互動的,為下一步工作做好準備。 3)除了描述功能,還需要考慮系統的非功能需求,如效能要求、安全性要求等。 應該如何描述功能? 1)要根據前面的問題匯出系統應具備的功能以及非功能需求。 2)用例圖是描述功能性需求的好工具,但不要拘泥於只用用例圖。 3)對於非功能性需求,客戶往往沒有具體想法,需要我們從客戶的需要出發,定出具體的非功能性需求。 7.本專案成功標準是怎樣的? 參考答案:用簡單的方式達到目標的要求,達致雙贏。 答案點評: 1)“簡單”意味著成本低,符合雙方利益。 2)達到目標要求是真正的客戶所需。 如何考慮專案的成功標準? 我們做一個專案,成功標準並不是為了賺錢,更加不是不惜一切謀取最大利益,雙贏才是最重要的原則!對於客戶來說,首要目標就是要滿足他的需要,然後就是合理的預算,對於軟體公司來說,首要目標就是為客戶提供高性價比的解決方案,賺取合理利潤。要達致雙贏,客戶的成熟度是很重要的,但更重要的是軟體公司的成熟度,專案組需要以專家、顧問這樣的高度來解決專案中的問題,引導雙方達至雙贏。 以上7個問題,問題1是背景相關的問題,問題2、3、4、5是需要相關的問題,問題6是需求規格相關的問題,而問題7是我們需要認真考慮的問題,考慮清楚專案的成功標準才能更好地指導專案後續工作,提高專案成功概率。 1.4 沒完沒了的“新需求” 由於你的徹底而深入的需求分析工作,訂餐系統進展非常順利,很快就上線運行了!但問題也就來了,客戶陸陸續續提出了以下問題: 1)要經過好幾個頁面才能進入訂餐頁面,不太方便,希望能在首頁直接進入訂餐頁面。 2)一次只能定一天的餐,不太方便,希望一次能定多天的。 3)我有時選了一個菜,前臺卻說這個菜沒有了! 4)能不能提供多家餐館選擇? 5)訂餐標準才8元,現在物價都漲了,能不能提高一下標準? 6)能不能直接連到餐館的網頁上去看菜式? 7)能不能做口味分析和營養分析? 系統能用起來,問題肯定多多,沒問題反而說明沒有人用這個系統,所以有問題是好事,但問題多了又會讓人很煩躁,改來改去沒完沒了啊,專案的成本也會持續上升。 你準備如何招架呢?在繼續閱讀之前,請你逐一分析上述問題並提出解決方案,要寫下來奧! 下面我們來逐一分析上述問題。 1)要經過好幾個頁面才能進入訂餐頁面,不太方便,希望能在首頁直接進入訂餐頁面。 2)一次只能定一天的餐,不太方便,希望一次能定多天的。 我們首先要思考,這兩個要求背後的需要是什麼呢?這兩個問題都是在實際使用訂餐系統中產生的,使用者提出這樣的要求無非是希望系統更加好用更加方便,訂餐系統無非是要方便大家訂餐、減少訂餐時間,故這兩個要求應該予以滿足。 系統上線後,使用者往往會提出很具體的修改要求,這些要求往往是易用性方面的問題,如:介面佈局、操作方式、文字表達、排序條件等細節問題,這些問題不解決的話會降低使用者體驗,此類問題一般應儘量解決。 前期對專案的需要把握得比較好的話,軟體基本上是能符合使用者的需要的,哪怕使用者提出了一些易用性方面的要求,一般也是很容易修改的。不過誰也不能保證對需要的理解沒有偏差,有可能系統上線後才發現理解錯了客戶的真正需要,這時修改系統的話一般來說工作量會比較大,但原則上應該給予修改,雙贏是專案的目標,客戶關鍵需要沒有滿足,專案不能算成功。 3)我有時選了一個菜,前臺卻說這個菜沒有了! 5)訂餐標準才8元,現在物價都漲了,能不能提高一下標準? 會什麼會有選了菜但沒有這個菜的問題呢?是軟體的bug嗎? 原來餐廳的選單會定期更換,前臺會及時更新訂餐系統的選單,但問題是餐廳修改選單並不是很準時,而且修改後又不一定能及時通知前臺,導致有時會出現員工按照老選單訂餐,但實際上餐廳已經修改了選單的情況。 第二個問題是午餐標準的問題,明顯不是系統的問題,但使用者還是提出來了,他們難道不知道不是系統的問題嗎?為什麼還要對我們提出來?是不是希望我們向公司領導反應問題? 軟體有些問題,並不是軟體本身的問題,而是管理的問題。要用好一套系統,必須配套相應的管理辦法,很多管理的問題軟體是不能解決的。第一個問題,要改善的話則需要加強對餐廳的管理,讓他們及時送上更新後的選單;而對於第二個問題,則需要公司檢討訂餐標準是否合適了。 專案組遇到客戶提出這類問題時,不要因為不是軟體問題就事不關己,應主動分析問題並提供適當的解決方案,很多問題只需要在管理上稍微改善一下,問題就可以立馬解決。 4)能不能提供多家餐館選擇? 為什麼使用者希望選擇多家餐廳呢?有人喜歡吃辣菜,有人喜歡吃粵菜,有人想吃粥粉面,就算是同一個人也會今天喜歡這個明天喜歡那個,如果能有多家餐廳可供選擇,則更能滿足大家的口味了。大家能吃到自己喜歡的午餐,更有利於大家做好工作,從這點看似乎這個要求是滿足需要的,我們應該予以滿足。 要實現這點,軟體自然要費點周折去修改,但問題遠遠沒有這樣簡單,管理上會變得麻煩很多:前臺需要從多家餐館獲取選單,要管理多家餐館;財務要對多家餐館進行結帳;更麻煩的是,有些餐館要訂餐數量多才會送餐,如果哪天某餐館點的餐不夠多,還需要選擇了這個餐館的員工重新訂餐。這樣複雜的管理,軟體應該如何來適應呢? 看來如果寄望通過修改軟體來滿足這個要求,就會陷入一個“無底洞”,似乎無論怎樣做都難以滿足要求。實際專案中,經常會遇到這類問題,這時一定要認真地分析:
如需轉載此文,請給出指向本網站的連線,如下:
作者:張傳波
摘自:http://www.umlonline.cn
如不能按此要求,請不要轉載此文。 1.1某IT公司員工的吃飯問題 咱們出來幹活的,天天需要吃午飯,所謂“午飯吃不好,工作幹不好”。某IT公司深知這個道理,為了讓大家方便吃午飯,由公司統一訂餐,並且費用全包。 這樣的做法,大家當然開心了,不過行政部的同事就要辛苦一點,每天要“服侍”大家吃飯,我們看看怎樣個做法:
- 文員每天都要向餐廳索取最新選單,然後拿著選單找每個人確認今天吃什麼。
- 大家都確認後,文員以電話或者傳真的方式,向餐廳訂餐。
- 餐廳送來午飯,文員通知大家,然後大家來取餐。
1)本專案解決了客戶的什麼問題?
2)本專案涉及到什麼人、什麼單位?
3)本專案的目標是什麼?
4)本專案的範圍是怎樣的?
5)本專案的成功標準是什麼?
以上這些內容,我們稱之為客戶的“需要”。
- 背景啊背景,我該如何寫你呢?
- 目標在哪裡?
- 需求規格優先
系統給出選單
使用者選擇選單並確認選擇
系統儲存使用者的選擇,提示訂餐成功。 答案點評: 1)用例圖全面地描述了系統使用者與用例,條理清晰、一目瞭然。 2)對於每一個用例,還可以進一步描述使用者與系統是如何互動的,為下一步工作做好準備。 3)除了描述功能,還需要考慮系統的非功能需求,如效能要求、安全性要求等。 應該如何描述功能? 1)要根據前面的問題匯出系統應具備的功能以及非功能需求。 2)用例圖是描述功能性需求的好工具,但不要拘泥於只用用例圖。 3)對於非功能性需求,客戶往往沒有具體想法,需要我們從客戶的需要出發,定出具體的非功能性需求。 7.本專案成功標準是怎樣的? 參考答案:用簡單的方式達到目標的要求,達致雙贏。 答案點評: 1)“簡單”意味著成本低,符合雙方利益。 2)達到目標要求是真正的客戶所需。 如何考慮專案的成功標準? 我們做一個專案,成功標準並不是為了賺錢,更加不是不惜一切謀取最大利益,雙贏才是最重要的原則!對於客戶來說,首要目標就是要滿足他的需要,然後就是合理的預算,對於軟體公司來說,首要目標就是為客戶提供高性價比的解決方案,賺取合理利潤。要達致雙贏,客戶的成熟度是很重要的,但更重要的是軟體公司的成熟度,專案組需要以專家、顧問這樣的高度來解決專案中的問題,引導雙方達至雙贏。 以上7個問題,問題1是背景相關的問題,問題2、3、4、5是需要相關的問題,問題6是需求規格相關的問題,而問題7是我們需要認真考慮的問題,考慮清楚專案的成功標準才能更好地指導專案後續工作,提高專案成功概率。 1.4 沒完沒了的“新需求” 由於你的徹底而深入的需求分析工作,訂餐系統進展非常順利,很快就上線運行了!但問題也就來了,客戶陸陸續續提出了以下問題: 1)要經過好幾個頁面才能進入訂餐頁面,不太方便,希望能在首頁直接進入訂餐頁面。 2)一次只能定一天的餐,不太方便,希望一次能定多天的。 3)我有時選了一個菜,前臺卻說這個菜沒有了! 4)能不能提供多家餐館選擇? 5)訂餐標準才8元,現在物價都漲了,能不能提高一下標準? 6)能不能直接連到餐館的網頁上去看菜式? 7)能不能做口味分析和營養分析? 系統能用起來,問題肯定多多,沒問題反而說明沒有人用這個系統,所以有問題是好事,但問題多了又會讓人很煩躁,改來改去沒完沒了啊,專案的成本也會持續上升。 你準備如何招架呢?在繼續閱讀之前,請你逐一分析上述問題並提出解決方案,要寫下來奧! 下面我們來逐一分析上述問題。 1)要經過好幾個頁面才能進入訂餐頁面,不太方便,希望能在首頁直接進入訂餐頁面。 2)一次只能定一天的餐,不太方便,希望一次能定多天的。 我們首先要思考,這兩個要求背後的需要是什麼呢?這兩個問題都是在實際使用訂餐系統中產生的,使用者提出這樣的要求無非是希望系統更加好用更加方便,訂餐系統無非是要方便大家訂餐、減少訂餐時間,故這兩個要求應該予以滿足。 系統上線後,使用者往往會提出很具體的修改要求,這些要求往往是易用性方面的問題,如:介面佈局、操作方式、文字表達、排序條件等細節問題,這些問題不解決的話會降低使用者體驗,此類問題一般應儘量解決。 前期對專案的需要把握得比較好的話,軟體基本上是能符合使用者的需要的,哪怕使用者提出了一些易用性方面的要求,一般也是很容易修改的。不過誰也不能保證對需要的理解沒有偏差,有可能系統上線後才發現理解錯了客戶的真正需要,這時修改系統的話一般來說工作量會比較大,但原則上應該給予修改,雙贏是專案的目標,客戶關鍵需要沒有滿足,專案不能算成功。 3)我有時選了一個菜,前臺卻說這個菜沒有了! 5)訂餐標準才8元,現在物價都漲了,能不能提高一下標準? 會什麼會有選了菜但沒有這個菜的問題呢?是軟體的bug嗎? 原來餐廳的選單會定期更換,前臺會及時更新訂餐系統的選單,但問題是餐廳修改選單並不是很準時,而且修改後又不一定能及時通知前臺,導致有時會出現員工按照老選單訂餐,但實際上餐廳已經修改了選單的情況。 第二個問題是午餐標準的問題,明顯不是系統的問題,但使用者還是提出來了,他們難道不知道不是系統的問題嗎?為什麼還要對我們提出來?是不是希望我們向公司領導反應問題? 軟體有些問題,並不是軟體本身的問題,而是管理的問題。要用好一套系統,必須配套相應的管理辦法,很多管理的問題軟體是不能解決的。第一個問題,要改善的話則需要加強對餐廳的管理,讓他們及時送上更新後的選單;而對於第二個問題,則需要公司檢討訂餐標準是否合適了。 專案組遇到客戶提出這類問題時,不要因為不是軟體問題就事不關己,應主動分析問題並提供適當的解決方案,很多問題只需要在管理上稍微改善一下,問題就可以立馬解決。 4)能不能提供多家餐館選擇? 為什麼使用者希望選擇多家餐廳呢?有人喜歡吃辣菜,有人喜歡吃粵菜,有人想吃粥粉面,就算是同一個人也會今天喜歡這個明天喜歡那個,如果能有多家餐廳可供選擇,則更能滿足大家的口味了。大家能吃到自己喜歡的午餐,更有利於大家做好工作,從這點看似乎這個要求是滿足需要的,我們應該予以滿足。 要實現這點,軟體自然要費點周折去修改,但問題遠遠沒有這樣簡單,管理上會變得麻煩很多:前臺需要從多家餐館獲取選單,要管理多家餐館;財務要對多家餐館進行結帳;更麻煩的是,有些餐館要訂餐數量多才會送餐,如果哪天某餐館點的餐不夠多,還需要選擇了這個餐館的員工重新訂餐。這樣複雜的管理,軟體應該如何來適應呢? 看來如果寄望通過修改軟體來滿足這個要求,就會陷入一個“無底洞”,似乎無論怎樣做都難以滿足要求。實際專案中,經常會遇到這類問題,這時一定要認真地分析:
- 深入思考修改要求背後的需要是什麼。
- 如果要滿足該要求,在軟體和管理辦法上需要做什麼改變,代價有多大。
- 如果不滿足這個要求,影響會很大嗎?
- 對於符合需要的易用性方面的要求,應儘量滿足。
- 有些問題可通過改善管理辦法來解決。
- 有些問題需要同時在軟體和管理辦法上做工作來改善。
- 客戶一時衝動的要求,可另闢蹊徑解決。
- 客觀條件做不到的、技術上做不到的,應予以拒絕。
- 超出範圍的要求,可引導客戶做第二期。