La documentación del diseño se usa comúnmente
para representar referencias comparables, estable-
cer
analogías

y

abstracciones,

refinar

y

evaluar
propuestas e
interpretar todos estos

dibujos a

tra-
vés
de

procesos

cognitivos.

Estas

actividades

re-
fuerzan
el

papel

de

la

documentación

como

una
herramienta de descubrimiento de diseño, como un
medio para refrescar la perspectiva de un proyecto.
Es mucho más probable que un proyecto bien do-
cumentado
esté

bien

construido

que

un

proyecto
pobremente documentado [3].
Sin embargo, a pesar de su importancia, según [4]
la
documentación

de

la

arquitectura

de

software
tiene
la

reputación

de

ser

notoriamente

mala.

Le
quita tiempo a la escritura de código. Siempre pa-
rece estar desactualizada, por lo general, está es-
crita en algún formato de archivo binario patentado
que
no

se

puede

editar,

y

además

de

todo

eso,
¡nadie
lo

lee

de

todos

modos!

¡No

es

de

extrañar
que algunas personas llamen
SAD (por sus siglas
en
inglés)

a

las

descripciones

de

arquitectura

de
software! La esencia es redactar y mantener actua-
lizados los resultados de las decisiones arquitectó-
nicas para que
los

stakeholders

de

la

arquitectura
(las personas que necesitan saber qué trabajo ha-
cer) tengan la información que necesitan de forma
accesible y sin a n ambigüedades [1].
Esto último es la razón de por qué la notación UML
sigue siendo utilizada para documentar las decisio-
nes arquitectónicas; en lo que hay que avanzar es
en mejorar la eficiencia en la elaboración y actuali-
zación
de

esta

documentación.

Las

herramientas
de
desarrollo

de

software

(CASE)

son

programas
que
se

utilizan

para

dar

soporte

a

las

actividades
del proceso de ingeniería de software. Por lo tanto,
estas herramientas incluyen dar soporte a la activi-
dad
de

diseño,

editores,

diccionarios

de

datos,
compiladores, depuradores, herramientas de cons-
trucción
de

sistemas,

etc.

[2].

Estas

herramientas
se
pueden

combinar

dentro

de

un

marco

llamado
Entorno
de

Desarrollo

Interactivo

(IDE),

el

cual
proporciona
un

conjunto

común

de

herramientas
que
soportan

el

proceso

de

desarrollo

lo

que

las
hace
más

fáciles

de

usar

porque

se

comunican

y
operan de manera integrada. Según [5] a través de
la interfaz de un IDE, un desarrollador o equipo de
desarrolladores
puede

compilar

y

ejecutar

código
de
manera

incremental

y

administrar

los

cambios
en
el

código

fuente

de

manera

uniforme.

Éstos,
generalmente están diseñados para integrarse con
bibliotecas
de

control

de

versiones

de

terceros,
como
GitHub

y

Subversion

de

Apache.

Algunos
entornos
pueden

admitir

el

desarrollo

basado

en
modelos
(MDD)

por

lo

que

en

un

IDE

también

se
registran
modelos

y

los

cambios

realizados

en
ellos.
B.

Programación Or n Orientada a Protocolos y un
Perfil de U e UML
Los
protocolos

se

utilizan

para

definir

un

"modelo
de métodos, propiedades y otros requisitos que se
adaptan
a

una

tarea

o

función

en

particular"

[6].
Swift
verifica

los

problemas

de

conformidad

del
protocolo en tiempo de compilación, lo que permite
a
los

desarrolladores

descubrir

algunos

errores
fatales
en

el

código,

incluso

antes

de

ejecutar

el
programa.
Éstos

permiten

a

los

desarrolladores
escribir
código

flexible

y

extensible

en

Swift

sin
tener que comprometer la expresividad del lengua-
je.
Las

extensiones

de

protocolo

se

basan

en

su
genialidad [6].
Según
[7]

los

protocolos

permiten

agrupar

méto-
dos,
funciones

y

propiedades

similares.

Swift

le
permite
especificar

estas

garantías

de

interfaz

en
tipos
de

class,

struct

y

enum.

Solo

los

tipos

de
class
pueden

usar

clases

base

y

herencia.

Una
ventaja de los protocolos en Swift es que los obje-
tos
pueden

ajustarse

a

múltiples

protocolos.

Al
escribir
una

aplicación

de

esta

manera,

el

código
se vuelve
más modular

Esto es

una

característica
de calidad que promueve POP.
Piénsese en los protocolos como bloques de cons-
trucción
de

funcionalidad.

Cuando

se

agrega

una
nueva
funcionalidad

al

conformar

un

objeto

a

un
protocolo,
no

se

crea

un

objeto

completamente
nuevo,
eso

lleva

mucho

tiempo.

En

su

lugar,

se
agregan
diferentes

bloques

de

construcción

hasta
que
su

objeto

esté

listo

[7].

La idea

de la

Progra-
mación
Orientada

a

Protocolos

(POP)

es

dejar
atrás, en la medida de lo posible, los tipos por refe-
rencia
(Objetos)

y centrarse

en

los

tipos

por

valor
(Structs,
Enums),

eliminando

varios

de

los

proble-
mas que se generan al utilizar Programación Orien-
tada
a

Objetos

(POO)

[8].

Ahora

bien,

dado

que
POP
se

ha

transformado

en

un

estándar

para
desarrollos
en

Swift,

surge

la

necesidad

de

docu-
mentar los diseños que se implementarán bajo este
paradigma.
Unified

Modeling

Language

(UML),
definido por [9], es un lenguaje de propósito gene-
ral
usado

para

especificar,

visualizar

y

construir
artefactos
de

sistemas

de

software.

Como

es

un
lenguaje
de

propósito

general,

la

descripción

de
dominios
de

aplicación

específicos

requiere

de

la
definición
de

un

nuevo

lenguaje

que

describe

el