Introducción al curso

1

Introducción al curso de Profesional de Arquitectura de Software

Atributos de calidad

2

Definición

3

Atributos: Idoneidad funcional

4

Atributos: Eficiencia de ejecución

5

Atributos: Compatibilidad

6

Atributos: Usabilidad

7

Atributos: Confiabilidad

8

Atributos: Seguridad

9

Atributos: Mantenibilidad

10

Atributos: Portabilidad

11

Tensiones entre atributos

12

Analizando PlatziServicios

Patrones de arquitectura

13

Patrones monolíticos vs distribuidos

14

Patrones: Modelo Vista Controlador

15

Patrones: Capas

16

Patrones: Orientado a eventos / Provisión de eventos.

17

Patrones: Microkernel - Plug-ins

18

Patrones: Comparte-nada

19

Patrones: Microservicios

20

Patrones: CQRS

21

Patrones: Hexagonal - Puertos y adaptadores

22

Patrones: Diseño orientado al dominio

23

Combinando patrones de arquitectura

24

Analizando nuevamente PlatziServicios

Diseño de una arquitectura

25

Pararse en hombros de gigantes

26

Herramientas y partes de un diseño: Tipos de conectores

27

Conectores: Llamado asincrónico / sincrónico. Modelo Cliente servidor.

28

Conectores: Enrutador, difusión

29

Conectores: Pizarra, repositorio, colas, modelo PUBSUB

30

Escenarios y tácticas

31

Escenarios: Disponibilidad, detección, reparación

32

Escenarios: Reintroducción y prevención

33

Escenarios: Mantenibilidad

34

Escenarios: Prevenir efectos dominó y diferir enlace

35

Escenarios: Eficiencia de ejecución

36

Escenarios: Seguridad

37

Escenarios: Capacidad de prueba

38

Escenarios: Usabilidad

39

Validar las decisiones de diseño: Arquitectura en evolución

40

Último análisis a PlatziServicios

Modelado y documentación de arquitectura

41

Cómo comunicar la arquitectura: Vistas y Puntos de vista

42

Documentación vs implementación

43

Conclusiones del curso

No tienes acceso a esta clase

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

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
9 Hrs
49 Min
44 Seg

Atributos: Mantenibilidad

9/43
Recursos

La mantenibilidad como atributo de calidad es la capacidad del sistema de ser modificado. Ya sea para agregar nuevas funcionalidades o reparar errores.

  • Modularidad, La capacidad de un sistema de ser separado en partes y que el cambiar una de las partes del sistema no afecta el desempeño del sistema.

  • Reusabilidad, es una característica que habla sobre cuanto podemos aprovechar un modulo o una pieza de software para un propósito diferente.

  • Capacidad de análisis, cuánto podemos entender el problema que estamos resolviendo y conectar ese problema con la implementación de código. Hablamos de conexión entre el código y los requerimientos. una herramienta es GERKIN.

  • Capacidad de prueba, facilidad en la implementación de tests.

Un error muy común es utilizar la fecha actual en sistemas y evaluar el comportamiento de la porción de código.

Aportes 25

Preguntas 6

Ordenar por:

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

Este curso es más entendible y fácil de entender que el curso de fundamentos

Mis Apuntes:

Mantenibilidad

Nos referimos a todas esas cosas que hacen que un sistema pueda cambiar. Pueda evolucionar y a su vez pueda ser reparado.

Modularidad. Habla de la capacidad de un sistema en ser separado en partes dónde cada una de esas partes sea independiente de las otras.

Reusabilidad. Es una característica que habla sobre cuánto podemos aprovechar el esfuerzo que hicimos en desarrollar un módulo o una pieza de software y reutilizarla en otro lado, es decir, volver a usarla para otro propósito diferente o para una funcionalidad ligeramente diferente.

Capacidad de análisis. Conexión entre el código y los requerimientos.

Capacidad de modificación. Cuán fácil o difícil es ir al código y cambiar el comportamiento.

