用議論文三要素,搞定需求分析(中)
結(jié)構(gòu)框架分析是一個自底向下的過程,先根據(jù)每個業(yè)務(wù)場景、流程,需要從中發(fā)現(xiàn)找出各種類;然后分析類之間的數(shù)量與邏輯關(guān)系,將類聯(lián)系在一起,最后確定類屬性與操作,繪制出“類圖”,完成結(jié)構(gòu)框架分析。
先回顧一下上一篇文章的內(nèi)容,主要講業(yè)務(wù)模型這個“論點(diǎn)”的分析思路:以業(yè)務(wù)目標(biāo)這個抽象角度作為分析的切入點(diǎn),梳理需求;再引入用例,通過場景分析,對用例進(jìn)行細(xì)化,最后得出分析業(yè)務(wù)模型的歸納公式:
講完論點(diǎn),此篇文章就來bb一下,需求分析的“論據(jù)”。需求分析的“論據(jù)”就是業(yè)務(wù)模型的整體結(jié)構(gòu),傳達(dá)系統(tǒng)有什么?
為了更好地理解這個問題,回答之前,首先我們思考一下這個生活問題:西紅柿炒雞蛋有什么?換言之西紅柿炒雞蛋的食材有什么?
這點(diǎn)生活常識,我還是有的。
果斷百度了一下,西紅柿炒雞蛋的食材:番茄3個,雞蛋3個,油10g,鹽5g, 雞精3g。
so easy,但別小瞧這幾個簡單的數(shù)字與文字,它表示了各食材、佐料之間的數(shù)量關(guān)系(番茄與雞蛋的數(shù)量關(guān)系、油、鹽、雞精之間的數(shù)量關(guān)系等),缺少某樣食材或者各食材、輔料的數(shù)量關(guān)系不對,都會影響西紅柿炒雞蛋這盤菜的最后結(jié)果。
同樣系統(tǒng)也是這個道理,而在軟件中,這個物叫“類”,實(shí)際上就是一類事物的意思,一張桌子是一個對象,桌子就是一個類了,其實(shí)用戶是很容易理解的,它就是“類型”的意思。很多商業(yè)系統(tǒng)只有1個、兩個或三個核心的類,圍繞著這幾個類產(chǎn)生大量的處理流程,系統(tǒng)就是為產(chǎn)生和操縱這些東西開發(fā)的。
類的構(gòu)成很簡單,由類名、屬性、操作組成。類名是類的名稱、屬性是類擁有的信息、操作是類提供的服務(wù)。
如圖為類的表示方法:
回歸正題,有沒有發(fā)現(xiàn),需求分析的“論據(jù)”就是用類映射現(xiàn)實(shí)世界,以類作為核心,描述系統(tǒng)的結(jié)構(gòu)框架,來表示系統(tǒng)有什么?
那如何用類來做結(jié)構(gòu)框架分析呢?
主要步驟包括這三個:
- 根據(jù)每個業(yè)務(wù)場景、流程,需要從中發(fā)現(xiàn)找出各種類;
- 再分析它們之間的數(shù)量關(guān)系、邏輯關(guān)系;
- 然后在明確物的屬性與操作,最后得出結(jié)構(gòu)框架。
講完思路,下面就來小實(shí)戰(zhàn)一下。
發(fā)現(xiàn)類
同樣,還是以上篇文章中的“餐廳系統(tǒng)”為例。
就餐的大概流程:顧客在“真好吃”餐館吃飯,通過手機(jī)掃描二維碼進(jìn)行點(diǎn)菜,翻閱菜單查看菜品,菜品種類有熱菜、冷菜、小吃,點(diǎn)菜完成后,系統(tǒng)需要將小明點(diǎn)的菜品記錄,生成訂單,并生成送菜單發(fā)送給對應(yīng)的廚師(負(fù)責(zé)熱菜的、負(fù)責(zé)冷盤的、負(fù)責(zé)小吃的),廚師做完菜后,通知服務(wù)員端菜,服務(wù)員根據(jù)送菜單上的餐桌號,將菜端到顧客面前,顧客就餐完結(jié)賬。
有一點(diǎn)不同的是現(xiàn)實(shí)生活的對象往往是具象的,類容易理解找出,系統(tǒng)的對象往往是抽象的,不容易找出與分辨,且具有十分多的屬性需要分析,判斷是否可以作為類。不過,也是有“名詞動詞法”去幫助我們?nèi)シ直妗?/p>
“名詞動詞法”,其主要規(guī)則是從名詞與名詞短語中提取類與屬性;從動詞與動詞短語中提取操作與關(guān)聯(lián);其實(shí)就是名詞對應(yīng)類或者類的屬性,動詞對應(yīng)類的操作。而所有格短語通常表示屬性(格式:xxx的xxx,例如:餐桌的號碼牌,號碼牌就是一個屬性)。
名詞有:顧客 “真好吃”餐館 菜單 熱菜 冷菜 小吃 菜品 訂單送菜單 餐桌號 廚師 服務(wù)員。
很顯然,并不是每一個名詞都是可以作為類的,有些名詞對于開發(fā)的系統(tǒng)來說是無關(guān)緊要的,甚至是系統(tǒng)之外的,而有些名詞適合作為屬性。
顧客,會對系統(tǒng)產(chǎn)生作用,會下訂單,可以歸類到“顧客”這個類中。
“真好吃”餐廳“廚師”“服務(wù)員”不對系統(tǒng)產(chǎn)生作用,是系統(tǒng)外的概念,不屬于類。
熱菜、冷菜、小吃都是菜品的類型,菜品是可以作為類的。
菜單作為統(tǒng)計菜品的主體,具有統(tǒng)計的操作方法,可以視為一個類。
訂單包含了下單時間、餐桌號、顧客點(diǎn)的菜品與付款類型,是一個類。
送菜單包含了該菜的信息、餐桌號還有自身的編號,也是一個類。
餐桌號概念過小,只能作為訂單的屬性。
所以提煉出:菜單、菜品、顧客、訂單、菜品單。
明確類之間的數(shù)量與邏輯關(guān)系
類之間最常見的邏輯關(guān)系有三類:關(guān)聯(lián)、泛化、聚合/組合。
關(guān)聯(lián):說明兩物有聯(lián)系,用一條直線連接。比如顧客與訂單之間有聯(lián)系。
泛化:子類從父類中繼承,使用空心箭頭的實(shí)現(xiàn)表示。就如圖上述例子,菜品是父類,熱菜、冷菜、小吃作為子類繼承了菜的特性,同時具有自己獨(dú)特的屬性。
聚合與組合關(guān)系:整體與部分的關(guān)系。區(qū)別在于,聚合中的部分可以獨(dú)立于“整體”存在,而組合中的部分“完全依賴于整體”。這里菜品與菜單就是聚合的關(guān)系,菜品可以獨(dú)立于菜單而存在。
并根據(jù)以上的邏輯關(guān)系,對每個類進(jìn)行分析,同時思考他們的數(shù)量關(guān)系,分析過程如下:
綜上,可以得出初步的類圖。
明確類的屬性與方法
當(dāng)找出了系統(tǒng)的類,并厘清它們之間的數(shù)量關(guān)系與邏輯關(guān)系之后,就可以確定類的屬性與操作了。根據(jù)目前的業(yè)務(wù)描述,可以找到以下的屬性與操作:
- 菜品類:屬性有菜品編號、菜品名稱、菜品類型、價格
- 訂單類:屬性有下單時間、餐桌號、價格、付款類型
- 送菜單:屬性有送餐單號
- 顧客:屬性有人數(shù)
接著使用“名詞動詞法”,來找出類的操作,動詞有:吃點(diǎn)記錄、發(fā)送做通知端、統(tǒng)計。
當(dāng)然動作都是由類發(fā)出的,根據(jù)第一步的找出的類,就可以排除掉不是類發(fā)出的動詞:服務(wù)員的端、廚師的做、廚師的通知。另外顧客的吃不對系統(tǒng)產(chǎn)生影響,因此也排除,最后剩下:
- 訂單:記錄菜品;
- 送菜單:發(fā)送;
- 菜單:統(tǒng)計菜品。
將以上這些屬性與操作加入原先的模型,就可以得到一個完整的類圖了!如圖所示:
小結(jié)
結(jié)構(gòu)框架分析是一個自底向下的過程,先根據(jù)每個業(yè)務(wù)場景、流程,需要從中發(fā)現(xiàn)找出各種類;然后分析類之間的數(shù)量與邏輯關(guān)系,將類聯(lián)系在一起,最后確定類屬性與操作,繪制出“類圖”,完成結(jié)構(gòu)框架分析。
結(jié)構(gòu)框架就如同議論文中的“論據(jù)”,它是“論點(diǎn)”的根據(jù),它也是系統(tǒng)的根據(jù),需要繪制出類全面且關(guān)系清晰、屬性與操作明確的類圖,可視化地表示系統(tǒng)有什么。
下一篇,將bb需求分析的“論證”,如何化靜為動,清晰地表達(dá)系統(tǒng)怎么做?
相關(guān)閱讀
本文由 @澤 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
題主肯定是從開發(fā)轉(zhuǎn)過來的,類/屬性都用上了 ??