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