Capacidad de prueba. Habla sobre cuán fácil o difícil es crear estos test para que el sistema garantice que hace lo que se requiere que haga. Para tener una mejor capacidad de prueba tenemos que darle más importancia a nuestra estructura del código, a nuestras operaciones y cuán atómicas son y cuán independientes son unas de otras.

Mantenibilidad.
Se refiere a todas esas cosas que hacen que el sistema pueda cambiar, evolucionar y a su vez, ser reparado.

  • Modularidad -> Capacidad de ser separado en partes independientes.
  • Reusabilidad -> Poder reutilizar partes del código utilizándolo en diferentes lados. Utilizar el mismo código para un propósito diferente.
  • Capacidad de análisis ->Conexión entre el código y sus requerimientos.
  • Capacidad de modificación -> Que tan fácil es ir al código y cambiar el comportamiento sin afectar su funcionalidad.
  • Capacidad de prueba -> Crear test para que el sistema garantice funcionalidad cuando se realicen cambios

Capacidad de análisis
La herramienta que nos ayuda a tener conexión entre el código y los requerimientos, es Gherkin que sale de la comunidad de BDD (Behavior Driven Development).
Solo para que no batallen al buscarla, como me pasó a mi.

  • Los sistemas distribuidos nos ayudan a mejorar la modularidad de un sistema.

  • La capacidad de Análisis es cuanta dificultad existe en entender el problema y saber que módulos toca, que requerimientos toca.

Mantenibilidad

Es todo eso que hace que un sistema pueda cambiar o evolucionar.

  • Modularidad: La capacidad de un sistema en ser dividido por partes donde cada una sea independiente de otra.

  • Reusabilidad: Que tanto podemos aprobechar funcionalidades del sistema para reutilizarlas.

  • Capacidad de analisis: Cuanto podemos relacionar un problema con la implementacion del sistema. Es decir, si se realiza algun cambio podremos entender rapidamente lo que podria conllevar dicha alteracion. Conexion entre el codigo y los requerimientos.

  • Capacidad de modificacion: Que tan facil es realizar cambios al sistema, como se que lo que hago no causara conficto a otras funcionalidades (Se suelen usar test automatizados para dicha accion).

  • Capacidad de prueba: Como garantizar que el sistema cumple con todos los requerimientos.

La mantenibilidad se mide con cobertura de código en Test y Análisis Estático de Código.

De que forma se crean o se tratan métodos puros? ya que normalmente los métodos y funciones usualmente requieren de otro método o función para continuar con el flujo que se programe? y hasta que punto se tiene en cuenta esto con la modularidad?

Gherkin es un lenguaje de especificación que sigue el formato Given-When-Then para describir comportamientos esperados en sistemas de software. Se usa en el desarrollo basado en comportamientos (BDD - Behavior Driven Development) para conectar requerimientos y código a través de escenarios de prueba. Aquí está un desglose de cómo funciona y cómo se usa para evaluar la conexión entre código y requerimientos: * **Given-When-Then**: El formato Given-When-Then se usa para describir escenarios en términos de condiciones iniciales (Given), acciones (When), y resultados esperados (Then). Por ejemplo:Given I am on the login page When I enter valid credentials Then I should be logged in successfully * **Conexión entre requerimientos y código**: Gherkin permite a los desarrolladores, testers y partes interesadas escribir especificaciones legibles para humanos que se traducen directamente a pruebas automatizadas. Esta conexión hace que sea más fácil asegurar que el código está alineado con los requerimientos. * **Cucumber y otras herramientas**: Cucumber es una de las herramientas más conocidas que utiliza Gherkin para convertir especificaciones escritas en código ejecutable para pruebas automatizadas. Otros frameworks como SpecFlow para .NET también soportan Gherkin. ### **Ventajas de Gherkin** * **Legibilidad**: Gherkin usa un lenguaje natural que es fácil de entender para todas las partes interesadas, incluyendo desarrolladores, testers y gerentes de producto. * **Automatización**: Los escenarios escritos en Gherkin se pueden automatizar fácilmente con herramientas como Cucumber, permitiendo pruebas consistentes y repetibles. * **Colaboración**: Debido a su legibilidad, Gherkin fomenta la colaboración entre equipos técnicos y no técnicos. ### **Desafíos** * **Mantenimiento**: Si los escenarios no se mantienen correctamente, pueden volverse obsoletos o difíciles de entender. * **Curva de aprendizaje**: Aunque Gherkin es legible, la automatización y la integración con herramientas pueden requerir conocimiento técnico. <https://www.youtube.com/watch?v=zfrueYMRvh8>

