Responsable: | (-) |
Otros: | (-) |
Créditos | Dept. | Tipo | Requisitos |
---|---|---|---|
6.0 (4.8 ECTS) | CS |
|
ADA
- Correquisito para la EI , ETIG PRED - Prerequisito para la EI , ETIG PS - Prerequisito para la ETIS |
Responsable: | (-) |
Otros: | (-) |
Una vez adquiridos, en asignaturas anteriores, los conocimientos técnicos y metodológicos necesarios para construir programas, el estudiante debe ser capaz de integrar estos conocimientos y aplicarlos al desarrollo de un proyecto de programación de complejidad media. Los objetivos docentes de esta asignatura van en esta dirección y se estructuran en tres niveles: 1. Poner en práctica y facilitar la integración de los conocimientos del estudiante en cuanto a programación, algorítmica y estructuras de datos. 2. Experimentar el proceso de desarrollo de un proyecto de software que suponga la aplicación intensiva de estos conocimientos en un marco de exigencias estrictas, tanto funcionales como operativas. Se tendrán en cuenta tanto los aspectos ligados al producto a construir: exigencias de calidad, corrección, reusabilidad de componentes etc., como el propio proceso de construcción: organización del equipo de trabajo, documentación, interacción con el usuario, prototipado, etc. 3. Completar la formación del estudiante en aquellos aspectos, básicamente ligados a las exigencias de la programación a gran escala, no suficientemente cubiertos por las asignaturas del ámbito de la programación cursadas anteriormente.
Horas estimadas de:
T | P | L | Alt | L Ext. | Est | O. Ext. |
Teoria | Problemas | Laboratorio | Otras actividades | Laboratorio externo | Estudio | Otras horas fuera del horario fijado |
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
2,0 | 0 | 0 | 0 | 0 | 2,0 | 0 | 4,0 | |||
Programación a pequeña y a gran escala. Criterios de calidad interna y externa del software. Ciclos de vida.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
4,0 | 0 | 0 | 0 | 0 | 2,0 | 0 | 6,0 | |||
Definición del proyecto. Requisitos. Especificación funcional. Modelar primero el dominio. Estudio de un caso.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
4,0 | 0 | 0 | 0 | 0 | 2,0 | 0 | 6,0 | |||
Arquitectura de programas. Niveles de diseño. Comunicación entre módulos. Arquitectura en tres capas. Ejemplos.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
4,0 | 0 | 0 | 0 | 0 | 1,0 | 0 | 5,0 | |||
Repaso de los conceptos de programación orientada a objetos, en principio vistos en asignaturas anteriores, con énfasis en cómo se implementan en el lenguaje de programación usado en la asignatura.
Herencia, polimorfismo y genericidad como herramientas de programación. Mecanismos de ejecución. Creación y destrucción de objetos. Llamadas a métodos y paso de parámetros. "Binding" estático y dinámico. "Garbage collection". Excepciones. |
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
2,0 | 0 | 0 | 0 | 0 | 1,0 | 0 | 3,0 | |||
Prueba de componentes. Optimización de componentes.
Integración de componentes. Estategias de prueba e integración. Planificación de pruebas. "Andamiada" y tests de regresión. Herramientas de ayuda a la prueba: "Debuggers", "profilers", automatización de pruebas. |
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
2,0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,0 | |||
Tipos de entrada y salida. Comunicación entre programas.
Principios de comunicación con interlocutores humanos. Presentación de información, entrada y validación de datos, navegación, niveles de ayuda, modelos de usuario. |
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
2,0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,0 | |||
Documentación técnica y de usuario. Estándares de documentación. Herramientas de ayuda a la documentación.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
2,0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,0 | |||
Definición de la calidad del software. Factores de calidad. Medidas de calidad de los programas. Validación y prueba. Estándares de calidad del software.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
5,0 | 0 | 0 | 0 | 0 | 0 | 0 | 5,0 | |||
Explicación del enunciado del proyecto y discusión de alternativas.
Explicación del plan de desarrollo, de los objetivos de cada etapa y de la metodología a seguir. Explicación del contenido de cada entrega de material y de los criterios de valoración.
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3,0 | 0 | 6,0 | 0 | 0 | 9,0 | |||
|
|
T | P | L | Alt | L Ext. | Est | O. Ext. | Total | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 5,0 | 0 | 70,0 | 0 | 0 | 75,0 | |||
Se describe en los siguientes apartados.
|
Total por tipo | T | P | L | Alt | L Ext. | Est | O. Ext. | Total |
29,0 | 0 | 8,0 | 0 | 76,0 | 10,0 | 0 | 123,0 | |
Horas adicionales dedicadas a la evaluación | 1,0 | |||||||
Total horas de trabajo para el estudiante | 124,0 |
El proyecto propuesto a los estudiantes tiene las siguientes características:- Se parte de un enunciado mínimo para que el estudiante tenga la iniciativa de interpretar lo que debe hacer su programa.
- El proyecto es suficientemente grande para que un intento de solución "directo" no sea factible.
- El proyecto tiene un fuerte componente algorítmico y de estructuras de datos.
- El objetivo del estudiante debe ser entregar su programa, dentro de unos márgenes razonables, como producto acabado y no tan sólo como una práctica.
- Para su implementación se fomentará el uso de componentes creados por otros y la aportación de componentes a otros proyectos.
Para implementar este proyecto, el sistema de trabajo será el siguiente:
- Los estudiantes se organizan en grupos de 3 personas, y los grupos se estructuran en macrogrupos de 3 grupos (los "clusters") de 9 personas.
- Cada "cluster" tendrá un profesor tutor asignado.
- Habrá 3 enunciados diferentes cada cuatrimestre que deberán resolverse todos ellos por cada uno de los "clusters" (un enunciado para cada grupo). Aunque los enunciados son diferentes, presentarán suficientes similitudes como para que tenga sentido identificar partes comunes que puedan ser desarrolladas una sola vez y reutilizadas por todo el "cluster".
- Dentro de cada grupo, un estudiante y sólo uno es responsable de programar y probar cada clase.
Al inicio del curso, los estudiantes reciben los enunciados de los proyectos y tienen una semana para organizarse en grupos y "clusters".
Hay tres entregas a lo largo del curso, separados por periodos de tiempos similares (entre cuatro y cinco semanas). El esquema del contenido de cada uno de ellos es el siguiente:
- Primera entrega: especificación y análisis. Se entregará un enunciado ampliado en lenguaje natural, una descripción detallada de las funcionalidades a desarrollar, un modelo del dominio del problema y la lista de requisitos no funcionales del programa.
- Segunda entrega: diseño y principio de la implementación. Esta entrega incluye el diseño de la posible parte compartida entre los grupos del "cluster" y su implementación. Además se debe implementar completamente el modelo del dominio.
- Tercera entrega: programa final funcionando completamente de acuerdo con las especificaciones de la primera entrega, acompañado de la documentación técnica y la documentación de usuario del programa.
Las dos primeras entregas son asíncronas, mientras que la entrega final consiste en una entrevista con cada grupo de aproximadamente una hora de duración, en la cual los estudiantes hacen una "demo" de su programa y responden a las posibles preguntas del tutor.
Clases de teoría:
Sirven, por un lado, por presentar los contenidos más generales de la asignatura, que tienen poco que ver con el enunciado concreto del problema. Se intentará concentrar estas clases hacia el principio de curso.
Por otro lado, algunos momentos adecuados del curso se intercalan las explicaciones sobre el enunciado del proyecto, la metodología general a seguir en cada etapa, y el material que hace falta incluir en cada entrega.
Clases de laboratorio en horario fijado:
Algunas de estas clases, normalmente hacia principio de curso, sirven para que el profesor presente brevemente las notaciones, lenguajes, librerías y herramientas a utilizar. En la mayoría de clases de laboratorio no es el profesor quien lleva la iniciativa. Son unas horas que cada grupo de proyecto puede usar para trabajar en común, o bien para consultar dudas con el profesor y recibir comentarios sobre las entregas anteriores.
Trabajo independiente:
El grueso de horas de la asignatura corresponde al trabajo que el estudiante hace fuera de horas regladas, trabajando en el proyecto, individualmente o junto con su grupo de trabajo.
Se evaluarán tres entregas de material (documentación y/o software), distribuidos a lo largo del curso. El calendario de las entregas se anunciará durante el primer mes de curso.
Entrega 1 (Especificación y Análisis): 10%
Entrega 2 (Diseño y principio de la programación): 25%
Entrega 3 (Final): 65%
La evaluación de las entregas podrá tener en cuenta tanto la aportación individual del estudiante como los resultados de su grupo. Esto implica que no todos los componentes de un grupo tendrán necesariamente la misma nota. Cada miembro del grupo ha de programar aproximadamente una tercera parte del programa. En caso de desviación importante se podrá considerar que el estudiante no se ha presentado a la asignatura.
En las entregas 1 y 2 se evalúa principalmente el logro de los objetivos acordados con el tutor. En la entrega 3 se evalúan tanto el grado de finalización como la calidad del proyecto (aunque ambas características vienen, en gran parte, determinadas por el trabajo hecho en las entregas anteriores). Concretamente, se evalúan tres grupos de características:
1. Logro de objetivos: Hasta qué punto el programa es completo y funciona correctamente, de acuerdo con las especificaciones pactadas.
2. Factores internos:
- Calidad del diseño.
- Calidad de la codificación.
- Reusabilidad y mantenibilidad.
- Funcionamiento del grupo y del cluster; incluye el grado de compartición de diseños y códigos, y el uso efectivo del código compartido.
- Juegos de pruebas entregados.
3. Factores externos:
- Corrección, eficiencia y robustez.
- Calidad de la interfaz y usabilidad.
- Documentación para el usuario.
En cualquiera de las entregas, el tutor podrá no aceptar una entrega de trabajo manifiestamente incompleta. En este caso, la nota de la entrega podrá ser "No presentado".
Si en la tercera entrega el proyecto no es razonablemente operativo -es decir, si las funcionalidades básicas no están correctamente acabadas- la nota de esta tercera entrega será determinada principalmente por el grado de logro de los objetivos pactados. En este caso, la nota final de la asignatura será el mínimo entre 4 y la que se obtiene aplicando la ponderación indicada.
- Capacidad para resolver problemas algorítmicos de dificultad media a partir de una especificación clara, y de implementar las soluciones en un lenguaje de programación imperativo.
- Conocimiento de los mecanismos básicos de estructuración de programas (modularización, encapsulación, tipos abstractos de datos, clases) y capacidad para aplicarlos a problemas pequeños-medios (unos pocos módulos).
- Conocimiento de los elementos de programación orientada a objetos (clases, objetos, herencia, mecanismos de ejecución).
- Familiaridad con un lenguaje imperativo, preferentemente orientado a objetos.
- Capacidad para usar y programar estructuras de datos sencillas (tablas, estructuras lineales, diccionarios) en este lenguaje.
- Capacidad para usar librerías en este lenguaje.
- Dominio de estrategias básicas para encontrar y corregir errores en módulos sencillos.