Introducción al curso

1

Diseño y Documentación de Arquitectura de Software

Atributos de calidad

2

Atributos de Calidad en Sistemas: Definición y Medición

3

Idoneidad Funcional: Completitud, Exactitud y Pertinencia

4

Eficiencia de Ejecución en Sistemas Informáticos

5

Compatibilidad en Sistemas: Interoperabilidad y Coexistencia

6

Subcaracterísticas de Usabilidad en Desarrollo de Software

7

Confiabilidad de Sistemas: Madurez, Disponibilidad, Resiliencia y Recuperación

8

Seguridad de Usuarios en Desarrollo de Software

9

Subcaracterísticas de Mantenibilidad en Sistemas de Software

10

Medición de Adaptabilidad en Sistemas de Software

11

Relación y Tensión entre Atributos de Calidad en Sistemas de Software

12

Atributos de Calidad en Arquitectura de Software

Patrones de arquitectura

13

Patrones de Arquitectura Monolítica y Distribuida

14

Modelo Vista Controlador: Separación de Responsabilidades en Aplicaciones

15

Arquitectura de Capas: Diseño y Comunicación entre Niveles

16

Patrones de Arquitectura Orientada a Eventos y Event Sourcing

17

Patrón de Arquitectura MicroKernel y su Implementación en IDEs

18

Arquitectura "Comparte Nada": Optimización y Procesamiento de Datos

19

Patrón de Microservicios en Arquitectura de Software

20

Patrón CQRS para Separación de Consultas y Comandos

21

Arquitectura Hexagonal: Diseño y Aplicación Práctica

22

Diseño Orientado al Dominio: Conceptos y Aplicaciones Prácticas

23

Patrones de Arquitectura para Aplicaciones Escalables y Modulares

24

Patrones de Arquitectura en Proyectos de Crecimiento Empresarial

Diseño de una arquitectura

25

Diseño de Arquitecturas a Medida: Herramientas y Estrategias

26

Tipos de Conectores en Arquitectura de Software

27

Conectores Asíncronos y Sincrónicos: Implementación y Uso Práctico

28

Diferencias entre Enrutadores y Difusores en Comunicación de Mensajes

29

Conexión de Productores y Consumidores con Colas de Mensajes

30

Framework de Diseño Orientado a Atributos: Escenarios y Tácticas

31

Tácticas para Mejorar la Disponibilidad de Sistemas

32

Tácticas para Mejorar la Disponibilidad del Sistema

33

Tácticas para Mejorar la Mantenibilidad del Software

34

Prevención de Efectos Dominó en Mantenibilidad de Software

35

Estrategias para Mejorar la Eficiencia de Ejecución en Sistemas

36

Tácticas de Seguridad Informática para Detectar, Resistir y Recuperarse de Ataques

37

Estrategias para Mejorar la Capacidad de Prueba de Software

38

Tácticas de Usabilidad en Diseño de Interfaces de Usuario

39

Validación de Arquitectura con ATAM y Métricas de Calidad

40

Diseño de Arquitectura para Startups y Empresas Escalables

Modelado y documentación de arquitectura

41

Documentación Efectiva de Arquitectura de Software

42

Sincronización de Modelos de Arquitectura y Código Fuente

43

Evaluación de Atributos de Calidad en Arquitectura de Software

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Relación y Tensión entre Atributos de Calidad en Sistemas de Software

11/43
Recursos

¿Cómo se relacionan los atributos de calidad en un sistema?

En el mundo del desarrollo de software, los atributos de calidad son vitales para asegurar que una aplicación cumpla con las expectativas del usuario y mantenga un rendimiento óptimo. Sin embargo, a menudo estos atributos pueden entrar en conflicto unos con otros. A continuación, exploramos cómo estos atributos interactúan y qué implica priorizarlos.

¿Cómo la seguridad afecta otros atributos?

La seguridad es un aspecto crucial en cualquier sistema, pero ¿qué sucede cuando esta seguridad afecta la facilidad de uso? Considere un sistema cliente-servidor con una aplicación y una base de datos. Para protegerlo, se encierra la aplicación en un esquema de seguridad que requiere pasos adicionales para acceder a sus funciones.

  • Pro y contra de la seguridad: Este enfoque protege el núcleo de la aplicación, pero al mismo tiempo puede hacer la verificación y uso más complejos, inclusive afectar la portabilidad de la aplicación a otros entornos.
  • Soluciones potenciales: Se reduce la capacidad de mover la aplicación y utilizar sus funciones de manera intuitiva. Balancear la seguridad con la accesibilidad es fundamental para mantener una buena experiencia de usuario.

¿Qué sucede con la modularidad y la instalación?

La modularidad en el diseño de software permite que una aplicación se adapte y evolucione, pero también puede introducir complicaciones si no se maneja adecuadamente.

  • Efecto de la modularidad: Un sistema muy modular (como un rompecabezas que no está armado completamente) puede ser más difícil de implementar. Por el contrario, una aplicación menos modular, o bien integrada, tiende a ser más fácil de instalar.
  • Estrategias para mejora: Evaluar qué nivel de modularidad es funcional para tu objetivo puede determinar la efectividad del despliegue de un sistema.

¿Cómo balancear la eficiencia con la resiliencia?

En muchos sistemas de software, existe una clara relación entre eficiencia y resiliencia, a menudo teniendo que sacrificar una para mejorar la otra.

  • Ejemplo de cuerdas y resiliencia: Un sistema altamente eficiente que no soporta fallas puede ser muy frágil. Al introducir elementos más flexibles (como goma en lugar de cuerdas puramente rígidas), se gana resiliencia a costa de cierta eficiencia.
  • Optimización del sistema: Requiere encontrar un balance donde la aplicación sea fiable bajo presión sin comprometer demasiado su rendimiento normal.

¿Cómo la estética puede impactar la funcionalidad?

La estética de una interfaz de usuario puede mejorar la apariencia de una aplicación, pero puede dificultar la claridad de la funcionalidad del sistema.

  • El caso de la cámara de seguridad aparente: Enfocarse demasiado en el atractivo visual puede llevar a malentendidos sobre la funcionalidad real del objeto o sistema, causando confusión y frustración del usuario.
  • Consideraciones prácticas: Es vital diseñar interfaces que no solo sean visualmente atractivas, sino también intuitivas y fáciles de reconocer en cuanto a su propósito y uso.

Es crucial tener en cuenta estas tensiones al diseñar sistemas de software, buscando siempre un equilibrio que permita satisfacer las necesidades de seguridad, funcionalidad, usabilidad, eficiencia y estética, sin que unos atributos comprometan excesivamente a los otros. La clave está en la planificación cuidadosa y el análisis constante de cómo estos atributos interactúan entre sí.

Aportes 32

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Al principio me pareció chistoso lo que estaba realizando el profesor en el video. Pero conforme avanzó, me dejó con el ojo cuadrado lo claro que quedó explicado el,tema de la clase.

Ojalá hubiera más clases así, sobre todo en los cursos densamente teóricos.

La mejor y mas clara explicación de lo que vimos, de verdad que muy bueno, entendí todo en esta sola clase

En la arquitectura de software, los atributos de calidad son directamente influenciados por las decisiones arquitectónicas que tomamos.
En algunos libros se le conoce como “tradeoffs” a los intercambios que existen entre estos atributos, por ejemplo:

  • Una mayor usabilidad, requiere que hallan mas módulos que permitan hacer mucho mas cosas al usuario, lo cual implica que probablemente hay que aumentar código. Esto puede afectar al rendimiento de la aplicación.

La idea es optimizar todos los atributos de calidad que tomemos en cuenta, siempre en base a los requerimientos de nuestro sistema.