Estimado Guido, que herramientas para analisis de codigo estatico recomiendas segun la experiencia?

| Maintainability Attribute | Simple Definition | |---------------------------|-------------------------------------------------| | Modularity | Dividing software into independent parts. | | Code Clarity | Writing code that is easy to understand. | | Readability | Using clear and consistent code style. | | Consistency | Maintaining uniform coding practices. | | Documentation | Providing complete and up-to-date explanations. | | Version Control | Tracking changes, enabling rollbacks. | | Error Handling | Dealing with errors effectively. | | Testability | Easy testing for changes and bug prevention. | | Refactoring Opportunities | Improving code quality without behavior changes. | | Dependency Management | Managing external libraries and dependencies. | | Backward Compatibility | Ensuring compatibility with older versions. | | Logging and Monitoring | Identifying performance and security issues. | | Security | Protecting against vulnerabilities and threats. | | Scalability | Adapting to increased workloads and users. | | Sustainability | Considering environmental and resource usage. | | Patch Management | Handling updates for security and bug fixes. | | Usability | Maintaining a user-friendly interface. | | Legacy Compatibility | Ensuring compatibility with older systems. |

Quisiera entender como se maneja el tema de modularidad a nivel de apliaciones WEB. Mi duda es ya que yo puedo tener una aplicacion web y extraigo sus funcionalidades más importantes. en el ejemplo aplicacion que Cotiza, Documenta, Expide. entonces para mi cada uno de estos podria catalogarce como un modulo, pero mi pregunta puntual es si a nivel de WEB se hace un despliegue para cada uno de esos modulos. si es así para mi la forma de hacerlo es a nivel de servicios yo expondira un servicio bien sea API o REST para cada uno de estos modulos, lo que quiero saber es si está afirmacion es correcta, osea que si los modulos a nivel de WEB se manejan a travez de servicios,

escuche modularidad y lo primero que me vino a la mente es docker

Mantenibilidad
Todo lo que hace que el sistema pueda cambiar y a su vez ser reparado
Podemos medirlo a través de test y análisis estático del código
Modularidad
Capacidad de ser separado en partes y que no se afecten entre sí
Reusabilidad
Cuanto podemos aprovechar un módulo en otro lado
Ejemplo: Servicio Opensource
Capacidad de Análisis
Cuanto podemos entender el problema que estamos teniendo e implementarlo a código, conexión entre el código y los requerimientos
Capacidad de Modificación
La facilidad de cambiar el código y su comportamiento, si afecta o no afecta otra parte del sistema y cuanto sabemos nosotros sobre eso
Capacidad de Prueba
Habla sobre la dificultad de crear test para garantizar que el sistema hace lo que queremos que haga

  • Modularidad. Capacidad de un sistema o programa de ordenador (compuesto de componentes discretos) que permite que un cambio en un componente tenga un impacto mínimo en los demás.
  • Reusabilidad. Capacidad de un activo que permite que sea utilizado en más de un sistema software o en la construcción de otros activos.
  • Analizabilidad. Facilidad con la que se puede evaluar el impacto de un determinado cambio sobre el resto del software, diagnosticar las deficiencias o causas de fallos en el software, o identificar las partes a modificar.
  • Capacidad para ser modificado. Capacidad del producto que permite que sea modificado de forma efectiva y eficiente sin introducir defectos o degradar el desempeño.
  • Capacidad para ser probado. Facilidad con la que se pueden establecer criterios de prueba para un sistema o componente y con la que se pueden llevar a cabo las pruebas para determinar si se cumplen dichos criterios.

