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%
               (
geocities.com/gusdelact)