講案例談體會(huì),教你3步畫好時(shí)序圖
編輯導(dǎo)語:時(shí)序圖可以有效地描述交互順序,并幫助研發(fā)團(tuán)隊(duì)更清晰地理順系統(tǒng)邏輯,做好流程分析,若利用得當(dāng),則可以一定程度上降低溝通成本,更快速地推進(jìn)業(yè)務(wù)進(jìn)行。本篇文章里,作者就時(shí)序圖的構(gòu)成與畫法等方面做了總結(jié),一起來看一下。
上次介紹了活動(dòng)圖,這次分享 UML 中,另一種流程分析利器——時(shí)序圖。
以前每次要分析流程,我都會(huì)用活動(dòng)圖。直到有一次,我面對一個(gè)業(yè)務(wù)流程,畫活動(dòng)圖,畫來畫去,總覺得哪里不對,但又表達(dá)不出來,感覺如鯁在喉。
后來,我想起時(shí)序圖,用時(shí)序圖把流程梳理了一遍,豁然開朗。
原來,用不同的視圖去描述同一個(gè)流程,能讓我們看到自己未曾發(fā)現(xiàn)的問題。就像看足球比賽,在多個(gè)不同位置的攝像鏡頭下,能看到球員更全面的表現(xiàn)。
此后,我用時(shí)序圖甚至比活動(dòng)圖還多。
那么,它有啥特別之處,居然能替代活動(dòng)圖來分析流程?我們一起來看看。
一、解讀時(shí)序圖
時(shí)序圖,也叫序列圖、順序圖,是 UML 中常用的動(dòng)態(tài)視圖,用于描述多個(gè)對象參與實(shí)現(xiàn)業(yè)務(wù)目標(biāo)時(shí),彼此之間按時(shí)間順序進(jìn)行交互的過程。
時(shí)序圖,用來表達(dá)對象或角色之間交互的信息傳遞和時(shí)間順序,特別方便。
每次梳理流程,跟開發(fā)溝通,我都會(huì)借助它來描述。
繪制時(shí)序圖,將一個(gè)個(gè)對象和其交互動(dòng)作列出來,可以直觀反映出,每個(gè)對象對其他對象、或其自身做的交互動(dòng)作,讓我們看到業(yè)務(wù)內(nèi)部的運(yùn)作、系統(tǒng)之間的互動(dòng),從而搞清楚業(yè)務(wù)規(guī)則、系統(tǒng)邏輯。
在《火球:UML 大戰(zhàn)需求分析》一書中,作者總結(jié)特別好:“任何復(fù)雜的交互,都可以分解為自己與自己、自己與別人、別人與別人的多個(gè)簡單交互”。
時(shí)序圖正體現(xiàn)了這種邏輯,所以,它表達(dá)交互邏輯時(shí),非常清晰簡單。
客戶用 ATM 取款的時(shí)序圖
作為產(chǎn)品經(jīng)理,如果我們能掌握這一利器,用來分析業(yè)務(wù)、定義需求,與開發(fā)溝通,定能大大提高效率。
時(shí)序圖常見的應(yīng)用場景,是在支付領(lǐng)域。例如,微信支付的開發(fā)者文檔,就用時(shí)序圖來表達(dá)支付的實(shí)現(xiàn)邏輯。
這么好的工具,趕緊學(xué)一下吧。
二、時(shí)序圖的構(gòu)成
時(shí)序圖的常用元素很簡單,分別有:對象(角色)、生命線、會(huì)話、消息(簡單消息、返回消息)。
時(shí)序圖的常用元素
1. 對象
對象,指與業(yè)務(wù)、產(chǎn)品或系統(tǒng)相關(guān)的人、事、物,可以是人、部門、系統(tǒng)等。
通常用矩形表示,畫在時(shí)序圖的頂部,對象名寫在矩形內(nèi)。
其中,參與交互過程的人,如用例圖的參與者、參與完成業(yè)務(wù)目標(biāo)的相關(guān)人員,通常稱之為角色。
網(wǎng)上有的會(huì)把對象和角色分開來,我理解這些都是對象。只不過,在圖形上,角色與用例圖的參與者一樣,用火柴人表示,比較好理解。
因?yàn)?,UML 是在面向?qū)ο笏枷氲闹笇?dǎo)下,來描述軟件產(chǎn)品的分析與設(shè)計(jì)。面向?qū)ο?,則將現(xiàn)實(shí)世界的人事物,看成一個(gè)個(gè)獨(dú)立的個(gè)體,稱之為「 對象 」。
它們又可以根據(jù)不同的需要,以不同的角度,被歸納在一起,這就是開發(fā)人員常說的「 類 」。
比如,西瓜、蘋果、梨是不同的對象,它們可以歸為一類——水果;蘋果手機(jī)、華為手機(jī)、小米手機(jī),可以歸為手機(jī)。
對象的命名,一般格式為:對象名:類名,如「 李四:客戶 」。
按照語法,冒號(hào)和類名是必需的,對象名是可選的。具體地說,「 李四:客戶 」表示李四是客戶的實(shí)例,即具體到某個(gè)客戶的名字。
實(shí)踐中,并不需要具體到實(shí)例,對象名可以不寫。我的做法是,直接寫一類對象的名稱,如某某系統(tǒng)、某某部門。
2. 生命線
每個(gè)對象下有一條垂直的虛線,這就是對象的生命線,從上往下,代表時(shí)間的先后順序。
3. 會(huì)話
會(huì)話,也叫激活框,它代表在對象生命線上某個(gè)階段執(zhí)行的操作,以一個(gè)偏窄的矩形表示。
每一次會(huì)話,表示一次相對完整的交互過程。不過,怎樣算一次會(huì)話,實(shí)踐中有點(diǎn)難區(qū)分,需要多練習(xí)體會(huì)。
我常按照操作的完整度來畫,有時(shí)甚至不畫,有些專業(yè)的 UML 工具還能自動(dòng)生成會(huì)話。
4. 消息
消息,表示對象之間發(fā)送的信息或做的事情。消息,有的分為三種:同步消息、異步消息、返回消息。
從產(chǎn)品層面,并不需要規(guī)定技術(shù)的實(shí)現(xiàn)方式,是同步還是異步,這交給開發(fā)人員設(shè)計(jì),會(huì)更為合理。
因此,我基本只用兩種消息來表達(dá):簡單消息、返回消息。
1)簡單消息
簡單消息,用箭頭實(shí)線,表示一個(gè)對象,向另一個(gè)對象發(fā)的信息,或做的事情。它不強(qiáng)調(diào)消息的類型,只表示交互,足以滿足大部分情況。
2)返回消息
返回消息,用箭頭虛線,表示一個(gè)對象,收到另一個(gè)對象的信息后,再向其返回的信息,或做的事情。
消息線上方的文字,則是注明傳遞的消息或執(zhí)行的動(dòng)作,一般用動(dòng)賓短語。
這些對象間的交互消息,畫在兩個(gè)對象的生命線之間。對象自身做的事情,則畫在自己的生命線上。
5. 組合框
現(xiàn)實(shí)業(yè)務(wù)、系統(tǒng)流程中,總會(huì)有特殊情況,不可能完全按時(shí)間順序、一條線走完。
這時(shí),就需要用到組合框(frame)來表示常見的特殊情況,如分支、循環(huán)、并行等。
遇到這些特殊情況時(shí),就可以把相應(yīng)的交互流程放入這個(gè)框中。
時(shí)序圖三種常用的特殊結(jié)構(gòu)
三、時(shí)序圖的畫法
下面,還是以之前的 「 手機(jī)話費(fèi)充值 APP 」 為例(案例詳見《用例圖這樣畫,3步讓你做需求分析有理有據(jù)》),來了解時(shí)序圖如何用。
常用的畫圖工具,有 Visio、ProcessOn ,現(xiàn)在很多在線文檔也支持 UML ,如騰訊文檔、飛書云文檔。
時(shí)序圖的畫法也很簡單,一句話就能說完,可是要靈活掌握,還得多加練習(xí)。
首先,選定要展開分析的用例或目標(biāo);接著,分析都有哪些對象、角色參與了實(shí)現(xiàn)過程;然后,將它們在實(shí)現(xiàn)目標(biāo)過程中,彼此之間的交互動(dòng)作,按照時(shí)間軸的順序列出來。
再簡單點(diǎn),就是定目標(biāo)、找對象、列消息三步走。
1. 定目標(biāo)
畫時(shí)序圖,與活動(dòng)圖一樣,要指定某個(gè)用例,或目標(biāo)展開。這些動(dòng)態(tài)視圖,是用來描述在靜態(tài)視圖(如用例圖)定義的結(jié)構(gòu)下對象的行為。
本質(zhì)上,它們都是在描述誰如何參與完成業(yè)務(wù)目標(biāo)。
明確了用例或目標(biāo),才能保證繪制的流程,邊界清晰,過程完整,不會(huì)越畫越亂。
比如,我們用時(shí)序圖來分析案例中「 充值話費(fèi) 」用例的實(shí)現(xiàn)過程。這時(shí),就別把「 支付金額 」用例的交互也畫進(jìn)去,把它們畫在一起,會(huì)增加閱讀難度,不利于溝通表達(dá)。
案例中「 充值 APP」 的系統(tǒng)用例圖
2. 找對象
之前的文章已經(jīng)分析出,案例中,充值得有手機(jī)運(yùn)營商支持;支付得對接微信支付、支付寶;協(xié)助用戶處理未到賬,還需要有運(yùn)營人員介入。
整個(gè)充值 APP ,還應(yīng)包括管理后臺(tái)系統(tǒng) ,才能完成相關(guān)的管理操作。
因此,先將它們列出來,每一豎列,表示一個(gè)對象或角色,每個(gè)對象有一條生命線。
為方便閱讀,可將流程中最先發(fā)起消息的對象放在最左邊;再將交互多的對象擺在附近,別隔太多對象,這樣畫出來的圖會(huì)更清晰簡潔。
3. 列消息
找到了對象,就可以列出對象間的交互消息。為了方便你回顧 「 充值話費(fèi) 」用例的實(shí)現(xiàn)過程,咱們先上之前已經(jīng)得出的活動(dòng)圖。
充值 APP 「 充值話費(fèi) 」用例活動(dòng)圖
工作中,我們把流程弄明白后,就可以邊理邊畫,將對象間的交互,從最先發(fā)起的消息,一個(gè)個(gè)從上往下依次列出。
有些消息有帶參數(shù)的,可以在描述文字后注明。如下圖的第 7 步,充值 APP 生成并提交訂單至管理后臺(tái),可以在括號(hào)里寫上訂單有哪些字段信息(如訂單號(hào)、手機(jī)號(hào)碼、購買時(shí)間等)。
充值 APP 「 充值話費(fèi) 」用例對象交互時(shí)序圖
在 UML 中,時(shí)序圖的消息是沒有序號(hào)的。使用中,我發(fā)現(xiàn)為每個(gè)消息加上序號(hào),比較方便描述與閱讀,一直習(xí)慣這么用。
「 充值話費(fèi) 」用例的流程中,剛好有一個(gè)并行流程,即上圖的第 16 至 20 步。
管理后臺(tái)在返回支付結(jié)果時(shí),還需同步向手機(jī)運(yùn)營商發(fā)起充值請求,這是常見的并行流程。
因此,將其畫在組合框中,表示這里面上下兩部分交互是同時(shí)進(jìn)行的,不分先后。
從這里不難看出,分支一多,時(shí)序圖會(huì)比較難畫,也不好理解。
確實(shí),時(shí)序圖不太適合表達(dá)多分支的復(fù)雜流程。因此,我們用時(shí)序圖更多是描述主干流程,復(fù)雜的分支可單獨(dú)抽取出來畫,也可以用文字說明。
4. 經(jīng)驗(yàn)之談
看到上面的泳道活動(dòng)圖和時(shí)序圖,你可能會(huì)想,它們倆還挺像的,工作中究竟用哪個(gè)呢?
它們都用于描述不同對象之間的動(dòng)作。不過,泳道活動(dòng)圖,更側(cè)重于表達(dá)誰做了什么事;而時(shí)序圖,除了強(qiáng)調(diào)流程中交互的消息和順序,還表達(dá)誰對誰做了什么事。
我的體會(huì)是,遇到強(qiáng)調(diào)消息傳遞、時(shí)間順序的,用時(shí)序圖;遇到流程比較復(fù)雜、分支比較多的,用活動(dòng)圖。
還可以多嘗試兩種都畫,通過不同視角來觀察同一個(gè)流程,會(huì)讓我們的理解更加全面、深刻。
實(shí)踐中,時(shí)序圖,常用于表達(dá)系統(tǒng)的接口請求與反饋消息,更偏向技術(shù)實(shí)現(xiàn)。
作為產(chǎn)品經(jīng)理,我們可以從產(chǎn)品視角、操作層面,用它來表達(dá)業(yè)務(wù)流程、產(chǎn)品流程。
這樣,開發(fā)人員也很好理解,便于他們進(jìn)行系統(tǒng)設(shè)計(jì)。
四、總結(jié)
信息量還是不少,我給你總結(jié)下。
時(shí)序圖,用來描述多個(gè)對象參與實(shí)現(xiàn)業(yè)務(wù)目標(biāo)時(shí),彼此之間按時(shí)間順序進(jìn)行交互的過程。常見的應(yīng)用場景,是在支付領(lǐng)域。
用好時(shí)序圖,能幫我們,搞清楚業(yè)務(wù)規(guī)則、系統(tǒng)邏輯,提高工作效率。
1. 畫時(shí)序圖的方法
- 定目標(biāo),指定用例或業(yè)務(wù)目標(biāo)展開分析;
- 找對象,找出參與實(shí)現(xiàn)目標(biāo)的對象/角色;
- 列消息,按時(shí)間順序列出對象的交互消息。
2. 畫時(shí)序圖的經(jīng)驗(yàn)
- 給交互消息加序號(hào),方便閱讀溝通;
- 觸發(fā)交互的對象畫在最左,交互頻繁的走近些;
- 同一個(gè)流程,畫不同視圖,理解更全面、深刻。
時(shí)序圖,是我分析流程的最愛,有段時(shí)間我經(jīng)常用它,突然靈感閃現(xiàn),發(fā)現(xiàn)了它的高階玩法,與數(shù)據(jù)分析結(jié)合(感興趣可看下方的系列文章)。
多加練習(xí)吧,相信它也會(huì)是你的好幫手!
UML 需求分析系列文章:
- 做產(chǎn)品,為什么要畫這些圖?
- 用例圖這樣畫,3步讓你做需求分析有理有據(jù)
- 手把手教你畫活動(dòng)圖,再無難搞的流程分析
- B端數(shù)據(jù)分析玩法,巧用時(shí)序圖定埋點(diǎn),訂單時(shí)長看系統(tǒng)性能
作者:四月;公眾號(hào):四月喃嘩
本文由 @四月 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
非常有用,請問用什么畫呢
我用飛書文檔畫的,visio也可以畫
Mac 下有什么好用的軟件嗎?
Mac下我用在線的,processon或飛書文檔里面的都挺好用的
非常有用,感謝作者