Mantenibilidad
Esta característica representa el grado de efectividad y eficiencia con la que un producto o sistema puede ser modificado para mejorarlo, corregirlo o adaptarlo a los cambios en el entorno y en los requisitos. Esta característica se compone de las siguientes subcaracterísticas:
• Modularidad, Grado en el cual un sistema o programa de computadora se compone de componentes discretos tales que un cambio en un componente tiene un impacto mínimo en otros componentes.

• Reusabilidad, Grado en el cual un activo puede ser utilizado en más de un sistema, o en la construcción de otros activos.

• Analizabilidad, Grado de efectividad y eficiencia con el cual es posible evaluar el impacto en un producto o sistema de un cambio intencional a una o más de sus partes, o diagnosticar un producto por deficiencias o causas de fallas, o identificar partes a ser modificadas .

• Modificabilidad, Grado en que un producto o sistema puede ser modificado de manera efectiva y eficiente sin introducir defectos o degradar la calidad del producto existente.

• Testabilidad, Grado de eficacia y eficiencia con el que se pueden establecer los criterios de prueba para un sistema, producto o componente y se pueden realizar pruebas para determinar si se han cumplido esos criterios.
Principio de responsabilidad única. Buenas prácticas de diseño.

Mantenibilidad: cuando el producto o sistema se adapta a mejoras, correcciones. Ese grado de efectividad y eficiencia se le conoce como mantenibilidad. Y tiene las siguiente sub características: Modularidad, Reusabilidad, Capacidad de modificación, Capacidad de Análisis, Capacidad de Prueba

Con mantenibilidad referimos a que tanto un sistema pueda a cambiar o evolucionar agregando nuevas funcionalidades (o actualizarlas) y también a que éste (el sistema) pueda ser reparado cuando ocurra un error. La mantenibilidad está muy relacionada con el testing. Cuando no implementamos test a nuestro código la mantenibilidad se ve muy afectada. Para garantizar la mantenibilidad de un sistema tenemos una herramienta muy potente: el análisis estático de código. El análisis estático de código lee el código (no lo ejecuta) y da sugerencias para que éste sea más mantenible. ****

  1. Modularidad: Habla de la capacidad de un sistema de ser separado en partes y que éstas sean independientes de otras. Los patrones de arquitectura distribuidos ayudan a mejorar la modularidad de un sistema.
  2. Reusabilidad: Se trata de aprovechar el esfuerzo al desarrollar un módulo y utilizarlo en otro. Éste último puede tener una funcionalidad diferente o ligeramente diferente.
  3. Capacidad de análisis: Que tan bien se entiende el problema que se está resolviendo y conectar ese problema a implementación en código. Es una conexión entre el código y los requerimientos del sistema.
  4. Capacidad de modificación: Indica qué tan fácil es ir al código y cambiar el comportamiento, es decir, que seguridad tenemos de que no se está rompiendo algo al aplicar un cambio en un componente. La herramienta más fuerte para medir la capacidad de modificación son los test automatizados.
  5. Capacidad de prueba: Hacen que tan facil o dificil es crear los test para garantizar el funcionamiento del sistema. Es importante darle prioridad a la estructura del código con el fin de que los test sean fáciles de implementar. Es bueno implementar funciones o métodos puros con el objetivo de que el test sea muy claro.

Medimos la mantenibilidad con buenas coberturas se test y análisis estático del código de principio a fin de la aplicación. Se puede usar software para leer el código y mostrar alertas para mejorar el código y sea más mantenible.

Acabo de notar que tu te aprediste esto de memoria porque en ningun momento vuelves a ver la computadora

pruebas que verifiquen que el comportamiento del código es correcto desde el punto de vista de negocio.- Gerkin

Modularidad: Como se puede separar el sistema sin que falle?

Reusabilidad: Como se puede usar una pieza para otro prósito? ej. open source

Capacidad de análisis: Cuanto puedo entender el cambio?

**Capacidad de modificación:**que tan fácil es ir al código sin romperlo?

Capacidad de prueba: Cuán fácil es hacer pruebas?