Acerca de arc42
arc42, La plantilla de documentación para arquitectura de sistemas y de software.
Por Dr. Gernot Starke, Dr. Peter Hruschka y otros contribuyentes.
Revisión de la plantilla: 7.0 ES (basada en asciidoc), Enero 2017
© Reconocemos que este documento utiliza material de la plantilla de arquitectura arc 42, http://www.arc42.de. Creada por Dr. Peter Hruschka y Dr. Gernot Starke.
La versión de esta plantilla contiene textos de ayuda y explicación Se utiliza para familiarizarse con arc42 y comprender sus conceptos. Para la documentación de su propio sistema puede utilizar la version plain. |
1. Introducción y Metas
Describe los requerimientos relevantes y las directrices que los arquitectos de software y el equipo de desarrollo deben considerar. Entre estas se incluyen:
-
Objetivos empresariales subyacentes, características esenciales y requerimientos funcionales para el sistema
-
Metas de calidad para la arquitectura
-
Las partes interesadas pertinentes y sus expectativas
1.1. Vista de Requerimientos
Los requisitos para este proyecto se basan en crear un chat para poder hablar con diferentes personas, estilo WhatsApp o Facebok Messenger, con la diferencia que las conversaciones y otros datos estarán descentralizados. Esto signfica que nuestros datos ya no estarán en los servidores de la aplicación y solo nosotros y a quien demos autorización podrán acceder a nuestros datos.
1.2. Metas de Calidad
Meta | Descripción |
---|---|
Seguridad y privacidad |
Esto es algo básico, ya que si un chat no tiene una buena seguridad ni asegura la privacidad del usuario, los mensajes que envies y tu información puede ser accesible para otras personas. |
Usabilidad |
Queremos que el chat sea utilizado por gente acostumbrada a este tipo de aplicaciones y que para la gente que no los suela utilizar, le sea fácil aprender como funciona y sea capaz de utilizarlo |
Responsiveness(Responder ante una acción) |
Un chat que tarde mucho tiempo en enviar y recibir mensajes no tendría mucho sentido, por ello nosotros queremos que esta aplicación responda antes un cambio, una acción, o simplemente el envío de un mensaje rápidamente |
1.3. Partes interesadas (Stakeholders)
Rol/Nombre | Contacto | Expectativas |
---|---|---|
Equipo de desarrollo |
Mediante reuniones en las que organizamos el trabajo personal y un control de versiones, en este caso GitHub |
Conseguir desarrollar un producto funcional y que siga las necesidades y demandas del cliente |
Profesor |
Hará un seguimiento del desarrollo del proyecto durante los laboratorios, donde también podemos preguntarle dudas. Para la revisión de las versiones definitivas del proyecto, observará como ha ido el desarrollo mediante GitHub, es decir, revisará lo que ha hecho cada uno |
Ser un punto de apoyo al equipo de desarrollo, para que este consiga implementar un producto funcional |
Cliente(Solid) |
Hay foros y charlas en las que ellos participan y en las que nosotros podemos consultar dudas, aprender de dudas que hayan tenido otros equipos de desarrollo y entender mejor cual es el producto final que quiere el cliente. |
Obtener un producto funcional y que se adecue a los objetivos de calidad que ha establecido con el equipo de desarrollo al principio del proyecto |
Usuarios |
Cuando el producto este acabado, estos podrán valorarlo mediante diferentes canales de comunicación que llegarán a nosotros. Gracias a esto, ellos pueden detectar errores al usarlo que nos podrán notificar y que nosotros podremos corregir |
Poder usar un producto final que funcione, que sea fácil de utilizar y que sea útil |
2. Restricciones de la Arquitectura
Restricción | Explicación |
---|---|
No usar lenguaje técnico |
Es un chat para que lo pueda utilizar todas las personas sea cual sea su nivel en la tecnología teniendo, por supuesto, el mínimo conocimiento |
Chat descentralizado |
Debe ser un chat en donde cada usuario sea propietario de sus propios datos |
Interfaz amigable y estética |
Tiene que ser fácil de manejar por el usuario y agradable para la vista para que la persona que lo utilice se canse menos ya sea de la vista o cognitivamente |
Segura y privada |
Algo obvio pero de suma importancia comentar ya que los datos tendrán que estar descentralizados y no podrá nadie verlos |
Documentación técnica |
Se usará una documentación técnica como es Arc42 ya que es de las mejores para la documentación de arquitectura del software |
Crear grupos de chat |
Se deben poder comunicar entre los usuarios en grupos para que hablen a la vez siempre y cuando |
Enviar fotos, vídeos u otro tipo de archivos |
Los usuarios deben de poder enviarse entre sí cualquier tipo de archivo por el chat para e |
Tener notificaciones |
Se va a poder recibir notificaciones por mensajes recibidos a través del chat |
3. Alcance y Contexto del Sistema
Socios de comunicacion |
Entendimiento |
Clientes |
Interactuan de forma normal con la aplicacion de DeChat, conversando con otras personas, mandando imagenes etc. |
DeChat |
Una vez que el cliente envia un mensaje, imagen o similar, se iniciara una "comunicación" con el POD personal de ese cliente, siempre y cuando se haya concedido permiso a DeChat para acceder al POD, mediante la libreria "solid-auth-client", para guardar en ese POD el mensaje y posteriormente enviar un enlace al otro cliente, con el que se esta manteniendo una conversación, de ese mensaje que acaba de enviar concediendole permiso para ver SOLO ese mensaje. Pero siempre manteniendo ese mensaje en el POD personal del primer cliente, esto es lo que se consigue con descentralización. Sería también factible que alguno de los clientes tuviese varios POD y distribuyera los datos entre ellos en cualquier caso el funcionamiento seguiría siendo el mismo, solamente aumenta la descentralización. |
POD |
Son almacenes de datos personales en linea y va a estar alojado donde el usuario lo estime oportuno. Aqui es donde van a estar almacenados toda la informacion, mensajes, etc. Que haya comunicado el cliente con la aplicacion de DeChat. Su función principal será separar la aplicación y los datos. |
Las interfases de dominio y las interfases técnicas a los socios de comunicación son de los aspectos más críticos del sistema. Se debe asegurar el entendimiento de ellos.
-
Listas de socios de comunicación y sus interfases.
3.1. Contexto de Negocio
En este diagrama de caja negra se muestra las interfases de dominio a los socios y como se va a realizar la comunicación entre las distintas entitades que van a formar la estructura basica de nuestra aplicacion de DeChat. No se explicará su funcionamiento interno, para ello se realizaran otros diagramas en siguientes apartados como el "Diagrama de caja blanca".
Tambien se ha proporcionado una pequeña leyenda de este diagrama para facilitar su compresion en caso de que haya habido alguna duda.
Todas las partes interesadas deben entender que datos son intercambiados con el ambiente del sistema.
He utilizado un diagrama de caja negra.
3.2. Contexto Técnico
Las interfases técnicas (medios de transmisión y canales) enlanzando al sistema con su ambiente. De manera adicional el mapeo de las entradas/salidas específicas del dominio a los canales, es decir, una explicación acerca de que entrada/salida utiliza cual canal.
Muchas partes relacionadas realizan decisiones arquitectónicas basadas en las interfases técnicas entre el sistema y su contexto. Especialmente los diseñadores de infraestructura o hardware deciden estas interfases técnicas.
Por ejemplo, diagramas UML de despligue describiendo los canales a sistemas vecinos, junto con una tabla de mapeo mostrando las relaciones entre los canales y las entradas/salidas.
<Diagrama o Tabla>
<Opcional: Explicación de las interfases técnicas>
<Mapeo de Entrada/Salida a canales>
4. Estrategia de solución
Un resumen corto y explicación de las estrategias y decisiones fundamentales para la solución que le dan forma a la arquitectura del sistema. Estas incluyen:
-
Decisiones tecnológicas
-
Decisiones acerca de la descomposición a alto nivel de un sistema, por ejemplo, el uso de algún patrón de diseño o de arquitectura.
-
Decisiones en como alcanzar metas de calidad claves
-
Decisiones organizacionales relevantes, como el seleccionar un proceso de desarrollo o delegar ciertas tareas a terceros.
Estas decisiones son las piedras angulares de la arquitectura. Son la base de muchas otras decisiones detalladas o reglas de implementación.
Realice la explicación de las deciciones clave de manera breve.
Justifique las decisiones y porque se realizaron de esa manera, basado en el planteamiento del problema, las metas de calidad y restricciones clave. Refierase a los detalles en las secciones posteriores.
5. Vista de Bloques
La vista de bloques muestra la descomposición estática del sistema en bloques de construcción (módulos, componentes, subsistemas, clases, interfases, paquetes, bibliotecas, marcos de desarrollo, capas, particiones, funciones, macros, operaciones, estructuras de datos,…) así como sus dependencias (relaciones, asociaciones,…)
Esta vista es obligatoria para cualquier documentación de arquitectura. Es la analogía al plano de una casa.
Mantener una visión general de su código fuente haciendo su estructura comprensible de manera abstracta.
Esto permite comunicar a las partes interesades en un nivel abstracto sin entrar en detalles de implementación.
La vista de bloques comprende una colección jerárquica de cajas negras y cajas blancas (ver figura de abajo) y sus descripciones.
Nivel 1 comprende la descripción de Caja Blanca del sistema en general junto con las descripciones de Caja Negra de todos los bloques contenidos.
Nivel 2 hace zoom a los bloques de construcción del Nivel 1. Entonces contiene la descripción de Caja Blanca de los bloques de construcción selecionadas del nivel 1,junto con las descripciones de caja negra de sus bloques de construcción internas.
Nivel 3 Hace zoom a los bloques selectos del nivel 2, y así sucesivamente.
5.1. Sistema General de Caja Blanca
- Motivación
-
Este diagrama representa la vista más global del proyecto
- Bloques de construcción contenidos
Nombre | Responsabilidad |
---|---|
Persona |
Usuario usando el chat |
POD |
Desc. en el glosario. |
Dechat |
Aplicación (chat) |
5.2. Nivel 2
Aquí se especifica la estructura interna de (algunos) bloques de construcción del nivel 1 como cajas blancas.
Debe decidir cuales bloques de construcción del sistema son lo suficientemente importantes para justificar una descripción detallada. Prefiera la relevancia sobre la completitud. Especifique bloques de construcción importantes, sorprendentes, riesgosos, complejos o volátiles. Deje fuera las partes normales, simples, estándares o aburridas del sistema.
5.3. Nivel 3
Aqui se especifica la estructura interna de (algunos) de los bloques de construcción del nivel 2 como cajas blancas.
Cuando la arquitectura requiera más niveles detallados copiar esta sección para niveles adicionales.
6. Vista de Ejecución
La vista de ejecución describe el comportamiento concreto y la interacción de los bloques de construcción del sistema en forma de escenarios en las siguientes áreas:
-
Casos de uso o características importantes: ¿Cómo los ejecutan los bloques de construcción?
-
Interacciones en interfases externas críticas: ¿Cómo cooperan los bloques de construcción con los usuarios y sistemas vecinos?
-
Administración y operación: Carga, inicialización, detención.
-
Escenarios de error y excepción.
Observación: El criterio principal para la elección de los escenarios posibles (flujos de trabajo, secuencias) es su relevancia arquitectónica. No es importante describir un gran número de escenarios. Se debe documentar una selección representativa.
Debe entenderse como las instancias de los bloques de construcción del sistema realizan su trabajo y se comunican en tiempo de ejecución. Deben capturarse principalmente los escenarios que comuniquen a las partes relacionadas que tengan problemas para comprender los modelos estáticos en la documentación (Vista de Bloques de Construcción, Vista de Despliegue).
Hay muchas notaciones para describir los escenarios, por ejemplo: * Lista numerada de pasos (en lenguaje natural). * Diagramas de flujo o de actividades * Diagramas de secuencia * BPMN o EPCs (Cadenas de procesos de eventos) * Máquinas de estado * ….
7. Vista de Despliegue
La vista de despliegue describe:
-
La infraestructura técnica usada para ejecutar el sistema, con elementos de infraestructura como locaciones geográficas, ambientes, computadoras, procesadores, canales y topologías de red así como otros elementos de infraestructura.
-
El mapeo de los bloques de construcción (software) en dichos elementos de infraestructura.
Comúnmente los sistemas son ejecutados en diferentes ambientes, por ejemplo, ambiente de desarrollo, de pruebas, de producción. En dichos casos deberían documentarse todos los ambientes relevantes.
Deberá documentarse la vista de despliegue de manera especial cuando el software se ejecute como un sistema distribuido con mas de una computadora, procesador, servidor o contenedor o cuando se diseñen los procesadores y chips de hardware propios.
Desde una perspectiva de software es suficiente con capturar los elementos de la infraestructura necesarios para mostrar el despliegue de los bloques de construcción. Los arquitectos de hardware pueden ir más alla y describir la infraestructura a cualquier nivel de detalle que requieran.
El software no corre sin haardware. El hardware subyacente puede influenciar el sistema o algunos conceptos entrecruzados. Por ende, es necesario conocer la infraestructura.
Quizá el más alto nivel de diagrama de despliegue esté contenido en la sección 3.2. como contexto técnico con la propia infraestructura como UNA caja negra. En esta sección se deberá realizar un acercamiento a ésta caja negra utilizando diagramas de despliegue adicionales:
-
UML provee diagramas de despliegue para expresar la vista. Uselos, probablemente con diagramas anidados.
-
Cuando las partes relacionadas de Hardware prefieran otro tipo de diagramas además de los diagramas de despliegue, permítales usar cualquier tipo que permita mostrar los nodos y canales de la infraestructura.
7.1. Nivel de infraestructura 1
Describa (Usualmente en una combinación de diagramas, tablas y texto):
-
La distribución del sistema en múltiples ubicaciones, ambientes, computadoras, procesadores, … así como las conexiones físicas entre ellos
-
La motivación o justificación de importancia para la estructura de despliegue
-
Características de Calidad y/o rendimiento de la infraestructura
-
El mapeo de los artefactos de software a los elementos de la infraestructura.
Para múltiples ambientes o despliegues alternativos copie esta sección para todos los ambientes relevantes.
<Diagrama General>
- Motivación
-
<Explicación en forma textual>
- Características de Calidad/Rendimiento
-
<Explicación en forma textual>
- Mapeo de los Bloques de Construcción a Infraestructura
-
<Descripción del mapeo>
8. Conceptos Transversales (Cross-cutting)
Esta sección describe de manera general, las principales ideas de solución y regulación que son relevantes en multiples partes (→ cross-cutting/transversales) del sistema. Dichos conceptos están relacionados usualmente a múltiples bloques de construcción. Pueden incluir diversos temas, tales como:
-
Modelos de dominio
-
Patrones de arquitectura o patrones de diseño
-
Reglas de uso para alguna tecnología específica.
-
Decisiones técnicas principales o generales
-
Reglas de implementación
Conceptos que forman la base para la integridad conceptual (consistencia, homogeneidad) de la arquitectura. Entonces, son una contribución importante para alcanzar la calidad interna del sistema.
Algunos de estos conceptos no pueden ser asignados a bloques de construcción individuales (por ejemplo seguridad). Este es el lugar en la plantilla provisto para una especificación cohesiva de dichos conceptos.
La forma puede ser variada:
-
Papeles conceptuales con cualquier tipo de estructura
-
Modelo transversal (cross-cutting) de fragmentos o escenarios usando notación de las vistas arquitectónicas
-
Implementaciones de muestra, especialmente para conceptos técnicos.
-
Referencias a uso típico en frameworks estándar (por ejemplo, el uso de Hibernate para mapeo Objeto/Relacional) The form can be varied:
La estructura potencial (pero no obligatoria) para esta sección podría ser:
-
Conceptos de dominio
-
Conceptos de experiencia de usuario (UX)
-
Conceptos de seguridad
-
Patrones de diseño y arquitectura * A potential (but not mandatory) structure for this section could be:
-
Domain concepts
-
User Experience concepts (UX)
-
Safety and security concepts
-
Architecture and design patterns
-
"Bajo el capó"
-
Conceptos de desarrollo
-
Conceptos de operación
Nota: Puede ser difícil asignar conceptos individuales a un tema específico de la lista
9. Decisiones de Diseño
Decisiones arquitectónicas importantes, costosas, a larga escala o riesgosas incluyendo sus razonamientos. Con "Decisiones" nos referimos a la elección de una alternativa basada en cierto criterio.
Se debe usar el juicio para decidir si una decisión arquitectónica debe ser documentada en esta sección central o si sería preferible documentarla localmente (Por ejemplo, dentro de una plantilla de caja blanca de un bloque de construcción).
Evite la redundancia. Tomar de referencia la sección 4, donde ya se capturaron las decisiones más importantes para la arquitectura.
Las partes relacionadas del sistema deben comprender y trazar las decisiones.
Varias opciones:
-
Lista o tabla, ordenada por importancia y consecuencias o:
-
Mayor detalle en secciones separadas por cada sección.
-
Registro de Decisiones de Arquitectura (ADR por sus siglas en inglés) para cada decisión importante.
10. Requerimientos de Calidad
Esta sección describe todos los requerimientos de calidad como un árbol de calidad con escenarios. Los más importantes ya han sido descritos en la sección 1.2 (Metas de Calidad).
Aquí se capturan los requerimientos de calidad con menor prioridad, que no crearán altos riesgos en caso de que no sean cubiertos con totalidad.
Dado que los requerimientos de calidad tendrán mucha influencia en las decisiones arquitectónicas deben tomarse en cuenta los elementos importantes para las partes relacionadas que sean concretas y medibles.
10.1. Árbol de Calidad
El árbol de calidad (Definido en ATAM - Método de análisis de compensación de arquitectura por sus silas en inglés) con escenarios de calidad/evaluación como hojas.
La estructura de árbol con prioridades provee un vistazo general para un gran número de requerimientos de calidad.
El árbol de calidad es un vistazo a alto nivel de las metas de calidad y requerimientos:
-
Un refinamiento del término de "calidad" a manera de árbol. Utilice "calidad" o "utilidad" como raíz.
-
Un mapa mental con categorías de calidad como ramas principales
En cualquier caso incluya ligas a los escenarios de las siguientes secciones.
10.2. Escenarios de calidad
Concretización de requerimientos de calidad (que pueden ser vagos o implícitos) utilizando escenarios de calidad.
Estos escenarios describen lo que debería pasar cuando un estímulo llega al sistema.
Para los arquitectos, son importantes dos tipos de escenarios:
-
Escenarios de uso (también llamados escenarios de aplicación o escenarios de caso de uso), que describen la reacción en tiempo de ejecución de un sistema a un determinado estímulo. Esto incluye también escenarios que describen la eficiencia o el rendimiento del sistema. Por ejemplo: El sistema reacciona a la petición de un usuario en un segundo.
-
Escenarios de cambios, describen la modificación del sistema a su ambiente inmediato. Por ejemplo: Cuando se implementa funcionalidad adicional o requerimietnos para el cambio de un atributo de calidad.
Los escenarios crean requerimientos de calidad concretos y permiten medirlos de manera mas sencilla o decidir si han sido cumplidos.
Cuando se requiere evaluar la arquitectura utilizando métodos como ATAM se necesitan describir las metas de calidad (de la sección 1.2) de manera más precisa hasta un nivel de escenarios que pueden ser discutidos y evaluados.
Texto en forma libre o tabular.
11. Riesgos y deuda técnica
Riesgo |
Explicación |
Suspender la asignatura |
El riesgo más importante que corremos es el de suspender la asignatura por lo que tendremos que esforzarnos para trabajar y superar la asignatura |
Primera vez en un proyecto version web |
Hemos trabajado anteriormente en proyectos web de sencilla complejidad y tendremos que buscar más información sobre como trabajan este tipo de páginas |
Nada experiencia con Solid |
No habíamos oido hablar nunca de ello y tendremos que mirar todo tipo de proyectos que lo hayan usado ya sea para utilizar algunos componentes o para aprender |
Poca experiencia con Angular |
Al realizar pocos trabajos web, herramientas como Angular no las hemos tocado y por lo que tendremos que buscar más información sobre ello para trabajar |
Seguridad web |
No hemos trabajado nunca en temas de seguridad y menos en páginas web, habrá que estudiar sobre ello |
Poca experiencia en proyectos en grupo |
Trabajamos junto a otros compañeros pocas veces y, además, nos conocemos poco por lo que la comunicación al principio va a ser importante para compenetrarnos más adelante mejor |
No hay mucho tiempo |
Al tener que compaginar esta asignatura con otras de tercero iremos algo apretados de tiempo por lo que tocará trabajar |
No suficiente experiencia con github |
Algunos integrantes no tienen experiencia con github pero otro integrantes les pueden ayudar |
12. Glosario
Término | Definición |
---|---|
Responsiveness |
En español no encontre una palabra que defina correctamente esta meta, pero su traducción quiere decir que, en este caso el chat, responda ante una acción o que sea sensible a ella |
POD |
POD simula ser una base de datos personal en la que cada uno guarda sus datos y para que las aplicaciones accedan a estos datos, debe ser el propietario del POD el que les de permiso. Puedes ser propietario de este POD o usar uno que proporcione alguna compañia. |