tema 1 introduccion a la ingenieria del software

33
Fundamentos de Ingeniería del Software Tema 1. Introducción a la Ingeniería del Software

Upload: munky-jutres

Post on 07-Feb-2016

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 1 Introduccion a La Ingenieria Del Software

Fundamentos de Ingeniería del Software

Tema 1. Introducción a la Ingeniería del Software

Page 2: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 2

Motivación

(Algoritmos y estructuras de datos)

(Interfaces + Integración)

UN SISTEMA

SOFTWARE

UN PRODUCTO SOFTWARE

UN PROGRAMA

(Ingeniería del Software)

UN PROYECTO SOFTWARE

Page 3: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 3

Motivación (II)

Información = Ppal. activo de las empresas

desarrollo de SI fuertes presiones

Artesanal

Disciplina de ingeniería

(calidad, productividad)

Calidad

Herramientas

Gestión de proyectos

Page 4: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 4

Desarrollo del software.Comunicación compleja

1. Lo que el director desea. 2. Como lo define el director deproyecto.

3. Como se diseña el Sistema.

4. Como lo desarrolla elprogramador.

5. Como se ha realizado lainstalación.

6. Lo que el usuario quería.

Page 5: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 5

El Software

El Software: Instrucciones que, cuando se ejecutan, proporcionan la

funcionalidad deseada. Estructuras de datos que facilitan a las instrucciones

manipular adecuadamente la información. Documentos que describen el desarrollo, uso, instalación

y mantenimiento de los programas. Software: "programas de computador,

procedimientos, y, posiblemente, la documentación asociada y los datos pertenecientes a las operaciones de un sistema de computación".

Incluye: entrenamiento, soporte al consumidor e instalación.

Page 6: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 6

Características del software

Elemento lógico, no físico.Desarrollado, no ‘fabricado’.No se ‘estropea’, ¡se deteriora!

(deterioro por ‘cambios’)Mayoritariamente cerrado:

usar todo o nada(poco ensamblaje de componentes:

reutilización--)

Page 7: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 7

Atributos de Calidad del Software (Bell 2000)

Fiable Capacidad de ofrecer los

mismos resultados bajo las mismas condiciones.

Eficiente Utilización óptima de los

recursos de la máquina.

Robusto No poseer un comportamiento

catastrófico ante situaciones excepcionales (Tolerante a fallos).

Correcto Se ajusta a las

especificaciones dadas por el usuario.

Portable Capaz de integrarse en entornos

distintos con el mismo esfuerzo.

Adaptable (extensibilidad) Modificar alguna función sin que

afecte a sus actividades.

Inteligible Diseño claro, bien estructurado y

documentado.

No Erróneo No exista diferencia entre los

valores reales y los calculados

Reutilizable (reusabilidad)

Page 8: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 8

Atributos de Calidad del Software (Sommerville 2002)

MantenibilidadConfiabilidad

fiabilidadseguridadprotección

EficienciaUsabilidad

Page 9: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 9

Perspectiva histórica del desarrollo de software

Década 50-60: “Software como un añadido”. Desarrollo artesanal, a medida. Lenguajes de bajo nivel.

Década 60-70: Software como producto. Década lenguajes y

compilación. “Crisis del software”.

Década 70-80: Programación estructurada. Ingeniería del Software. Primeros métodos

estructurados.

Década 80-90: Tecnología de SGBDs, SOs... Nuevos paradigmas de

programación y de producción de programas:

OO C/S

90’s - actualidad: Análisis/Diseño OO. Tecnología CASE Componentes y reutilización Interoperabilidad

(CORBA, .NET...) Internet

ISw. distribuida repositorios de componentes

reutilizables e-business; e-commerce ...

Page 10: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 10

La problemática actual del software

Incapacidad para estimar tiempo, costo y esfuerzo para el desarrollo de un producto software.

Falta de calidad del producto software.

Avance del hardware y necesidad de aplicaciones más complejas. Cambio en la relación entre el costo

hardware/software.

Page 11: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 11

Relación coste hw./sw.

0

20

40

60

80

100

60 70 80

Hardware

Software

Porcentaje del coste total del sistema

años

Page 12: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 12

Problemas del software (II)

¿Porqué lleva tanto tiempo terminar los programas?

¿Porqué es tan elevado su costo?¿Porqué no podemos encontrar todos

los errores antes de entregar el software a nuestros clientes?

¿Porqué nos resulta difícil constatar el progreso conforme se desarrolla el sw.?

Page 13: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 13

INVERSION EN DESARROLLO DE SISTEMAS SOFTWARE

Entregadopero nuncausado47%

Pagado pero nunca entregado29.7%

Usado pero con trabajo extra o abandonado despues19%

Usado después de cambios~ 3%

Usado tal como se entregó~ 2%

