那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何畫出規范的UML用例圖

OSC開源社區 ? 來源:OSC開源社區 ? 2023-11-30 10:18 ? 次閱讀

如果你在做設計過程中有一些困惑,如:不會找用例、兩個用例圖分不清楚、不知道自己畫的對不對。那么希望本文能幫助厘清上面幾個問題,真正掌握用例圖,在后面的設計中能運用的得心應手。 在做設計的時候你是否有以下困惑?

1.不會找用例:業務用例、系統用例又都是啥啊?我該如何把用例寫對啊?

2.兩個用例圖分不清楚:業務用例圖和系統用例圖感覺好像啊,似乎沒啥區別啊?

3.不知道自己畫的對不對:照貓畫虎畫了個用例圖,但是我也不知道畫的對不對,萬一評審的人也不會呢,就這樣交差吧? 如果你在做設計過程中有以上困惑,那么希望本文能幫助厘清上面幾個問題,真正掌握用例圖,在后面的設計中能運用的得心應手。

一、如何識別正確的用例

首先看用例的概念,百科上定義“用例是軟件工程或系統工程中對系統如何反應外界請求的描述,是一種通過用戶的使用場景來獲取需求的技術”。什么意思呢,這里我引用《大象:Thinking in UML》里面的一段話來解釋下這個定義

這個世界的功能性體現在,首先有某人的一個愿望,這個愿望驅使人去做事并獲得一個確定的結果。如果沒有愿望,功能性就無從談起。一個系統就是由各種各樣的愿望組成的,換句話說,各種各樣的人為著各自的目的做著各種各樣的事情共同組成了一個系統。如果我們要描述一個系統的功能性需求,就要找到對這個系統有愿望的人,讓他們來說明他們會在這個系統里做什么事,想要什么結果。如果所有對系統有愿望的人要做的所有事情都找全了,那這個系統的功能性就被確定下來了。

用例的一個最主要的特征是它是相對獨立的。這意味著它不需要與其他用例交互而獨自完成參與者的目的,也就是說用例從“功能”上說是完備的。用例本質體現了系統參與者的愿望,不能完整達到參與者愿望的不能稱為用例。例如取錢是一個有效的用例,填寫取款單卻不是,因為完整的目的是取到錢,沒有人會為了填寫取款單而專門跑一趟銀行的。 用例有兩種,業務用例和系統用例,那么我們如何準確的識別用例呢?接下來我們就對業務用例、系統用例逐一分析。

1.1 業務用例

業務用例的定義是業務執行者希望通過和所研究組織交互獲得的價值。 我們可以看到一個關鍵詞--價值,這個價值不是指你(組織)能提供什么而是指我(執行者)想要什么,這個時候就需要把視角放在組織外部,切換到執行者上,看看他希望從組織獲得什么,而不是把視角放在組織內部,看組織能提供什么。比如說以餐館這個組織為例,其業務執行者主要是顧客,雖然餐館可以提供零錢兌換、球賽播放、充電寶租借等服務,但是顧客來餐館就是為了吃飯的,顧客->就餐就是餐館的業務用例,提供就餐服務就是餐館這個組織最大的價值。

4e2f600c-8d16-11ee-939d-92fbcf53809c.png

?

試想一個餐館如果不圍繞“提供物美價廉的就餐服務”這一理念去經營,而是飯菜質量做的很差,提供了很多充電寶服務,那么這個餐館的結果可想而知。

1.2 系統用例

說完業務用例我們再來看看系統用例,系統用例的定義是系統能夠為執行者提供的、涉眾可以接受的價值。其中的幾個概念:

1.系統

封裝了自身的數據和行為,能獨立對外提供服務的東西才能稱為系統。需要注意的系統是一個整體,系統可能會有很多子系統。比如銀行轉賬交易時候需要做風控,如果有商家向銀行售賣交易系統,那么風控這個子系統肯定是包含在整個交易系統內的,一起打包賣給銀行的。

2.系統執行者

系統執行者的定義是在所研究系統外,與該系統發生功能性交互的其他系統。這里需要注意幾點:

系統執行者一定是在系統外的,可以是人或者其他系統;

