Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

26
Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software

Transcript of Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Page 1: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Ingeniería de Software IConceptos Básicos de la Ingeniería de Software

Page 2: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Objetivos

Introducir los conceptos fundamentales de la disciplina

Conocer las características del Software

Fundamentar el desarrollo de software a partir de la Ingeniería de Software

Page 3: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Contenido

Generalidades de la Ingeniería de Software

Grandes proyectos de Software

Características del producto de software

Principios, métodos, herramientas y metodologías

Page 4: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Generalidades de la IS

Qué es la Ingeniería de Software ??

Es el área de las ciencias de la computación que trata con la construcción de sistemas de software, los cuales son tan grandes y complejos que se construyen con equipos de ingenieros [Ghezzi 91].

El establecimiento y uso de principios de ingeniería robustos, orientados a obtener software económico que sea fiable y funcione de manera eficiente sobre máquinas reales (Fritz Bauer)[NAU69].

Es un conjunto de tres elementos claves – métodos, herramientas y procedimientos – que facilitan el control del proceso de desarrollo del software para obtener un producto de calidad de una forma productiva (Pressman) [PRE25].

Page 5: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Generalidades de la IS

Porqué la Ingeniería de Software ??

En los inicios, el desarrollo de sistemas basados en computador ponía énfasis en el Hardware más que en el Software.

El desarrollo de software se veía más bien como un “arte”

Hoy, el mayor costo y riesgo del desarrollo de sistemas basados en computador no están en el Hardware, sino que en el Software.

El desarrollo de Software ya no implica sólo el desarrollo de algunos programas, si no que sistemas cada vez más complejos de millones de líneas de código, interfaces e interacción con sistemas de Bases de Datos.

El componente SOFTWARE es cada día más crítico para el negocio

Page 6: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Generalidades de la IS

Historias de terror

El Bank of America gastó US$23 M en un proyecto a 5 años. Se terminó gastando mas de US$60 M para finalmente abandonar el proyecto. Pérdidas totales estimadas en mas de US$1000 M.

El bombardero B1 requirió US$ 1000 M más de lo proyectado para mejorar sus sistema de defensa

AllState (seguros) comenzó en 1982 un proyecto de automatización integral de sus operaciones de 5 años de duración y US$8 M de presupuesto. Fue abandonado en 1993 después de gastar US$100 M.

Blue Cross (isapre norteamericana) perdió más de US$60 M en pagos incorrectos debido a un error en el software por el que habían pagado mas de US$200 M.

Page 7: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Generalidades de la IS

Porqué la Ingeniería de Software ??

Porqué lleva tanto tiempo terminar los Sistemas ?

Porqué tiene un costo tan elevado ?

Porqué no podemos encontrar todos los errores antes de liberar el Software ?Porqué no cumplimos los plazos de entrega ?

Porqué no entregamos un software de buena calidad ?

Son algunas de las preguntas que motivan el desarrollo de la Ingeniería de Software, como la disciplina que permite desarrollar un producto de software en un tiempo prudente, con costos razonables, que sea fiable y de buena calidad.

Page 8: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Grandes proyectos de software

Qué es un proyecto grande de software ?

Cuántas líneas de código tiene Windows NT ?Entre 6 y 10 Millones

El software del Bombardero B2 tiene 3.5 Millones

Un switch telefónico típico tiene 2 Millones

Como referencia, 1 Millón de líneas de código (1MLOC) equivale a:

13.000 páginas (75 líneas por página)

26 tomos de 500 páginas cada uno

22 horas para imprimir (10 pp/min)

Medio día para recompilar

Page 9: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Particularidades de estos sistemas

ESCALA: Una sola persona no puede entenderlo todo

COMPLEJIDAD: Requiere trabajo en equipo problemas humanos, coordinación, motivación, etc.CAMBIO: Durante y después del desarrollo

VIDA: Años, décadas

IMPRECISIÓN: Requerimientos, Diseños, programas, resultados

Grandes proyectos de software

Page 10: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Cuál es el problema ?

Problemas de mantenimiento

Altísimas probabilidades de errores sólo en ESCRIBIR el código

Enorme cantidad de tiempo para incorporar modificaciones o nuevos requerimientos

Atrasos (Eje: Windows95 liberado recién en 1996)

Excesivo gasto en mantenimiento (En promedio, se gasta el 60% de los recursos en mantenimiento)

Altos costos

Recurso Humano: Difícil cuantificación; A veces muy escaso o simplemente no existe

Metodologías: Variadas y difíciles de comparar entre si; El avance en el desarrollo o generación de nuevas metodologías es tremendamente lento respecto al avance tecnológico

Herramientas de productividad: No existe gran variedad, aunque si gran cantidad; productos propietarios; son caras; no siempre son útiles.

Planificación: Siempre se hace Nunca se cumple; Se sacrifica rápidamente las actividades planificadas debido a las urgencias del negocio.

Grandes proyectos de software

Page 11: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Qué es Software ?

1) Instrucciones, o programas de computador, que cuando se ejecutan proporcionan la función y el comportamiento deseado

Características del Software

2) Estructuras de datos que facilitan a los programas manipular adecuadamente la información

3) Documentos que describen la operación y el uso de los programas

Software es 1) , 2) y 3)

Page 12: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

El Software se desarrolla, no se fabrica, no se manufactura

Características del Software

El Software no se desgasta, pero sufre de envejecimiento

El Software no se desgasta, pero se estropea

Durante la vida del software, se incorporan cambios que provocan nuevos erroresNo hay piezas de repuestos para el SW, como en el HW el mantenimiento del SW tiene una complejidad mayor que el mantenimiento del HW

Page 13: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Los diferentes tipos de SW contemplan:

Características del Software

SW de Sistemas: SW que sirve para otros SW

SW de Tiempo Real: SW orientado a medir, analizar y controlar sucesos del mundo real, conforme suceden en la realidad

SW de Gestión: SW orientado al procesamiento de información comercial y administrativo. (SW transaccional – SW de Gestión)

SW Científico y de Ingeniería: SW para la astronomía, vulcanología, biología molecular, CAD, CASE, simuladores, fabricación automática, etc.

SW Empotrado: SW residente en ROM que se utiliza para controlar productos y sistemas de los mercados industriales y de consumo: Microondas, automóvil, etc.

SW de PC : Procesadores de texto, planillas electrónicas, etc.

SW de IA (Inteligencia Artificial): Sistemas expertos, Sistemas basados en el conocimiento, etc.

Page 14: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Cualquier producto de Software debe contar con las siguientes características

Características del Software

Correctitud: Grado en que el producto de SW satisface los requerimientos para lo cual fue concebido. Es el mínimo nivel de calidad exigible

Confiabilidad: Grado en que se puede esperar que el producto de SW realice las funciones esperadas, con la precisión requerida

Robustez: Capacidad del SW para comportarse de manera “razonable” ante situaciones inesperadas.

Portabilidad: Capacidad (Esfuerzo que se debe hacer para...) del SW para operar en diferentes ambientes (HW y SO)

Reusabilidad:Grado en que el SW, o partes del SW, se pueden utilizar en otras aplicaciones, distintas al propósito original por el que fueron concebidos

Eficiencia: La cantidad de recursos de computadora y de código requerido por el SW para llevar a cabo sus funciones (HW más poderoso v/s Algoritmos de Orden n2, n o constante)

Page 15: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

QUÉ NECESITAMOS PARA CONSTRUIR PRODUCTOS DE SW PROFESIONALES ?????

Principios, métodos, herramientas y metodología

La clave está en dar un enfoque de ingeniería al desarrollo del SW y, al mismo tiempo, mejorar las técnicas y las herramientas en un proceso continuo

Qué significa “dar un enfoque de ingeniería” ???

Significa construir productos de SW....

Basándonos en los principios de la Ingeniería de Software

Aplicando los métodos adecuados a cada una de las etapas del proceso de desarrollo

Utilizando las herramientas adecuadas, que nos permitirán aplicar los métodos de manera correcta

Page 16: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodología

• Manejo formal del proceso de desarrollo

• Documentación formal

• Trazabilidad

• Manejo de configuración y control de versiones

QUÉ NECESITAMOS PARA CONSTRUIR PRODUCTOS DE SW PROFESIONALES ?????

La clave está en dar un enfoque de ingeniería al desarrollo del SW y, al mismo tiempo, mejorar las técnicas y las herramientas en un proceso continuo

• Análisis cuidadoso del problema

• Diseño cuidadoso usando los principios del diseño (Abstracción, ocultamiento, etc.)

• Implementación cuidadosa

• Pruebas rigurosas

• Planificación y control del proyecto

Page 17: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodología

En un proyecto de SW se genera, además del código, muchos otros documentos....

QUÉ NECESITAMOS PARA CONSTRUIR PRODUCTOS DE SW PROFESIONALES ?????

La clave está en dar un enfoque de ingeniería al desarrollo del SW y, al mismo tiempo, mejorar las técnicas y las herramientas en un proceso continuo

• Requerimientos formales

• Diseño de alto nivel y diseño detallado

• Plan y casos de pruebas

• Documentación de usuarios

• Informes de errores y correcciones

• Plan de mantenimiento

Page 18: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa Ingeniería en general ataca problemas prácticos REALES

Genera soluciones razonables en términos de costos, uso de recursos, etc.

Tiene su base en la ciencia: Resultados repetibles, usa modelos matemáticos (es formal)

Page 19: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa IS se sustenta en Principios, métodos y técnicas, metodologías y herramientas

Principios

Proposiciones o verdades que rigen el desarrollo

Ej: Principios del análisis de requisitos, principios del diseño

Rigor y formalidad

• Grados de rigurosidad

• Sistematicidad

• Fundamentos matemáticos (métricas, medición de objetivos, estimaciones, etc.)

Separación de intereses

• División del problema en partes

• Generación de las partes que conforman el todo

Page 20: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa IS se sustenta en Principios, métodos y técnicas, metodologías y herramientas

Principios

Proposiciones o verdades que rigen el desarrollo

Ej: Principios del análisis de requisitos, principios del diseño

Modularidad

• Tratar cada parte del todo como una entidad independiente de las otras partes

• Posibilidad cierta de integrar las partes para formar el todo

• Cohesión y acoplamiento

Abstracción

• Formulación de modelos que representen la realidad

• Identificación entre lo relevante y lo desechable

Page 21: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa IS se sustenta en Principios, métodos y técnicas, metodologías y herramientas

Principios

Proposiciones o verdades que rigen el desarrollo

Ej: Principios del análisis de requisitos, principios del diseño

Anticipación al cambio

• Proyección de futuro

• Incorporación de cambios

• Mantención y Evolución

Generalidad

• Descubrir los detalles que pueden ser generalizables

• Potencial de reutilización

Page 22: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa IS se sustenta en Principios, métodos y técnicas, metodologías y herramientas

Principios

Proposiciones o verdades que rigen el desarrollo

Ej: Principios del análisis de requisitos, principios del diseño

Incrementalidad

• Desarrollo step by step

• Desarrollo de versiones incrementales

Page 23: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Principios, métodos, herramientas y metodologíaLa IS se sustenta en Principios, métodos y técnicas, metodologías y herramientas

Métodos

Indican el COMO construir técnicamente el SW.

Los métodos abarcan la planificación, estimación de proyectos, análisis, diseño, arquitectura, codificación, prueba y mantenimiento.

Ej:Análisis orientado a objetos, Análisis estructurado moderno

Herramientas

Las herramientas soportan la aplicación de la metodología

Ej: Herramientas CASE

Page 24: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Conclusiones

POR LO TANTO....

Ingeniería de Software

Disciplina que relaciona métodos, metodologías y herramientas necesarias para la construcción de grandes y complejos productos de Software, pero de alta calidad

Software

Producto del proceso de desarrollo (aplicaciones ejecutables) y TODA la información necesaria para su implementación y utilización

Page 25: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.

Conclusiones

En general el proceso de construcción de un producto de SW comprende las etapas de...

• Análisis y especificación de requisitos

Queremos SW que se use. Queremos usuarios contentos (Correctitud)

• Diseño del SW

Queremos diseños de acuerdo a los requisitos. Queremos diseños realistas

• Construcción

Programación eficiente y de acuerdo a las especificaciones de diseño

• Verificación y Validación

Queremos productos confiables, que satisfagan las especificaciones de diseño

• Apoyo en el computador

Queremos hacer todo esto de la manera más eficiente posible

Page 26: Ingeniería de Software I Conceptos Básicos de la Ingeniería de Software.