INGENIERIA DE SOFTWARE
jonyjocker13 de Enero de 2014
34.537 Palabras (139 Páginas)273 Visitas
Fundamentos de Ingeniería de Software I
Programa de Estudios
Parte I: Generalidades
1.1 Introducción
1.2 Ingeniería del Software y sus paradigmas estructurado y orientado a objetos
1.3 La dualidad del software: producto y como proceso
1.4 El Producto
1.4.1 Evolución del software
1.4.2 Problemas del software
1.4.3 Aplicaciones del software
1.4.4 Características del software
1.4.5 Mitos del software
1.4.5.1 Mitos de gestión
1.4.5.2 Mitos del cliente
1.4.5.3 Mitos de lo desarrolladores
1.4.6 Calidad del software como producto
1.5 El Proceso
1.5.1 Visión genérica
1.5.2 Fase de Definición
1.5.2.1 Análisis del sistema
1.5.2.2 Planificación del proyecto de software
1.5.2.3 Análisis de requisitos
1.5.3 Fase de Desarrollo
1.5.3.1 Diseño
1.5.3.2 Codificación
1.5.3.3 Prueba
1.5.3.3.1 Casos de prueba
1.5.3.3.1.1 Prueba de la caja negra
1.5.3.3.1.2 Prueba de la caja blanca
1.5.3.3.2 Estrategias de prueba
1.5.3.3.2.1 Prueba de unidad
1.5.3.3.2.2 Prueba de integración
1.5.3.3.2.3 Prueba de validación
1.5.3.3.2.4 Prueba del sistema
1.5.4 Fase de Mantenimiento
1.5.4.1 Corrección
1.5.4.2 Adaptación
1.5.4.3 Mejora
1.5.4.4 Reingeniería
1.5.5 Modelos de Proceso de Software
1.5.5.1 Modelos Lineales Secuenciales
1.5.5.1.1 Clásico (o de cascada)
1.5.5.1.2 Desarrollo Rápido de Aplicaciones
1.5.5.2 Modelo de Construcción de Prototipos
1.5.5.3 Modelos Evolutivos
1.5.5.3.1 Modelo en Espiral
1.5.5.3.2 Modelo Incremental
1.5.5.3.3 Modelo de ensamblaje de componentes
1.5.5.4 Técnicas de Cuarta Generación (T4G)
1.5.5.5 Métodos formales
1.5.5.6 Sala limpia (clean room)
1.5.6 Combinación de paradigmas
1.5.7 Calidad del software como proceso (C.M.M. e I.S.O.)
Parte II: Gestión de proyectos de software
2.1 Gestión de proyectos de software
2.1.1 Personal
2.1.1.1 Participantes
2.1.1.2 Jefes de equipo
2.1.1.3 Estructuras del equipo
2.1.1.4 Liderazgo
2.1.1.5 Delegación
2.1.1.6 Criterios para elección de estructura organizacional
2.1.2 Problema
2.1.2.1 Ámbito del software
2.1.2.2 Características del ámbito
2.1.2.3 Cuestionario para obtención del ámbito del software
2.1.3 Proceso
2.1.3.1 Maduración del problema y del proceso
2.1.3.2 Planificación de proyectos
2.1.3.3 Objetivo de la planificación
2.1.3.4 Estimación del coste y esfuerzo del proyecto
2.1.3.5 Métodos de estimación de costo
2.1.3.5.1 Comparación de métodos
Parte III: Análisis de requerimientos
3.1 Obtención de requerimientos
3.2 Problemas en la obtención de requerimientos (de alcance, de entendimiento y de volatilidad)
3.3 Metodología para la obtención de requerimientos
Parte IV: Análisis estructurado
4.1 Antecedentes y conceptos
4.2 Herramientas de modelado
4.2.1 Diagrama de flujo de datos
4.2.2 Diccionario de datos
4.2.3 Diagrama de entidad-relación
4.2.4 Especificaciones de proceso
4.2.5 Diagrama HIPO (Hierachy Input Process Output)
4.2.6 Tabla de decisión
4.2.7 Diagrama de flujo
4.2.8 Diagrama de Nassi-Shneiderman
4.2.9 Diagrama de Ferstl
4.2.10 Diagrama de transición de estados
4.3 Balanceo de modelos
Parte V: Diseño estructurado
5.1 Consejos para un diseño de calidad
5.2 Conceptos fundamentales de diseño
5.2.1 Abstracción
5.2.2 Refinamiento
5.2.3 Modularidad
5.2.4 Arquitectura del software
5.2.5 Jerarquía de control
5.2.6 Estructura de datos
5.2.7 Procedimiento del software
5.2.8 Ocultamiento de información
5.2.9 Diseño modular efectivo
5.2.9.1 Independencia funcional
5.2.9.2 Cohesión
5.2.9.3 Acoplamiento
5.3 Métodos de diseño
5.3.1 Diseño Arquitectónico
5.3.2 Diseño de datos
5.3.3 Diseño de la interfaz
5.3.4 Diseño procedimental
Parte VI: Codificación estructurada
6.1 Acciones a seguir para un buen estilo de codificación
6.2 Documentación interna del código
6.3 Lenguajes de Programación e Ingeniería del Software
6.3.1 El porqué de estudiar lenguajes de programación
6.3.2 Breve historia de los lenguajes de programación
6.3.3 Influencias en la evolución de los lenguajes de programación
6.3.4 Atributos de un buen lenguaje de programación
6.3.5 Paradigmas de los lenguajes de programación
6.3.5.1 Aspectos de Programación Imperativa del Tipo
Procedimental
6.3.6 Los lenguajes y sus niveles
6.3.7 Estructura sintáctica
6.3.7.1 BNF (Forma de Backus-Naur)
6.3.7.2 Esquemas (diagramas o gráfica) de sintaxis
6.3.7.3 Elementos significativos de un lenguaje de programación
(comparación de lenguajes)
Parte VII: Prueba estructurada
7.1 Objetivos de la Prueba
7.2 Principios de la Prueba
7.3 Atributos de una buena prueba
7.4 Diseño de Casos de prueba
7.4.1 Prueba de la caja blanca
7.4.2 Prueba de la caja negra
7.5 Estrategias de prueba
7.6 La Depuración
7.6.1 La dificultad de la depuración
Parte VIII: Mantenimiento estructurado
8.1 Tipos de mantenimiento
El proceso de mantenimiento
8.2 Costo del mantenimiento
8.3 Mantenimiento y configuración del software
1.1 Introducción
Ingeniería del Software
Ingeniería Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y de las fuentes de energía (Diccionario de la Real Academia Española de la Lengua).
Conjunto de conocimientos y técnicas cuya aplicación permite la utilización racional de los materiales y de los recursos naturales, mediante invenciones, construcciones u otras realizaciones provechosas para el hombre (Real Academia de Ciencias Exactas, Físicas y Naturales de España).
Software • Instrucciones (programas de computadora) que cuando se ejecutan proporcionan la función y el rendimiento deseados.
• Estructuras de datos que permiten a los programas manipular adecuadamente la información.
• Documentos que describen la operación y el uso de programas.
1.2 Ingeniería del Software
• Estudio de los principios y metodologías para desarrollo y mantenimiento de sistemas de software [Zelkovits,1978].
• Aplicación práctica del conocimiento científico en el diseño y construcción de programas de computadora y la documentación asociada requerida para desarrollar, operar (funcionar) y mantenerlos [Bohem,1976].
• Disciplina tecnológica y administrativa dedicada a la producción sistemática de productos de programación, que son desarrollados y modificados a tiempo y dentro de un presupuesto definido [Fairley,1990]
A partir de una combinación de las anteriores, podría sugerirse la siguiente definición:
"Disciplina tecnológica dedicada a la generación de productos de programación que son definidos, desarrollados y mantenidos tanto a un tiempo, costo y con la calidad previamente especificada".
1.3 Dualidad del software
Sabemos que la luz se define tanto como ondas electromagnéticas como por un flujo de partículas energéticas llamadas fotones; que un ser humano se compone tanto de alma como de cuerpo; que (dentro del contexto gramatical) un número dual es el que en ciertas lenguas, como el griego, designa dos personas o dos cosas y que existen sistemas filosóficos y religiosos que admiten dos principios, ya sea el bien o el mal, alma y cuerpo, etc. Se le llama entonces dualidad de la luz, dualidad del ser humano, dualidad de un número y dualidad de sistemas filosóficos y religiosos respectivamente. De la misma manera, dentro del ámbito computacional existe la dualidad del software, ya que se le puede estudiar desde dos enfoques: tanto como producto como proceso.
Los enfoques producto y proceso se encuentran implícitos en la definición de la Ingeniería del Software, área de estudio que se define como una disciplina tecnológica dedicada a la generación de productos de programación que son definidos, desarrollados y mantenidos tanto a un tiempo, costo y con la calidad predeterminada.
Como producto es un transformador de información que genera, gestiona, adquiere, modifica, muestra o bien transmite la información que puede ser tan simple como un solo bit o tan compleja como una simulación en ambientes que requieran simultáneamente recursos como el sonido, datos e imágenes. El software hace entrega a empresas y universidades el resultado de su transformación: la información, esto es, su función ha sido en los últimos años el de satisfacer preguntas planteadas. Se estudia entonces su evolución, sus problemas,
...