編輯導語:產品經理的日常,往往與需求離不開,其中很關鍵的一步就是描述需求。需求的描述需要一定的技巧,優秀的產品經理不僅可以清晰地描述自己的需求,還能讓他人聽懂並且知道接下來該如何進行。在本篇文章中,作者為我們分享的是規範產品體系中與需求描述技巧相關的內容。
「小美, 咱們到會議室去開個會,討論下這個版本的新需求」
開發、測試、美工濟濟一堂, 產品經理把這個版本的需求概要地「說」了一遍,然後就打開小美設計好的「產品原型」講了起來。
產品原型是個好東西, 非常直觀, 一看就知道到底要做成什麼樣子, 頁面之間的跳轉關係也一目了然。
工程師一邊聽,一邊心裡琢磨著更細節的內容。資料庫表該怎麼設計, 表該怎麼改,怎麼做數據遷移,界面的流程該怎麼跳轉, 後臺需要提供什麼樣的服務…
大家嘰嘰喳喳的討論了一個下午,終於安靜了。
看到大家的理解基本一致了, 經理開始做最後的總結陳述: 「怎麼樣? 還有問題嗎? 沒有問題的話小美按今天討論的結果,把界面修改一下, 大家估算一下自己的工作量,下班之間報到我這裡。」
工程師心想,估算也沒啥用, 反正上線日期都確定了。
就這樣,越來越多更加細節的深層邏輯僅僅進入了工程師的腦海, 而沒有形成文檔,存在嚴重的項目「信息失真」隱患。
IBM Developer 的目的就是將程式設計師集結在一起,形成一個社區,進而挖掘我們的集體創新能力。換言之,我們有機會分享自己的一些訣竅,並學習到產品研發管理類的高效方法論。
IBM社區的工程師Donald Bell分享到:「序列圖非常有效」。
對於研發人員,序列圖能澄清業務在未來系統中如何體現;對於非研發人員(產品經理、架構師、業務人員),序列圖能澄清未來系統中,不同對象間的交互,從而進一步傳達清楚整個系統設計方案。
研發人員一般認為序列圖僅對他們有意義,然而,深入了解過序列圖之後,非研發人員(產品經理、架構師、業務人員)也會發現,序列圖顯示不同的業務對象如何交互,對於交流當前業務如何進行很有用。
除記錄組織的當前事件外,一個業務級的序列圖能被當作一個需求文件使用,為實現一個未來系統傳遞需求。在項目的需求階段,產品經理能通過提供一個更加正式層次的表達,把用例帶入下一層次。
那種情況下,用例常常被細化為一個或者更多的序列圖。
序列圖除了在設計新系統方面的用途外,它們還能用來記錄一個存在系統(稱它為「遺產」)的對象現在如何交互。當把這個系統移交給另一個人或組織時,這個文檔很有用。
序列圖(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.
它描述了消息在生命線上按照約定順序執行一種交互行為。它可以表示用例的行為順序,當執行一個用例行為時,序列圖中的每條消息對應了一個類操作或狀態機中引起轉換的觸發事件。
序列圖是由5種元素構成:對象(Object)、生命線(LifeLine)、激活(Activation)、消息(Message)和「組合片段」。其中前4種是常用且重要的元素,剩餘的一種「組合片段」元素不是很常用,但是比較複雜。
我們先介紹前4種元素,再單獨介紹「組合片段」元素。
1)對象(Object)
對象位於序列圖的頂部,以一個矩形表示,對象的命名方式一般有三種:
2)生命線(LifeLine)
生命線是一條垂直的虛線,每個對象底部中心都有。對象與生命線結合在一起就是對象的生命線,其長度取決於交互的時間。
3)激活(Activation)
激活代表時序圖中在對象時間線上某段時期執行的操作,以一個很窄的矩形表示:
4)消息(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需填寫參數。
1)工具
工欲善其事,必先利其器。推薦使用微軟旗下的 Visio。
2)步驟
劃清邊界,識別交互語境:所謂劃清邊界是是指要確定好繪製序列圖的範圍。在微信支付例子中省略列商家打開微信、輸入收款金額等交互消息,這些不是我們需要體現的,我們主要體現的是用戶的掃碼支付流程。
所謂識別交互語境就是要知道自己繪製時序圖的前提和背景,在微信支付的例子中用戶登錄了微信、開通了支付功能是前提,背景是用戶需要掃描付款買東西。
梳理時序圖中的角色和對象都有哪些:微信支付的例子中角色只有一個,即用戶。對象有華為手機:手機、微信、商家。
對象之間有哪些交互消息:對象之間交互的消息詳見以上序列圖。
3)技巧
從初始消息開始畫,依次畫出隨後消息,並給每個消息分配序號,方便理解;
角色和對象用名詞,消息用動詞;
角色放在序列圖的開始位置,對象重要程度或使用頻率從左到右排列。這就要根據時間的流程考慮了,是一個比較主觀的事情;
控制焦點兩端要以消息元素封頂,控制焦點不要超過消息元素。
參考資料:
產品經理的前進道路,不應該是一場孤獨求索的旅行 。沿途那些美好的風景,有趣的人文,我願意沉澱下來,分享與同行的你,或者是在路上的他。
作者:木小深;公眾號:木小深
本文由@木小深 原創發布於人人都是產品經理。未經許可,禁止轉載。
題圖來自Unsplash,基於CC0協議