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