Finalidad Formativa
Esta unidad curricular permite afianzar en los estudiantes la capacidad de diseñar artefactos de software y las interfaces que las mismas utilicen; como así también analizar y discutir su eficiencia y escalabilidad.
Ejes de Contenido
Conceptos generales de Ingeniería del Software. Paradigmas, métodos y herramientas: una visión global. Modelos de desarrollo de software. Análisis de requerimientos de software. Requerimientos funcionales, prioridades y criterios de realización. Análisis orientado a objetos y UML. Principios generales de diseño: descomposición, desacoplamiento, cohesión, reusabilidad, portabilidad, testeabilidad, flexibilidad, escalabilidad. Patrones de diseño. Arquitecturas de software: concepto de vistas, arquitecturas distribuidas, pipe and filter, model view controller. Diseño orientado a objetos, encapsulamiento y ocultamiento de información, separación entre comportamiento e implementación, clases y subclases, herencia (sustitución), polimorfismo (subtipos vs. herencia), jerarquías de clases, clases colección y protocolos de iteración. Diccionario de datos. Requerimientos no funcionales, ejemplos y su influencia en el diseño del software. Validación de requerimientos. Estándares de documentos de requerimientos. Herramientas de modelización. UML. Ambientes gráficos para edición, editores inteligentes. Herramientas integradas disponibles para la edición en distintos lenguajes y ambientes. Bibliotecas de clases, programas y rutinas. Herramientas para desarrollo en ambientes web. Frameworks de aplicaciones y su utilización. El equipo de proyectos de desarrollo de software, roles y responsabilidades de sus integrantes. Programas de trabajo y resolución conjunta de problemas. Modelos de ciclo de vida del software y de procesos de desarrollo. El problema del mantenimiento y las migraciones de plataforma. Metodologías tradicionales y ágiles. Metodologías ágiles, concepto de sprint, fraccionamiento del producto en unidades realizables en un sprint, cola de pendientes, mejora de productos provisorios (refactoring), variación de los roles y la documentación en el marco de un proceso en el que se aplican metodologías ágiles. Gestión de los cambios, conceptos de versión, Guild, producto de la asignación. Concepto de componente. Elementos de administración de la configuración y control de versiones de software. Herramientas de versionado. Otras herramientas (bibliotecas, diccionarios, repositorios) del proyecto.