当前位置:首页 > 公众号精选 > C语言编程
[导读]软件设计时序图制作工具在软件设计过程中,经常会使用到时序图来表达模块之间的交互、信息传递的动态行为或者其他软件逻辑。时序图可以清晰地表达软件层面的设计,甚至毫不夸张说是“一图顶千言”。那么,抛出个直截了当的问题:画时序图的工具有哪些?哪个最好用?以下以EA(EnterpriseA...

软件设计时序图制作工具

在软件设计过程中,经常会使用到时序图来表达模块之间的交互、信息传递的动态行为或者其他软件逻辑。时序图可以清晰地表达软件层面的设计,甚至毫不夸张说是“一图顶千言”。

那么,抛出个直截了当的问题:画时序图的工具有哪些?哪个最好用?

以下以EA(Enterprise Architect)DrawIOPlantUML和Markdown里的mermaid来对比讲解。

首先看看他们的效果对比:

1. 效果对比

以下是EA(Enterprise Architect)、DrawIO、PlantUML和Markdown里的mermaid的时序图最终效果对比。

这几个图都是表示创建一个账户(Create Account)的实例。

This Sequence Diagram shows the Objects involved in the creation of a new account. The Account Object is displayed lower down in the diagram because it doesn’t exist at the beginning of the sequence but is created as a result of the message.

  1. EA

  2. DrawIO

  3. PlantUML

  4. mermaid


从上面的各个工具做出的图看,前面三个差别不大该有的图示效果都有,最后一个mermaid就没那么丰富了,只能做个简单的图示表达。

然而,这样也不能说明哪个是最好的,只能从中找出一个最适合你的。

为了更好说明各自的优缺点,先看看时序图里面有什么。

2. 时序图的组成

首先,想想你理解中的时序图是什么?里面有什么元素?

画两根竖线,然后通过几个箭头表示消息传递,仅此而已?

这个是时序图么?是,可以认为时序图,但不是那么标准。

那么,什么是标准?或者说有没有一个约定成俗的东西?

时序图不仅仅是给自己看的,也是向其他团队成员传递或表达信息的媒介,应该与别人有共同约定的符号或元素。

就像南方人跟北方人讲话,通用的普通话就很好,如果你讲的普通话夹杂很多粤语甚至潮汕话,你让东北人怎么听得懂。

时序图是可以基于UML的,UML是统一建模语言,里面很多元素是我们共同认为它表达某一种特别含义。

以下基于UML概念,讲讲时序图里面主要一些元素。

Lifeline

这个是时序图的最基本的东西

Lifeline是交互中的单个参与者(即生命线不能具有多重性)。Lifeline代表一个独特的可连接元素。

OMG UML 规范(UML Superstructure Specification, v2.1.1, p.489)指出:

Lifeline代表交互中的单个参与者。虽然零件和结构特征的多重性可能大于 1,但Lifeline仅代表一个交互实体。

这个很好理解,简单粗暴地说,就是一根竖下来的东西,代表一个独立的交互实体。

上图是EA常用的Lifeline图示,当然也有通过其他图标组合的Lifeline,例如这个

DrawIO上也能找到很多各种Lifeline

对于PlantUML,可以通过脚本指定,同样有很多种

下图示例Lifeline类型
Foo1actor
Foo2boundary
Foo3control
Foo4entity
Foo5database
Foo6collections

而mermaid就没有那么多类型的了,就只有很简单的。

Control/Boundary/Entity

Control 是一个原型对象,它为控制实体或管理器建模。控件组织和安排其他活动和元素,通常在分析(包括稳健性)、序列和通信图中。


Boundary是一种原型对象,它对某些系统Boundary进行建模,通常是用户界面屏幕。您还可以将Boundary创建为构造型类。在分析中使用Boundary元素来捕获用户交互、屏幕流和元素交互(或“协作”)。
在概念阶段使用Boundary来捕获用户在屏幕级别(或某些其他Boundary界面类型)与系统交互。它通常用于序列和稳健性(分析)图中。

Entity是一种原型对象,它对捕获系统中的信息或知识的存储或持久性机制进行建模。

通常情况下,Control/Boundary/Entity往往跟Lifeline一起使用(见文章开头的图)。

EA、DrawIO、PlantUML都有这些元素。

Message

这个很好理解,就是一根线一个箭头,加上一个文本描述。

Message表示元素之间的信息流或控制转换。
Message可用于时序图、序列图和通信图(但不包括交互概览图)以反映系统行为。
如果在类或分类器实例之间,关联的操作列表可用于指定事件。

Message分Synchronize和Asynchronize,前者对应的是黑实心箭头(下图右边的箭头),后者对应的是开放箭头(下图左边的箭头)。

对于EA,可以直接双击这个message箭头可以设置,里面的配置十分丰富

而DrawIO或其他工具,在设置属性等界面可以选择不同的箭头,而并没说明这是Synchronize还是Asynchronize。

对于PlantUML,是通过脚本设置不同的Message类型,如

  • Client ->> CreateAccount表示Asynchronize箭头;

  • CreateAccount -> CreateNewAccount表示Synchronize箭头。

另外,这两种不同的Message类型,会影响Lifeline的,很明显Synchronize会阻塞当前运行,而Asynchronize不会。

这个图上的block块,在EA上是自动根据Message类型显示的,不需要特殊处理,而DrawIO是需要在Lifeline上贴上一个长方形的,但是PlantUML上似乎没找到这个设置。

Fragment

组合Fragment反映了由交互操作符控制的交互(称为交互操作数)的一个或多个方面,相应的布尔条件称为交互约束。Fragment 显示为一个透明窗口,由每个操作数的水平线分隔。

下图说明了如何使用组合片段对简化的采购流程进行建模。Loop Fragment表示迭代购买数量未知的物品,之后收银员请求付款。
另一个Fragment代表支付选项,该Fragment被分割以显示现金和信用卡这两个操作数。在Fragment完成其跟踪后,收银员在满足付款要求的履行条件下向客户提供收据。

在EA上操作Fragment是非常方便的。

而在DrawIO上的话,有点古板,里面的线条或者边框都是普通图形组成的,如果有比较复杂的Fragment要画,是比较麻烦的。

对于PlantUML,它是有专门的语法对应这个Fragment的,例如下面这段脚本就可以翻译成以下图形:

@startuml
Alice -> Bob: Authentication Request
alt successful case
Bob -> Alice: Authentication Accepted
else some kind of failure
Bob -> Alice: Authentication Failure
group My own label
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Log attack end
end
else Another type of failure
Bob -> Alice: Please repeat
end
@enduml

注释

这个没什么特殊的,不是很讲究,简单地理解就是在时序图上贴上一段文本内容,以辅助理解这个时序图。

3. 总结

工具/软件时序图功能总结评价
EA这个是基于UML概念设计用的,不仅仅是为了画图,而注重“设计”。里面的概念和功能非常强大,画时序图也非常友好,但是如果对EA陌生的话,入门会有些难度,相对DrawIO并非“所见所得”。
DrawIO画的图很好看,也很方便,就因为图是“画”出来的,所以,它是为了画图而画图,并没有太多内涵。如果画很复杂的图也是比较繁琐的。如果只是画些简单的图形,是不二选择。
PlantUMLUML概念比较丰富,但是颜色风格看个人喜好。如果喜欢Mark图而不是画图的,可以考虑。这个工具“画”图是通过脚本命令的,然后生成图片。经常使用文本编辑的环境,这个是比较好的。
mermaid非常简单,功能稀少,用于嵌入markdown的简单图示是个不错的选择
总体来说,如果仅仅是画时序图,我优先选EA,对于简单的而又好看点的,就选DrawIO。

注意:EA软件是要license的,而DrawIO是开源的。DrawIO有网页版、PC桌面版,也有vs code插件版。
PlantUML,我是用vs code插件来做的。mermaid的话,我用Typera markdown。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月22日 /美通社/ -- 恶性的攻击和意外事件总是防不胜防,提前部署灾备方案可以在遭遇意外时尽可能减少企业损失。那么面对无处不在的勒索病毒和潜在风险,为什么依然有很多企业还会遭遇数据丢失?

关键字: 勒索病毒 软件 电脑 群晖数据

SAP(思爱普)近日发出的裁员计划,不仅涉及全球范围内约8000个职位,更是在中国区造成了近1500名正式员工和合同工不续的情况。

关键字: 软件 互联网

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

德国埃朗根2024年4月16日 /美通社/ -- Elektrobit 今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成现代微控制器新一代硬件加速器的软件产品,可应用于先进的汽车电子/电气架...

关键字: 汽车 软件 硬件加速 通信网络

Windows Embedded Compact 7(简称WinCE)是一种专为嵌入式系统设计的操作系统,具有体积小、效率高、可定制性强的特点。在WinCE中设置自动运行软件,通常是为了满足设备在启动后自动执行特定任务的...

关键字: 嵌入式系统 软件 操作系统

业内消息,日前欧洲软件巨头SAP宣布了一项重组计划推动人工智能增长,该计划将涉及大约8000名员工的岗位调整,这些员工将被纳入自愿休假计划和内部再培训措施,即鼓励员工自愿离职或进行内部转岗。

关键字: AI 重组 软件 裁员 SAP

业内消息,国家工信部近日公布了今年前三季度我国软件和信息技术服务业的具体情况,整体运行态势平稳,软件业务收入两位数增长,利润总额保持较快增长,软件业务出口降幅收窄。

关键字: 工信部 软件

嵌入式系统是一种特殊的计算机系统,它被嵌入到其他设备中,以完成特定的任务。嵌入式系统的结构组成是由硬件和软件两部器、输入输出设备和总线等组件,而软件部分则包括操作系统、应用程序和驱动程序等。

关键字: 嵌入式 计算机 软件

嵌入式软件系统是现代技术中广泛应用的一种软件形式,它通常嵌入在各种设备中,如汽车、电子设备、医疗设备等。由于这些设备的功能和性能对人们的生活至关重要,因此对嵌入式软件系统进行全面而有效的测试非常重要。本文将介绍如何对嵌入...

关键字: 嵌入式 设备 软件

安全态势可控、移动安全可及、安全开发可行

关键字: 软件 软件安全 智能终端
关闭
关闭