Año 1979Total: $6.8 millones

Page 14: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 14

Costo del software

1/4Desarrollo inicial

3/4Mantenimiento

1/6codificación

1/2 Validación y puesta a punto (V/PP)

1/3Análisis y diseño(A/D)

3/4Mantenimiento

1/8V/PP

1/12 A/D

VALIDACIÓN + PP + MANT. = 7/8 (88%)

CODIFICACIÓN = 1/24 (4%)

ANÁLISIS + DISEÑO = 1/12 (8%)

Desarrollo inicial

TOTAL

TOTAL

Codif.1/24

Page 15: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 15

Algunas causas

Naturaleza “no física” de la programación. Problemas derivados de la intervención de

grupos. Problemas de comunicación con los clientes. Poco esfuerzo en el análisis y el diseño. Herramientas comerciales poco adecuadas. Problemas de gestión

Planificaciones optimistas, plantillas poco cualificadas... Difusión limitada de las nuevas técnicas,

métodos y herramientas. ...industria pendiente de su ‘revolución industrial’.

Page 16: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 16

Algunas soluciones...¡No existe bala de plata! (Brooks 87)

INGENIERÍA DEL SOFTWARE

reutilización

ingeniería de requisitos

métodos de análisis, diseño, prueba...

métodos formales

herramientas CASE:editores dirigidos por la sintaxis,entornos integrados de desarrollo,herramientas para la gestión de proyectos,herramientas de prototipado, etc.

herramientas 4ª gen.lenguajes no procedimentales para consulta a BD’sgeneradores de pantallas,generadores de código,generadores de informes

POOPrototipado

Modelado del negocio

Page 17: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 17

Objetivos de la Ingeniería del Software

Término que aparece en 1968 La producción de programas debe abordarse como una

ingeniería más. (Boehm) La Ingeniería del Software es la aplicación práctica

y sistemática del conocimiento científico a: la producción de programas correctos, que se desarrollan a

tiempo y dentro de las estimaciones de presupuesto, y a la correspondiente documentación para desarrollarlos,

usarlos y mantenerlos. La Ingeniería del Software se fundamenta en técnicas

relacionadas con: ciencia de la computación, programación, ingeniería,

administración, matemáticas, economía,... Forma parte de la “Ingeniería de Sistemas”

Page 18: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 18

Más definiciones de ISw...

“La ISw es el establecimiento y uso de principios sólidos de ingeniería, orientados a obtener software económico que sea fiable y trabaje de manera eficiente en máquinas reales” (Fritz Bauer).

“Isw: (1) La aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, la operación y el mantenimiento del software; es decir, la aplicación de la ingeniería al software; (2) El estudio de enfoques como en (1)” (Glosario Estándar de Términos de Ingeniería del Software de IEEE, 1998).

“Una disciplina que comprende todos los aspectos de la producción de software desde las etapas iniciales de la especificación del sistema, hasta el mantenimiento de éste después de que se utiliza” (Sommerville 2002).

Page 19: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 19

Situación actual de la ISw

Fragmentación e inmadurez de la disciplina.

Carencia de un conjunto de estándares (que se usen ampliamente).

Terminología inconsistente. Escepticismo e inercia en el sector. Insuficiencia de datos - guía (estadísticas). Carencia y poca difusión de base formal.

Page 20: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 20

Situación actual de la ISw (II)

Hay también aproximaciones prometedoras. Por ejemplo:(Además de nuevas técnicas, métodos y herramientas...) SWEBOK (Guide to the Software Engineering Body of Knowledge)

(2001) Algunas universidades han comenzado a ofrecer un título en ingeniería

del software Comités CSAB (Computer Science Accreditation Board) y ABET

(Accreditation Board for Engineering and Technology). El CMM (Capability Maturity Model) del SEI (Software Engineering

Institute) y la familia de estándares ISO 9000 son usados para valorar la capacidad de una organización de ingeniería del software.

En EE UU, el Colegio de Ingenieros Profesionales de Texas (Texas Board of Professionals Engineers) ha comenzado a licenciar ingenieros del software.

ACM e IEEE-CS han desarrollado y adoptado conjuntamente un Código

de Ética para Profesionales en Ingeniería del Software.

Page 21: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 21

Situación actual de la ISw (III)

Tres problemas esenciales en los comienzos del siglo XXI (Sommerville 2002):El reto de lo heredadoEl reto de la heterogeneidadEl reto de la entrega

Hoy día, existe un consenso en la importancia de la ISwmuchos autores comienzan a renegar del

término “crisis del software”

Page 22: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 22

Principios de la Ingeniería del Software

Abstracción Permite parcelar la

complejidad. Por ello se olvidan aspectos irrelevantes del sistema y se potencian los fundamentales.

Encapsulamiento u Ocultación de la información Esconder todos los detalles que

