4

Les dejo una síntesis de todo el curso, disfrutenlo

<h1>¿Qué es la arquitectura de software?</h1>

Estructura, modelos, diagramas y composición del software a desarrollar.

“La arquitectura del sistema, compuesta por elementos de software, sus propiedades visibles y sus relaciones” - Software Architecture in Practice

<h1>Etapas del proceso de desarrollo de software</h1>

EL proceso de desarrollo tradicional tiene etapas muy marcadas, que tienen entradas, procesos y salidas que funcionan como entradas de la siguiente capa.

  • Análisis de requerimientos: Todo nace de un disparador que nos crea la necesidad de crear un artefacto o un sistema. Necesitamos entender cuál es el problema que queremos resolver. Hay requerimientos de negocio, requerimientos funcionales y no funcionales.
  • Diseño de la solución: Análisis profundo de los problemas para trabajar en conjunto y plantear posibles soluciones. El resultado de esto debe ser el detalle de la solución, a través de requerimientos, modleado, etc.
  • Implementación: Implementación de la solución para garantizar que se lo que se está construyendo es lo que se espera. Al finalizar esta etapa tendremos un artefacto de software.
  • Despliegue: Aquí vamos a necesitar de infraestructura y de roles de operación para poder poner el artefacto a disponibilidad.
  • Mantenimiento y evolución: Desarrollo + Despliegue + Mantenimiento, en esta etapa estamos atento a posibles mejoras que se hacen al sistema. En esta estapa el software se mantiene hasta que el software ya deja de ser necesario.
<h1>Dificultades en el desarrollo de software</h1>
  • Esenciales
    • Especificación, diseño y comprobación del concepto
    • División:
      • Complejidad: Complejidad del problema a resolver
      • Conformidad: Entender en que contexto se usará el producto y cómo se adecúa al contexto imperfecto
      • Tolerancia al cambio: La medición de cuánto podemos adaptarnos a los cambios
  • Accidentales
    • Detalles de la implementación y producción anual
    • Está realacionado con la plataforma que vamos a implementar, tecnología, lenguajes, frameworks, integraciosnes, etc…
    • Lenguajes: Dificultad de dominar el stack tecnológico
    • Entornos: Las dificultades expuestas por desarrollo de software. Ej: IDE’sm HErramientas, etc…
<h1>Roles</h1>

Es importante diferenciar los ROLES de puestos de trabajo de desarollos

  • Experto del dominio: En una metodología tradicional, es la persona a la que acudimos para entender las necesidades del negocio. En metodologías ágilesStakeholders
  • Analista (Cliente / Dueño del producto): Persona responsable de definir los requerimientos que van a llevar al software a un buen puerto. EN el caso de las metodologías ágiles, el dueño del producto es quién arma las historias y que nos acompaña en el proceso de contrucción del software.
  • DevOps / SRE: Encargado de entender e implementar la infraestructura adecuada al sistema a desarrollar
  • Equipo de desarrollo:
    • QA: Encargador de comprobar y evaluar el software
    • Desarrollador: Involucrados en la construcción del sistema ****
    • Arquitecto: Analiza y diseña la solución de los requerimientos
    • Gestor del proyecto / facilitador: Llevan al equipo a travñes del proceso iterativo e incremental, entender lo que pasa con el equipo y motivar el avance en el desarrollo del producto.
<h1>La importacia de la comunicación - Ley de Conway</h1>

Una empresa va a poder generar estructuras que imitan la vía de comunicación de su organización.

“Las organizaciones dedicadas al diseño de sistemas […] están abocadas a producir diseños que son copias de las estructuras de comunicación de dichas organizaciones”

<h1>Objetivos del arquitecto</h1>

El arquitecto va a tener diferentes stakeholder con el sistema a construir. Cada uno de los roles que tienen los SH afectan de diferente forma al sistema

Presentación - Pag 7

<h1>Arquitectura y metodologías</h1>
  • Metodologías:
    • Tradicional:
      • Las desiciones de aruitectura se toman en la etapa de diseño
      • Tiene como objetivo encontrar los problemas y diseñar una solución a gran escala que ataque dichos problemas esenciales del desarrollo
    • Agíl:
      • Las desiciones de aruitectura se toman en cada iteración
      • El arquitecto de metodologías ágiles trabja con un equipo autogestionado y por ende ven al diseño como un proceso evolutivo y que se va dando de sprint a sprint
      • Se recibe feedback a través de métricas por cada sprint.
      • Etapa del diseño:
        • Definición del problema
        • Restricciones
        • Requerimientos
        • Riesgos
