Saltar al contingut Menu
Mapa
  • Inicio
  • Información
  • Contacto
  • Mapa

Proyecto de Programación (PROP)

Créditos Dept. Tipo Requisitos
6.0 (4.8 ECTS) CS
  • Obligatoria para la EI
  • Obligatoria para la ETIG
  • Optativa para la ETIS
ADA - Correquisito para la EI , ETIG
PRED - Prerequisito para la EI , ETIG
PS - Prerequisito para la ETIS

Profesores

Responsable:  (-)
Otros:(-)

Objectivos Generales

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.

Objectivos Específicos

Conocimientos

  1. Las fases de un proyecto de programación (especificación, análisis, diseño, implementación, prueba y mantenimiento). El tipo de decisiones a tomar en cada fase. La necesidad de documentar cada una de ellas.
  2. Los principales requisitos internos y externos de calidad de los programas (como mínimo, corrección, eficiencia, robustez, comprensibilidad, modificabilidad, reusabilidad, usabilidad) y los compromisos entre ellos.
  3. Los principios del diseño y la programación orientadas a objetos, y su justificación. Las ventajas e inconvenientes de adoptar este paradigma en un proyecto de programación.
  4. El uso del mecanismo de clases y herencia para evitar la redundancia y para capturar abstracciones de especificación, diseño e implementación. Las ventajas de este uso de la orientación a objetos con respecto a fiabilidad, modificabilidad, portabilidad, reusabilidad y productividad.
  5. Los principales problemas que se plantea la ingeniería del software (las soluciones de los cuales se verán en otras asignaturas).

Habilidades

  1. Desarrollar un proyecto de programación de tamaño medio, en grupo, de acuerdo con un plan de desarrollo y una arquitectura proporcionados de antemano.
  2. Invocar los conocimientos de programación adquiridos en asignaturas anteriores durante el desarrollo de un proyecto de programación de tamaño medio, escogiendo algoritmos y estructuras de datos adecuados para construir un programa correcto y eficiente.
  3. Organizar el trabajo de diseño y programación de un grupo de personas de tamaño medio (de tres a diez), de acuerdo con una planificación temporal preestablecida. Esta organización incluye tanto el cumplimiento de la planificación dada como el reparto de tareas entre los miembros del grupo.
  4. Identificar partes susceptibles de ser factorizadas en la especificación, diseño e implementación de un programa, para resolverlas una sola vez. Usar de manera efectiva los mecanismos de la orientación a objetos para hacer la factorización.
  5. Tratar correctamente las situaciones anómalas dentro del programa, usando, si es conveniente, el mecanismo de excepciones ofrecido por el lenguaje de programación.
  6. Diseñar una interfaz de usuario razonablemente cómoda y eficaz para el programa, usando una librería GUI.

Competencias

  1. Capacidad para crear y utilizar modelos de la realidad.
  2. Capacidad para diseñar sistemas, componentes o procesos que se ajusten a unas necesidades, utilizando los métodos, técnicas y herramientas más adecuadas en cada caso.
  3. Capacidad para resolver problemas poco estructurados.
  4. Capacidad para argumentar lógicamente las decisiones tomadas, el trabajo hecho o un punto de vista. Capacidad para dar opiniones, razonamientos y justificaciones fundamentadas con el fin de convencer.
  5. Capacidad de iniciativa: ser resolutivo, saber tomar decisiones y actuar para solucionar un problema.
  6. Capacidad para aprender autónomamente.
  7. Capacidad para trabajar efectivamente en grupos pequeños de personas para la resolución de un problema de dificultad media.
  8. Capacidad para integrarse: Buscar y proponer tareas en las que desarrollar las propias capacidades y habilidades.
  9. Capacidad para formar y organizar un equipo, uni o multidisciplinar, para abordar un proyecto complejo.
  10. Capacidad para presentar por escrito, de forma clara y correcta, los resultados del propio trabajo (al nivel de documentar una entrega de prácticas).
  11. Capacidad de relación interpersonal. Receptividad respecto al interlocutor.
  12. Asumir la responsabilidad del trabajo propio.

Contenidos

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

1. Introducción
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.

2. La orientación a objetos
T      P      L      Alt    L Ext. Est    O. Ext. Total 
2,0 0 0 0 0 2,0 0 4,0
Especificación, diseño y programación orientados a objetos (OO). Objetos y clases, atributos y métodos. Relación entre clases y TADs. Herencia, polimorfismo y genericidad como herramientas de modelado y diseño. Relación de la OO con los criterios de calidad del software.

