Ingenieria de Software.
Ingenieria Cibernetica y en Sistemas Computacionales
Quinto Semestre
Grupo 513. Semestre Agosto Diciembre 2001
Dias de clases: Lunes y Miercoles. 7 a 9 am
Lugar: Sala I
Profesor: Gustavo De la Cruz Tovar
Total de clases:
8 en Agosto
8 en Septiembre
8 en Octubre
8 Noviembre
32 en todo el semestre (64 horas)
Objetivo de la materia:
Conocer las técnicas de desarrollo de sistemas de software para construir
sistemas de informacion que cumplan sus funciones requeridas.
Conocimientos previos requeridos:
+ Programación orientada a objetos con Java.
+ Análisis y diseño de sistemas de información.
+ Estructuras de datos y Diseño de algoritmos.
Temario:
I. Naturaleza del software. (4 horas)
1. Caracterisiticas del software.
Correcto, confiable, robusto, desempeño óptimo, amigable, verificable,
mantenible, reusable, portable, entendible, interoperable, escalable.
2. Tipos de sistemas de cómputo.
De información, distribuídos, tiempo real y embedded.
3. Principios de la ingenieria de software.
4. Arquitecturas de software. Organización de los datos, procesamiento
y entrada/salida.
5. Principios de ingenieria de software.
Rigor y formalidad. Modularidad.Abstracción. Anticipación a cambios.
Generalidad. Escalabilidad.
6. Arquitectura de un ambiente de ingenieria de software.
Las cuatro dimensiones. Personas, Proceso, Tecnología, Producto.
Tareas:
+ Ejemplo de un producto de la industria y verificar si cumple con las
caracteristicas del software.
+ Buscar en Internet un ejemplo de los tipos de sistemas de cómputo mencionados en clase.
+ Construir un módulo para leer archivos tipo CSV y entender el por qué de
la ingenieria de software
+ Resumen de la lectura Cap. 2 y 3 libro McConnell.
II. Diseño y especificación de software. (16 horas)
1. Uso de la especificacion de software.
2. Tipos de especificaciones.
3. Especificaciones formales. Interfases. Tipos abstractos de datos.
Contratos de software.
4. Especificaciones operacionales. Diagrama de flujos de datos. Diagramas E/R.
5. Lenguaje unificado de modelado. UML. Diagramas estáticos.
Diagramas de colaboración. Diagramas de estado. Diagramas de secuencia.
Diagramas de módulos. Diagramas de procesos.
6. Diseño guiado por contrato e interfases. Frameworks. Programación Literaria.
7. Patrones de Diseño. Creación. Estructural. Comportamiento.
Tareas:
+ Construir una especificación formal.
+ Constuir un caso de uso.
+ Aplicar UML para diagramar sistemas de información.
+ Diseñar un framework utilizando interfases y programación literaria.
+ Organizar el diseño de un sistema utilizando patrones de diseño.
+ Resumen de la lectura Cap. 4 libro McConnell.
Práctica.
Análisis y diseño de un sistema de información.
Examen I. Sobre el tema I y II, aspectos teóricos, se aplicará por escrito.
III. Técnicas y herramientas para codificacion de software (14 horas)
1. Estilo de codificación de programas.
2. Selección de algoritmos y estructuras de datos.
3. Filosofía de Implantación de software en distintos lenguajes. Estructurados.
Orientado a objetos. Scripts. De datos.De propósito específico.
Ejemplos. C, Java,Perl,Python,XML,Visual Basic
4. Construcción de componentes o módulos de software.
Codificación. Liberación. Documentación.
5. Armado de sistemas de infórmación utilizando componentes.
6. Herramientas de codificación de software. Editores. Control de versiones.
Compiladores. Construcción de Bibliotecas. Documentadores, Ambientes Gráficos,
Componentes de terceros, IDEs
7. Ejemplos. EMACS, CVS, Makefile, javadoc,CWEB,Swing,componentes de terceros,
BeanBox y BML.
Tareas.
+ Codificar un programa utilizando los estándares de codificación propuestos.
+ Aplicar algoritmos y estructuras de datos para resolver un conjunto de problemas.
+ Codificar un programa en distintos lenguajes de cómputo.
+ Construir un JavaBean, para identificar como codificarlo, documentarlo y liberarlo.
+ Utilizacion de las herramientas de software descritas.
+ Busqueda en Internet de una herramienta CASE y una herramienta IDE
IV. Mantenimiento de software. (14 horas)
1. Depuración de software. Técnicas de depuración. Utilizacion de depuradores.
2. Verificación de software. Diseño de pruebas. Herramientas para generar pruebas. (Expect)
3. Optimización del desempeño de software. Técnicas de optimización.
Uso de analizadores de desempeño.
4. Portabilidad y Liberación. Técnicas para liberar el software en distintos ambientes.
Ejemplos usando filosofía del GNU y CPAN.
5. Integración de aplicaciones. Protocolos de comunicación entre componentes.
CORBA, RMI, DCOM. Integración con bases de datos. Generacion de reportes.
Tareas:
+ Corregir y depurar un conjunto de programas.
+ Construir pruebas para validación de programas.
+ Aplicar optimizaciones a un conjunto de programas.
+ Seguir los pasos necesarios para liberar un componente Java, utilizando
técnicas del GNU y CPAN.
+ Comunicar dos modulos de software utilizando CORBA.
+ Construir un módulo que interacture con una base de datos.
+ Busqueda en Internet de depuradores y herramientas IDE.
+ Resumen de la lectura del capítulo 15 libro McConnell.
Práctica II.
Resolver de los capítulos 1 a 8 ejercicios indicados del libro
"Práctica de Programación" de Kernighan.
Pràctica III.
Codificar y aplicar todas las técnicas de mantenimiento de software del
caso planteado en la práctica I, usando las técnicas estudiadas en el tema III y
IV.
Examen II. Exámen práctico, sobre computadora, en donde se evaluará el uso de las
técnicas y herramientas explicadas en clase.
V. Administración del proceso de producción del software. (6 horas)
1. Modelos de maquilación de software. Modelo de cascada, espiral, la catedral y el bazar. Otros modelos.
2. Planeación del proyecto. Estimación de tiempo y costos.Diagramas de Gantt.
Organización de equipos de trabajo.
3. Soporte al sistema de software liberado. Transferencia del conocimiento.
Tareas:
+ Aplicar el modelo de cascada y espiral para un pequeño sistema de información.
+ Constuir un pequeño sistema de información utilizando la filosofia de
colaboración propuesta por el software de código abierto.
+ Resumen de la lectura Cap. 7,8 y 9 libro McConnell.
+ Planeación de un equipo de trabajo y división de tareas.
+ Selección de una metodología de desarrollo en base a los capítulos 17 a 42
del libro de McConnell.
VI. Casos prácticos de ingenieria de software (6 horas)
1. Construcción de un sistema de información WWW.
2. Construcción de un sistema cliente/servidor.
3. Planteamiento del proyecto final.
Examen III.
Proponer un esquema de administración de un proyecto de software.
Caso para resolver y llevar a casa usando la metodología de software de dominio
público.
Planeacion:
Tema I a II. 6 de agosto a 5 septiembre.
Entrega práctica I día 5 septiembre.
Examen I Lunes 10 de septiembre.
Tema III a IV. 7 de septiembre a 7 noviembre.
Entrega práctica II 15 de octubre.
Entrega práctica III 7 de noviembre.
Exámen II 12 de noviembre.
Tema V a VI. 7 a 28 de noviembre.
Entrega Práctica III 28 de noviembre.
Exámen III 3 de diciembre.
Bibliografia:
** Kernighan. La practica de programacion. Ed. Pearson.
** McConnel. Desarrollo y Gestion de Proyectos Informaticos. Ed. Mc Graw Hill.
* Ghezzi. Software Engineering. Ed. Prentice Hall.
* Meyer. Construccion de Software orientado a Objetos. 2a. Edicion.Ed. Pearson
* Booch. Jacobson. El lenguaje unificado de modelado. Ed. Pearson.
* Gamma. Design Patterns. Ed. Addison Wesley.
* UML y Patrones de diseño. Ed. Pearson.
* Jaworski. Java 1.2 al Descubierto. Ed. Pearson.
+ Sommerville. Ingeneria de Software. Tercera Edicion. Ed. Pearson.
+ Pressman. Ingeneria de Software. Mc Graw Hill.
+ Booch. Analisis y diseño orientado a objetos. Segunda Edicion. Ed. Pearson.
+ Martin. Metodos orientados a objetos. Conceptos Fundamentales. Ed. Pearson.
+ Martin. Metodos orientados a objetos. Consideraciones Practicas. Ed. Pearson.
+ UML in a Nutshell. Ed. O'Reilly.
+ Grand. Patterns in Java. Ed. Wiley
+ Coad. Java Design. Ed. Yourdon Press.
+ Flanagan. Java examples in a Nuthsell. Ed. O'Reilly.
+ http://java.sun.com/jdc. Tutoriales de Java
+ http://www.tuxedo.org/~esr/writings/cathedral-bazaar.
+ http://www.alphaworks.ibm.com
+ http://www.gnu.org
+ http://www.perl.com
+ http://www.xml.com
NOTA
** significa que es un libro sobre el cual se van a pedir diversas tareas.
* significa libros que son utilizados como fundamento esencial de la materia
+ libros de consulta
Tareas:
La entrega se hara de manera electrónica.
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.
Enviar todos los archivos compresos, en formato ZIP.
La cuenta de correo a donde se envia es gusdelact@yahoo.com.mx. Incluir en
el campo Asunto: (Subject:) el nombre de la persona que entrega.
Prácticas.
La entrega se hara de manera electrónica. 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.
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 3 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.
El primero fungira como el lider del proyecto, considerando cada práctica y proyecto final
como un proyecto, el segundo como programador y la persona técnica capaz de decidir todos los puntos
técnicos y el tercero como el que soportará la aplicación y darle la calidad necesitada para su
entrega. 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 3 personas.
Evaluacion
Tareas: 15 % (promedio de todas las tareas entregadas)
Prácticas (3): 30%
Examenes (3) : 25%
Proyecto Final: 30%
Puntos a considerar:
+ La clase comienza a las 07:00 am. Se concluira tipicamente a las 08:45 am, dejando 15 minutos para aclarar dudas personales con el profesor.
+ La asistencia a clase es obligatoria. En caso de no poder asistir,
es responsabilidad del alumno estudiar de manera autonoma los puntos que no pudo
tomar. No es responsabilidad del profesor dar marcha atras a la clase para regulalizar alumnos atrasados.
Para resolucion de dudas originadas por dicha falta, utilizar los 15 minutos finales de la clase.
+ Las tareas y practicas deben ser entregadas con puntualidad.
+ Tareas, practicas, examenes que sean copiados son calificados con cero puntos.
+ Negocicacion de entregas, debe ser hecha por cada lider de proyecto del equipo. Si es para todo
el grupo, debe ser por el jefe de grupo. Procurar avisar con anticipacion retrasos en trabajos (1 semana).
No se acepta 24 horas antes.
+ Proyecto final copiado es motivo de examen extraordinario,
anulando las calificaciones de todo el semestre, sin punto de discusion.
+ La direccion de correo para dudas, comentarios y peticiones,
es gusdelact@yahoo.com.mx.
Por favor poner nombre completo de la persona en el "Asunto" (Subject) del programa
+ La asistencia al examen es obligatoria, y en caso de no hacerlo,
el examen sera calificado con 0 puntos.
Se pide puntual asistentica ese dia, y prevenir cualquier contingencia en la fecha
fijada.
+ El equipo de computo debe utilizarse para las labores de la materia.
No usarlo para navegar en Internet, chat, tareas de otras materias.
Si alguien no respeta este punto, se le pedira ceda su computadora a otra persona.
+ Por respeto a la clase, queda prohibido el uso de telefonos celulares,
radiolocalizadores o pagers. Si es necesario tenerlos activos,
ponerlos en el modo vibrador para que no molesten el curso de la clase y salir
discretamente del salon en caso de tener que atender la llamada.
               (
geocities.com/gusdelact)