<h1>Entender el problema</h1>
  • Espacio del problema:
    • ¿Qué es lo que se quiere resolver?
    • ¿Qué es lo que vamos hacer?
  • Espacio de la solución:
    • Este espacio debe estar conectado y responder las incognitas del del problema
    • Diseño
    • Desarrollo
    • Evaluación
    • Criterios de aceptación
    • Despliegue
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6d2a9a88-3cad-455a-aab2-426d8bcb1509/Untitled.png
<h1>Requerimientos</h1>

Una vez que entendemos el espacio del problema y el espacio de la solución, vamos a entrar a analizar los requerimientos de nuestro sistema.

Requerimientos de producto: Los podemos dividir en 3 capas.

  • Capa de negocio (Reglas de negocio → Requerimientos de negocio): son aquellas normas que rigen el proceso y la solución del problema principal
  • Capa de usuario (Requerimientos de usuario → Atributos de calidad → Requerimietos no funcionales) : Tienen que ver en cómo el usuario se desenvuelve usando el sistema, qué atributos comunes y de calidad por sobre otros, y operaciones puede operar ésta entidad. Por ejemplo, que un tipo de usuario tenga mayor autenticación que otro.
    • Requerimiento no funcional: Son aquellos que agregan cualidades al sistema, por ejemplo que el ingreso de ese usuario sea de manera segura.
  • Capa Funcional (Requerimientos de sistema → Requerimientos funcionales | Restricciones): Es en base y alimentado por los requerimientos del sistema. Responde a la pregunta, ¿qué hay que hacer en éste sistema para implementar esta funcionalidad?
    • Resticciones: Ésta capa va a ser afectada por las restricciones que al sistema se le implante, por ejemplo: ¿Cómo interactuán los usuarios a través de una app web sin internet?

Requerimientos de proyecto: Tienen que ver más con el rol de gestor de proyectos, se usan para dar prioridad a los requerimientos del producto.

  • Recursos
  • Tiempos
  • Capacitaciones
  • Certificaciones
  • Documentación de usuario
  • Infraestructura
  • Licencias
  • Plan de despliegue
  • Plan de transición
  • Acuerdos de servicio

Por ejemplo: Se necesita una Beta o una prueba para un usuario/evento

<h3>Nota: Definiciones ejemplares de Requerimientos funcionales y no funcionales</h3>

Requerimientos funcionales

“Como usuario registrado quiero ingresar al sistema para tener una experiencia personalizada”

“Como personal de enfermería quiero ver la información del estado del paciente para poder reaccionar a cualquier anomalía”

Requerimientos no funcionales

“Como usuario registrado quiero ingresar de forma segura al sistema para tener una experiencia personalizada”

“Como personal de enfermería quiero ver la información en tiempo real del estado del paciente para poder reaccionar a cualquier anomalía”

<h1>Riesgos</h1>

Mas allá de los requerimientos, hay que tener en cuenta los riesgos que estos implican para poder priorizarlos y atacarlos en orden.

Hay que lograr describir los riegos y poder identuficarlos, para luego catalogarlos cómo:

  • Riegos de ingeniería: Relacionado con el análisis, diseño e implementación del producto.
  • Riesgos de gestión del proyecto: Relacionados con la planificación, secuenciamiento del trabajo, entregas, tamaño de equipo, etc.

¿Cómo identificarlos?

Hay un framework (marco de trabajo) que se basa en la toma de requerimientos, atributos de calidad o el dominio que tenemos del problema que estamos por resolver.

  1. Requerimiento - Dificultad / Complejidad: ¿Qué difcultad tiene el requerimiento?
  2. Atributos de calidad - Incertidumbre: ¿Sabemos resolver el atributo específico?
  3. Conocimiento del dominio - Riesgos prototípico: ¿El atributo ya ha sido implementado?

Al identificarlos, hay que priorizarlos en base a la importancia que estos requieren en el sistema.

<h1>Restricciones</h1>

“Una restricción limita las opciones de diseño o implementación disponibles al desarrollador” - Software Requiremnts

Cuando hablamos de requerimientos, también mencionamos las restricciones. Podemos encontrar con tres tipos de resticciones:

  • Partes interesadas (Stakeholders): Por ejemplo, pueden limitar el desarrollo del software con el ecosistema ****que este se manejará
  • Integraciones con otros sistemas
  • Ciclo de vida del producto
<h1>Estilos de arquitectura</h1>

Panorama arquitectónico actual

Hay muchas librerías, muchos frameworks y conocimiento arquitectónico implícito en las comunidades. Por ejemplo, si hablamos de palabras como MVC o FLUX (con React) estamos hablando de arquitectura, sin embargo, esta implícito dentro del uso de una tecnología específica, y de repente si hablamos de FLUX estando en Java o C# no tiene ningún sentido, ya que no es una arquitectura que se suele encontrar en esa tecnología, sin embargo arquitectónicamente tiene el mismo valor y podría ser implementado en otra tecnología. Asi también, hay decisiones arquitectónicas tales como si empezar un proyecto con un monolito o iniciarlo con una estructura de microservicio, que se dan por sentado que cualquier cosa seria de mucho mas valor iniciarlo como un microservicio ¿Por qué? Puede ser porque es la tendencia, porque es lo que se da más fácil para el equipo de desarrollo o porque las herramientas mas modernas de hoy están orientados a microservicios, sin embargo, falta un análisis más profundo de que es lo que define ese estilo o patrón de arquitectura y cuáles son los payloads o sacrificios que estamos pagando por usarlos y cuáles son los beneficios que esperamos que traigan.

Ningún patrón tiene solo beneficios, cuando hablábamos de que no hay balas de plata, recordemos que ninguno de estos patrones ni estilos nos va a solucionar todos los softwares, siempre hay beneficios y consecuencias de las decisiones de diseño que tomamos.

¿Qué es un estilo de arquitectura?

Un estilo de arquitectura es una colección de decisiones de diseño, aplicables en un contexto determinado, que restringen las decisiones arquitectónicas específicas en ese contexto y obtienen beneficios en cada sistema resultante

Llamada y Retorno

<h3>Programa principal y subrutinas</h3>

Es el estilo más básico donde se obtiene una rutina y se manda a llamar otra subrutina, en donde la subrutina puede retornar o no un resultado, pero la principal continua hasta que acabe la subrutina.

<h3>Orientado a objetos</h3>

Se utiliza para aplicaciones que vamos a mantener por mucho tiempo. Tratamos de abstraer las entidades de nuestro sistema en objetos, logrando tener el estado actual de nuestro objeto, y superficialmente, la de nuestro software

<h3>Multi nivel</h3>

Son diferentes componentes y/o capas que se van a comunicar en un orden en especifico. Por ejemplo, la arquitectura Cliente-Servidor.

Flujo de datos

No estamos preocupados por la secuencia de ejecución sino por como los datos van a ir de un lugar a otro.

<h3>Lote secuencia</h3>

Lo importante es ejecutar un proceso y que al final de ese proceso pase a una siguiente etapa

<h3>Tubos y filtros</h3>

Se obtiene un flujo de datos continuo en donde cada aplicación recibe continuamente esos datos, lo procesa, y retorna a otra aplicación, capa, proceso o finaliza la misma.

Centradas en datos

<h3>Pizarrón</h3>

Diferentes componentes que interactúan con un componente central (pizarrón). Cada componente tiene un responsabilidad y una tarea, que al finalizar, se encarga de persistir y centralizar el proceso en el “pizarrón”. Este pizarrón puede tener un proceso de salida.

<h3>Centrada en base de datos</h3>

Es muy común en donde diferentes alicaciones utilizan la misma base de datos. Es decir, diferentes componentes se comunican a la misma base de datos. La base de datos no solo funciona como la persistencia de los datos, sino como la comunicación en tre los componentes.

Inconveniente: Abas aplicaciones dependen del rendimiento de la base de datos compartida

<h3>Sistema experto - Basado en reglas</h3>

En este caso el sistema que centraliza los datos, tiene la capacidad de entender los datos y consultas que realiza el cliente, generando salidas inteligentes. (inteligencia artificial).

Componentes independientes

Aplicaciones en donde se dividen en componentes independientes y con diferentes comportanmientos.

<h3>Invocación implícita</h3>

Basada en eventos. Diferentes componentes publican eventos a un bus de eventos, y este ultimo comunican a otros componentes el proceso del bus

Tenemos dos familias:

  • Publicar y suscribir:
    • El componente inical publica un evento y luego otros componentes suscriptos reciben dicho evento
  • Orientación a servicios
    • Bus inteligente dónde a éste se le notifica el evento, pero él mismo decide a qué componente notificar del evento
<h3>Invocación explícita</h3>

Los componentes se comunican entre sí, teniendo cada componente una comunicación directa o indirectamente con el resto

Comparando estilos: ¿Cómo elijo?

Untitled

Escribe tu comentario
+ 2