INSTITUTO UNIVERSITARIO DE TECNOLOGÍA DE CARIPITO
INFORMATICA
PROF SAMIRA KHAZMOU
Asignatura:
Análisis y Diseño de Sistemas I
Tema 4. Introducción a la Ingeniería de Software.
Objetivos:
1. Definir la Ingeniería de Software (IS).
2. Discutir los problemas del desarrollo de software.
3. Establecer las características de un producto elaborado bajo la IS.
4. Familiarizarse con los métodos de ingeniería aplicados al desarrollo de software.
Contenidos:
• Ingeniería: definición y el proceso de solución de problemas en ingeniería
• Software
• Ingeniería de Software
• Problemas en el desarrollo de software
• Evolución de la Ingeniería de Software
• Características de un buen producto de la Ingeniería de Software
• El equipo de desarrollo de software
• Funciones de un ingeniero de software
• Objetivos la Ingeniería de Software
• Nociones o conceptos fundamentales de la Ingeniería de Software:
¿Qué es la Ingeniería?
o “Arte de aplicar los conocimientos científicos a la invención, perfeccionamiento o
utilización de la técnica [o tecnología] en todas sus determinaciones” Dicc. Real
Academia".
o Arte: virtud, disposición… para hacer una cosa”
o Ingenio: “facultad en el hombre para discurrir [reflexionar] o inventar con prontitud
y facilidad”
Aspectos claves de problemas en Ingeniería:
o Actividad humana que aplica el conocimiento científico a la solución de un
problema.
o Involucra procesos de diseño, construcción y mantenimiento de un objeto.
o Supone eficiencia y eficacia: la eficiencia es una relación entre los resultados obtenidos y
los recursos utilizados; la eficacia implica el cumplimiento de objetivos pre-definidos y la
satisfacción del usuario.
El proceso de solución de problemas en ingeniería:
¿Qué significa el término Software?
• "aquellos programas, procedimientos, reglas y documentación asociada con la
computación, así como los datos pertenecientes a la operación de un sistema de
computación" (IEEE, 1983).
• Es un objeto abstracto - producto del intelecto del hombre:
o No es visible, no es tangible.
o No tiene propiedades físicas, tales como volumen, peso, masa, color u olor.
o No se deteriora, ni desgasta con el tiempo.
o Tiene una estructura modificable: está sujeto a cambios continuos periódicos o no.
o Las modificaciones continuas ocasionan con el tiempo una pérdida de
confiabilidad.
o Se desarrolla, no se construye: Sus componentes crecen progresivamente mediante
adiciones y correcciones sucesivas de sus componentes.
o Su mantenimiento es complejo: sus componentes no se reemplazan, se corrigen.
Componentes del software:
Ingeniería de Software
¿Qué es la Ingeniería de Software?
• "Es el establecimiento y uso de principios (métodos) sólidos de ingeniería con el fin de
obtener sistemas programados en forma económica, confiable y que trabajen en máquinas
reales [computadores]" F.L. Bauer, 1972.
• "la aplicación práctica del conocimiento científico en el diseño y construcción de
programas para computadores y la documentación asociada requerida para desarrollarlos,
operarlos y mantenerlos". B. Boehm, 1976.
• "el enfoque sistemático para el desarrollo, operación, mantenimiento y eliminación de
software" IEEE, 1983.
• "software engineering is concerned with software systems built by teams rather than by
individuals, uses engineering principles in the development of these systems and includes
both technical and non-technical aspects... software engineers must be able to communicate
orally and in writing. They should be aware of the importance of project management..." I.
Sommerville, 1992.
• "Software engineering is the systematic application of tools and techniques in the
development of computer-based applications [software]" S. Conger, 1994.
Problemas que motivaron el desarrollo de la I.S.
La "Crisis del Software", a finales de los años 60, dio origen a la I.S., caracterizada por:
• Imprecisión de los planes del proyecto y de la estimación de costos.
• Baja productividad del personal de desarrollo y mantenimiento.
• Baja calidad del producto: alto costo, baja confiabilidad, baja flexibilidad y adaptabilidad,
etc.
• Insatisfacción del cliente o usuario.
• Retrasos en la entrega del producto.
• Altos costos de desarrollo:
o el costo de producir software es muy superior al de producir hardware.
• Complejidad creciente en los requerimientos de software:
o los nuevos requerimientos siempre tienden a superar la tecnología disponible.
• Escasez de personal altamente calificado.
• Complejidad del mantenimiento.
Evolución de la Ingeniería de Software
1950-1959 1960-1969 1970-1979 1980-1989 1990-2000
Orientación Orientación Orientación Orientación hacia la Orientación hacia la Orientación hacia la
del proceso artística: técnica: ingeniería y gerencia Ingeniería de Software Ingeniería de
de proyectos de Software Asistida por
La Se reconoce software Computador
codificación la necesidad
es un arte. de diseñar los
programas
Ciclo de Prueba y error Basado en el Modelo tradicional de Modelos: Modelos:
Vida del proceso cascada
ingenieril: • prototipos • formales
Proyecto
• programación
Enfasis en el exploratoria • re-
diseño de
utilización
algoritmos y
• de espiral de
en su
componente
codificación
s
Desconocidas Programación Métodos: Métodos: Métodos:
Estructurada
Métodos y • Estructurados • Evolutivos • Orientados
Diseño "Top- • Basado en • Orientados a a objetos
Técnicas Down" Datos Entidades ([Link]
más ón)
• Orientados a
divulgadas Programación Refinamiento Paso-a- • Formales
Objetos
Modular Paso ([Link]ó
n) Análisis orientado a
Redes de Petri HIPO objetos
Encapsulamiento de
Diagramasde Diseño Modular Datos Diseño orientado a
Flujo objetos
Estilo de Tipos de Datos
Programación Abstractos ISO 9000
Encubrimiento de Prototipos Integración de
Información métodos
Diseño Evolutivo
Abstracción de Datos Integración de
Diseño Participativo software
Modelos de Datos
(Rel., ER) Programación Re-utilización de
orientada a objetos componentes
Diseño Estructurado
CASE Ingeniería de
Análisis Estructurado Dominios
Métricas de software
Pruebas de Programas Re-ingeniería de
Lenguajes de procesos
Verificación y especificación formal
Validación Programación
Aseguramiento de la paralela
Administración de Calidad
Proyectos de Software
Economía de Software
Características de un producto de la Ingeniería de Software
Según Conger [1994]:
1. Se produce a tiempo (dentro de lo establecido en el plan del proyecto)
2. Su costo total está dentro de lo establecido en su presupuesto.
3. Está validado y es útil (hace lo se supone debe hacer)
4. Es amistoso
5. Es confiable (libre de errores)
6. Es flexible
7. Es adaptable
8. Es comprensible
9. Es eficiente El equipo de desarrollo de software
El equipo de desarrollo de software
Participantes en el proceso de desarrollo de software (tomado de [Pfleeger, 1998]).
Diferencias básicas entre un ingeniero de software, un computista y un programador:
INGENIERO DE COMPUTISTA PROGRAMADOR
SOFTWARE
PRINCIPAL El desarrollo y Desarrollar o proveer Producción de código
ACTIVIDAD mantenimiento de un entendimiento de probado.
sistemas programados las teorías y conceptos
subyacentes de la
Computación
ENFASIS Análisis, especificación, Teorías y conceptos de Codificación de
diseño, verificación y la Computación programas
validación de software
CONOCIMIENTOS Computación: Teoría de la Lenguajes de
BASICOS Algoritmos, estructuras Computación, programación,
de datos, bases de datos, lenguajes formales, algoritmos, y nociones
redes de computadores, arquitectura de de sistemas operativos.
matemáticas discretas,
computadores,
sistemas operativos, etc.
matemáticas discretas,
lógica, etc.
Ingeniería:
Especificación y diseño
de sistemas complejos,
verificación y
validación,
aseguramiento de la
calidad.
Gerencia de proyectos:
Estudios de factibilidad,
estimación de costos,
planificación,
organización y control
de proyectos.
Funciones de un Ingeniero de Software
• Gerenciar un proyecto de desarrollo de software:
o Planificación del proyecto: elaboración de planes, presupuestos y calendarios de
eventos.
o Organización y dirección del grupo de trabajo.
o Control del proyecto: control de costos, tiempos y recursos humanos.
• Desarrollar, evaluar y mantener software.
• Determinar las necesidades y requerimientos de los usuarios de un sistema programado.
• Analizar y especificar formal o gráficamente los requerimientos, a fin de determinar y
resolver posibles conflictos en la verificación y validación del sistema.
• Establecer un diseño del sistema que satisfaga los requerimientos dentro de restricciones de
costos, tiempo, recursos humanos, equipos, etc.
• Asegurar la calidad y confiabilidad del sistema producido.
• Garantizar, a través del mantenimiento, la operación eficiente y económica de los sistemas
producidos.
Objetivos de la Ingeniería de Software
Objetivos generales:
• Aumentar la calidad de sus productos.
• Disminuir o controlar el costo, tiempo y demás recursos empleados en el desarrollo y
mantenimiento de software.
• Aumentar la productividad de los grupos de desarrollo y mantenimiento.
• Garantizar un alto grado de satisfacción en los usuarios del software.
Objetivos específicos:
• Alta confiabilidad:
o Producción de software con una baja probabilidad de falla ("libre de errores").
o Ocurre un error cuando el software no hace lo que se supone debería hacer.
o Medida de confiabilidad: Tiempo medio entre fallas.
• Alta flexibilidad o mantenibilidad:
o Habilidad del sistema programado para adaptarse o ajustarse a los cambios,
mediante la modificación de su estructura y componentes.
o Los cambios son ocasionados por nuevos requerimientos, detección de fallas o bajo
rendimiento.
• Alta eficiencia y bajo costo:
o Uso óptimo de recursos de computación (ej., espacio de memoria y tiempo de
ejecución) y disminución de los costos de desarrollo, operación y mantenimiento.
• Alta comprensibilidad:
o Lograr que el sistema sea entendible interna y externamente.
o Comprensibilidad interna: claridad de la estructura del software y del código
fuente.
o Comprensibilidad externa: claridad y facilidad de comprensión y uso del sistema a
través de su interfaz.
• Alta utilidad
Guía de estudio elaborada por: Ing. MSc. Samira Khazmou.