時(shí)序圖是闡明軟件設(shè)計(jì)的利器,也是系統(tǒng)架構(gòu)的必備武器。今天我們以APA自動(dòng)泊車系統(tǒng)為例來聊聊如何設(shè)計(jì)符合繪制原則又通俗易懂的時(shí)序圖。
1.時(shí)序圖說明
序列圖是一種 UML(統(tǒng)一建模語言)圖,它說明了系統(tǒng)中對象之間隨時(shí)間的交互,通常用于可視化消息流和軟件系統(tǒng)中對象之間方法調(diào)用的順序。
時(shí)序圖展示對象之間交互的順序,將交互行為建模為消息傳遞,通過描述消息是如何在對象間發(fā)送和接收的來動(dòng)態(tài)展示對象之間的交互;相對于其他UML圖,時(shí)序圖更強(qiáng)調(diào)交互的時(shí)間順序;可以直觀的描述并發(fā)進(jìn)程。
2.繪制原則
繪制原則在比較簡單,但是如果想要細(xì)致的描述出真實(shí)的交互情況,還需要在細(xì)節(jié)處多加斟酌,以及對整體流程有清晰的把握。在最近繪制時(shí)序圖的工作過程,我感覺到自己對系統(tǒng)的認(rèn)識深入和清晰了許多,不求甚解的地方突然豁然開朗了。
1. 角色(Actor)
系統(tǒng)角色,可以是人、機(jī)器、其他系統(tǒng)、子系統(tǒng);在時(shí)序圖中用下圖表示。
2. 對象(Object)和生命線(Lifeline)
對象:對象的左右順序并不重要,但是為了作圖清晰整潔,通常應(yīng)遵循以下兩個(gè)原則:把交互頻繁的對象盡可能的靠攏;2.把初始化整個(gè)交互活動(dòng)的對象放置在最左端。
生命線:在時(shí)序圖中表示為從對象圖標(biāo)向下延伸的一條虛線,表示對象存在的時(shí)間。
3. 控制焦點(diǎn)(Focus of Control)
又稱為激活期,表示時(shí)間段的符號,在這個(gè)時(shí)間段內(nèi)對象將執(zhí)行相應(yīng)的操作。它可以被理解成C語言語義中一對花括號{ }中的內(nèi)容;用小矩形表示。
4. 消息(Message)
同步消息(Synchronous Message):消息的發(fā)送者把控制傳遞給消息的接收者,然后停止活動(dòng),等待消息的接收者放棄或者返回控制。用來表示同步的意義.
異步消息(Asynchronous Message):消息發(fā)送者通過消息把信號傳遞給消息的接收者,然后繼續(xù)自己的活動(dòng),不等待接受者返回消息或者控制。異步消息的接收者和發(fā)送者是并發(fā)工作的。
返回消息(Return Message):返回消息表示從過程調(diào)用返回。
5. 自關(guān)聯(lián)消息
表示方法的自身調(diào)用或者一個(gè)對象內(nèi)的一個(gè)方法調(diào)用另外一個(gè)方法。
6. 組合片段
組合片段用來解決交互執(zhí)行的條件和方式,它允許在序列圖中直接表示邏輯組件,用于通過指定條件或子進(jìn)程的應(yīng)用區(qū)域,為任何生命線的任何部分定義特殊條件和子進(jìn)程。主要使用的組合片段名稱及含義如下:
3.繪制建議
時(shí)序圖最重要的是應(yīng)該清晰、準(zhǔn)確地表達(dá)系統(tǒng)的交互和行為。根據(jù)需要,最好與團(tuán)隊(duì)成員進(jìn)行溝通和反饋,以確保時(shí)序圖能夠準(zhǔn)確地傳達(dá)設(shè)計(jì)意圖,能夠讓開發(fā)人員沒有誤解。
以下是個(gè)人在繪制時(shí)序圖時(shí)總結(jié)的一些心得體會(huì):
- 確定目標(biāo) :明確繪制時(shí)序圖的目的是什么。是為了理解系統(tǒng)的交互流程,還是為了進(jìn)行設(shè)計(jì)和調(diào)試等工作?這有助于確定所需的詳細(xì)程度和關(guān)注的重點(diǎn)。
- 選擇適當(dāng)?shù)念w粒度 :根據(jù)上一條確定的目標(biāo)和需求,選擇適當(dāng)?shù)牧6葋肀硎緦ο蠛拖ⅰnw粒度太細(xì)可能導(dǎo)致時(shí)序圖復(fù)雜難懂,而粒度太粗可能會(huì)丟失一些重要的細(xì)節(jié)??隙ǖ氖牵覀儧]辦法傳遞所有的信息,需要根據(jù)時(shí)序圖目的去選擇描述的傾向性。
- 使用清晰的命名 :為每個(gè)角色、對象和消息選擇清晰、準(zhǔn)確的命名,以確保時(shí)序圖的可讀性和理解性。避免使用模糊或不明確的術(shù)語,盡量使用業(yè)務(wù)領(lǐng)域相關(guān)的術(shù)語。
- 合理組織布局 :在繪制時(shí)序圖時(shí),合理組織和布局對象、生命線和消息,使其易于理解??梢园凑諘r(shí)間順序排列對象和消息,并使用對齊和間距來提高可讀性。
- 使用注釋和說明 :在時(shí)序圖中使用注釋和說明來提供額外的解釋和上下文信息。這可以幫助讀者更好地理解時(shí)序圖,尤其是對于復(fù)雜的交互和控制流程。
- 簡化和抽象 :對于復(fù)雜的系統(tǒng)和交互,可以考慮使用簡化和抽象的方式來繪制時(shí)序圖,以突出重點(diǎn)和減少混亂??梢允褂梅謱雍颓短椎臅r(shí)序圖,或者使用關(guān)鍵路徑和關(guān)鍵消息進(jìn)行突出。
- 使用工具支持 :考慮使用專業(yè)的時(shí)序圖繪制工具,如UML建模工具或在線繪圖工具。這些工具提供了更多的功能和自動(dòng)化支持,可以使繪制和編輯時(shí)序圖更加高效和方便。
4.繪制工具推薦
磨刀不誤砍柴工,在信息化時(shí)代,好的工具能夠成倍的提高我們的工作效率,下面介紹常用的時(shí)序圖繪制工具。
- Enterprise Architect :EA(Enterprise Architect)是一種功能強(qiáng)大的建模和設(shè)計(jì)工具,廣泛用于軟件開發(fā)、系統(tǒng)工程和業(yè)務(wù)流程建模等領(lǐng)域。
- Draw.io :Draw.io是一個(gè)在線繪圖工具,提供了各種圖表類型的繪制功能,包括時(shí)序圖。它具有直觀的用戶界面和豐富的圖形庫,可以輕松繪制和編輯時(shí)序圖。Draw.io還支持與Google Drive、Dropbox等云存儲服務(wù)的集成,方便團(tuán)隊(duì)協(xié)作和文件共享。
- Microsoft Visio :Microsoft Visio是一種流行的商業(yè)繪圖工具,具有豐富的圖形庫和模板,可用于創(chuàng)建各種圖表和圖形,包括時(shí)序圖。Visio提供了直觀的界面和強(qiáng)大的繪圖功能,適用于較復(fù)雜的時(shí)序圖繪制需求。
- Lucidchart :Lucidchart是另一種在線繪圖工具,具有易用的界面和廣泛的圖形庫。它支持時(shí)序圖的繪制,提供了一系列交互元素和布局選項(xiàng),方便繪制和調(diào)整時(shí)序圖的結(jié)構(gòu)和樣式。Lucidchart還提供了與Google Drive、Slack等工具的集成,便于團(tuán)隊(duì)協(xié)作和分享。
- PlantUML :PlantUML是一種基于文本的繪圖工具,可以通過簡單的文本描述來生成各種UML圖,包括時(shí)序圖。它具有簡單易用的語法,并支持多種輸出格式,可以使用PlantUML在任何文本編輯器中編寫時(shí)序圖,并使用命令行或插件將其轉(zhuǎn)換為圖像。
詳細(xì)說說我用過的兩個(gè)工具,EA和Draw.io :
EA就不用說了,在汽車行業(yè)內(nèi)鼎鼎大名,我們見到大量的設(shè)計(jì)圖都是出自EA,軟件內(nèi)置有專門的狀態(tài)機(jī)繪制模塊、軟件部署、autosar、時(shí)序圖等等,并且能夠自動(dòng)生成代碼,用起來十分方便,還美觀整潔。
但是由于專業(yè)版的收費(fèi)原因,我供職的幾家都沒有買正版(流汗),只能自己在家用著玩玩,或者使用試用版,有30天免費(fèi)試用(導(dǎo)出圖片會(huì)有水?。?。
EA提供的時(shí)序圖模板
Draw.io最大的優(yōu)點(diǎn)是其便捷性,可以在線繪制,并且擁有多種模板,聯(lián)網(wǎng)自動(dòng)更新,方便團(tuán)隊(duì)協(xié)作??梢陨螱ithub上下載應(yīng)用程序,體驗(yàn)和在線版一模一樣,完美實(shí)現(xiàn)無環(huán)境依賴的辦公。
Draw.io提供的時(shí)序圖模板
用APA自動(dòng)泊車系統(tǒng)來舉例,如何設(shè)計(jì)能夠滿足功能開發(fā)的時(shí)序圖。
5.確定目標(biāo)
在明確目標(biāo)時(shí)首先強(qiáng)調(diào),時(shí)序圖沒有優(yōu)劣好壞高下之分,它的作用是幫助設(shè)計(jì)者傳達(dá)出作者的設(shè)計(jì)理念,以便讀者更夠快速、無誤的理解。
比如我們作為系統(tǒng)工程師,是對于系統(tǒng)整體最了解的人,是最清楚ADCU域內(nèi)各模塊之間數(shù)據(jù)交互的人;所以我們的設(shè)計(jì)的時(shí)序圖,力圖要將各模塊之間的交互梳理清楚,讓感知、融合、定位、規(guī)劃、控制等模塊的Owner能夠清楚的知道,在什么時(shí)間下該模塊需要與其他模塊進(jìn)行什么樣的握手,而該模塊內(nèi)部的信號邏輯,則歸屬于該模塊的負(fù)責(zé)人去設(shè)計(jì)。
好的,那么對于自動(dòng)泊車系統(tǒng)來說,APA整體功能流程錯(cuò)綜復(fù)雜,為避免時(shí)序圖臃腫與繁瑣導(dǎo)致的可讀性下降;我們將APA功能分解為若干個(gè)功能過程,分別對每個(gè)過程中的時(shí)序進(jìn)行逐一描述,將各過程拼接后能夠得到清晰明白的功能時(shí)序。
6.選擇合適的顆粒度
作為系統(tǒng)工程師,我們當(dāng)然選擇 通過功能解構(gòu)來分別繪制時(shí)序圖 。本文不對APA功能邏輯做詳細(xì)介紹,那么熟悉APA的同學(xué)都知道,APA過程可以簡單的分為車位搜索、選擇車位、泊入泊出過程、中斷恢復(fù)等,下圖通過這種思路簡單的做時(shí)序圖分解。
于是我們知道了,需要分別設(shè)計(jì)“激活泊車功能”、“退出泊車功能”、“前臺搜車位”、“后臺搜車位”、“點(diǎn)擊選擇車位”、“自動(dòng)泊車過程”、“泊車過程中斷”等等時(shí)序圖。
7.命名規(guī)則
另外描述的顆粒度應(yīng)該選擇為模塊間的交互信號,如在設(shè)計(jì)初期該信號未定義,可以選擇用語義性的信號進(jìn)行描述,通俗易懂即可,最好前綴明確標(biāo)注為什么類型的信號,如以太網(wǎng)、CAN、FR、或域內(nèi)的交互信號。
比如用戶按下激活泊車按鍵,這是一個(gè)以太網(wǎng)信號,以Eth為前綴,采用大駝峰命名法(個(gè)人習(xí)慣),描述為Eth_ApaBtn(1:EnterApa),括號內(nèi)為該信號此時(shí)應(yīng)該發(fā)送的值。
8.布局合理
整體布局方面,這個(gè)主要符合美觀要求就好,一般我們設(shè)計(jì)模塊交互圖時(shí),左邊為輸入,右邊為輸出。我們可以遵循這個(gè)原則,進(jìn)行設(shè)計(jì)。
APA系統(tǒng)交互分為域外與域內(nèi),域外會(huì)與用戶輸入、DHU、底盤動(dòng)力、轉(zhuǎn)向等ECU進(jìn)行交互,域內(nèi)為各模塊之間的交互。
我們將域內(nèi)與域外的對象用不同顏色表示,從左邊開始為原始輸入,按照時(shí)間順序排列對象和消息,并使用對齊和間距來提高可讀性。
9.注釋和說明
在時(shí)序圖最左側(cè)以Diagram Conventions的形式將對象進(jìn)行說明。在時(shí)序圖后通過文字對每一條跳轉(zhuǎn)進(jìn)行詳細(xì)描述。
10.簡化和抽象
避免繁雜與重復(fù),巧用組合片段用來解決交互執(zhí)行的條件和方式。 比如Opt選項(xiàng)、Alt抉擇、Loop循環(huán)等,能夠幫助你節(jié)約大量時(shí)間,并且提高可讀性,還顯得很專業(yè)。
最喜歡這種偷懶又實(shí)用的技巧。
11.使用工具支持設(shè)計(jì)
由于作者是在家設(shè)計(jì),使用的是試用版的EA,畫面簡潔漂亮,給EA的設(shè)計(jì)師點(diǎn)贊,也是花費(fèi)無數(shù)心血完成的軟件,無腦吹起來就好。不過個(gè)人感覺UML建模好像用的越來越少了,可能是個(gè)人局限性原因吧,畫畫圖還是很好用的。
現(xiàn)在鋪墊都已經(jīng)做好了,接下來無腦進(jìn)行功能邏輯描述就好了,以最基本的,我們剛剛分解的“激活自動(dòng)泊車”功能時(shí)序圖為例。
1.首先進(jìn)行功能描述:
激活自動(dòng)泊車功能:用戶開啟通過操作開啟自動(dòng)泊車功能,滿足開啟功能條件,狀態(tài)機(jī)進(jìn)行跳轉(zhuǎn)并通知下游模塊,進(jìn)入自動(dòng)泊車功能;不滿足開啟功能條件,APA返回DHU功能開啟失敗原因提示。
2.然后附上時(shí)序圖:
該時(shí)序圖為簡單描述,僅作說明示意
3.進(jìn)行注釋說明:
1.用戶點(diǎn)擊中控軟開關(guān)或語音開啟自動(dòng)泊車功能,DHU通過Flexray發(fā)送APA功能激活信號Flexray_BtnPush == 1:EnterAPA至ADCU;
2.ADCU MCU Flexray Transceiver接收信號并通過以太網(wǎng)傳輸給SOC;
3.SOC中的HMI Arbitration模塊解析該信號并分發(fā)給下游ParkingModeManager模塊;
4.SOC端Signal Service接收后轉(zhuǎn)發(fā)APA_ActivationReq至HMI Arbitration模塊;
5.HMI Arbitration模塊將請求轉(zhuǎn)發(fā)給Parking Mode Manager;
6.Parking Mode Manage收到激活信號后,根據(jù)泊入泊出策略,選擇當(dāng)前進(jìn)入的泊入泊出模式,并發(fā)送給下游模塊;
7.狀態(tài)機(jī)進(jìn)行狀態(tài)跳轉(zhuǎn)判斷:
a)若當(dāng)前為Mag_APAModSts==2: APA_Standby,成功進(jìn)入Searching狀態(tài),Parking Mode Manage將APAModSts == 3: APA_SEARCHING狀態(tài)發(fā)送給下游其他節(jié)點(diǎn)。
b)若當(dāng)前為Mag_APAModSts==1: APA_OFF,則無法開啟APA功能,Parking Mode Manage將APAModSts == 1: APA_OFF狀態(tài)發(fā)送給下游其他節(jié)點(diǎn)。
8.通過以太網(wǎng)返回APA狀態(tài)Ethernet_apa_state以及文言提示Ethernet_AlarmInfo給DHU作為顯示;
OK,如此便完成了一個(gè)簡單的時(shí)序圖設(shè)計(jì)。對于其余車位搜素、泊車過程等功能的時(shí)序圖,照貓畫虎繼續(xù)完成即可,就不再一一展示了。
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5415瀏覽量
171555 -
CAN總線
+關(guān)注
關(guān)注
145文章
1942瀏覽量
130716 -
自動(dòng)泊車系統(tǒng)
+關(guān)注
關(guān)注
0文章
19瀏覽量
9045 -
MCU控制器
+關(guān)注
關(guān)注
0文章
27瀏覽量
6883 -
UML技術(shù)
+關(guān)注
關(guān)注
0文章
5瀏覽量
1370
發(fā)布評論請先 登錄
相關(guān)推薦
評論