UNIVERSIDAD NACIONAL DE RIO CUARTO Departamento: Computación. Carrera/s: Analista en Computación. Profesorado en Ciencias de la Computación. Licenciatura en Ciencias de la Computación. ASIGNATURA: Ingeniería de Software Código: 3304 Profesor Responsable: Marcela Daniele Profesor Co-Responsable: Paola Martellotto Equipo Docente: Marcelo Uva - Franco Brusatti Año Académico: 2011 Régimen de la Asignatura: cuatrimestral. Régimen de Regularidad: (Requisitos para obtener la regularidad) Forma de evaluación. Los alumnos son evaluados con exámenes parciales, exposiciones orales teóricas y talleres prácticos. Son dos exámenes parciales y un recuperatorio para cada uno de los parciales. Las exposiciones orales teóricas y los talleres se presentan como una actividad de trabajo en grupo, que los alumnos deben resolver, defender y entregar informes. Condiciones de Regularidad: Aprobar los parciales o su correspondiente recuperatorio resolviendo el 60 % del examen correctamente. Aprobar el 80% de las exposiciones orales teóricas. Aprobar el 100% de los talleres. Asignación de horas semanales: 4 hs de teóricos, 6 hs de prácticos y 2 hs de talleres. Exámenes parciales: (características y/o modalidad). El primer parcial incluye aproximadamente un 50 % de los temas abordados y el segundo parcial los restantes. Cada parcial es práctico e incluye ejercicios similares a los trabajados durante las clases prácticas. Examen Final: (características y/o modalidad). Consiste en un práctico escrito, que los alumnos deben hacer correctamente, para pasar luego a un examen teórico, que puede ser oral o escrito. Para aquellos alumnos que regularizan la asignatura aprobando los exámenes parciales en primera instancia, las exposiciones teóricas y los talleres, y consiguen hacer correctamente al menos el 80% de cada evaluación, el examen final consistirá solo de un coloquio, donde el alumno debe exponer un tema, previamente asignado por los docentes de la asignatura. Esta modalidad de coloquio será mantenida para los turnos de examen de diciembre 2010, febreromarzo 2011 y julio-agosto 2011.
Objetivos Propuestos: Introducir al alumno en conceptos básicos de ingeniería de software que van desde la planificación y gestión del proyecto hasta técnicas de prueba, incluyendo arquitecturas de sistemas de software, calidad y modelos de mejora de procesos de desarrollo. Introducir conceptos transversales a las etapas del desarrollo de software como el gerenciamiento de la configuración de software. Introducir conceptos básicos de tecnologías de software distribuidas. Utilizar herramientas de sistemas colaborativos y aprovechar las ventajas que los mismos otorgan a un grupo de desarrollo de software. Abordar conceptos sobre aspectos legales. Brindar fundamentos sobre propiedad Intelectual, licenciamiento de software y contratos informáticos. Mostrar las responsabilidades que tiene un ingeniero de software en el desarrollo de un sistema informático. Contenidos de aprendizaje: Unidad 1: Gestión de Proyectos Personas. Organización. Coordinación y Comunicación. Producto. Proceso. Proyecto. Herramientas. El Proyecto construye el Producto. Artefactos de un Producto. El Proyecto dirige Proyectos. Herramientas en el Proceso. Prácticas Críticas. Conceptos fundamentales de Sistemas Colaborativos. Unidad 2: Proceso de Software y Métricas de Proyecto. Medidas. Métricas. Indicadores. Métricas en el Proceso. Métricas del Proyecto. Medición del Software. Métricas orientadas al Tamaño. Métricas orientadas a la Función. Reconciliación de diferentes aproximaciones de Métricas. Métricas para la Calidad del Software. Integración de Métricas con el Proceso de Software. Control Estadístico del Proceso. Estableciendo un Programa de Métricas. Herramientas. Métricas para Sistemas Orientados a Objetos: Objetivo. Métricas orientadas a Clases. Métricas CK. Métricas de Lorenz y Kidd. Métricas orientadas a Operaciones. Métricas para Proyectos orientados a Objetos. Unidad 3: Planificación de Proyectos. Objetivos. Recursos. Humanos. Software. Técnicas de Descomposición. Estimación Basada en el Problema. Estimación basada en puntos de función. Estimación basada en el proceso. Modelos Empíricos de Estimación. Modelo COCOMO y COCOMO II. Ecuación del Software. Planificación Temporal. PERT. Diagrama de Gantt. Herramientas. Unidad 4: Gestión de la Configuración del Software Introducción. Línea Base. Elementos de Configuración de Software. El Proceso de Gestión de la
Configuración del Software. Control de Versiones. Control de Cambios. Auditoria de la Configuración. Herramientas. Unidad 5: Aseguramiento de la Calidad del Software Conceptos. Calidad de Software. Factores de Calidad de McCall. Costos. Actividades SQA. Revisiones de Software. Revisiones Técnicas Formales. Calidad Estadística. Medidas. Fiabilidad. Disponibilidad. Seguridad. Plan de SQA. Estándares de Calidad ISO 9000. Unidad 6: Especificación de Software Uso. Calidad. Verificación. Declaración de tipos, valores, axiomas. Tipos base. Redes de Petri. Aplicación y Propiedades. Grafo de Alcanzabilidad. Especificaciones usando Object Constraint Language (OCL). Especificación Formal. Unidad 7: Arquitectura de Software y Patrones Arquitecturales Arquitectura. Conceptos. Descripción. Un proceso de desarrollo centrado en la Arquitectura. Vistas de la arquitectura de los diferentes modelos del proceso. Patrones. Categoría de Patrones. Patrones de Diseño: Conceptos. Patrones Arquitecturales: Layers. Pipes y Filter. Backboard. Broker. Model-View-Controller (Smalltalk). Presentation- Abstraction-Control. Reflection. Mikrokernel. Unidad 8: Introducción a Sistemas Distribuidos Introducción. Conceptos básicos, como middleware, integración de aplicaciones. Tecnologías Web. Servicios Web: Arquitectura, SOAP, WSDL, UDDI. Unidad 9: Propiedad Intelectual, licenciamiento de software y contratos informáticos. Aspectos legales. Auditoría y Peritaje. Introducción. Conceptos Básicos. Fundamentos. Derecho de autor. Patentes y Marcas. Licencias de software libre. Software Libre y Opensource. Códigos de Etica. Leyes de la Propiedad Intelectual. Definición y Objetivos de la Auditoría Informática. Tipos y clases de Auditoría. Formas Metodológicas de Enseñanza y Aprendizaje: El curso de Ingeniería de Software se desarrolla con clases teóricas, clases prácticas y talleres integradores. De acuerdo al plan de estudios, el curso de Ingeniería de Software contiene una duración total de 170 horas, que son divididas en aproximadamente 56 horas de clases teóricas, 84 horas de clases prácticas y las restantes son destinadas a los talleres. En las clases teóricas, el docente responsable del curso imparte los contenidos teóricos a todo el grupo de alumnos. Además, se planifican algunos temas para que los alumnos, organizados en grupos, investiguen, analicen y expongan al resto. Esta actividad favorece la investigación, la interacción y el trabajo en equipo para estos futuros profesionales.
En las clases prácticas, los estudiantes trabajan sobre una guía de ejercicios, previamente elaborada por los docentes para cada tema, compuesta por ejercicios que van creciendo en complejidad. El docente asiste a los alumnos, confrontando diferentes soluciones planteadas para cada problema y se debaten las ventajas y desventajas de cada solución. Utilizan lenguajes de programación, herramientas de modelado, herramientas para ingeniería inversa y directa, herramientas para el control de versiones, herramientas de testing, entre otras, y se plasman las soluciones planteadas en la computadora. Talleres Integradores Los Talleres integradores son una actividad donde se aplican e integran los temas desarrollados durante el curso, como así también conocimientos adquiridos por los estudiantes en otras asignaturas. Los talleres se realizan en grupos de tres o cuatro alumnos, donde cada uno se enfrenta con la necesidad de intercambiarse e interrelacionarse con sus pares, permitiéndole confrontar sus conocimientos adquiridos con los demás, y reconocer errores o afianzar su aprendizaje. Por otra parte, los docentes pueden evaluar el accionar de los alumnos y reforzar aquellos temas que presentan mayor dificultad. Sobre la base de sistemas colaborativos, los cuales soportan grupos de personas involucradas en una tarea común (u objetivo) y proveen una interfaz a un ambiente compartido, permitiendo el trabajo en equipo y se orienta a mejorar la productividad, replicar y sincronizar la información. Al finalizar, cada grupo realiza una presentación del proyecto a los docentes y a los demás grupos de estudiantes. En el año 2010 el taller está estructurado en cuatro etapas: Etapa 1: Herramientas automáticas y semiautomáticas para la prueba de software. Junit es una herramienta que permite realizar la ejecución de pruebas de manera automática a clases Java, permitiendo evaluar su funcionamiento. Etapa 2: planificación temporal utilizando diagrama de Gantt. Herramienta sugerida GanttProject. Etapa 3: Tareas de gestión de la configuración de software. La herramienta seleccionada para esta etapa es Subversión(SVN) Etapa 4: Implementar nuevas funcionalidades agregadas en la etapa 1. Usar Doxygen para la documentación del código fuente. Trabajos Prácticos
Se brinda a los alumnos una guía de ejercicios prácticos sobre los siguientes temas: Nº 1: ESTIMACIÓN DE PROYECTOS DE SOFTWARE Nº 2: MÉTRICAS ORIENTADAS A OBJETOS Nº 3: PLANIFICACIÓN TEMPORAL Nº 4: TÉCNICAS DE MODELADO: REDES DE PETRI Nº 5: ESPECIFICACIÓN FORMAL: OCL Nº 6: PATRONES ARQUITECTURALES Además, la guía contiene ejercicios tipo a los tomados en exámenes de años anteriores, con el fin de que puedan autoevaluarse en cada uno de los temas previo a los exámenes parciales o al examen final. Bibliografía: Software Engineering. Pressman, Roger S. - Ed. Mc-Graw Hill - 5ta Edición. 2001. An Integrated Approach to Software Engineering. Springer. Pankaj Jalote. 2005. Fundamentals of Software Engineering. Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli - Prentice Hall, 1991. Software Engineering. Ian Sommerville - Addison-Wesley, 5ta Edición. 1996. Object Oriented Software Construction. Bertrand Meyer. Prentice Hall. El Proceso Unificado de Desarrollo de Software. Ivar Jacobson, Grady Booch, James Rumbaugh - Addison-Wesley, 2000. Software Testing: A Craftsman s Approach. Paul C. Jorgensen - CRC Press, 1995. Design Patterns, Elements of Reusable Object/Oriented Software. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissedes. - Addison-Wesley, 1995. Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal. Handbook of Software Quality Assurance- G. Gordon Schulmeyer, James I. McManus - Prentice Hall, 3ra Edición. 1999. Software Requirement & Specifications. Michael Jackson - Addison Wesley, 1995. Web Services. Concepts, Architectures and Applications. Gustavo Alonso, Fabio Casati, Harumi Kuno, Vijay Machiraju. Springer Verlag 2004. ISBN 3-540-44008-9 Análisis y Diseño de Sistemas. Kendall y Kendall. Pearson Education. 2005.
Luz Clara, Bibiana, (2001). Manual de Derecho Informático, Ed. Nova Tesis, Santa Fe. Auditoria en Informática. 2da Edición. José Antonio Echenique García. Mc Graw Hill. NOTA: En cada una de las teorías se indican los capítulos de lectura obligatoria de cada material presentado en la bibliografía, y los de lectura sugerida. Firma: