En este blog post vamos a hablar sobre varias herramientas de diagramación que pueden ser útiles para diferentes propósitos. Cada una de estas herramientas tiene su propia sintaxis y características únicas que las hacen útiles para diferentes tipos de diagramas.
PlantUML:
Es una herramienta para crear diagramas UML utilizando un lenguaje de marcado de texto. Puede utilizarse para crear diagramas de clases, secuencia, actividad, caso de uso, entre otros.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20@startuml
class Car {
+ int wheels
+ int doors
+ String color
+ drive()
+ park()
}
class SUV {
+ int wheels
+ int doors
+ String color
+ int groundClearance
+ drive()
+ park()
}
Car <|-- SUV
@enduml
GraphViz:
es una herramienta de visualización de gráficos que utiliza lenguaje de descripción de gráficos DOT. Puede utilizarse para crear diagramas de flujo, diagramas de red, diagramas de árbol, entre otros.1
2
3
4
5
6
7
8
9
10
11digraph example {
start [shape=Mdiamond,label="Inicio"]
end [shape=Msquare,label="Fin"]
proceso1 [shape=rectangle,label="Proceso 1"]
proceso2 [shape=rectangle,label="Proceso 2"]
proceso3 [shape=rectangle,label="Proceso 3"]
start -> proceso1
proceso1 -> proceso2
proceso2 -> proceso3
proceso3 -> end
}
Mermaid:
Es una herramienta para crear diagramas de flujo, diagramas de secuencia, diagramas de clase, entre otros. Utiliza una sintaxis de marcado de texto similar a PlantUML.1
2
3
4
5graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
BPMN:
Es un estándar para modelar procesos de negocio utilizando un lenguaje gráfico. Puede utilizarse para crear diagramas de flujo de trabajo, diagramas de proceso, entre otros.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="http://activiti.org/bpmn20">
<process id="loanProcess" name="Solicitud de préstamo" isExecutable="true">
<startEvent id="startEvent" name="Inicio" />
<userTask id="task1" name="Solicitud de préstamo" activiti:candidateGroups="loanDepartment" />
<exclusiveGateway id="exclusiveGateway1" name="Aprobado?" />
<userTask id="task2" name="Evaluar garantía" activiti:candidateGroups="underwriter" />
<exclusiveGateway id="exclusiveGateway2" name="Aprobado?" />
<userTask id="task3" name="Aprobar préstamo" activiti:candidateGroups="loanDepartment" />
<endEvent id="endEvent" name="Fin" />
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1" />
<sequenceFlow id="flow2" sourceRef="task1" targetRef="exclusiveGateway1" />
<sequenceFlow id="flow3" sourceRef="exclusiveGateway1" targetRef="task2">
<conditionExpression xsi:type="tFormalExpression">${approved == 'no'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" sourceRef="exclusiveGateway1" targetRef="task3">
<conditionExpression xsi:type="tFormalExpression">${approved == 'yes'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow5" sourceRef="task2" targetRef="exclusiveGateway2" />
<sequenceFlow id="flow6" sourceRef="exclusiveGateway2" targetRef="task3">
<conditionExpression xsi:type="tFormalExpression">${approved == 'yes'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow7" sourceRef="task3" targetRef="endEvent" />
</process>
</definitions>
Structurizr:
Es una herramienta para crear diagramas de arquitectura de software. Permite modelar sistemas, componentes, contenedores, entre otros.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Workspace workspace = new Workspace("Structurizr Example", "An example of how to use Structurizr.");
Model model = workspace.getModel();
SoftwareSystem mySystem = model.addSoftwareSystem("My System", "Description");
Person user = model.addPerson("User", "Description");
user.uses(mySystem, "Uses");
ViewSet views = workspace.getViews();
SystemContextView contextView = views.createSystemContextView(mySystem, "SystemContext", "An example System Context diagram.");
contextView.addAllSoftwareSystems();
contextView.addAllPeople();
Styles styles = views.getConfiguration().getStyles();
styles.addElementStyle(Tags.SOFTWARE_SYSTEM).background("#1168bd").color("#ffffff");
styles.addElementStyle(Tags.PERSON).background("#08427b").color("#ffffff").shape(Shape.Person);
PlantUMLWriter plantUMLWriter = new PlantUMLWriter();
System.out.println(plantUMLWriter.toString(contextView));
Excalidraw:
Es una herramienta de dibujo en línea que permite crear diagramas de flujo, diagramas de red, diagramas de Venn, entre otros.1
2
3
4
5
6
7Excalidraw
-----------
/~~~~~\
| |
| hello |
| |
\_____/
Nomnoml:
Es una herramienta para crear diagramas de clases, diagramas de secuencia, diagramas de flujo, entre otros. Utiliza una sintaxis de marcado de texto similar a PlantUML.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#direction: down
[<frame>Hotel|
[<abstract>Customer]
[<abstract>Employee]
[Payment|
<billing>Invoice
PaymentMethod|
CreditCard
Check
]
[Booking|
<option>Reservation
Cancellation
]
]
Svgbob:
Es una herramienta para crear diagramas ASCII que pueden ser renderizados como gráficos SVG. Puede utilizarse para crear diagramas de flujo, diagramas de red, entre otros.1
2
3
4
5
6
7+----------+ +----------+
| User | | Database |
+----------+ +----------+
| |
| +------------------+
+----> | Application |
+------------------+
SeqDiag:
Es una herramienta para crear diagramas de secuencia utilizando una sintaxis de marcado de texto. Puede utilizarse para modelar interacciones entre objetos en un sistema.1
2
3
4
5
6
7
8seqdiag {
browser -> webserver [label = "GET /index.html"];
browser <-- webserver [label = "HTML content"];
browser -> webserver [label = "POST /login.cgi"];
browser <-- webserver [label = "302 Found"];
browser -> webserver [label = "GET /welcome.cgi"];
browser <-- webserver [label = "Welcome page"];
}
ActDiag:
Es una herramienta para crear diagramas de actividad utilizando una sintaxis de marcado de texto. Puede utilizarse para modelar procesos de negocio y flujo de trabajo.1
2
3
4
5actdiag {
A -> B -> C;
D -> E -> F;
G -> H;
}
RackDiag:
Es una herramienta para crear diagramas de rack y servidores utilizando una sintaxis de marcado de texto.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41rackdiag {
rack_layout;
0U; 1U; 2U; 3U; 4U; 5U; 6U; 7U; 8U; 9U; 10U; 11U; 12U; 13U; 14U; 15U; 16U; 17U; 18U; 19U; 20U;
0U [label="Top of Rack"];
1U [label="Server 1"];
2U [label="Server 2"];
3U [label="Server 3"];
4U [label="Switch"];
5U [label="Server 4"];
6U [label="Server 5"];
7U [label="Server 6"];
8U [label="Switch"];
9U [label="Server 7"];
10U [label="Server 8"];
11U [label="Server 9"];
12U [label="Switch"];
13U [label="Server 10"];
14U [label="Server 11"];
15U [label="Server 12"];
16U [label="Switch"];
17U [label="Server 13"];
18U [label="Server 14"];
19U [label="Server 15"];
20U [label="Bottom of Rack"];
0U -> 20U;
1U -> 4U;
2U -> 4U;
3U -> 4U;
5U -> 8U;
6U -> 8U;
7U -> 8U;
9U -> 12U;
10U -> 12U;
11U -> 12U;
13U -> 16U;
14U -> 16U;
15U -> 16U;
17U -> 20U;
18U -> 20U;
19U -> 20U;
}
Bytefield:
Es una herramienta para crear diagramas de campos de bits utilizando una sintaxis de marcado de texto.1
2
3
4
5
6[ Ethernet Packet ]
Destination Address: 6 bytes
Source Address: 6 bytes
Type: 2 bytes
Data: variable
CRC: 4 bytes
NwDiag:
Es una herramienta para crear diagramas de red utilizando una sintaxis de marcado de texto. Puede utilizarse para modelar redes de computadoras y topologías de red.1
2
3
4
5
6
7
8
9
10
11
12[Computer]
{
internet : "10.0.0.1"
eth0 : "192.168.0.2"
}
[Server Web]
{
eth0 : "192.168.0.1"
}
Computer -- Server Web : HTTP
PacketDiag:
Es una herramienta para crear diagramas de paquetes de red utilizando una sintaxis de marcado de texto.1
2
3
4
5
6digraph {
node [shape=plaintext, fontname=Helvetica, fontsize=12];
Internet -> Server [label="Request"];
Server -> Internet [label="Response"];
}
C4 with PlantUML:
Es una extensión de PlantUML que permite crear diagramas de arquitectura de software utilizando la notación C4.
Erd:
Es una herramienta para crear diagramas de modelo de entidad-relación utilizando una sintaxis de marcado de texto.1
2
3
4
5
6digraph G {
rankdir=LR;
node [shape=plaintext];
"order" -> "customer";
}
Ditaa:
Es una herramienta para crear diagramas de flujo utilizando una sintaxis de marcado de texto.1
2
3+---------+
| Hello |
+---------+
Pikchr:
Es una herramienta para crear diagramas utilizando una sintaxis de marcado de texto similar a Diagrama de flujo.1
2
3
4
5
6
7
8
9
10
11left
box wid 3 ht 20
box wid 3 ht 20 at 5 0
arrow from last box to 2nd box
arrow from last box down 10
box wid 3 ht 20 at 10 20
arrow from 2nd box down 10
box wid 3 ht 20 at 15 30
arrow from last box to 3rd box
arrow from last box down 10
box wid 3 ht 20 at 20 20
UMlet
UMlet es una herramienta de diagramación de UML gratuita y de código abierto que permite crear diagramas de clases, de secuencia, de actividad y más. Es fácil de usar y permite exportar los diagramas a varios formatos, como SVG y PDF.
@startuml
class Person {
- name : String
- age : int
}
Person -> Address
@enduml