Universidad La Salle Ing. Cibernética y en Sistemas Computacionales Ingeniería de Software Quinto Semestre Grupo 512 Profesor: Ing. Gustavo De la Cruz Tovar. Email para asuntos de la clase: gusdelact@yahoo.com.mx Horario: 7 a 9 am, martes y jueves Lugar: Sala de Cómputo I, Campus II. Objetivo. Estudiar y experimentar las metodologías para la construcción y mantenimiento de software de calidad, enfocandose en las cuatro dimensiones del software: Proceso,Producto, Proyecto y Personas. Requisitos: Programación estructurada y orientada a objetos Estructuras de datos, diseño de algoritmos y organización de archivos. Conocimiento de un lenguaje orientado a objetos, Java o C++ Metodología: La materia no debe estar fundamentada sólo en aspectos teóricos, sino que los conceptos expuestos deben ser EXPERIMENTADOS por los alumnos. Para esto se requiere que se acompañen cada aspecto teórico con ejemplos. Es típico que la materia de Ingeniería de Software que se imparta como una secuencia de tópicos sobre requerimientos, análisis, diseño, implantación, pruebas, adminstración de proyectos y recursos humanos. La principal crítica a este enfoque es que se corre el peligro de que los alumnmos no relacionen el amplio universo de conceptos como un todo unificado. Aunque el temario posteriormente expuesto parece que utiliza el enfoque secuencial de exponer la ingeniería de software, el instructor debe tratar de dividir la experiencias en pequeños proyectos de software, donde todas las fases sean tocadas. Es factible que en los pequeños proyectos se de importancia a un tópico en especial, pero no olvidar relacionarlo con los demás. El reto del instructor será lograr que los alumnos utilicen los conceptos gracias a la práctica obtenida y no dejar que sólo quede en la memorización de los conceptos. Por esta razón, se utilizará la sala de cómputo como herramienta INDISPENSABLE de aprendizaje, ya que por medio de la experiencia es facil aterrizar las problematicas de la ingeniería de software. En dichas experiencias se puede utilizar uno o varios lenguajes (por ejemplo Visual Basic y C++, o Java y Python) dependiendo de los conocimientos del instructor, pero también debe apoyarse de otras herramientas, para crear diagramas, para control de versiones, pruebas unitarias, medidores de desempeño, generadores de documentación. El software de código abierto es una fuente importante para obtener todo tipo de herramientas y de hecho el propio enfoque de la construcción de código abierto debe ser tomado como ejemplo de una manera de cubrir las cuatro dimensiones del software. Implica lo anterior un reto para el instructor, dado que su esfuerzo no debe ser sólo tener un enfoque en desarrollar la dimensión del producto y el proceso, sino que debe motivar el entendimiento del proyecto y de las personas, enfoque que sólo se podrá lograr con un trabajo de lleno con los alumnos y adaptado a cada persona. Se recomienda organizar a los alumnos en equipos de trabajo y enseñar a explotar las habilidades de cada integrante, así como reconocer como controlar las debilidades de los mismo; pero un punto importante es que está trabajando con gente joven que es de actitud abierta y muy crítica, lo cual es la mayor ventaja y el profesor debe servir como el guía a las metodologías de Ingeniería de Software. Laboratorio. Aprovechando que los alumnos conocen la teoría de objetos, se utilizará el lenguaje Java, dada la facilidad con la que es posible arrancar desarrollos sin limitantes en documentación o licencias (a diferencia del software de Microsoft). El software a utilizar es: JDK 1.3.x o 1.4.x NetBeans como herramienta IDE DIA, herramienta de dominio público para construir diagramas UML Temario Aspectos Teóricos I. Ingeniería de Software. Conceptos Básicos 1. Naturaleza y Cualidades del Software 2. Historia sobre metodologías de desarrollo del software 3. Areas de cómputo donde la ingeniería de software se utiliza 4. Principios de la ingeniería de software 5. Las cuatro dimensiones de la Ingeniería de Software. 6. Enfoques fundamentales sobre el proceso de software 7. El proceso unificado de desarrollo de Software 8. Desarrollo iterativo e incremental. 9. Fundamentos de administración de proyectos de Ingeniería de Software. 10 .Roles de las personas en la ingeniería de software 11. Herramientas para automatización de las tareas de ingeniería de software. 12. UML como herramienta de comunicación, documentación y automatización. II. Requerimientos y casos de uso. 1. Técnicas para levantar requerimientos de usuario 2. Artefactos 2.1. Documentación de los requerimientos 2.2 Modelos de caso de uso 2.3 Actor 2.4 Caso de uso 2.5 Glosario o diccionario de datos 2.6 Arquitectura desde la perspectiva de casos de uso 3. Funciones del analísta de sistemas, especificador de caso de uso, diseñador de interfases de usuarios y prototipos, Arquitecto 4. Flujo de trabajo 4.1 Manera par encontrar casos de uso y actores 4.2 Asignación de Prioridades a los casos de uso 4.3 Detalle de los casos de uso 4.4 Especificación del prototipo e interfaz de usuario 4.5 Aplicar un estructura ordenada a los casos de uso III. Análisis 1. Análisis de los requerimientos detallados 2. Artefactos 2.1 Modelo del Análisis 2.2 Clases de análisis 2.3 Realización de los casos de usos-análisis 2.4 Paquetes de análisis 2.5 Arquitectura desde la perspectiva del análisis 3. Funciones del Arquitecto, Ingeniero de casos de uso, ingenieros de componentes 4. Flujo de trabajo 4.1 Análisis de la Arquitectura 4.2 Análisis de un caso de uso 4.3 Análisis de una clase 4.4 Análisis de un paquete IV. Diseño. 1. Arquitectura de software 2. Marcos de trabajo (Frameworks) 3. Artefactos 3.1 Modelo del diseño 3.2 Clases del diseño 3.3 Realización de casos de uso-diseño 3.4 Diseño orientado a interfases 3.5 Descripción de la arquitectura desde el punto de vista del diseño 3.6 Modelos de despliegue de componentes 4. Funciones del arquitecto, ing. de casos de uso e ingeniero de componentes 5. Flujo de trabajo 5.1 Diseño de la arquitectura 5.2 Diseño de un caso de uso 5.3 Diseño de una clase 5.4 Diseño de un subsistema V. Implantación 1. Artefactos 1.1 Modelo de la implantación 1.2 Componente 1.3 Subsistema de implantación 1.4 Interfaces 1.5 Descripción de la arquitectura desde el punto de vista de la implantación 1.6 Integración de sistemas 2. Funciones del arquitecto, ingeniero de componentes e integrador de sistemas 3. Flujo de trabajo 3.1 Implantación de la arquitectura 3.2 Integración de sistemas 3.3 Implantación de un subsistema 3.4 Implantación de clases 3.5 Establecer pruebas unitarias VI Pruebas. 1. Diseño de pruebas e integración de software 2. Artefactos 2.1 Modelo de pruebas 2.2 Caso de prueba 2.3 Procedimiento de prueba 2.4 Componente de prueba 2.5 Plan de prueba 2.6 Defectos 2.7 Evaluación de pruebas 3. Funciones del diseñador de pruebas, ingeniero de componentes, pruebas de integración e ingeniero de pruebas del sistema 4. Flujo de trabajo 4.1 Planificación de pruebas 4.2 Diseño de pruebas 4.3 Implantación de pruebas 4.4 Pruebas de integración y de sistema 4.5 Análisis de los resultados VII Administración de proyectos de Ingeniería de Software. 1. Fundamentos de la administración de proyectos 2. Organización de los recursos. 3. Identificación de riesgos 4. Planificación de proyectos 5. Estimación de costos 6. Técnicas de administración de proyectos. Extreme Programming, Personal Software Process, Team Software Process y Capability Maturity Model Prácticas de Laboratorio. 0. Desarrollo sin metodología. Resolución de una ecuación de segundo grado, plantear problema y dividir en distintas personas el proceso de captura de datos, procesamiento y salida de resultados. 1. Caso de Introducción. Simulador de dos dados. Mostrar cada una de las fases o modelos de un producto a través de la generación de números aleatorios para construir una tirada de dados. Proveer requerimientos y construir caso de uso, clases y paquetes de análisis, diagrama de colaboración,clases y paquetes de diseño, implantación con un programa en Java, pruebas unitarias y liberación. 2. Enfasis en la etapa de requerimientos y casos de uso.Sistemas de pago y Facturación. Generar un documento de requerimientos y diccionario de datos 3. Análisis de un sistema simple de nómina, identificación de clases y paquetes de análisis . Proveer los requerimientos y desarrollar los casos de uso y análisis, utilizando UML 4. Diseño de sistemas. Diseño por interfaces. 5. Diseño de sistemas. Especificaciones formales, utilizando diseño por contrato. 6. Diseño de sistemas. Patrones de diseño. 7. Implantación de sistemas. Técnicas de codificación. 8. Implantación de sistemas. Componentes Gráficos. 9. Implantación de sistemas. Aplicaciones centradas en datos. XML como herramienta para representar datos y configuraciones del software. 10. Implantación de sistemas. Frameworks y modelos de componentes. Construcción y uso de JavaBeans 11. Implantación de sistemas. Control de versiones de código con CVS 12. Implantación de sistemas. Integración de aplicaciones utilizando Jython 13. Implantación de sistemas. Empaquetamiento de software. 14. Pruebas. Construcción de pruebas unitarias usando JUnit 15. Pruebas. Herramientas para medir desempeño Bibliografía El Proceso Unificado de Desarrollo de Software. Jacobson, Booch, Rumbaugh. Ed. Pearson. Ingeniería de Software. Ian Sommerville. Cuarta Edición. Ed. Pearson Software Engineering. An Object Orientd Perspective. Eric J. Braude. Ed. Wiley El lenguaje unificado de modelado. Booch. Jacobson. Ed. Pearson. UML in a Nutshell. Ed. O'Reilly. Construccion de Software orientado a Objetos. Bertrand Meye 2a. Edicion. Ed. Pearson Design Patterns. Erich Gamma. Ed. Addison Wesley. Patterns in Java. Grand. Ed. Wiley. La práctica de programación. Kernighan. Ed. Pearson. Software Engineering. Carlo Ghezzi. Ed. Prentice Hall. Object Oriented Modeling and Design for Database Applications. Michael Blaha. Tareas: La entrega se hara de manera electrónica. Cada equipo construira una pagina WWW. Debe existir una seccion para que cada integrante del equipo deposite sus tareas. Para trabajos escritos en formato ASCII o HTML, si se necesitan incluir figuras, deben estar en formato GIF, JPEG o PNG y anexarlas al correo. No utilizar formatos propietarios (MS Word u otros paquetes de edicion de texto) Para trabajos de programacion se deben entregar solo el codigo fuente. Dejar todos los archivos compresos, en formato ZIP o JAR. La cuenta de correo a donde se envie la direccion WWW con la tarea, es gusdelact@yahoo.com.mx. Incluir en el campo Asunto: (Subject:) el nombre de la persona que entrega, clave ULSA y en el texto del correo la dirección WWW donde está la tarea. Prácticas. La entrega se hara de manera electrónica. En la página del Enviar un correo Incluir en el campo Asunto: (subject:) el nombre de uno de los integrantes del equipo y en el cuerpo del mensaje el nombre de todos los integrantes del equipo y la direccion WWW donde está la practica. Las reglas de formatos de entrega son idénticas a las tareas Equipos de trabajo: El objetivo de la materia no solo es mostrar el uso de tecnología, sino tambien integración de personas. Uno de los puntos esenciales en la ingenieria de software es el número de personas que participan en el proyecto. Una persona es un cuello de botella; pero el tener un equipo grande de programadores tambien es un riesgo. Por tanto, el criterio es de 4 personas a lo máximo. Seleccionar como integrantes del equipo alguien que tenga tendencias por administrar el tiempo y el trabajo, alguien que le guste programar y ser "hacker"(con vocacion a desvelarse por el gusto de programar) y alguien que le guste implantar (instalar, documentar) software. Se puede plantear un esquema donde se intercambien estos papeles. Proyecto Final. Construcción de una biblioteca de componente de software (JavaBean) en el que se apliquen los principios de la ingeniería de software expuestos en la materia. Lo desarrollaran de 1 a 4 personas. Evaluacion Tareas: 15 % (promedio de todas las tareas entregadas) Prácticas (3): 30% Examenes (3) : 25% Proyecto Final: 30%