天天看點

常用的UML模組化

關于UML,我相信在做B端的産品經理一定知道它的重要性。那麼UML常用的圖都包含哪些呢?它們又都在什麼場景什麼階段使用呢?又如何使用呢?這篇文章主要幫助小夥伴們解答這些問題。

一、UML的分類及用途

首先簡單給大家介紹一下什麼是UML,UML的全稱是Unified Modeling Language。翻譯過來就是統一模組化語言。它對産品經理最主要的作用是用于需求分析中更好的梳理邏輯,同時能夠提升溝通效率。

UML主要包括圖表中的十一種,那在本次的介紹中,隻講解類圖、構件圖、部署圖、活動圖、狀态機圖、順序圖、用例圖。

常用的UML模組化

通常對業務概念等靜态結構進行系統化的梳理和提煉,我們叫它結構模組化。而于對業務流程等動态内容進行系統化的梳理和提煉,我們叫它行為模組化。而需求分析的核心目的是解決軟體有沒有用的問題。軟體設計是解決軟體用多大的成本做出來的問題。是以需求分析首要任務是保證軟體的價值。

那麼如何學好UML呢?其實UML的文法很簡單,但是想要學好UML關鍵在于要改變思維習慣。要在平時多培養自己的書面表達能力、歸納總結能力、思維能力和抽象能力。

二、類圖

裝逼的講,類圖(Class diagram)是顯示了模型的靜态結構,特别是模型中存在的類、類的内部結構以及它們與其他類的關系等。那它其實就是用來幫助我們識别出人、事、物和業務的概念,并理清它們的關系的一種方法。

2.1 類圖的基礎知識

在聊類圖之前先讓我們理清幾個概念。

首先,什麼是類?将某類東西歸納在一起就可以成為一個類。例如,本文的讀者,我們就可以分為初級産品經理,進階産品經理。或者分為産品經理和非産品經理。這些都可以叫做類。

然後,什麼是類圖?類圖就是一個矩形的方框,上面是類的名字,中間是屬性,下面是操作。比如這篇文章的讀者是産品經理,那産品經理的屬性就有性别,年齡,級别等。如果要列舉當然會有很多屬性,但是我們隻找出相關且對我們有用的屬性。

那一般如何用類圖擷取需求呢?首先要識别出類。其次識别出類的主要屬性。然後描述出類之間的關系,最後在對各類進行分析、抽象、整理。

2.2 類之間的關系

  • 直線關系

直線關系其實就是我們常說的關聯關系,如下圖。A關聯B

常用的UML模組化

那如果在直線兩端加上數字1,那就是1對1的關系,如下圖:

常用的UML模組化

同樣,如果将B旁邊的1改成*,那就是1對多的關系,如下圖:

常用的UML模組化

那如果将*改成0..3,那就是0到3的意思。如果是1..4那就是1到4的意思。下入就是1對0..3的意思

常用的UML模組化

如果把數字換成了上司和下屬,那麼他們就是角色關系了,就代表a是b的上級,b是a的下屬。如下圖:

常用的UML模組化

如果把數字換成箭頭,那就變成了導航關系,即由A可找到B,如下圖:

常用的UML模組化
  • 包含關系

包含關系有兩種表示方法,一種是空心菱形,一種是實心菱形。空心菱形可以表示為弱包含的關系,實心菱形可以表示為強包含的關系。弱包含關系即部門沒有了,員工可以繼續存在。強包含關系是部門沒有了,員工也就不存在了。以下圖中表示的為,一個部門可以包含多個員工。

常用的UML模組化
  • 繼承關系

繼承關系是誰繼承了誰的屬性。例如香蕉,蘋果,葡萄他們繼承了水果的屬性,同時又擁有自己的屬性。我們用一個三角來表示,如下圖:

常用的UML模組化
  • 依賴關系

所謂的依賴關系,依賴程度是相對而言的,不一定是A沒有B就不能生存了。在實際的業務邏輯當中,對于某個事情,A需要B來協助完成,也是一種依賴關系。依賴關系使用虛線箭頭表示。

常用的UML模組化

2.3 類圖的進階

  • 遞歸關系

我們常用的電腦系統中,如果用類圖表示出檔案夾與檔案的關系,那麼該如何表達呢?是檔案夾包含檔案嗎?那檔案夾和檔案夾的關系呢?使用遞歸關系,我們就可以更好的表達出來。遞歸關系分為自包含和自關聯,和字面的解釋一樣,就是自己包含自己,自己關聯自己。下圖分别是自包含和自關聯。

