Tema 1. Introduccin a la Ingeniera del Software Introduccin a la Ingeniera del Software 2 Motivacin
(Algoritmos y estructuras de datos) (Interfaces +Integracin) UN SISTEMA SOFTWARE UN PRODUCTO SOFTWARE UN PROGRAMA (Ingeniera del Software) UN PROYECTO SOFTWARE Introduccin a la Ingeniera del Software 3 Motivacin (II) Informacin = Ppal. activo de las empresas desarrollo de SI fuertes presiones Artesanal Disciplina de ingeniera (calidad, productividad) Calidad Herramientas Gestin de proyectos Introduccin a la Ingeniera del Software 4 Desarrollo del software. Comunicacin compleja 1. Lo que el director desea. 2. Como lo define el director de proyecto. 3. Como se disea el Sistema. 4. Como lo desarrolla el programador. 5. Como se ha realizado la instalacin. 6. Lo que el usuario quera. Introduccin a la Ingeniera 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 informacin. Documentos que describen el desarrollo, uso, instalacin y mantenimiento de los programas. Software: "programas de computador, procedimientos, y, posiblemente, la documentacin asociada y los datos pertenecientes a las operaciones de un sistema de computacin". Incluye: entrenamiento, soporte al consumidor e instalacin. Introduccin a la Ingeniera del Software 6 Caractersticas del software Elemento lgico, no fsico. Desarrollado, no fabricado. No se estropea, se deteriora! (deterioro por cambios) Mayoritariamente cerrado: usar todo o nada (poco ensamblaje de componentes: reutilizacin--) Introduccin a la Ingeniera del Software 7 Atributos de Calidad del Software (Bell 2000) Fiable Capacidad de ofrecer los mismos resultados bajo las mismas condiciones. Eficiente Utilizacin ptima de los recursos de la mquina. Robusto No poseer un comportamiento catastrfico 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 funcin sin que afecte a sus actividades. Inteligible Diseo claro, bien estructurado y documentado. No Errneo No exista diferencia entre los valores reales y los calculados Reutilizable (reusabilidad) Introduccin a la Ingeniera del Software 8 Atributos de Calidad del Software (Sommerville 2002) Mantenibilidad Confiabilidad fiabilidad seguridad proteccin Eficiencia Usabilidad
Introduccin a la Ingeniera del Software 9 Perspectiva histrica del desarrollo de software Dcada 50-60: Software como un aadido. Desarrollo artesanal, a medida. Lenguajes de bajo nivel. Dcada 60-70: Software como producto. Dcada lenguajes y compilacin. Crisis del software. Dcada 70-80: Programacin estructurada. Ingeniera del Software. Primeros mtodos estructurados. Dcada 80-90: Tecnologa de SGBDs, SOs... Nuevos paradigmas de programacin y de produccin de programas: OO C/S 90s - actualidad: Anlisis/Diseo OO. Tecnologa CASE Componentes y reutilizacin Interoperabilidad (CORBA, .NET...) Internet ISw. distribuida repositorios de componentes reutilizables e-business; e-commerce ... Introduccin a la Ingeniera del Software 10 La problemtica 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 ms complejas. Cambio en la relacin entre el costo hardware/software. Introduccin a la Ingeniera del Software 11 Relacin coste hw./sw. 0 20 40 60 80 100 60 70 80 Hardware Software Porcentaje del coste total del sistema aos Introduccin a la Ingeniera 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 difcil constatar el progreso conforme se desarrolla el sw.? Introduccin a la Ingeniera del Software 13 INVERSION EN DESARROLLO DE SISTEMAS SOFTWARE Entregado pero nunca usado 47% Pagado pero nunca entregado 29.7% Usado pero con trabajo extra o abandonado despues 19% Usado despus de cambios ~ 3% Usado tal como se entreg ~ 2% Ao 1979 Total: $6.8 millones Introduccin a la Ingeniera del Software 14 Costo del software 1/4 Desarrollo inicial 3/4 Mantenimiento 1/6 codificacin 1/2 Validacin y puesta a punto (V/PP) 1/3 Anlisis y diseo (A/D) 3/4 Mantenimiento 1/8 V/PP 1/12 A/D
Desarrollo inicial TOTAL TOTAL Codif. 1/24 Introduccin a la Ingeniera del Software 15 Algunas causas Naturaleza no fsica de la programacin. Problemas derivados de la intervencin de grupos. Problemas de comunicacin con los clientes. Poco esfuerzo en el anlisis y el diseo. Herramientas comerciales poco adecuadas. Problemas de gestin Planificaciones optimistas, plantillas poco cualificadas... Difusin limitada de las nuevas tcnicas, mtodos y herramientas. ...industria pendiente de su revolucin industrial. Introduccin a la Ingeniera del Software 16 Algunas soluciones... No existe bala de plata! (Brooks 87) INGENIERA DEL SOFTWARE reutilizacin ingeniera de requisitos mtodos de anlisis, diseo, prueba... mtodos formales herramientas CASE: editores dirigidos por la sintaxis, entornos integrados de desarrollo, herramientas para la gestin de proyectos, herramientas de prototipado, etc. herramientas 4 gen. lenguajes no procedimentales para consulta a BDs generadores de pantallas, generadores de cdigo, generadores de informes POO Prototipado Modelado del negocio Introduccin a la Ingeniera del Software 17 Objetivos de la Ingeniera del Software Trmino que aparece en 1968 La produccin de programas debe abordarse como una ingeniera ms. (Boehm) La Ingeniera del Software es la aplicacin prctica y sistemtica del conocimiento cientfico a: la produccin de programas correctos, que se desarrollan a tiempo y dentro de las estimaciones de presupuesto, y a la correspondiente documentacin para desarrollarlos, usarlos y mantenerlos. La Ingeniera del Software se fundamenta en tcnicas relacionadas con: ciencia de la computacin, programacin, ingeniera, administracin, matemticas, economa,... Forma parte de la Ingeniera de Sistemas Introduccin a la Ingeniera del Software 18 Ms definiciones de ISw... La ISw es el establecimiento y uso de principios slidos de ingeniera, orientados a obtener software econmico que sea fiable y trabaje de manera eficiente en mquinas reales (Fritz Bauer).
Isw: (1) La aplicacin de un enfoque sistemtico, disciplinado y cuantificable para el desarrollo, la operacin y el mantenimiento del software; es decir, la aplicacin de la ingeniera al software; (2) El estudio de enfoques como en (1) (Glosario Estndar de Trminos de Ingeniera del Software de IEEE, 1998).
Una disciplina que comprende todos los aspectos de la produccin de software desde las etapas iniciales de la especificacin del sistema, hasta el mantenimiento de ste despus de que se utiliza (Sommerville 2002). Introduccin a la Ingeniera del Software 19 Situacin actual de la ISw Fragmentacin e inmadurez de la disciplina. Carencia de un conjunto de estndares (que se usen ampliamente). Terminologa inconsistente. Escepticismo e inercia en el sector. Insuficiencia de datos - gua (estadsticas). Carencia y poca difusin de base formal. Introduccin a la Ingeniera del Software 20 Situacin actual de la ISw (II) Hay tambin aproximaciones prometedoras. Por ejemplo: (Adems de nuevas tcnicas, mtodos y herramientas...) SWEBOK (Guide to the Software Engineering Body of Knowledge) (2001) Algunas universidades han comenzado a ofrecer un ttulo en ingeniera del software Comits 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 estndares ISO 9000 son usados para valorar la capacidad de una organizacin de ingeniera 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 Cdigo de tica para Profesionales en Ingeniera del Software. Introduccin a la Ingeniera del Software 21 Situacin actual de la ISw (III) Tres problemas esenciales en los comienzos del siglo XXI (Sommerville 2002): El reto de lo heredado El reto de la heterogeneidad El reto de la entrega Hoy da, existe un consenso en la importancia de la ISw muchos autores comienzan a renegar del trmino crisis del software Introduccin a la Ingeniera del Software 22 Principios de la Ingeniera del Software Abstraccin Permite parcelar la complejidad. Por ello se olvidan aspectos irrelevantes del sistema y se potencian los fundamentales. Encapsulamiento u Ocultacin de la informacin Esconder todos los detalles que no afecten a otros mdulos, definiendo interfaces estrictos que sirvan de interaccin entre los distintos modelos. Modularidad Sirve para parcelar la solucin en mdulos independientes con fuerte cohesin interna. Localizacin Deben estar agrupados todos aquellos elementos que estn afectados por un mismo hecho. Uniformidad Todos los mdulos deben tener una notacin similar. Completitud Deben estar desarrollados todos los aspectos del sistema. Validacin y Verificabilidad El producto final debe ser fcilmente validable y verificable: Estamos desarrollando el programa correcto? Estamos desarrollando correctamente el programa? Introduccin a la Ingeniera del Software 23 Visin general del proceso de ISw Con independencia del rea de aplicacin, tamao o complejidad del proyecto, cualquier sistema se encontrar al menos en una de las siguientes fases genricas:
Definicin ~ Anlisis (del sistema, del sw.) desarrollo ~ Diseo, codificacin, prueba mantenimiento. Introduccin a la Ingeniera del Software 24 Fase de definicin Qu debe hacer el sistema? informacin que ha de manejar el sistema necesidades de rendimiento restricciones de diseo interfaces del sistema con los usuarios y con otros sistemas criterios de validacin Se elaboran los documentos de requisitos del sistema (SyRS) y del software (SRS)
Introduccin a la Ingeniera del Software 25 Fase de desarrollo Cmo construir el sistema? Se disean las estructuras de los datos y los programas cmo se caracterizan las interfaces, cmo realizar el paso del diseo al lenguaje de programacin, cmo ha de realizarse la prueba, se escriben y documentan los programas, y se prueba el software construido. Introduccin a la Ingeniera 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. Introduccin a la Ingeniera del Software 27 Fase de mantenimiento Un buen sistema no es slo un conjunto de programas que funcionan. Debe ser fcil de mantener Documentacin esencial (CASE, Computer Assisted Software Engineering) Introduccin a la Ingeniera del Software 28 Tipos de mantenimiento Correctivo: un programa no realiza correctamente la aplicacin para la que ha sido diseado, y, por tanto, debe ser modificado. Perfectivo: modificaciones a los programas para conseguir mayor adecuacin a los requisitos, mayor eficiencia, o simplemente recoger nuevas funcionalidades no expresadas en la fase de definicin del sistema.
Introduccin a la Ingeniera del Software 29 Tipos de mantenimiento (II) Adaptativo: Adaptar los programas para acomodarlos a los cambios de su entorno externo (modificaciones en la legislacin, 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 ms fcilmente (Reingeniera del software).
Introduccin a la Ingeniera del Software 30 DEFINICIN DESARROLLO MANTENIMIENTO Fallos de definicin Errores Modificaciones y adaptaciones Visin general del proceso de ISw (II) (no es totalmente secuencial) Actualmente: iterativo e incremental Introduccin a la Ingeniera del Software 31 Impacto del cambio Definicin Desarrollo Mantenimiento 1x
1,5-6x
60-100x C o s t e
d e l
c a m b i o
Introduccin a la Ingeniera del Software 32 Clasificacin por funcionalidad Herramientas de gestin de proyectos ayudan a la planificacin y seguimiento del proyecto Planificacin: agenda de desarrollo. Estimacin: costes, duracin, esfuerzo. Control: productividad, calidad. Herramientas de anlisis y diseo. Herramientas de prototipado y simulacin. Herramientas de programacin. Editores dirigidos por la sintaxis (cabeceras de subrutinas, palabras clave, identacin, nomenclatura de variables, ...) Generadores de estructuras de programas. Entornos integrados de desarrollo para soporte de un lenguaje (editor, compilador, depurador). Herramientas de integracin y pruebas. Analizadores estticos. Depuradores. Generadores de datos. Comparadores (e.g. de ficheros). Herramientas de soporte. Herramientas de mantenimiento. Ingeniera inversa. Reingeniera. Introduccin a la Ingeniera del Software 33 Clasificacin por posicin Upper CASE: Herramientas de apoyo a las primeras fases Mtricas del software. Estimacin de costes. Planificacin temporal. Medium CASE: Herramientas de apoyo a las fases centrales. Anlisis. Diseo. Lower CASE: Herramientas de apoyo a las ltimas fases. Implementacin (generacin de cdigo). Pruebas (caja blanca y caja negra). Mantenimiento. Documentacin de la implementacin y documentacin para el usuario final.