201610

Semestre 2016 – 1

Nombre del curso: Conceptos Avanzados en Ingeniería de Software
Course Name: Advanced Concepts in Software Engineering
Créditos:  2
Profesor:  Luis Daniel Benavides Navarro (ld.benavides27 – at – uniandes.edu.co)

Descripción

Este curso presenta los principales procesos de desarrollo de software utilizados en proyectos a gran escala. Se hace especial énfasis en el estudio de las diferentes técnicas de estimación de tamaño, esfuerzo y costo de un proyecto de software. Adicionalmente, el curso se centra en el estudio de las mejores técnicas de derivación y ejecución de pruebas a diferentes niveles (unitarias, aceptación, regresión, integración, etc.), como herramienta para el mejoramiento de la calidad de los productos desarrollados.

Propósito

Los Ingenieros de Software necesitan demostrar destrezas en múltiples disciplinas como, ingeniería de requerimientos, diseño y arquitectura de software, pruebas de software, administración de configuraciones, gestión de procesos de software, planeación y gestión de proyectos de software y gestión de la calidad de software. Este curso realiza una introducción de los principales conceptos y técnicas utilizadas en ingeniería de software y las complementa con la exposición de las nuevas tendencias en la disciplina.

Por medio de las clases, la realización de proyectos y la utilización de herramientas de última generación los estudiantes aprenden:

  • Estrategias y tácticas para ser programadores pragmáticos (Artesanos, Craftman)
  • Diferentes técnicas de estimación de tamaño, esfuerzo y costo de un proyecto de software.
  • Patrones de diseño de software
  • PSP y TSP como procesos de desarrollo de software
  • La gestión automática de configuraciones
  • Las nuevas tendencias de “Continuous Delivery” y la automatización del ciclo de vida de software
  • La automatización y diseño de pruebas.
  • Técnicas y principios para el diseño de software distribuidos, seguros y tolerante a fallos.
  • A Desplegar proyectos sobre plataformas en la nube

Frameworks, Modelos y tecnologías claves estudiadas y utilizadas: Maven, Git, GitHub, Heroku, PSP, TSP, SCRUM, Java, Patrones de Software, Principios de Diseño de sistemas de computo

Objetivos

Se espera que al final del curso el participante esté en capacidad de:

  • Explicar las diferentes metáforas que influencian el desarrollo de software: artesanía, ciencia e
  • ingeniería.
  • Participar en procesos de diseño de software en equipo utilizando PSP y TSP
  • Participar en procesos de diseño de software en equipo utilizando SCRUM
  • Explicar las dimensiones del problema del desarrollo de software y de la calidad de los productos
  • Adquirir una visión global de los modelos internacionales de calidad de software
  • Explicar los factores que intervienen en los costos de calidad de software
  • Definir métricas de producto y de proceso que le permitan a una organización entender mejor la
  • calidad de los productos que producen
  • Explicar y definir procesos de Verificación y Validación de Software. En particular, definir un plan
  • de pruebas de aceptación y un proceso de inspección.
  • Automatizar los procesos de ciclo de vida del desarrollo de software
  • Automatizar el proceso de manejo de configuraciones en proyectos de software
  • Desplegar aplicaciones sobre plataformas PaaS en la nube
  • Explicar los principios de diseño de programas distribuidos, seguros y tolerantes a fallos

Metodología

Se realizarán sesiones de clase en la que se presentarán los conceptos básicos del curso, se aclararán dudas, y se realizarán talleres prácticos, partiendo del supuesto que previamente se ha leído y analizado el material de lectura. Adicionalmente, los participantes compartirán experiencias aprendidas en sus empresas en los temas relacionados con el curso.

Los talleres se realizarán en Java, se gestionará el ciclo de vida usando Maven, se gestionará el código fuente usando Git y GitHub y se desplegarán en Heroku.