系統執行者必須是要和系統有交互的;

系統執行者不一定是業務執行者;

3.涉眾

涉眾是與要建設的業務系統相關的一切人和事,系統執行者也是涉眾的一部分。

這里還是以餐館為例,假如顧客是通過口頭告訴服務員(不是自己掃碼下單)我要點啥菜,服務員通過下單系統為顧客下單,那么研究這個下單系統可以得出:

1.系統執行者:服務員,雖然顧客作為餐館這個組織的業務執行者,但是與下單系統直接交互的是服務員,所以服務員才是點餐系統的系統執行者;

2.涉眾,這個就很多了,顧客、服務員、餐館老板、廚師等等都是涉眾,因為都是下單系統的利益關系者;

a.顧客擔心自己下單沒成功,等了很久不上菜; b.服務員擔心沒出單導致顧客投訴,自己獎金被扣; c.老板擔心系統故障引起很多顧客投訴,生意受到影響;

d.廚師擔心下單系統分配不合理,所有的菜都分配給自己做;

一般這個下單系統可以登錄、下單,查看下單記錄,這些都是下單系統的一些功能。我們再來回顧下系統用例的概念:系統用例指的是系統能夠為執行者提供的、涉眾可以接受的價值。那我們接下來就從每個涉眾的視角分析一下對這些功能的需要情況。

登錄 下單 查看下單記錄
服務員 我需要,要不然別人下錯單了怪我頭上咋辦 I need it! 我需要,方便查看顧客菜品上齊了沒
顧客 I don't care! 能不能下單直接影響我能不能吃上飯 我也需要,得打印出來我的菜單,結賬時候好核對
老板 我也需要,可以看看服務員的工作情況 下單系統不能下單我買它來干啥 我需要,方便訂單管理,也方便看看哪個菜客人點的最多
廚師 I don't care! 不能下單誰告訴我該做什么菜 我需要,要不然說我少做了一道菜沒法解釋

所以,從上可以得出下單、查看下單記錄滿足系統用例的概念,系統用例圖如下?

4e3cbc3e-8d16-11ee-939d-92fbcf53809c.png

?

可以看到,和業務用例不同的是在研究系統用例時我們需要把視角切換到系統,從系統出發看看能為執行者提供什么樣的、涉眾都可以接受價值。?

Tips:

1.用例的名字一般是動賓結構,也就是“動詞+名詞”,但是不嚴格要求的。比如“成果分析”這個行業術語沒必要硬倒過來改成“分析成果”

2.老老實實去研究業務流程,做好業務建模,盡量從業務序列圖中映射出系統用例,這樣得到的系統用例才是是最真實的。

3.用例是可以有主執行者和輔執行者的:主執行者從執行者指向用例,而輔執行者從用例指向執行者,主執行者發起用例的交互,輔執行者在交互過程中被動參與進來。一般說來,輔執行者是人肉系統的情況比較少,更多時候是另一個非人智能系統。

4.主執行者和輔執行者是相對于用例來說的,“ xx 是xx用例的主/輔執行者” 是正確的,“ xx 是xx系統的主/輔執行者” 說法是錯誤的。

二、如何區分業務用例圖和系統用例圖

相信經過上面的分析,你已經發現了兩個用例圖的異同點,如果沒有,我再貼一下兩個圖(便于對比下單系統就簡化成下單這個一個用例),便于更直觀的對比:

4e42c5ac-8d16-11ee-939d-92fbcf53809c.png

?

沒錯,兩個圖的最大的不同就是有無“/”,業務用例圖在業務執行者和業務用例上是有“/”的,系統用例圖在系統執行者和系統用例圖上沒有“/”,就是這么簡單。所以現在再看到下面這個幾個圖,你是不是可以一眼看出其中的問題了。?

4e4f06d2-8d16-11ee-939d-92fbcf53809c.png

?

三、如何用 PlantUML 畫出規范的用例圖

PlantUML 是一個快速創建 UML 圖形的組件或者可以說是語言,通過簡單和直觀的語言來定義圖形。其在學習成本、效率、團隊協同以及維護成本上都有比較大的優勢,所以推薦使用 PlantUML 來畫圖。

用例圖畫起來其實很簡單,主要就是四個要素,這里以系統用例為例,四個要素分別是系統、執行者、用例、關系。

3.1 系統

系統用一個矩形塊表示,在 UML語法中是rectangle。如下:

@startuml


rectangle "xx 系統" {


}


@enduml

4e596ee2-8d16-11ee-939d-92fbcf53809c.png?

3.2 執行者

執行者是用火材人表示,在 UML 語法中是actor,主要有兩種寫法,如下:

@startuml


'系統執行者的兩種寫法'
actor Actor1
:Actor2:


'業務執行者的兩種寫法'
actor/ Actor3
:Actor4:/


@enduml

4e64bca2-8d16-11ee-939d-92fbcf53809c.png

3.3 用例

用例是用一個橢圓表示。在UML 語法中是usecase ,業務用例和系統用例的兩種寫法如下:

@startuml


usecase/ " 業務用例 1" as UC1
'業務用例的第二種寫法:() + 用例名稱 + /'
(業務用例 2)/ as UC3


usecase "系統用例 1" as UC2
'系統用例的第二種寫法:() + 用例名稱 '
(系統用例 2)
@enduml

4e7a8276-8d16-11ee-939d-92fbcf53809c.png

?

3.4 關系

系統用例圖中關系主要有四種,分別是關聯、包含、擴展、泛化。

3.4.1 關聯

關聯是執行者和用例之間的一種關系,一般用實線 + 實心箭頭表示:

@startuml


actor Actor
rectangle "xx系統" {
  usecase "系統用例 1" as UC1
}


Actor -> UC1
@enduml

4e7e4d20-8d16-11ee-939d-92fbcf53809c.png

這里有一點需要注意的是,雖然表示關聯關系可以直接用實線如A-B這樣表示,但是在用例圖中我們盡量用實線+箭頭表示,否則如下:?

4e924be0-8d16-11ee-939d-92fbcf53809c.png

?

你無法區分 Actor1 和 Actor2 誰是主執行者誰是輔執行者,又或者兩個都是主執行者?加上箭頭后就非常容易區分,如下

4e983db6-8d16-11ee-939d-92fbcf53809c.png

3.4.2 包含

包含是用例之間的一種關系,其中一個用例(稱為基本用例)的行為包含了另一個用例(稱為包含用例)的行為,用虛線箭頭 + <>表示,箭頭指向包含用例。

包含關系意味著包含用例是基本用例中不可缺少的一個執行步驟,如果缺少了該包含用例,基本用例就會變得不完整,可類比類圖中對象之間的組合關系。使用包含關系的兩個場景:

當基本用例較復雜時,可以分解出一些包含用例;

當兩個或以上的基本用例存在一些重復行為時,可以提煉出一個包含用例;

@startuml
'加入下面代碼指定方向,使 UML 從左往右更直觀'
left to right direction


actor Actor
rectangle "xx系統" {
  usecase "基本用例" as UC1
  usecase "包含用例 1" as UC2
  usecase "包含用例 2" as UC3
}


Actor --> UC1
UC1 ..> UC2 : <>
UC1 ..> UC3 : <>


@enduml?

4ea1c93a-8d16-11ee-939d-92fbcf53809c.png

上面我用了Actor --> UC1、UC1 ..> UC2,有興趣的可以換成->、.>看看效果

3.4.3 擴展關系

擴展是用例之間的一種關系,其中一個用例(稱為擴展用例)的行為增強了另一個用例(稱為基本用例)的行為,用虛線箭頭 + <>表示,箭頭指向基本用例。

擴展用例是對基本用例的一種補充或強化,即使沒有該擴展用例,對基本用例也不會產生直接影響,基本用例自身仍然是完整的。也就是說擴展用例是基本用例的一種可能的補充,如購買運費險就是對下單這一用例的擴展,買不買運費險都不影響下單。

@startuml
left to right direction


actor Actor
rectangle "xx系統" {
  usecase "基本用例" as UC1
  usecase "擴展用例" as UC2
}


Actor --> UC1
UC1 <.. UC2 : <>


@enduml

4ea5bb94-8d16-11ee-939d-92fbcf53809c.png

3.4.4 泛化

泛化關系也可以稱作繼承關系(類比類圖中的泛化),用一個實線 + 空心箭頭來表示,可以表示執行者間的關系也可以表示用例之間的關系。

@startuml
left to right direction
actor Actor


rectangle "xx系統" {
  usecase "支付" as UC1
  usecase "微信支付" as UC2
  usecase "支付寶支付" as UC3
}


Actor --> UC1
UC1 <|-- UC2 
UC1 <|-- UC3


@enduml

4ebe828c-8d16-11ee-939d-92fbcf53809c.png

?

四、一個案例

這里我們以某銀行的 App 為例,作為銀行的一個系統我們對其進行分析:

1.系統:那自然是這個 App

2.系統執行者

a.主執行者:一般來銀行辦業務的客戶都是主執行者,包括個人用戶和企業用戶;

b.輔執行者:銀行,用戶在 App 辦理的所有業務都需要銀行來配合執行;

3.系統用例:作為銀行的線上業務,包含轉賬、查詢余額、理財、貸款。

4.關系:這里需要注意的是轉賬過多有可能會超過限額,這個時候會提示超限;在辦貸款業務之前,銀行肯定會對用戶的資產進行評估,這樣才能決定其貸款額度。

@startuml
left to right direction
actor 客戶 as Actor
actor 銀行 as Actor2


rectangle "某銀行App" {
  usecase "轉賬" as UC1
  usecase "查詢余額" as UC2
  usecase "理財" as UC3
  usecase "貸款" as UC4
  usecase "評估資產" as UC5
  usecase "提示限額" as UC6
}


Actor <|-up- 個人用戶
Actor <|-up- 企業用戶
Actor --> UC1


Actor --> UC2
Actor --> UC3
Actor --> UC4
UC1 ----> Actor2
UC2 ----> Actor2
UC3 ----> Actor2
UC4 ----> Actor2


UC4 .left.> UC5 :<>
UC1 <.down. UC6 :<>


@enduml
整體用例圖如下:

4ecb2a32-8d16-11ee-939d-92fbcf53809c.png

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • UML
    UML
    +關注

    關注

    0

    文章

    122

    瀏覽量

    30902
  • 測試用例
    +關注

    關注

    0

    文章

    21

    瀏覽量

    7149

