OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)
查看本系列全部文章:
《OOA&D實踐之路——真實案例解析OO理論與實踐》索引貼
第一份說明
????? 當這個項目開始時,我們得到的關于我們要做的系統的唯一說明是一頁Word文檔,這是一份簡單的不能再簡單的說明。文檔里只有一行字:我們需要一個系統,使得全國各地的代理加盟商和連鎖店能夠通過網絡訂購原料。另外,我們還知道這是一個食品公司,主營面包、麻花、肉夾饃等食品,在全國各地有多家連鎖機構。除此之外,我們一無所知。
永遠不要和客戶談需求
??????軟件開發的第一步是什么?很多人覺得是需求分析。顯然這短短的一句說明無法滿足我們的要求,于是很自然的,你希望找客戶談話,詳細了解情況,然后做出詳細的需求分析。于是,你心里有了這么一個算盤:
????? 和客戶談話 -> 問清所有需求 -> 進行需求分析 -> 生成需求文檔
????? 乍看之下,這是很合理的步驟,但是實際上這是不可行的。原因有如下幾點。
????? 1.客戶不關心系統的所有方面
????? 每個開發人員都希望,客戶可以清楚的把自己需要的東西的方方面面清楚無誤告訴你,然而,這只是一廂情愿罷了。因為,任何一個客戶在需要什么東西的時候,只會大致想想要個什么東西,并不會將所有地方都仔細想清楚。
????? 2.有時客戶并不清楚自己到底要什么東西
????? 有時候,客戶并不是很清楚自己想要什么。這不是天方夜譚。很多時候,客戶僅僅有一個“想要實現某個目的的動機”,而沒有“我需要一個什么系統”這么明確的概念。例如,從上文那個“一句話說明”中,可以看出,我們的客戶僅僅是有一個動機:希望有一個系統,能使得他們公司的代理商和加盟店在線定料,至于這是一個什么樣的系統,他們并沒有明確的概念,更不用說這個系統有什么樣具體的需求了。
????? 基于以上兩點,你是不可能從客戶那里問清所有需求的。實際上,就不該和客戶談需求,因為需求從來就不是“客戶面”的東西,而是“開發人員面”的東西。需求需要包含方方面面系統需要實現的功能,而客戶往往并沒有如此精細想過,甚至客戶自己對自己想要的東西什么樣子都不清晰。面對這種客戶,你一本正經往他面前一坐,開發筆記本說:“我們談談需求吧”,或說“我們進行需求分析吧”,我想客戶會立馬崩潰,而你也不可能得到你想要的所有東西。
????? 作為開發人員,不應該一開始就和客戶談需求,而要先談特性。很多需求并不需要客戶告訴你,開發人員應該能通過常識識別出來,就如沒有哪一個買汽車的客戶會說:我需要一個輛汽車,要有方向盤,還要有四個輪子。他們通常會說:“我要一輛家用車、要省油、舒適,要至少能坐3個人。”這“家用車”、“至少能坐三個人”就是特性。
????? 特性是一些描述,一條特性簡要描述了系統的一個客戶最關心的核心功能。
????? 最為開發人員,首要任務不是做需求分析,而是幫助用戶整理出一份特性列表。這里之所以說“幫助”,是因為很多時候,客戶由于自身太關注于某個方面,而漏掉了十分重要的特性,這是你要幫客戶想想,并將想到的特性詢問客戶是否是需要的。如果客戶很高興的說“對!對!”,那么這就是大功一件。所以,在初期階段,開發人員一定要想客戶之所想,急客戶之所急,盡快幫客戶理清系統有什么特性。
????? 所以,正確的過程應該是:
????? 詢問客戶系統都有什么功能 -> 寫出初期特性列表 -> 想想什么遺漏特性,并詢問客戶 -> 查漏補缺
生成特性列表
????? 下面回到案例。
????? 雖然客戶的說明只有一句話,我們還是整理出一份初期的特性列表,并將其作為我們向客戶展示的第一份工作成果。這份特性列表內容如下:
????? 1.可以將各種原料信息發布到系統上
????? 2.加盟商和連鎖店可以通過系統在線定料
????? 沒錯,我們的初期文檔只有兩項特性。我們把這個給客戶看,客戶說:“嗯……大約是這個東西吧。”很顯然,我們的客戶是比較懶的那種,這時,我們有義務引導客戶想起更多需要的特性。下面是當時大約對話:
????? 開發人員(簡稱D),客戶(簡稱C)
????? D:你這個加盟商和連鎖店是要如何區分呢?
????? C:我們公司有一個加盟商和連鎖店的記錄。
????? D:那么你們是準備將各個加盟商的信息全部錄入系統嗎?
????? C:不是,我希望他們能自己注冊,就和論壇那種。
????? D:那么你要如何確認他們的身份,總不能任何人都可以在這個系統注冊吧。
????? C:嗯,我們公司有各個加盟商的詳細信息,我們希望他們注冊時提供足夠的信息,我們進行核對。
????? (于是我們飛快寫下一個特性:加盟商和連鎖店通過網絡進行注冊,總店負責人審核后才可以正式使用系統。)
????? D:你們得在后臺能發布各種原料的信息吧。
????? C:嗯,使得。
????? D:這里有沒有什么特別的要求。
????? C:沒有吧……
????? D:好的,那么你們準備設立幾個人負責管理這個系統。
????? C:就一個人吧,就信息部那個。我們就這一個比較懂計算機的。
????? D:也就是說不需要有多個人分別管理這個系統?
????? C:不需要。
????? (寫下一個特性:系統需要一個管理員,可以對系統進行管理)
????? D:在你們的加盟商進行定料時,你希望他們怎么操作啊。
????? C:這個,我沒仔細想過……
????? (看客戶對這個地方比較不清晰,我們打開了一個網上書店的網站,給他演示了一下購物車購物的過程)
????? D:你看,你的這個定料過程是不是和這個購物過程很相似,加盟商定料是不是就相當于從總公司購買原料啊。
????? C:對對!就要這種效果的!
????? (這里要記住,在特性不能直接說清楚時,找相似事物是一個不錯的選擇。也就是說,說明這個特性像什么,不像什么)
????? (我們又加一條特性:使用購物車功能進行網上定料)
????? D:付錢這一塊怎么弄,需要網上支付嗎?
????? C:不了,我們一般又財務專門做錢這一塊工作。
????? D:那買完原料后要不要什么憑證呢?
????? C:買完后生成一份定料單吧,打印出來,交給財務,財務清算款項,款到賬后通知原料那邊發貨。
????? (又一條特性:定料完成后生成定料單,并可以打印)
????? D:那么關于這些交易,你一定希望能查詢吧,你希望怎么查詢。
????? C:哦,這些我們財務那邊有專門的財務軟件。你這個系統只要能讓加盟商定料就行了。
????? 到這里談話基本結束,我們得到如下一張補充過的特性列表:
????? 1.可以將各種原料信息發布到系統上
????? 2.加盟商和連鎖店可以通過系統在線定料
????? 3.加盟商和連鎖店通過網絡進行注冊,總店負責人審核后才可以正式使用系統
????? 4.系統需要一個管理員,可以對系統進行管理
????? 5.使用購物車功能進行網上定料
????? 6.定料完成后生成定料單,并可以打印
????? 我們將補充后的特性列表給客戶看了看,基本得到了認可。
????? 到了這里,我們第一步就差不多做完了。但是,我們還是不能馬上進入需求分析,因為這之前還有很多事情要做。例如,特性整理,風險規避,這都是后面要討論的話題。
重點總結
????? 1.客戶不會想到方方面面。
????? 2.有時客戶并不明確自己想要什么東西,而僅僅是有個動機。
????? 3.不要和客戶談需求,要談特性。
????? 4.開發人員有義務引導和幫助客戶挖掘系統的特性。
????? 5.當客戶描述不清某個特性時,可以采用找類似事物的方法,說說這個特性像什么,不像什么。
????? 6.在軟件開發初期,我們需要首先整理出一張特性列表,而不是做需求分析。
總結
以上是生活随笔為你收集整理的OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux之shell编程的shell工
- 下一篇: 《程序员开发心理学》阅读笔记一