常用的UML模組化
  • 三角關系

當某些屬性值并不是由該類本身就可以确定的時候,我們可以使用三角關系,例如員工的薪資,職位等,并不是由公司可以确定的,而是由勞動合同來确定的,那麼我們的表達方式如下:

常用的UML模組化

三、活動圖

活動圖是用來表達流程最常用的一種UML圖,它和流程圖很類似。

3.1基本文法

  • 基礎流程圖

流程中一般隻有一個開始,會有一個或多個結束。箭頭表示流程的走向。一個圓角矩形表示一個活動,活動可以了解為流程中的一個步驟,需要用主動賓的形式來表達。例如員工填寫工時,項目經理審批工時。菱形代表判斷,會有兩個或兩個以上的分支。判斷一般有三種表達方式:在判斷菱形旁寫下判斷的句子;直接通過監護來表示這個判斷;在菱形判斷之前加一個活動來表明判斷動作。分支流程彙合時,也會使用菱形,然後會合并成一條路線。如下圖:

常用的UML模組化
  • 泳道圖

上面的流程圖當中,如果流程簡單,那麼就可以很好的表達,如果流程很長,涉及到的角色很多,且很複雜時,看到就會非常亂,不止畫的人覺着亂,看的人也會感覺很亂。那麼,這個時候我們就可以用泳道圖。泳道圖一般是會按照角色進行分區,那麼在畫和浏覽時都非常清晰。如下圖:

常用的UML模組化

3.2活動圖的進階

  • 并行的活動

當遇到需要并行的活動或分支時,我們可以使用粗短棒。短粗棒會有兩個同時出現。第一個是有一個箭頭指入,多條箭頭指出,這個叫做分叉。第二個是多條箭頭指入,一條箭頭指出,這個叫彙合。如下圖:

常用的UML模組化
  • 對象流

當我們用矩形框來表示某個節點,并将矩形框的文字标注下劃線,那它就代表對象。每個活動都有可能有一個或多個輸入或輸出。與輸入輸出直接相連的箭頭叫對象流,而活動和活動之間相連的叫控制流。如圖:

常用的UML模組化
  • 連接配接件

有的時候活動圖很大,一張紙畫不下,我們可以使用另一張紙繼續畫,這個時候,我們可以使用連接配接件。(其實作在的畫圖軟體大多都不會出現這種情況),如下圖,左邊的圖是箭頭指向A,則是活動圖到這裡轉向另一張圖。右邊的圖是A指出一個箭頭,表示從A開始繼續這個活動圖:

常用的UML模組化

3.3 關于活動圖的其他問題

對于活動圖的粒度是如何控制的呢?其實這個是沒有标準答案的,下面隻是一些實踐建議。首先要清楚活動圖要表達什麼内容,表達的重點是什麼。以此來确定合适的粒度。其次,可以先用粒度比較大的活動圖,大緻搞清楚流程的總體情況。最後在逐漸細化,需要重點說明的部分,活動的粒度應該足夠細,足夠說明問題。

那如何畫好活動圖呢?建議你一個活動圖隻表達一個事情。同時在畫之前要明确該流程要達到怎樣的業務目的,有什麼角色參與,哪些是主要角色。先畫出主流程,明确主流程中涉及到的角色。然後在逐漸增加分支流程,這裡主要表達出關鍵的分支即可,同時異常流程也不用全部表達出來,必要的時候,可以用文字來說明。控制好粒度,然後分别畫出目前的流程和優化後的流程。對照差異,整理出需要調整的地方。

四、狀态機圖

狀态機圖其實和大家常說的狀态圖是一個東西,隻是它的專業名稱叫做狀态機圖。

4.1 基本文法

狀态機圖的開始狀态和結束狀态與活動圖的一緻。活動機圖用一個圓角矩形來代表一個狀态。與活動圖不同,活動圖是用圓角矩形代表一個活動。而且狀态機圖一般使用名詞或形容詞來表示某種狀态。如下圖:

常用的UML模組化

4.2 其他問題

關于狀态數量的問題。在使用狀态機圖時,若流程不合理,可以考慮通過增加、減少、修改狀态來完善。增加一個新的狀态會解決很多問題,但是也會增加流程的複雜度,可能會出現其他問題。