原文標題:如何畫出規范的UML用例圖

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    UML中類詳解

    UML
    電子學習
    發布于 :2023年01月14日 10:12:47

    UML狀態和Petri網絡在類測試用生成的應用

    【作者】:陳志德;曾凡平;【來源】:《小型微型計算機系統》2010年03期【摘要】:分析和研究UML狀態、擴展狀態機和Petri網在類測試用生成的特點,提出結合三者優勢的類測試用
    發表于 04-24 09:52

    可以幫忙把這個protel畫出原理嗎?

    大佬可以幫忙把這個protel畫出原理嗎?
    發表于 05-01 17:44

    請問UML的創建方法是什么?

    UML的創建方法及其的描述
    發表于 11-06 07:10

    matlab畫出石墨烯的能帶關系

    matlab畫出石墨烯的能帶關系HomewoHomework110/31/20161.計算做圖畫出石墨烯蜂窩格子的倒格子和第一布里淵區,
    發表于 08-17 09:25

    基于UML的生成場景測試用研究

    使用UML生成場景測試用,有利于測試者設計測試用。使用UML的類、狀態和順序
    發表于 03-31 09:49 ?15次下載

    基于UML構建PKI需求模型

    本文以PKIX 標準作為PKI 的建設規范,在分析PKI 需求的特點和構建需求模型的常用模式的基礎上,提出使用UML 的構件、參與者和三個概念為主體構建PKI 需求模型,然后分析P
    發表于 06-19 11:42 ?13次下載

    基于UML依權限有序的Web鏈接測試用生成方法

    針對傳統Web測試用生成方法因缺少權限性和時序性考慮而產生的誤判斷問題,提出結合基于統一建模語言(UML)活動與狀態,根據不同用戶權限及交互活動流程分析Web頁面鏈接而生成測試用
    發表于 01-07 12:25 ?0次下載
    基于<b class='flag-5'>UML</b><b class='flag-5'>圖</b>依權限有序的Web鏈接測試用<b class='flag-5'>例</b>生成方法

    如何使用實時UML的進行雷達軟件的設計

    實時統一建模語言(UML)和面向對象的建模技術代表著雷達軟件設計的一個發展方向。文中介紹了使用UML、狀態
    發表于 03-26 15:09 ?20次下載
    如何使用實時<b class='flag-5'>UML</b>的進行雷達軟件的設計

    什么是UML?常見的UML工具有哪些?

    UML是統一建模語言,又稱標準建模語言。是對軟件設計開發過程可視化建模的一種語言。多應用在一些軟件系統工程上,有時在應用在機械系統和業務流程上有所應用。這種模型通常以圖表方式呈現。 UML狀態圖
    的頭像 發表于 06-22 14:10 ?4750次閱讀
    什么是<b class='flag-5'>UML</b><b class='flag-5'>圖</b>?常見的<b class='flag-5'>UML</b><b class='flag-5'>圖</b>工具有哪些?

    4款小白在線UML軟件,免費模板直接改

    UML常用于需求的分析,是一個用來描繪系統功能的技術。系統的行為、各種功能的關系都可以在用圖中描述,其可視化的表達能讓閱讀者更好理解
    的頭像 發表于 07-23 21:27 ?1w次閱讀

    基于實時UML的雷達軟件設計

    實時統一建模語言 (UML)和面向對象的建模技術代表著雷達軟件設計的一個發展方向。文中介紹了使用UML、狀態
    發表于 03-26 14:06 ?24次下載

    UML簡介與類詳解

    本篇介紹了UML的基礎知識,包括2種和6種關系,并通過visio軟件,演示如何畫出一個UML
    的頭像 發表于 05-05 09:07 ?4224次閱讀
    <b class='flag-5'>UML</b>簡介與類<b class='flag-5'>圖</b>詳解

    UML狀態詳解

    本篇介紹了UML狀態的基礎知識,并通過visio繪制一個全自動洗衣機的UML狀態實例,來介紹UML狀態
    的頭像 發表于 05-09 09:00 ?3377次閱讀
    <b class='flag-5'>UML</b>狀態<b class='flag-5'>圖</b>詳解

    UML時序詳解

    本篇介紹了UML時序的基礎知識,并通過visio繪制一個物聯網設備WIFI配網的UML時序實例,來介紹UML時序
    的頭像 發表于 05-16 09:09 ?2270次閱讀
    <b class='flag-5'>UML</b>時序<b class='flag-5'>圖</b>詳解
    澳门百家乐官网心得玩博| 宾利娱乐城| 欢乐谷线上娱乐| 百家乐官网扑克牌耙| 百家乐官网现场新全讯网| 上海百家乐官网赌博| 百家乐官网游戏大| 百家乐官网博百家乐官网的玩法技巧和规则| 独赢百家乐全讯网| 中原百家乐的玩法技巧和规则| 大发888下载官方| 北票市| 澳门百家乐官网网上娱乐场开户注册 | 大发888娱乐场下载 df888ylc3403 | 总玩百家乐官网有赢的吗| 百家乐必胜课| 网上棋牌游戏赚钱| 聚宝盆百家乐官网游戏| 大佬百家乐官网的玩法技巧和规则| 澳门百家乐现场真人版| 大发888娱乐城登录| 宝马会百家乐官网现金网| 百家乐官网园首选去澳| 威尼斯人娱乐场 28| 哪个百家乐平台信誉好| 大发888娱乐捕鱼游戏| 百家乐官网要怎么玩啊| 好望角百家乐官网的玩法技巧和规则| 在线百家乐策| 万博娱乐| 威尼斯人娱乐中心老品牌| 广发百家乐官网的玩法技巧和规则 | 实战百家乐的玩法技巧和规则| 百家乐群到shozo网| 澳门百家乐官网加盟| 新宝百家乐网址| 大发888娱乐场下载 游戏平台| 百家乐官网投注软件有用吗| 马牌百家乐娱乐城| 大发888更名网址622| 百家乐官网评测|