no afecten a otros módulos, definiendo interfaces estrictos que sirvan de interacción entre los distintos modelos.

Modularidad Sirve para parcelar la solución

en módulos independientes con fuerte cohesión interna.

Localización Deben estar agrupados todos

aquellos elementos que están afectados por un mismo hecho.

Uniformidad Todos los módulos deben tener

una notación similar. Completitud

Deben estar desarrollados todos los aspectos del sistema.

Validación y Verificabilidad El producto final debe ser

fácilmente validable y verificable:

¿Estamos desarrollando el programa correcto?

¿Estamos desarrollando correctamente el programa?

Page 23: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 23

Visión general del proceso de ISw

Con independencia del área de aplicación, tamaño o complejidad del proyecto, cualquier sistema se encontrará al menos en una de las siguientes fases genéricas:

Definición ~ Análisis (del sistema, del sw.)desarrollo ~ Diseño, codificación, pruebamantenimiento.

Page 24: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 24

Fase de definición

¿Qué debe hacer el sistema? información que ha de manejar el sistema

necesidades de rendimiento

restricciones de diseño

interfaces del sistema con los usuarios y con otros sistemas

criterios de validación

Se elaboran los documentos de requisitos del sistema (SyRS) y del software (SRS)

Page 25: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 25

Fase de desarrollo

¿Cómo construir el sistema? Se diseñan las estructuras de los datos y

los programascómo se caracterizan las interfaces,cómo realizar el paso del diseño al lenguaje de

programación, cómo ha de realizarse la prueba,

se escriben y documentan los programas, y se prueba el software construido.

Page 26: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 26

Fase de mantenimiento

Comienza una vez construido el sistema, cuando se empieza a utilizar.

Se centra en el cambio. El software es sometido a reparaciones y

modificaciones cada vez que se detecta un fallo o se necesita cubrir una nueva necesidad de los usuarios.

En esta fase recae el mayor porcentaje del costo de un sistema.

Page 27: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 27

Fase de mantenimiento

Un buen sistema no es sólo un conjunto de programas que funcionan.

Debe ser fácil de mantener

Documentación esencial(CASE, Computer Assisted Software

Engineering)

Page 28: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 28

Tipos de mantenimiento

Correctivo: un programa no realiza correctamente la aplicación para la que ha sido diseñado, y, por tanto, debe ser modificado.

Perfectivo: modificaciones a los programas para conseguir mayor adecuación a los requisitos, mayor eficiencia, o simplemente recoger nuevas funcionalidades no expresadas en la fase de definición del sistema.

Page 29: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 29

Tipos de mantenimiento (II)

Adaptativo: Adaptar los programas para acomodarlos a los cambios de su entorno externo (modificaciones en la legislación, CPU, SO, las reglas de negocio, etc.)

Preventivo: El software se deteriora con los cambios, y este tipo de mantenimiento hace cambios en los programas para que se puedan corregir, adaptar y mejorar más fácilmente (Reingeniería del software).

Page 30: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 30

DEFINICIÓN

DESARROLLO

MANTENIMIENTO

Fallos de definición

Errores

Modificaciones y adaptaciones

Visión general del proceso de ISw (II)

(no es totalmente secuencial) Actualmente: iterativo e incremental

Page 31: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 31

Impacto del cambio

Definición Desarrollo Mantenimiento

1x1,5-6x

60-100x

Coste del cam

bio

Page 32: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 32

Clasificación por funcionalidad

Herramientas de gestión de proyectos ayudan a la planificación y seguimiento del proyecto Planificación: agenda de desarrollo. Estimación: costes, duración, esfuerzo. Control: productividad, calidad.

Herramientas de análisis y diseño. Herramientas de prototipado y simulación. Herramientas de programación.

Editores dirigidos por la sintaxis (cabeceras de subrutinas, palabras clave, identación, nomenclatura de variables, ...)

Generadores de estructuras de programas. Entornos integrados de desarrollo para soporte de un lenguaje (editor, compilador,

depurador). Herramientas de integración y pruebas.

Analizadores estáticos. Depuradores. Generadores de datos. Comparadores (e.g. de ficheros).

Herramientas de soporte. Herramientas de mantenimiento.

Ingeniería inversa. Reingeniería.

Page 33: Tema 1 Introduccion a La Ingenieria Del Software

Introducción a la Ingeniería del Software 33

Clasificación por posición

Upper CASE: Herramientas de apoyo a las primeras fases Métricas del software. Estimación de costes. Planificación temporal.

Medium CASE: Herramientas de apoyo a las fases centrales. Análisis. Diseño.

Lower CASE: Herramientas de apoyo a las últimas fases. Implementación (generación de código). Pruebas (caja blanca y caja negra). Mantenimiento. Documentación de la implementación y documentación para el

usuario final.