3. Especificación
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.

4. Diseño
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.

5. Programación orientada a objetos
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.

6. Prueba de programas
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.

7. La interfaz de los programas
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.

8. Documentación
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.

9. Calidad de los programas
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.

10. Explicación del proyecto a desarrollar
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.



  • Laboratorio:
    Algunas de estas explicaciones podrán trasladarse de clases de teoría a clases de laboratorio por motivos de calendario.

11. Aprendizaje de las notaciones y las herramientas a utilizar
T      P      L      Alt    L Ext. Est    O. Ext. Total 
0 0 3,0 0 6,0 0 0 9,0
  • Laboratorio:
    El profesor explicará:
    - Los elementos básicos de la notación a usar en las fases de especificación y diseño. Actualmente se utilizará un subconjunto muy reducido de UML.
    - Las partes del lenguaje de programación no lo suficiente cubiertos en el tema teórico. En este curso se utilizará preferentemente Java.
    - Una introducción a las librerías disponibles (si hace falta) y en especial de las librerías para construir una interfaz gráfica de usuario.
    - Una introducción a las herramientas de desarrollo, prueba y optimización que no sean conocidas de asignaturas anteriores.
    En todos los casos, las explicaciones serán breves y el estudiante deberá completar su aprendizaje de manera autónoma.



  • Actividades de laboratorio adicionales:
    Completar el aprendizaje de las notaciones y herramientas que el profesor ha presentado brevemente en las clases de laboratorio.

12. Desarrollo del proyecto
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.

  • Laboratorio:
    Entrevistas con el profesor tutor del proyecto para discutir alternativas, solucionar dudas, recibir comentarios sobre el material ya entregado y, en general, hacer un seguimiento del estado del proyecto.
  • Actividades de laboratorio adicionales:
    Trabajo fuera de horas regladas destinado al desarrollo del proyecto. Se incluye el tiempo pasado en encuentros presenciales con los otros miembros del grupo y en interacción off-line (por ejemplo, vía correo electrónico) con ellos y con el tutor.


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

Proyecto

Descripción

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.

Plan de desarrollo

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.

Metodología docente

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.

Método de evaluación

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.

Bibliografía básica

  • Bertrand Meyer Construcción de software orientado a objetos, Prentice Hall, 1998.
  • Timothy Budd An Introduction to object-oriented programming, Addison-Wesley, 2002.
  • Robert V. Binder Testing object-oriented systems : models, patterns, and tools, Addison-Wesley, 1999.
  • Ken Arnold, James Gosling, David Holmes The Java programming language, Addison-Wesley, 2000.
  • Allen J. Peralta Giménez, Horacio Rodríguez Hontoria Enginyeria del software : programació orientada a objectes, Edicions UPC, 1994.

Bibliografía complementaria

  • Bertrand Meyer Object-oriented software construction, Prentice Hall, 1997.
  • Grady Booch, James Rumbaugh, Ivar Jacobson The Unified modeling language user guide, Addison-Wesley, 1999.
  • James Rumbaugh, Ivar Jacobson, Grady Booch El Lenguaje unificado de modelado : manual de referencia, Addison-Wesley, 2000.
  • James Rumbaugh, Ivar Jacobson, Grady Booch The Unified modeling language reference manual, Addison-Wesley, 2005.
  • Grady Booch, James Rumbaugh, Ivar Jacobson El Lenguaje unificado de modelado, Addison-Wesley, 1999.
  • Richard C. Lee, William M. Tepfenhart UML and C++ : a practical guide to object-oriented development, Prentice Hall, 1997.
  • Roger S. Pressman Software engineering : a practitioner's approach, McGraw Hill, 2005.
  • Ron Jeffries, Ann Anderson, Chet Hendrickson Extreme programming installed, Addison-Wesley, 2001.
  • Alan Cooper and Robert Reimann About face 2.0 : the essentials of interaction design, Wiley, 2003.

Enlaces web

  1. http://java.sun.com/


  2. http://www-306.ibm.com/software/rational/


  3. http://argouml.tigris.org/


  4. http://mat21.etsii.upm.es/ayudainf/aprendainf/programacion.htm


Capacidades previas

- 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.


Compartir

 
logo FIB © Facultad de Informática de Barcelona - Contacto - RSS
Esta web utiliza cookies propias para ofrecerle una mejor experiencia y servicio. Si continúa la navegación, entendemos que acepta nuestra política de cookies. Versión clássica Versión móvil