【專業技能】程式設計師的軟體工程素養之畫好 UML 時序圖

CodeBlogMan發表於2024-03-05

目錄
  • 前言
  • 一、認識時序圖
    • 1.1時序圖元素
    • 1.2怎麼使用
  • 二、畫好時序圖
    • 2.1一般步驟
    • 2.2舉個例子
    • 2.3推薦工具
  • 三、其它作用
  • 四、文章小結

前言

筆者在本科的時候上過軟體工程的專業課,也完成過類似的課堂作業,但是工作以後一直沒怎麼用上。碰巧前段時間有碰到一個複雜系統的部分功能設計,作為設計文件的一部分,時序圖也被我拿起來派上用場了。

時序圖透過描述物件之間傳送訊息的時間順序顯示多個物件之間的動態協作,同時它解釋了一個系統中的不同部件之間,彼此是透過怎樣的互動來實現某個功能,、以及特定場景下互動發生的順序。


一、認識時序圖

時序圖(Sequence Diagram),又名序列圖、循序圖,是一種UML互動圖。一般的軟體開發都是為了支撐某個具體的業務,有時候業務的流程會比較複雜,涉及到多種角色,這時就可以使用時序圖來梳理這個業務邏輯。這樣會使業務看起來非常清晰,程式碼寫起來也是水到渠成的事情。

1.1時序圖元素

一般來說,我們在畫時序圖時會涉及到以下7種元素:

  • 角色(Actor)

    系統角色,可以是人或者其它系統、子系統,以一個小人圖示表示。

  • 物件(Object)

    位於時序圖的頂部,用一個矩形表示,物件的選擇一般有以下三種:

    • 某個系統或者子系統的名稱;
    • 涉及到的中介軟體的名稱;
    • 涉及到具體的類和物件的名稱。
  • 生命線(LifeLine)

    時序圖中每個物件和底部中心都有一條垂直的虛線,這就是物件的生命線,以一條垂直的虛線表示。

  • 控制焦點(Activation)

    控制焦點代表時序圖中在物件生命線上某段時期執行的操作,用一個很窄的矩形表示。

  • 訊息(Message)

    表示物件之間傳送的資訊,可以分為以下三種型別:

    • 同步訊息(Synchronous Message)

      訊息的傳送者把控制傳遞給訊息的接收者,然後停止活動,等待接收者放棄或者返回控制,用來表示同步的意義。用一條實線和實心箭頭來表示。

    • 非同步訊息(Asynchronous Message)

      訊息傳送者把訊號傳遞給接收者,然後繼續自己的活動,不等待接收者返回訊息或控制,即非同步訊息的傳送者和接收者是互不影響的。用一條實線和大於號表示。

    • 返回訊息(Return Message)

      返回訊息表示呼叫過程的返回,用虛線和小於號表示。

  • 自關聯訊息

    表示物件內方法的自呼叫或者呼叫物件內的另一個方法,用一個半閉合的矩形和下方實心箭頭表示。

  • 組合片段

    組合片段用來解決互動執行的條件和方式,它允許在時序圖中直接表示邏輯元件,用於透過指定條件或子程序的應用區域,為任何生命線的任何部分定義特殊條件和子程序。下面說明幾個相對來說比較常見的組合片段:

    組合名稱 含義說明
    ref 引用其它地方定義的組合片段
    alt 在一組特定行為中根據條件選擇某個互動
    opt 表示一個可選的行為
    break 提供了和程式語言中與 break 類似的機制
    loop 說明互動片段會被重複執行

其中前 6 種是比較常用和重要的元素,最後的組合片段元素相對比較複雜。

1.2怎麼使用

下面舉一個使用者調起支付寶的例子來說明上面提到的元素具體是怎麼使用的。

【專業技能】程式設計師的軟體工程素養之畫好 UML 時序圖
調起支付寶支付時序圖

注:調起支付的時序圖可能沒有全覆蓋上面說的元素,下面一節的示例可能更加全面。


二、畫好時序圖

