5.52.4.1 Principios y Arquitectura de Software (8 horas) [Habilidades AG-C09,AG-C12]

Referencias Bibliográficas: [Bass et al., 2021,Richards and Ford, 2020]

Temas

  1. Principios de diseño de sistemas. Fundamentos de Sistemas (SF) -Reliability
    1. Niveles de abstracción (por ejemplo, diseño arquitectónico y diseño detallado)
    2. Separación de preocupaciones (separation of concerns)
    3. Ocultación de información (information hiding)
    4. Acoplamiento y cohesión (coupling and cohesion)
  2. Arquitectura de software. Fundamentos de Sistemas (SF) -Reliability
    1. Paradigmas de diseño
      1. Descomposición funcional de arriba hacia abajo/diseño por capas
      2. Arquitectura orientada a datos
      3. Análisis y diseño orientado a objetos
      4. Diseño dirigido por eventos
    2. Arquitecturas estándar (por ejemplo, cliente-servidor y arquitecturas de microservicios incluyendo discusiones sobre REST, n-capas, tuberías y filtros, Modelo Vista Controlador)
    3. Identificar límites y dependencias de componentes
  3. Programación a gran escala vs programación a pequeña escala (programming in the large vs programming in the small). Fundamentos de Sistemas (SF) -Reliability
  4. Modelos estructurales y de comportamiento de diseños de software
  5. Modelado de diseño, por ejemplo con diagramas de clases, diagramas de entidad-relación o diagramas de secuencia
  6. Principios de diseño de API
    1. Consistencia
      1. Las API consistentes son más fáciles de aprender y menos propensas a errores
      2. La consistencia es tanto interna (entre diferentes partes de la API) como externa (siguiendo patrones comunes de API)
    2. Capacidad de composición (composability)
    3. Documentación de contratos
      1. Las operaciones de la API deben describir su efecto en el sistema, pero generalmente no su implementación
      2. Precondiciones, postcondiciones e invariantes
    4. Capacidad de expansión (expandability)
    5. Reporte de errores
      1. Los errores deben ser claros, predecibles y accionables
      2. La entrada que no coincida con el contrato debe producir un error
      3. Los errores que pueden gestionarse de manera confiable sin reportarse deben gestionarse

Aprendizaje esperado (Learning Outcomes)

  1. Identificar la arquitectura de software estándar de un diseño de alto nivel dado [Analizar]
  2. Identificar las dependencias entre un conjunto de componentes de software en un diseño arquitectónico [Analizar]
  3. Seleccionar y usar un paradigma de diseño apropiado para diseñar un sistema de software simple y explicar cómo se han aplicado los principios de diseño de sistemas en este diseño [Evaluar]
  4. Traducir un diseño de software en lenguaje natural a diagramas de clases [Traducir]

Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM