Upload
samira
View
211
Download
1
Embed Size (px)
Citation preview
INSTITUTO UNIVERSITARIO DE TECNOLOGÍA DE CARIPITOINFORMATICA
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 del proceso
Orientación artística:
La codificación es un arte.
Orientación técnica:
Se reconoce la necesidad de diseñar los programas
Orientación hacia la ingeniería y gerencia de proyectos de software
Orientación hacia la Ingeniería de Software
Orientación hacia la Ingeniería de Software Asistida por Computador
Ciclo de Vida del Proyecto
Prueba y error
Basado en el proceso ingenieril:
Enfasis en el diseño de algoritmos y en su codificación
Modelo tradicional de cascada
Modelos: prototipos programaci
ón exploratoria
de espiral
Modelos: formales
re-utilización de componentes
Desconocidas
Programación
Métodos: Estructura
Métodos: Métodos: Orientad
Métodos y Técnicas más divulgadas
Estructurada
Diseño "Top-Down"
Programación Modular
Redes de Petri
Diagramasde Flujo
dos Basado en
Datos
Refinamiento Paso-a-Paso
HIPO
Diseño Modular
Estilo de Programación
Encubrimiento de Información
Abstracción de Datos
Modelos de Datos (Rel., ER)
Diseño Estructurado
Análisis Estructurado
Pruebas de Programas
Verificación y Validación
Administración de Proyectos de Software
Economía de Software
Evolutivos Orientados
a Entidades Orientados
a Objetos (1a.Generación)
Encapsulamiento de Datos
Tipos de Datos Abstractos
Prototipos
Diseño Evolutivo
Diseño Participativo
Programación orientada a objetos
CASE
Métricas de software
Lenguajes de especificación formal
Aseguramiento de la Calidad
os a objetos (2a.Generación)
Formales
Análisis orientado a objetos
Diseño orientado a objetos
ISO 9000
Integración de métodos
Integración de software
Re-utilización de componentes
Ingeniería de Dominios
Re-ingeniería de procesos
Programación paralela
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 SOFTWARE
COMPUTISTA PROGRAMADOR
PRINCIPAL ACTIVIDAD
El desarrollo y mantenimiento de sistemas programados
Desarrollar o proveer un entendimiento de las teorías y conceptos subyacentes de la Computación
Producción de código probado.
ENFASIS Análisis, especificación, diseño, verificación y validación de software
Teorías y conceptos de la Computación
Codificación de programas
CONOCIMIENTOS BASICOS
Computación: Algoritmos, estructuras de datos, bases de
Teoría de la Computación,
Lenguajes de programación,
datos, redes de computadores, matemáticas discretas, sistemas operativos, 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.
lenguajes formales, arquitectura de computadores, matemáticas discretas, lógica, etc.
algoritmos, y nociones de sistemas operativos.
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.