關于狀态圖的實踐會有一些建議可供大家參考。流程圍繞某一事物開展時,可以考慮使用狀态機圖來分析。同樣也需要弄清楚它的目的,參與的角色,以及這些角色是如何推動流程的發展。并且列出流程中存在的問題。同時要考慮事物在流程不同階段有什麼變化。然後列出目前的流程,在根據流程的目的和存在的問題進行調整。

五、順序圖

當流程設計到多種角色,并且通過多個角色互動展開時,順序圖是不二選擇。

5.1基本文法

角色可以用一個小人的圖示來表示,下面寫明角色。也可以用一個矩形來表示,但是需要在矩形裡面說明角色。生命線是角色下面的那條虛線。激活框也叫會話,是生命線中細長的矩形。消息用箭頭表示,并在上面說明做了什麼事情。箭頭可以從A指向B,也可以指向自己。傳回值用虛線箭頭表示,并在上面說明傳回的内容。一般是回報某個東西給相應的對象。如下圖:

常用的UML模組化

5.2 順序圖的進階

循環分支屬于業務流程中比較常見的特殊結構。loop,也叫循環,是滿足循環條件的前提下,不斷地重複做某些事情。alt,條件分支,是根據不同的條件選擇不同的分支。opt,可選分支,是滿足一定條件則執行該分支,否則就跳過。如下圖:

常用的UML模組化

上圖的流程中,loop,中括号内是循環條件的内容,表示如果滿足循環條件,則重複執行本框的内容。alt,如果滿足條件1則執行上半部分,如果滿足條件2則執行下半部分。opt,如果滿足條件,則執行框中的内容,否則跳過。

5.3 其他問題

關于順序圖使用的一些建議。先從複雜的業務中整理出一條一條的流程。然後分析參與的角色,角色擔任的職責和專業特色。然後在将流程分解成角色與角色的互動,想清楚各個角色之間是如何互動的,然後用順序圖把它組織起來,在這個過程中要不斷的進行優化。

活動圖,狀态機圖和順序圖,被稱為流程分析的三大利器,那麼每種圖都有不同的特點和應用場景。 順序圖,強調角色之間的互動,強調按時間順序分别發生了什麼事情。不太适合表達複雜的特殊流程。活動圖,強調每個角色做了什麼事情,這些事情的先後關系,适合表達各種特殊流程,如分支,并發等。狀态圖,主要是事情圍繞某東西開展,并且有不同的狀态。

那麼在實際工作中如何選擇呢?通過上面說明的特點我們可以很清楚的知道。如果事情圍繞某個東西開展,就可以考慮使用狀态機圖。如果不是,則可以考慮順序圖或活動圖。如果沒有複雜的特殊流程,可以考慮順序圖。如果有負責的特殊流程,則可以考慮活動圖。當然,在實際工作中,不要被上面的條條框框所限制,有的時候可以有兩種甚至三種圖來表示,可以從多個角度來分析問題,再做适當取舍。

六、用例圖

用例圖對于很多人來說隻是給一些角色配置一些權限。其實用例圖是可以幫我們搞清楚這個産品是誰在用,通過這個系統能做什麼事情。

6.1 基本文法

小人(actor,執行者),執行者可能是人也可能是系統。如果是人的話,可稱之為角色。如果是系統的話,可以将另外一個系統畫成執行者就可以了。圈圈(用例,use case)圈圈裡面的文字是動詞加名詞,這個就代表了系統能做什麼事情。大框框(系統邊界,system boundary)這個框隻框住了用例,沒有框住執行者,這個就叫系統邊界。線條(關聯,association)線條指用例和角色之間的線條,一般有三種,無箭頭的,指向用例的箭頭,指向執行者的箭頭。同時,一般情況下也會有兩種解釋,一種是資料流向,還有一種是誰啟動誰。如下圖:

常用的UML模組化

6.2 進階文法

用例的進階文法主要包括繼承、include(包含)、extend(擴充)

  • include(包含)

包含一般有兩種用法,一種是以樹的方式組織各種用例,用包含來組織好父子用例,子用例可以再次包含自己的子用例,這樣層次分明。還有一種是某些用例的一部分可以抽離出來成為子用例,該子用例同時也被其他用例包含。如下圖:

常用的UML模組化
  • extend(擴充)

擴充的意思就是在某用例的基礎上,還能做什麼事情。例如使用者在檢視報表的時候,還可以導出報表,列印報表。如下圖:

常用的UML模組化
  • 繼承

繼承與類圖中的繼承性質是一樣的,但是一般在畫用例圖的時候很少用,都會用其他的方式替代,因為不太好了解,而且還會降低溝通效率。如下圖:

常用的UML模組化

6.3 用例圖的其他問題

那麼我們日常工作中,如何畫好用例圖呢?下面是一些在實踐中的建議。首先,在客戶能全面了解的基礎上,越精簡越好。同時用例應該使用客戶的語言,讓客戶能夠看得懂。要全面的表達用例,對于重點的地方要較長的描述,非重點的地方不要過多描述。通過使用擴充和包含來細化用例圖,但要靈活把握,用例圖隻是一種表達方式,必要時可以結合其他方式來表達。

七、部署圖、構件圖

部署圖和構件圖一般用來擷取和描述非功能需求。非功能性需求,一般包括兩個方面,一方面的軟體技術的架構要求。另一方面是安全性、易用性、性能等方面的要求。

7.1部署圖

在實際環境中的電腦、伺服器或硬體裝置,在部署圖中用節點(Node)來表示,就是圖中一個個立體矩形。每個節點都有一個名字,如圖中的财務的pc等。門店的pc中有标記,标記(Tags)用來詳細說明節點的配置情況,如Number=50-70,說明有50到70台門店的pc。節點與節點直接有實體聯系,則直接拉條直線,在直線上寫上連接配接的方式。如下圖所示。

常用的UML模組化

7.2 構件圖

構件圖也叫元件圖,構件指的是實體上獨立的一個東西,它可以單獨維護、更新、替換。下圖展示了構件和構件的接口。

常用的UML模組化

下圖中的A和B表示依賴關系,表示A依賴于B,A需要調用B提供的一些服務。而C和D則是接口對接,D提供的服務是C所需要的,也可以畫成C依賴D。如圖

常用的UML模組化

7.3部署圖和構件圖結合使用

通常部署圖和構件圖需要綜合使用,才能表達清楚在架構設計上的要求。如下圖

常用的UML模組化

7.4關于部署圖和構件圖的實踐建議

首先不要寫放在任何地方都可用的東西。要根據項目的業務需求,IT架構環境寫出針對性的要求。其次,抓住主要問題,列出具體要求。主要考慮正常使用情況下系統應達到的要求,出現幾率低的情況可不考慮。最後,要文字表達準确,内容應該是可被驗證的。

八、一些實踐

本章主要為前面所講的内容,通過一個案例,将部分串聯起來。

我們的需求是做一個考勤系統。主要目标是規範員工的上下班、請假、外出工作等行為,同時友善計算員工薪資,友善管理各種帶薪假期。

在整個過程中,需要遵循戰略分析、相關方與目标分析、業務分析、需求細化這樣的流程。那在業務分析階段可以通過使用類圖來分析業務概念,使用活動圖、順序圖、狀态機圖來分析業務流程。在需求細化階段可以使用用例圖來整理用例。同時也可以使用部署圖和構件圖來分析整理非功能性需求。

那在這裡直接省略戰略分析、相關方與目标分析階段,直接進入到業務概念分析。假設已經目标清晰,且明确了相關方。那麼下一步進入到業務概念分析。

  • 業務概念圖

這個考勤系統主要涉及到考勤,請假,外出。考勤和請假很好了解,外出是指外出工作,性質仍然是工作。這三類事情全都涉及到流程。流程的問題咱們後面在分析。通常我們管理一個事情,除了管理流程,還要對一條或多條記錄進行管理。打卡不是會留下打卡記錄嗎?請假不是會有請假申請嗎?外出不是會有外出申請嗎?管理這些記錄,就是管理這些事情了。如下圖,列出了關鍵的業務概念,業務概念的重要屬性,業務概念之間的關系,相關業務資訊通過注解來補充。每個人所在的公司情況不一樣,了解的角度不一樣,業務概念圖自然就會不一樣。

常用的UML模組化
  • 外出申請審批流程分析

這裡隻對外出申請做舉例,分别畫出它的活動圖和狀态機圖。當然,也可以用順序圖來表達,但是此處用活動圖和狀态機圖更合适,所有省略了順序圖。

常用的UML模組化

活動圖

常用的UML模組化

狀态機圖

  • 普通員工的用例分析

這裡隻對普通員工做舉例,進行了用例分析。這裡考慮到使用者需要擁有管理自己外出的權限,管理自己請假,包含可休年假的權限。同時為了友善安排工作,是以增加了可以檢視所有員工請假的權限,以及檢視自己打卡記錄的權限。如下圖

常用的UML模組化
  • 其他

九、總結

釋出于 2019-08-11