Información general


Tipo de asignatura: optativa

Coordinador:

trimestre:2

Créditos: 6

Profesorado: David Ródenas Picó

Descripción


Esta asignatura es la culminación de todas las asignaturas de Ingeniería del Software y mujer por primera vez una solución para crear e integrar software a escala organizativo. Su impartición está pensada a dedicar 1 ECTS en la parte de teoría y 5 ECTS a practicar los conceptos expuestos en teoría y los adquiridos en el resto de asignaturas.

La piedra angular de esta asignatura es la metodología DDD que permite modelar y coordinar el software completo de organizaciones y empresas. Se toma como punto de origen el hecho de que la empresa vive una realidad distribuida en múltiples localizaciones, con múltiples implantaciones informáticas, y múltiples softwares que se coordinan para ofrecer una única visión integrada de todos los servicios de la empresa.

La clave de toda la metodología es la definición de los conceptos que forman parte en cada parte de la organización, cómo se coordinan y como toman sentido, y como, gracias a la definición de pedidos y eventos se puede asegurar la consistencia eventual completa de datos con la ayuda de buzos de mensajes como las diversas implementaciones de JMS o servicios como RabbitMQ.

Además de todo esto se enseñarán mecanismos avanzados de captación de requisitos de gran escala y la definición de pruebas de software ejecutables en lenguaje natural capaz de ser entendido por la dirección de la empresa.

Esta asignatura dispone de recursos metodológicos y digitales para hacer posible su continuidad en modalidad no presencial en el caso de ser necesario por motivos relacionados con la Covidien-19. De esta forma se asegurará la consecución de los mismos conocimientos y competencias que se especifican en este plan docente.

Resultados de aprendizaje


En el ámbito general esta asignatura contribuye a siguientes resultados de aprendizaje especificados por la materia a la que pertenece:

  • Utilizar de forma apropiada teorías, procedimientos y herramientas en el desarrollo profesional de la ingeniería informática en todos sus ámbitos (especificación, diseño, implementación, despliegue -implantación- y evaluación de productos) de forma que se demuestre la comprensión de los compromisos adoptados en las decisiones de diseño.
  • Usar las herramientas de un entorno de desarrollo de software para crear y desarrollar aplicaciones.
  • Demostrar conocimiento y saber aplicar las técnicas apropiadas para modelar y analizar los diferentes tipos de decisiones.
  • Gestionar y resolver los problemas y conflictos gracias a la capacidad de generar alternativas o escenarios de futuro convenientemente analizados, integrando los aspectos de incertidumbre y los múltiples objetivos a considerar.
  • Tomar iniciativas que generen oportunidades, nuevos objetos o soluciones nuevas, con una visión de implementación de proceso y de mercado, y que implique y haga partícipes a los demás en proyectos a desarrollar (capacidad de actuar de manera autónoma).
  • Especificar, diseñar, implementar, gestionar y mantener sistemas y servicios software complejos y / o críticos.
  • Controlar la calidad y diseñar pruebas en la producción de software.
  • Definir y gestionar los requisitos de un sistema software.
  • Evaluar y seleccionar plataformas de producción hardware y software para la ejecución ¿de aplicaciones y de servicios informáticos.
  • Identificar tecnologías actuales y emergentes y evaluar si son aplicables, y en qué medida, para satisfacer las necesidades de los usuarios.
  • Dirigir, planificar y coordinar la gestión de la infraestructura informática: hardware, software, redes y comunicaciones.
  • Diseñar soluciones que integren tecnologías de hardware, software y comunicaciones (y capacidad de desarrollar soluciones específicas de software de sistemas) para sistemas distribuidos y dispositivos de computación ubicua.
  • Planificar y utilizar la información necesaria para un trabajo académico (por ejemplo, para el trabajo de fin de grado) a partir de una reflexión crítica sobre los recursos de información utilizados. Gestionar la información de manera competente, independiente y autónoma. Evaluar la información encontrada e identificar las lagunas presentes.

A un nivel más concreto, al finalizar la asignatura el estudiante debe ser capaz de:

  • Describir qué es el Domain Driven Design (DDD)
  • Diseñar e implementar los sistemas informáticos de una organización usando el DDD
  • Crear pruebas de software automáticas de alto nivel capaces para ser validadas por no informáticos
  • Crear sistemas escalables a organizaciones de gran tamaño

 

Metodología de trabajo


Habrá clases de teoría en grupo grande y clases de prácticas en el laboratorio en grupo pequeño. En las clases de teoría se irán combinando sesiones de tipo lección magistral con sesiones de resolución de problemas propuestos por el profesor en grupos de dos o tres estudiantes.

Las prácticas en el laboratorio se realizarán por pareja. Se deberán empezar a trabajar en el laboratorio con la ayuda del profesor y tendrán que acabar de forma autónoma fuera de las horas presenciales reglamentadas.

contenidos


  1. Introducción, porque y estrategia vs táctica
  2. estrategia
    1. Contexto limitado
    2. Lenguaje ubicuo
    3. Cómo definir el BC y el UL (I)
      Domain Expertos, Feedback loop, Challenge & Unify, Core Bounding Contexto, Ubiquitous Language (BDD / GWT)
    4. Domains oro subdomains
    5. contexto Mapping
    6. Messaging y Eventual consistency
  3. táctica
    1. Agregados
    2. Entity vs Value Object
    3. Eventos de dominio
    4. Abastecimiento de eventos
  4. evento Storming
  5. Calidad
    1. BDD
    2. Pepino

 

Actividades de aprendizaje


Prueba escrita: El estudiante deberá demostrar que ha adquirido los conocimientos teóricos explicados en clase.

prácticas: Habrá 5 prácticas donde se aplicarán los conocimientos adquiridos en clase. Consistirán en el desarrollo de un sistema de información usando el Domain Driven Development.

Participación en clase: Las clases serán participativas y el profesor propondrá actividades para que sean desarrolladas en equipos de dos o tres personas.

Sistema de evaluación


evaluación

PR_E: Prueba escrita. Ponderación de la nota final 40%
PRAC: Prácticas de la 1 a la 5. Ponderación en la nota final 55% si la nota de PR_E> = 3
CLASE: Ejercicios de clase. Ponderación en la nota final 5% si la nota de PR_E 0,4> = 3

Cálculo nota final (NF):

Si PR_E> = 3: NF = PON = PR_E 0,4 + PRAC 0,55 + CLASS 0,05

Si PR_E <3: NF = min (PR_E, PON)

recuperación: Se podrá recuperar la prueba escrita (PR_E). La nota final se calculará tal como se ha establecido anteriormente con la nota de la recuperación.

 

Normativa:

La asistencia a las prácticas es obligatoria. Si un estudiante no asiste a una sesión de prácticas será calificado con una nota de 0 (cero) en la práctica correspondiente
Siguiendo la normativa de la UPF, si se detecta que una práctica o una prueba ha sido copiada la nota final de la asignatura será de 0 (cero)
Para que el estudiante tenga derecho a la recuperación se deberá haber presentado a las dos pruebas (PR_E y PR_R)

Bibliografía


básico

Domain-Driven Design Distilled - Vaughn Vernon

Documentación de Cucumber - https://cucumber.io

Complementario

Implementing Domain-Driven Design - Vaughn Vernon

Domain-Driven Design: Tackling Complexity in the Heart of Software - Eric Evans