Matriz de Tensiones de los Atributos de Calidad ![](https://static.platzi.com/media/user_upload/image-e37982a0-9cf5-4f89-ac33-5b8391215194.jpg) En la tabla, cada atributo (como Disponibilidad, Uso de recursos, Capacidad de instalación, etc.) se compara con los otros. Un símbolo + indica que hay una relación positiva entre los atributos, lo que significa que mejorar uno puede mejorar el otro. Por ejemplo, una mayor Madurez podría resultar en mejor Reusabilidad. Un símbolo - indica que hay una relación negativa, es decir, mejorar uno puede afectar negativamente al otro. Por ejemplo, aumentar la Seguridad podría disminuir la Usabilidad. **Análisis por Atributo** * **Disponibilidad**: Vemos que mejorar Disponibilidad tiene un impacto positivo en Capacidad de instalación y Escalabilidad, pero podría impactar negativamente a otros atributos como Uso de recursos. * **Seguridad**: La Seguridad muestra relaciones positivas con otros atributos como Disponibilidad y Protección de errores, pero podría afectar negativamente atributos como Usabilidad y Eficiencia de ejecución. * **Usabilidad**: Se muestra como inversamente proporcional a Seguridad y Portabilidad, lo cual es común, ya que mayor Seguridad puede implicar restricciones que reducen la Usabilidad. * **Capacidad de prueba**: Este atributo tiene muchas relaciones positivas, lo que sugiere que un diseño con buena capacidad de prueba podría mejorar otros aspectos del sistema.
Al final de este video menciona que dejará una lectura, ¿En donde se encuentra esta lectura?

Que buena representación y/o analogía para hacerse entender, muy claro.

En los inicios de la informática, la programación se consideraba un arte y se desarrollaba como tal debido a la dificultad que entrañaba para la mayoría de las personas, pero con el tiempo se han ido descubriendo y desarrollando formas y guías generales, con base a las cuales se puedan resolver los problemas. A estas, se les ha denominado arquitectura de software, porque, a semejanza de los planos de un edificio o construcción, estas indican la estructura, funcionamiento e interacción entre las partes del software. En el libro “An introduction to Software Architecture”, David Garlan y Mary Shaw definen que la arquitectura es un nivel de diseño que hace foco en aspectos “más allá de los algoritmos y estructuras de datos de la computación; el diseño y especificación de la estructura global del sistema es un nuevo tipo de problema”.

Cree software de alta calidad, aproveche las prácticas de la industria y planifique la calidad en su solución; pero asegúrese de priorizar con cuidado

Alguien puede explicar como se interpreta el archivo de Tensiones entre atributos

En arquitectura de software, las tensiones entre atributos de calidad se refieren a los compromisos o conflictos que surgen cuando optimizar un atributo (como seguridad o eficiencia) afecta negativamente a otro (como portabilidad o mantenibilidad). Estos trade-offs son inevitables, ya que los recursos y el diseño tienen límites, y priorizar un aspecto puede desbalancear otros. Entre las interrogantes que pueden surgir: * ¿Cómo la seguridad afecta otros atributos? La seguridad (ej. cifrado, autenticación) puede reducir la eficiencia (más procesamiento) y complicar la mantenibilidad (código más complejo), aunque mejora la confiabilidad al proteger el sistema. * ¿Qué sucede con la modularidad y la instalación? Alta modularidad facilita la mantenibilidad, pero puede dificultar la instalación si cada módulo requiere configuraciones específicas, afectando la portabilidad. * ¿Cómo balancear la eficiencia con la resiliencia? La eficiencia (rapidez) a menudo sacrifica redundancia, mientras que la resiliencia (recuperación ante fallos) la necesita. Se balancea priorizando según el contexto: velocidad en sistemas críticos de tiempo real, resiliencia en sistemas distribuidos. * ¿Cómo la estética puede impactar la funcionalidad? La estética (interfaz atractiva) puede sobrecargar el sistema (más recursos) o simplificar demasiado la funcionalidad, reduciendo su utilidad práctica por enfocarse en apariencia. Conclusión: Estas tensiones requieren decisiones estratégicas basadas en los objetivos del sistema. Un buen arquitecto evalúa el contexto para encontrar un equilibrio aceptable.
Las tensiones entre atributos de calidad surgen cuando mejorar un atributo afecta negativamente a otro. Esto ocurre porque los atributos de calidad ( como rendimiento, seguridad, mantenibilidad, escalabilidad, etc) a menudo tienen requisitos conflictivos que deben ser equilibrados según las prioridades del sistema. ### **Ejemplos de tensiones comunes entre atributos de calidad** * **Rendimiento vs. Seguridad** * Mejorar la seguridad (como agregar autenticación, encriptación o validaciones adicionales) puede reducir el rendimiento porque introduce latencia y requiere más recursos de procesamiento. * Ejemplo: En una aplicación bancaria, las verificaciones adicionales de identidad pueden ralentizar las transacciones. * **Escalabilidad vs. Consistencia** * En sistemas distribuidos, mejorar la escalabilidad (permitiendo que más nodos procesen solicitudes) puede dificultar mantener la consistencia de datos en tiempo real. * Ejemplo: En bases de datos distribuidas, usar un modelo eventual-consistency puede escalar mejor, pero compromete la precisión inmediata de los datos.
Muy bien ejemplo
En la matriz importante tener en la mente lo siguiente Cada fila representa un atributo de calidad y cada columna representa otro atributo de calidad. Un signo "+" en una celda indica que mejorar el atributo de calidad de la fila correspondiente probablemente mejorará también el atributo de calidad de la columna correspondiente. Un signo "-" indica que mejorar un atributo probablemente empeorará el otro, reflejando una tensión entre ellos. Un espacio en blanco indica que no hay una relación significativa o conocida entre los dos atributos. Por ejm Integridad * La integridad y la seguridad están estrechamente relacionadas, y las mejoras en una a menudo benefician a la otra. * Puede haber una tensión entre la integridad y la usabilidad si las medidas para asegurar la integridad hacen que el sistema sea más difícil de usar.

Que buena forma de explicar , excelente video !

La literatura indica que una aplicación debe enfocarse a dos máximo tres atributos ya que el intentar mantener todos puede tender al fracaso del proyecto, esto no es viable, por lo cual se debe priorizar en base a los requerimientos (funcionales, no funcionales, del proyecto, del negocio) cuales son los atributos que más valor aportan al sistema.

Definitivamente muy aterrizado y puntual en la explicación

Cada paradigma de desarrollo exige diferente número y tipo de vistas o modelos para describir una arquitectura. No obstante, existen al menos tres vistas absolutamente fundamentales en cualquier arquitectura:

La visión estática: describe qué componentes tiene la arquitectura.
La visión funcional: describe qué hace cada componente.
La visión dinámica: describe cómo se comportan los componentes a lo largo del tiempo y como interactúan entre sí.

que gran profe, utiliza muy bien lo que tiene a la mano para explicar

me encanto la explicación con los ejemplos, jaja echo para dummies

Darle prioridad a un atributo puede restarle calidad a otros atributos.

Excelente dinámica…

Mas claro imposible

Wow! que didáctica proge! 100/100

Excelente

Muchas gracias por la lectura! Que interesante conocer que ocasiona un atributo a otro.

Que impresionante clase, nunca me habían explicado estos temas tan bien... Como con plastilina

Muy bueno

siempre afecta el darle prioridad a un atributo, al resto de atributos de la aplicación!

Excelentes ejemplos!

Me gustó mucho sus ejemplos, super!

Excelente analogías! Mestre Woda! Jajaja

Que geniales los ejemplos, super claro!