Información general


Tipo de asignatura: optativa

Coordinador:

trimestre: Segundo trimestre

Créditos: 6

Profesorado: 

David Ródenas Picó

Competencias


competencias básicas
  • B2_Que los estudiantes sepan aplicar sus conocimientos en su trabajo o vocación de una forma profesional y tengan las competencias que demuestran mediante la elaboración y defensa de argumentos y la resolución de problemas dentro de su área de estudio

  • B4_Que los estudiantes puedan transmitir información, ideas, problemas y soluciones a un público tan especializado como no especializado

  • B5_Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía

Competencias específicas
  • EIS1_Capacidad para desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario y que se comporten de forma fiable y eficiente, sean asequibles de desarrollar y mantener y cumplan normas de calidad, aplicando las teorías, principios, métodos y prácticas de la ingeniería del software

  • EIS2_Capacidad para valorar las necesidades del cliente y especificar los requisitos software para satisfacer estas necesidades, reconciliando objetivos en conflicto, mediante la búsqueda de compromisos aceptables, dentro de las limitaciones derivadas del coste, del tiempo, de la existencia de sistemas ya desarrollados y de las propias organizaciones

  • EIS3_Capacidad para dar solución a problemas de integración en función de las estrategias, estándares y tecnología disponibles

  • EIS4_Capacidad de identificar y analizar problemas y diseñar, desarrollar, implementar, verificar y documentar soluciones software sobre la base de un conocimiento adecuado de las teorías, modelos y técnicas actuales

  • EIS5_Capacidad de identificar, evaluar y gestionar los riesgos potenciales asociados que se puedan presentar

  • EIS6_Capacidad para diseñar soluciones apropiadas en uno o más dominios de aplicación, utilizando métodos de la ingeniería del software que integren aspectos éticos, sociales, legales y económicos

  • ESI3_Capacidad para participar activamente en la especificación, diseño, implementación y mantenimiento de los sistemas de información y comunicación

competencias transversales
  • T1_Que los estudiantes conozcan un tercer idioma, que será preferentemente el inglés, con un nivel adecuado de forma oral y por escrito, de acuerdo con las necesidades que tendrán las graduadas y graduados en cada titulación

  • T2_Que los estudiantes tengan capacidad para trabajar como miembros de un equipo interidisciplinar ya sea como un miembros más, o realizando tareas de dirección con el fin de contribuir a desarrollar proyectos con pragmatismo y sentido de la responsabilidad, asumiendo compromisos teniendo en cuenta los recursos disponibles

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