我本人一般是使用時序圖來梳理業務邏輯的,碰上比較複雜的業務,需要幾個中介軟體或者系統參與的時候,時序圖能很好地展示各個系統和中介軟體的呼叫關係。

2.1一般步驟

為了畫好時序圖,我自己總結出了以下幾個值得注意的步驟:

  1. 明確業務涉及的物件,一般是某個系統或者中介軟體,這很重要;
  2. 每個物件的生命線需要明確各自的控制焦點,即該系統或者中介軟體按照流程需要做的事情,比如後臺一般增刪改查、資料庫讀/寫、MQ非同步生產/消費等;
  3. 物件進行自呼叫時注意與頁面的互動,是否涉及狀態變更,是否涉及資料的入庫和返回展示;
  4. 注意中介軟體的使用是非同步or同步,非同步的話注意與其它系統的關聯,同時由於是非同步,還可以著重判斷一下非同步的結果情況後再進行下一步;
  5. 組合片段的選擇性使用,比較多的是 alt 和 opt,看頁面是否可以選擇性互動,或者看結果是否可以選擇性操作。

2.2舉個例子

下面我舉一個實際專案的業務例子,主要是為系統使用者發放獲獎證書的流程,涉及到管理後臺、訊息佇列、資料庫和APP(即H5頁面)這幾個物件。流程如下:

  • 使用者登入後臺後新增/編輯獲獎證書,選擇使用者進行發放,並將產生的資料持久化;
  • 發放時 MQ 生產者傳送非同步訊息,無論消費是否成功都返回傳送成功給前端;
  • MQ 消費傳送過來的攜帶使用者資訊的訊息,消費成功後將資料持久化在資料庫;
  • H5 端經過頁面互動後,獲取上一步的資料庫的資料進行前端展示。
【專業技能】程式設計師的軟體工程素養之畫好 UML 時序圖
發放獲獎證書時序圖

2.3推薦工具

  • Diagrams (原名draw.io)

    線上網址:https://app.diagrams.net/

    我個人是比較推薦使用 Diagrams (原名draw.io) 的,它是一款免費且開源的專業畫圖工具。它具有本地儲存和離線使用的功能,同時也支援多人協作和多種檔案格式的匯入匯出。

【專業技能】程式設計師的軟體工程素養之畫好 UML 時序圖
Diagrams 線上
  • processOn(不推薦)

    線上網址:https://www.processon.com/

    其實我最開始接觸專業 UML 畫圖的工具是 processOn,功能強大且模板多,最主要是那個時候使用是免費的。但是這兩年開始收費了:模板收費就算了,自己畫也要收費,我就放棄了。當然,有付費意願的朋友是可以試試的,應該可以滿足你的大部分需求。

【專業技能】程式設計師的軟體工程素養之畫好 UML 時序圖
processOn

三、其它作用

開發人員掌握畫圖的技能可以將零散的知識碎片結構化,透過圖形來結構化我們的思維模式,這樣的好處是可以清晰的認識到自身對事物的理解和掌控程度。

  • 首先,在我們編碼之前先做設計圖,可以讓自己對業務需求有一個較深的理解,避免自己一邊寫編碼一邊踩業務需求的坑。

  • 其次,可以降低同事之間的溝通理解成本,看圖可能會比看程式碼更容易理解業務邏輯,也能夠讓非技術同事明白程式實現的真正邏輯。

  • 最後,程式的設計圖,可以存檔沉澱為公司寶貴的技術資源,優秀的設計圖還可以共享給其他同事學習參考,實現真正的 "共同富裕"。


四、文章小結

到這裡關於 UML 時序圖的分享就告一段落了,如果文章有錯誤或不足,還請大家指正。或者大家有什麼更好的 idea,也都歡迎在評論區討論交流。

參考文章

  • https://www.cnblogs.com/54chensongxia/p/13236965.html
  • https://zhuanlan.zhihu.com/p/342655946?ivk_sa=1024320u&utm_id=0

相關文章