浅析
大家好,我是木小深,高級產品經理。我們的公眾號主要是分享關于產品經理個人成長和職業發展相關的話題。今天分享的是規范產品體系中,與需求描述技巧相關的內容。
「初稿|木深、木小深」
「編輯|牟深、Sam、Ella」
一、開場白
“小美, 咱們到會議室去開個會,討論下這個版本的新需求”
開發,測試, 美工 濟濟一堂, 產品經理把這個版本的需求概要地「說」了一遍,然后就打開小美設計好的「產品原型」講了起來。
產品原型是個好東西, 非常直觀, 一看就知道到底要做成什么樣子, 頁面之間的跳轉關系也一目了然。
工程師一邊聽,一邊心里琢磨著更細節的內容。數據庫表該怎么設計, 表該怎么改,怎么做數據遷移,界面的流程該怎么跳轉, 后臺需要提供什么樣的服務...
大家嘰嘰喳喳的討論了一個下午,終于安靜了。
看到大家的理解基本一致了, 經理開始做最后的總結陳述: "怎么樣? 還有問題嗎? 沒有問題的話小美按今天討論的結果,把界面修改一下, 大家估算一下自己的工作量,下班之間報到我這里。"
工程師心想,估算也沒啥用, 反正上線日期都確定了。
就這樣,越來越多更加細節的深層邏輯僅僅進入了工程師的腦海, 而沒有形成文檔,存在嚴重的項目「信息失真」隱患。
二、大背景
IBM Developer 的目的就是將程序員集結在一起,形成一個社區,進而挖掘我們的集體創新能力。換言之,我們有機會分享自己的一些訣竅,并學習到產品研發管理類的高效方法論。
IBM社區的工程師Donald Bell分享到:
「序列圖非常有效」。對于研發人員,序列圖能澄清業務在未來系統中如何體現;對于非研發人員(產品經理、架構師、業務人員),序列圖能澄清未來系統中,不同對象間的交互,從而進一步傳達清楚整個系統設計方案。
研發人員一般認為序列圖僅對他們有意義。然而,深入了解過序列圖之后,非研發人員(產品經理、架構師、業務人員)也會發現,序列圖顯示不同的業務對象如何交互,對于交流當前業務如何進行很有用。除記錄組織的當前事件外,一個業務級的序列圖能被當作一個需求文件使用,為實現一個未來系統傳遞需求。在項目的需求階段,產品經理能通過提供一個更加正式層次的表達,把用例帶入下一層次。那種情況下,用例常常被細化為一個或者更多的序列圖。
序列圖除了在設計新系統方面的用途外,它們還能用來記錄一個存在系統(稱它為“遺產”)的對象現在如何交互。當把這個系統移交給另一個人或組織時,這個文檔很有用。
三、序列圖
3.1 概念
序列圖(Sequence Diagram),亦稱為循序圖,是一種UML行為圖。有的人翻譯為時序圖,實際上是不準確的,sequence這個單詞并無"時間"的意思,只有序列,順序等意思。根據UML規范中對Sequence Diagram的描述:
A sequence diagram describes an Interaction by focusing on the sequence of Messages that are exchanged, along with their corresponding Occurrence Specifications on the Lifelines.
它描述了消息在生命線上按照約定順序執行一種交互行為。它可以表示用例的行為順序,當執行一個用例行為時,序列圖中的每條消息對應了一個類操作或狀態機中引起轉換的觸發事件。
3.2 構成
序列圖是由5種元素構成:對象(Object)、生命線(LifeLine)、激活(Activation)、消息(Message)和“組合片段”。其中前4種是常用且重要的元素,剩余的一種“組合片段”元素不是很常用,但是比較復雜。我們先介紹前4種元素,再單獨介紹“組合片段”元素。
1 對象(Object)
對象位于序列圖的頂部,以一個矩形表示。對象的命名方式一般有三種:
顯示“對象名” + “類名”。例如:手機 - 華為手機。
顯示“類名”,不顯示“對象”。例如::手機。
顯示“對象名”,不顯示“類名”。例如:華為手機。
2 生命線(LifeLine)
生命線是一條垂直的虛線,每個對象底部中心都有。對象與生命線結合在一起就是對象的生命線,其長度取決于交互的時間。
3 激活(Activation)
激活代表時序圖中在對象時間線上某段時期執行的操作。以一個很窄的矩形表示。
4 消息(Message)
消息是對象和對象之間,在發生“交互”和“協作”時,用于交換信息的媒介。可以根據是否并發,簡單的分為兩類:
同步消息(Synchronous Message)
消息的發送者把控制傳遞給消息的接收者,然后停止活動,等待消息的接收者放棄或者返回控制。用來表示同步的意義。
異步消息(Asynchronous Message)
消息發送者通過消息把信號傳遞給消息的接收者,然后繼續自己的活動,不等待接受者返回消息或者控制。異步消息的接收者和發送者是并發工作的。
5 組合片段
組合片段用來解決交互執行的條件和方式,它允許在序列圖中直接表示邏輯組件,用于通過指定條件或子進程的應用區域,為任何生命線的任何部分定義特殊條件和子進程。組合片段共有13種,名稱及含義如下:
抉擇(Alt)
抉擇在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。else 的臨界指示其他任何臨界都不為 True 時應運行的片段。如果所有臨界都為 False 并且沒有 else,則不執行任何片段。Alt片段組合可以理解為if..else if...else條件語句。
我們還拿微信支付的時序圖舉例,如果7.3向商家匯款的成功或失敗流程需要在時序圖中體現出來,可以這么使用Alt片段組合。
引用(InteractionUse)
表示引用的意思,某部分交互被定義在另一個圖中。可將一個規模較大的圖劃分為若干個規模較小的圖,方便圖的管理和復用。ref不用要填寫參數。
選項(Option)
表示當警戒值為真(符合條件)的情況下進行執行處理的意思。opt需要填寫參數。
循環(Loop)
表示循環執行的意思,當條件為真的時候執行循環。也可以寫成loop(n)來表示循環n次,與java或者C#等中的for循環比較相似。loop需填寫參數。
中斷(Break)
表示中斷處理,跳轉的意思,類似java代碼中break語句。break需填寫參數。
3.3 竅門
1 工具
工欲善其事,必先利其器。推薦使用微軟旗下的 Visio。
2 步驟
劃清邊界,識別交互語境
所謂劃清邊界是是指要確定好繪制序列圖的范圍。在微信支付例子中省略列商家打開微信、輸入收款金額等交互消息,這些不是我們需要體現的,我們主要體現的是用戶的掃碼支付流程。
所謂識別交互語境就是要知道自己繪制時序圖的前提和背景。在微信支付的例子中用戶登錄了微信、開通了支付功能是前提,背景是用戶需要掃描付款買東西。
梳理時序圖中的角色和對象都有哪些
微信支付的例子中角色只有一個,即用戶。對象有華為手機:手機、安卓版微信:微信、:商家。
對象之間有哪些交互消息
對象之間交互的消息詳見以上序列圖。
3 技巧
從初始消息開始畫,依次畫出隨后消息,并給每個消息分配序號,方便理解。
角色和對象用名詞,消息用動詞。
角色放在序列圖的開始位置,對象重要程度或使用頻率從左到右排列。這就要根據時間的流程考慮了,是一個比較主觀的事情。
控制焦點兩端要以消息元素封頂,控制焦點不要超過消息元素。
3.4 參考資料
https://developer.ibm.com/zh/
https://baike.baidu.com/item/%E5%BA%8F%E5%88%97%E5%9B%BE/1943112?fr=aladdin
https://book.51cto.com/art/201003/190167.htm
四、結束語
產品經理的前進道路,不應該是一場孤獨求索的旅行 。沿途那些美好的風景,有趣的人文,我愿意沉淀下來,分享與同行的你,或者是在路上的他。
以上,希望對小伙伴兒們有所幫助,共勉~
如果你有任何問題,請在留言區告訴我們。也請記得訂閱「公眾號」和我們的專欄,歡迎分享給其它有需要的人。我們這期分享就到這里了,再見❤️。
總結
- 上一篇: 码元、符号、波特率、比特率等概念的了解
- 下一篇: azkaban架构介绍