Curso 2010-11
Ingeniería del Software (21418)
Titulación/estudio: Grado en Ingenieria en Informática (3377)
Curso: segundo
Trimestre: 2n/3r
Número de créditos ECTS: 8 créditos
Horas de dedicación del estudiante: 200 horas
Lengua o lenguas de la docencia: catalán y castellano
Profesor: Vladimir Estivill-Castro
1. Presentación de la asignatura
La Ingeniería del Software se encarga de desarrollar y dar mantenimiento a sistemas de software para que se comporten confiablemente y eficientemente. También se concentra en desarrollar software de manera costeable y satisfaciendo requerimientos de clientes y usuarios que han definido y especificado la solución. Es una disciplina importante por el espectro y amplio impacto que tiene el software en las actividades económicas de la humanidad y la sociedad moderna y el papel que juega el software en sistemas críticos y en la seguridad de muchas aplicaciones. La disciplina integra métodos formales de matemáticas, de las ciencias de al computación y de las practicas y orígenes de la ingeniería.
Luego entonces, la Ingeniería de Software es la aplicación sistemática, disciplinada, cuantificable y rigurosa de enfoques de desarrollo, operación, mantenimiento e implantación del software. Por supuesto, el estudio de los enfoques que conducen a la producción de software de calidad es materia central de la ingeniería de software. Simplemente, la ingeniería del software se preocupa por construir software bien. El software no debe fallar porque hoy en día miles de actividades se controlan, manejan o regulan por sistemas que ejecutan software.
La Ingeniería de Software engloba una serie de conocimientos, definiciones de procesos, practicas, herramientas y estándares. Todo este conocimiento es utilizado por equipos de trabajo que llevan acabo tareas que producen productos de software de alta calidad y que cumplen las necesidades de los usuarios. Las tareas incluyen el análisis y al especificación, el diseño, la implementación, verificación, al realización de pruebas, el mantenimiento y la gestión de los proyectos, todo esto a tiempo, y dentro de lo presupuestado.
La ingeniería del software moderna tiene un enfoque importante también en cuanto a que los proyectos produzcan sistemas sustentables, cuyos impacto al medio ambiente sea mínimo y cuyos objetivos considere también principios sociales y éticos. Los Ingenieros de Software aplican la tecnología para desarrollar nuevos sistemas, construir nuevos instrumentos y utilizar la tecnología para el progreso y el beneficio general garantizando la calidad de los resultados.
2. Competencias que se deben lograr
Se deben poseer capacidades para el trabajo en equipo, la solución de problemas y la organización y planificación. Diseño conceptual, Habilidades cognitivas
|
Competencias generales |
Competencias específicas |
|
Instrumentales Interpersonales Sistémicas 1.- Gestión de la información. Un problema complejo se presenta con mucha información, a veces inconsistente y/o incompleta. El ingeniero de Software debe organizar al documentación de requerimientos, de gestión del proyecto y del producto. |
|
3. Contenidos
La descripción breve del contenido es
- Ciclo de vida del software
- Modelado visual y uso de lenguajes como UML
- Análisis y diseño orientado a objetos
- Uso y aplicación de patrones de la ingeniería del software
La descripción detallada es la siguiente.
3.1. Parte I: La ingeniería de Software y sus procesos.
Bloque de contenidos 1: Ciclo de Vida y metodologías:
Conceptos:
- Noción de Ingeniería de Software
- Relación de la Ingeniería de Software con los ámbitos profesionales de la informática y con otras profesiones.
- Ciclo de Vida de los productos de software y sus modelos.
Procedimientos:
- Identificación de las diversas partes o procesos del ciclo de vida genérico y de las actividades que se realizan en cada fase.
- Análisis de las ventajas y desventajas de los diferentes esquemas para un ciclo de vida y en relación con el contexto de un proyecto determinado.
Actitudes:
- Interés por al Ingeniería de Software y por su importancia en la mayoría de los ámbitos de la profesión informática.
-
Espíritu critico para evaluar las ventajas y los inconvenientes de los diversos modelos de un ciclo de vida y de las metodologías de la ingeniería del software
Bloque de contenidos 2: Ingeniería de Requerimientos:
Conceptos:
- Definición y clasificación de tipos de requerimientos
- Elementos de un documento de requerimientos y formalismos asociados
- Ciclo de Vida de la ingeniería de requerimientos
Procedimientos:
- Clasificación de los requerimientos n funcionales, no funcionales y del demonio.
- Identificación de "stake-holders" y de actores.
Actitudes:
- Uso de diagramas de casos de uso en UML para analizar y descubrir requerimientos.
- Redacción de Documentos de Requerimientos como resultado de un análisis de un caso practico.
-
Mantenimiento de un Documento de requerimientos y gestión de su actualización como resultado de cambios.
Bloque de contenidos 3: Metodologías:
Conceptos:
- Descripción de diversos ejemplos de metodologías
- Métodos ágiles vs tradicionales
- Metodologías basadas en procesos vs metodologías basadas en personas.
Procedimientos:
- Identificación de beneficios e inconvenientes de diversas metodologías.
- Aplicaciones de las practicas y procesos de algunas de las metodologías.
Actitudes:
- Actitud critica par evaluar una metodología.
3.2. Parte II: Análisis y diseño orientado a objetos.
Bloque de contenidos 4: Análisis y diseño orientado a objetos:
Conceptos:
- Definición y propiedades de los objetos
- Definición y propiedades de las clases
- Las relaciones de herencia, composición, agregación, asociación y dependencia.
- El polimorfismo y las jerarquías de herencia
- El; lenguaje C++ como ejemplo de un lenguaje orientado a objetos.
Procedimientos:
- Partición de un problema complejo empleando los conceptos y los procedimientos del paradigma orientado a objetos.
- Utilización del lenguaje UML para modelar los sistemas Orientados a Objetos.
- Utilización de un lenguaje como UML para modelar sistemas Orientados a Objetos.
- Utilización de un lenguaje como C++ para implementar un diseño orientado a objetos
- Desarrollo dirigido por pruebas.
Actitudes:
- Las buenas practicas de programación (encapsulamiento, no duplicación, métodos cortos, nomenclatura clara)
- Adecuación a las convenciones para la codificación en el equipo de trabajo.
- Adaptación al cambio, el código que conforma a un modelado en constante evolución
-
Comprensión de las ventajas del desarrollo dirigido por pruebas.
Bloque de contenidos 5: El modelado con UML.
Conceptos:
- Ventajas del modelado visual
- Definición e historia breve de UML
- Los principales diagramas UML y os elementos incluidos en ellos..
Procedimientos:
- Utilidad de los diversos diagramas UML y su uso en diversas fases del ciclo de vida.
- Comprensión de los diagramas UML y su aplicación a un problema concreto.
- Utilización de los diagramas ML mas importantes (diagramas de casos de uso estáticos y de secuencia) en al resolución de un problema y en menor medida de algunos otros tipos de diagramas.
Actitudes:
-
Aceptación de la importancia de utilizar un formalismo estandar a la hora de utilizar diagramas.
Bloque de contenidos 6: Patrones de software.
Conceptos:
- Concepto de patrón en el software
- Catalogo de patrones y su utilidad
Procedimientos:
- Utilización de UMP para entender un patrón de diseño concreto
- Utilización de los catálogos de patrones para identificar un patrón como solución genérica de un problema concreto.
- Utilización de patrones en el diseño de una solución para un caso concreto.
Actitudes:
- No se debe re-inventar la rueda. La gran mayoría de los problemas que aparecen en el ámbito practico están solucionados y la solución esta disponible en forma de un patrón que seguramente tiene características de calidad superiores a lo que podemos desarrollar en una primera iteración aislada.
4. Evaluación
4.1. Criterios de evaluación generales
Se evaluaran todos los tipos de competencias de la sección 3 así como las competencias especificas a través de las siguientes actividades evaluadoras y de naturaleza obligatoria:
- Un examen final al termino de los dos trimestres cuya aprobación consiste el la resolución satisfactoria de un problema concreto en tiempo limitado
- Problemas prácticos resueltos en laboratorio (en parejas) y que pueden formar parte de un proyecto global durante el transcurso del curso en dos trimestres (la evaluación es continua y la nota de las ocho sesiones de problemas prácticos corresponde a un 40%)
- Tres pequeños exámenes parciales que profundizan en conceptos y su discusión con respecto a los contenidos de la asignatura.
- Participación y discusión durante los seminarios del material de clase, las sesiones de seminarios y los ejercicios realizados durante los seminarios.
La nota final de la asignatura es calculada como sigue
Examen Final (10%)
Tres pequeños tests (10%)
Sesiones de problemas en el laboratorio (40%)
Cada sesión es 5% (8x5%-40%)
Participación en seminarios y discusión de ejercicios prácticos (20%)
Cada sesión es 2% (10x2%=20%)
Siempre y cuando se cumpla con el siguiente criterio de integridad de la evaluación:
ES NECESARIO APROBAR EL EXAMEN FINAL, AL MENOS DOS DE LOS 3 PEQUENOS TEST, AL MENOS EL 60% DE LOS EJERCISIOS DE SEMINARIOS Y COMPLETAR MAS DEL 50% DE LAS SESSIONES DE PROBLEMAS PRACTICOS PARA APROBAR LA ASIGNATURA.
4.2. Detalle de la evaluación:
- Examen Final
En un examen final se planteara un problema concreto y una serie de preguntas de análisis y diseño. El problema deber de resolverse en un tiempo limitado. Se podrá disponer de apuntes y de material complementario.
Que se evaluará
Competencias generales
- Resolución de Problemas
- Organización y Planificación
Competencias especificas
- Capacidad de analizar y describir los requerimientos de un problema complejo de la ingeniería del software
- Capacidad de diseñar una solución a un problema complejo de software partir de requerimientos dados.
Cuando se evaluara
Durante el periodo de exámenes finales del tercer trimestre.
- Tres pequeños tests
En un tiempo limitado se deberá resolver varios ejercicios pequeños que corresponden a la aplicación de los conceptos. Los ejercicios serán similares a ejercicios resueltos con anterioridad en discusiones de seminarios o en laboratorio y se enfocan a una practica concreta o a un concepto especifico.
Que se evaluará
Competencias generales
- Resolución de Problemas
- Organización y Planificación
Competencias especificas
- Capacidad de analizar y describir los requerimientos de un problema complejo de la ingeniería del software
- Capacidad de diseñar una solución a un problema complejo de software partir de requerimientos dados.
- Capacidad de aplicar UML
- Capacidad de aplicar conceptos del análisis y el diseño orientado a objetos
- Capacidad de aplicar y usar patrones de la ingeniería de software
- Capacidad de distinguir entre diferentes metodologías de la ingeniería de software
Cuando se evaluara
Aproximadamente a la mitad de cada uno de los dos trimestres que conforman l asignatura y al final del primer trimestre de la asignatura.
- Sesiones de problemas en el laboratorio
Durante el laboratorio se introducirán herramientas que apoyan las metodologías de la ingeniería de software y que conformaran fases de un proyecto a realizar en equipo y donde se pondrán en practica las competencias generales y especificas. Se deberá colaborar con otra persona y realizar una comunicación practica tanto oral como escrita participando en roles como usuarios y "stake-holders"
Que se evaluará
Competencias generales
- Resolución de Problemas
- Organización y Planificación
- Trabajo en equipo
- Comunicación efectiva y eficiente
Competencias especificas
- Capacidad de analizar y describir los requerimientos de un problema complejo de la ingeniería del software
- Capacidad de diseñar una solución a un problema complejo de software partir de requerimientos dados.
- Capacidad de aplicar UML
- Capacidad de aplicar conceptos del análisis y el diseño orientado a objetos
- Capacidad de aplicar y usar patrones de la ingeniería de software
- Capacidad de distinguir entre diferentes metodologías de la ingeniería de software
Cuando se evaluara
Las 8 sesiones de problemas se reparten durante los dos trimestres resultado en una sesión de problemas aproximadamente cada 3 semanas. Normalmente las actividades de una sesión de problemas y laboratorio deberán completarse durante la sesión misma y los resultados de una sesión de problemas deberán entregarse antes de la sesión siguiente.
- Participación en seminarios y discusión de ejercicios prácticos
Durante sesiones de seminarios se discutirán soluciones y conceptos en casos y ejercicios prácticos. Probablemente se requerirá que los estudiantes se presenten con soluciones parciales o completas y que sean expuestas y discutidas ante al colectividad de la clase y/o tutor. El objetivo es profundizar en las capacidades generales y especificas y lograr una retroalimentación y evaluación continua.
Que se evaluará
Competencias generales
- Resolución de Problemas
- Organización y Planificación
- Trabajo en equipo
- Comunicación efectiva y eficiente
Competencias especificas
- Capacidad de analizar y describir los requerimientos de un problema complejo de la ingeniería del software
- Capacidad de diseñar una solución a un problema complejo de software partir de requerimientos dados.
- Capacidad de aplicar UML
- Capacidad de aplicar conceptos del análisis y el diseño orientado a objetos
- Capacidad de aplicar y usar patrones de la ingeniería de software
- Capacidad de distinguir entre diferentes metodologías de la ingeniería de software
Cuando se evaluara
Las 20 sesiones de problemas se reparten durante los dos trimestres resultado en 10 sesiones cada trimestre, y por lo tanto en una sesión de seminario semanal. Normalmente las actividades de una sesión de seminario consiste en la discusión de soluciones a casos concretos, problemas específicos y en la discusión colectiva o la presentcion por estudiantes participantes de sus soluciones para poner a debate alternativas y obtener retroalimentación del facilitador del seminario.
5. Bibliografía y recursos didácticos
5.1. Bibliografía Recomendada
•· Fowler, Martin UML distilled : a brief guide to the standard object modeling language / Martin Fowler with Kendall Scott Reading (Mass.) : Addison-Wesley, cop. 2000
•· Meyer, Bertrand Construcción de software orientado a objetos / Bertrand Meyer ; traducción: Miguel Katrib Mora, Rafael García Bermejo, Salvador Sánchez ; revisión técnica: Jesús García
•· Madrid [etc.] : Prentice Hall, 1998
•· Sommerville, Ian Software engineering / Ian Sommerville Harlow : Addison-Wesley, 2009
•· Larman "Applying UML and patterns: an introduction to object-oriented analysis and design"
5.2. Bibliografía Complementaria
•· Costal, DolorsEnginyeria del software especificació : especificació de sitemes orientats a objectes amb la notació UML / Dolors Costal, M. Ribera Sancho, Ernest Teniente Barcelona : Edicions UPC, 2000
•· Joyanes Aguilar, LuisPla docent assignatura Estudis Programación orientada a objetos / Luis Joyanes Aguilar Madrid : Osborne/McGraw-Hill, cop. 1998
•· Peralta Giménez, Allen J. Enginyeria del software : programació orientada a objectes / Allen J. Peralta Giménez, Horacio Rodríguez Hontoria Barcelona : Edicions UPC, 1994 Upper Saddle River, N.J. : Prentice Hall PTR, cop. 1998
•· Pressman, Roger S. Ingeniería del software un enfoque práctico / Roger S. Pressman adaptación: Darrel Ince traducción: Rafael Ojeda Martín ... [et al.] dirección, coordinación y revisiónMadrid McGraw-Hill cop. 2002
•· Schach, Stephen R. Software engineering / Stephen R. Schach Boston : Irwin, cop. 1993 Shtern, Victor
•· Core C++ : a software engineering approach / Victor Shtern Upper Saddle River : Prentice Hall PTR, cop. 2000
•· Stroustrup, Bjarne The C++ programming language / Bjarne Stroustrup
5.3. Recursos Didácticos
- Apuntes en formato libre
- Colección de Problemas
- Web de la asignatura al Moodle
6) Metodología
La asignatura le representa al estudiante 18 sesiones de teoría (2 horas cada una), 8 sesiones de Problemas en laboratorios (2 horas cada una) y 20 sesiones de seminarios (2 horas cada uno) guante dos trimestres.
Las sesiones de teoría son clases magistrales en las que participan todos los estudiantes y se introducen los conceptos básicos teóricos, las metodologías y se demuestran los procedimientos adecuados para la resolución de problemas complejos por herramientas y técnicas de la ingeniería del software.
Las sesiones de seminario son en grupos pequeños y consisten en la discusión de problemas concretos y al retro-alimentación inmediata derivada de discusión constructiva de soluciones propuestas por estudiantes y facilitadotes de ejercicios concretos.
Las sesione de problemas son en grupos medianos pero los estudiantes trabajan en parejas en la culminación de fases de un proyecto de software aplicando también herramientas concretas para la producción de software en un contexto de ingeniería de software. Estas sesiones de laboratorio tienen como objetivo una realización practica y una ilustración concreta que permite utilizar herramientas como pueden ser herramientas CASE, herramientas IDE, herramientas de control de versiones. Su objetivo es llevar los conceptos teóricos a la practica y sirven APRA complementar las competencias y capacidades en un sentido real , concreto y practico.
7) Programación de actividades.
Los horarios de clase y el detalle de cada sesión teórica, de problemas en laboratorio o de seminario se publica en el Calendario y Horarios de la WEB de l'ESUP.