Tema 1: Introducción a la Ingeniería del Software PDF
Document Details
Félix O. García, Ignacio García, José Antonio Cruz
Tags
Summary
This document provides an introduction to software engineering. It covers objectives, contents, and discusses the problem of software development. It also examines the contexts of software engineering, and examines the different paradigms used for software development, with an overall view and summary of the subject. It's intended for an undergraduate audience.
Full Transcript
Tema 1 Introducción a la Ingeniería del Software Ingeniería del Software I Félix O. García Ignacio García José Antonio Cruz Objetivos ▪ Mostrar el concepto y contexto de Ingeniería del Software ▪ Describir el cuerpo de conocimiento de la Ingeniería del Software ▪ Del...
Tema 1 Introducción a la Ingeniería del Software Ingeniería del Software I Félix O. García Ignacio García José Antonio Cruz Objetivos ▪ Mostrar el concepto y contexto de Ingeniería del Software ▪ Describir el cuerpo de conocimiento de la Ingeniería del Software ▪ Delimitar el papel que la Ingeniería del Software juega para dar soporte a los Sistemas de Información ▪ Exponer las características de los Productos y Procesos Software ▪ Presentar de forma general la evolución de los principales Paradigmas de Desarrollo de Software ▪ Debatir sobre situación actual y retos futuros de la Ingeniería del Software 2 Contenidos ▪ El Problema del Desarrollo de Software ▪ Contexto de la Ingeniería del Software ▪ ¿Qué aborda la Ingeniería del Software? ▪ Sistemas de Información e Ingeniería del Software ▪ ¿Cómo de desarrolla el Software? ▪ Paradigmas de Desarrollo en Ingeniería del Software ▪ Tendencias actuales y futuras en Ingeniería del Software 3 El Problema del Desarrollo del Software ▪ Hombre de 103 años - Prueba en el hospital con sus padres (2002) ▪ Mars Climate (1999) ▪ Ariane 5 (1996) ▪ Portaviones USS Yorktown (1998) ▪ Sistema de gestión de equipaje del aeropuerto de Denver (1994) ▪ Máquinas Radiación Therac-25 (1985-1987) 4 El Problema del Desarrollo del Software Booch, G. (2007). ▪ The Promise, The Limits, The Beauty of Software. ▪ Computer Science Teachers Association, ACM. http://www.bcs.org/content/conwebdoc/10367 ▪ http://www.bcs.org/content/conwebdoc/10367 There are approximately 15 million software professionals currently operating worldwide, 30 percent of which are 'code warriors'. If each of these is writing between 5 and 10 thousand lines of new or modified code each year then roughly 33 billion lines of code are being written each year, which means that literally trillions of lines of code have been written cumulatively. Hence, it can be safely suggested that software designers are amongst the world's most important individuals creating opportunities for others worldwide with their vibrant output. 5 El Problema del Desarrollo del Software Naturaleza del Problema 6 Contexto de la Ingeniería del Software ▪ Ingeniería ▪ Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y de las fuentes de energía (DRAE) ▪ Conjunto de conocimientos y técnicas cuya aplicación permite la utilización racional de los materiales y de los recursos naturales, mediante invenciones, construcciones u otras realizaciones provechosas para el hombre (Real Academia de Ciencias Exactas, Físicas y Naturales de España) ▪ Profesión y ejercicio del ingeniero (DRAE) ▪ Ingeniero : ▪ Persona que profesa o ejerce la Ingeniería (DRAE) ▪ Persona que aplica los conocimientos de una o varias ramas de la ciencia para resolver cierto tipo de necesidad de la gente, › Mediante el diseño, construcción u operación de algún tipo de artefacto o sistema. 7 Contexto de la Ingeniería del Software Cualquier ingeniería se caracteriza porque: ▪ Se necesitan conocimientos avanzados para diseñar y construir el tipo de sistemas que la caracteriza. › Diferencia entre técnico e ingeniero. ▪ Existen dos “momentos”: › Primero, conocer el problema, y › Sólo después, podemos diseñar y construir la solución. ▪ Para conseguir buenos resultados (en calidad, tiempo y costes) es necesario trabajar de forma organizada y sistemática. ▪ La creatividad es necesaria (diseño), pero no es suficiente, › Diferencia entre artista e ingeniero. 8 Contexto de la Ingeniería del Software Resolver problemas supone: Problema ▪ Análisis › Capacidad para descomponer un problema complejo en subproblemas más simples y por tanto más fáciles de gestionar › Clave: ABSTRACCIÓN Solución 1 Solución 3 Solución Solución 2 4 ▪ Síntesis › Componer la solución completa a partir de soluciones parciales Solución 9 Contexto de la Ingeniería del Software ¿Por qué Ingeniería del Software? La ingeniería existe porque las personas diseñan y construyen artefactos/sistemas cada vez más complejos. El mayor nivel de complejidad que el ser humano ha enfrentado a lo largo de su historia se encuentra en algunos de los sistemas software actuales, … Un indicador de la complejidad de un sistema es el número de variables independientes que afectan al comportamiento del sistema. ▪ En un sistema físico (automóvil) son decenas o cientos. ▪ En un sistema software (Windows) pueden ser miles o decenas de miles. 10 Contexto de la Ingeniería del Software Naturaleza del Producto Software Producto Final de la IS = Software Es Inmaterial e Invisible El Software se desarrolla, no se fabrica. Es Complejo Es excesivamente Maleable. SW vs HW: Los primeros años de la Informática se centraron en la construcción de máquinas capaces de dar soporte a diversos sistemas para la sociedad → HW como clave de éxito Hoy en día el SW supera al Hardware como clave del éxito de muchos S. Informáticos 11 Contexto de la Ingeniería del Software Naturaleza del Producto Software SW vs HW: ¿Se puede comprender el comportamiento del SW al igual que ocurre con el HW?: Curva de Fallos del Hardware: Curva de Fallos del Software: Defectos fabricación Cambio Cambio Defectos fabricación Cambio Defectos fabricación Estropeado Indice de fallos Indice de fallos Indice de fallos Curva ideal Tiempo Tiempo Tiempo 12 Contexto de la Ingeniería del Software Definición Aplicación de un Informática Cliente enfoque sistemático, disciplinado y Funciones Problema cuantificable al Teorías Ordenador desarrollo, operación (funcionamiento) y mantenimiento del Ingeniería del software; es decir, la Software aplicación de los principios y hábitos de la Ingeniería al Métodos, Herramientas, Técnicas para resolver Software (IEEE,1993) el problema 13 Contexto de la Ingeniería del Software Otras definiciones ▪ Estudio de los principios y metodologías para desarrollo y mantenimiento de sistemas de software (Zelkovitz, 1978) ▪ La aplicación práctica del conocimiento científico en el diseño y construcción de programas de computadora y la documentación asociada requerida para desarrollar, operar (funcionar) y mantenerlos (Boehm, 1976) ▪ Trata del establecimiento de los principios y métodos de la ingeniería a fin de obtener software de modo rentable, que sea fiable y trabaje en máquinas reales (Bauer, 1972) 14 ¿Qué aborda la Ingeniería del Software? Un breve paréntesis: La normalización Ley de las aleaciones de metales preciosos Emisiones gases de Cascos de protección escape, vehículos a Requisitos para los para usuarios de motor focos de motocicletas ciclomotores Ruido emitido por ciclomotores en movimiento Requisitos de seguridad de los Generalidades de neumáticos y llantas neumáticos, llantas y de motocicletas válvulas para motocicletas © AENOR 2004 IEEE – Institute of Electrical and Electronics Engineers 15 ¿Qué aborda la Ingeniería del Software? ▪ Software Engineering Body of Knowledge ▪ http://www.swebok.org/ 16 ¿Qué aborda la Ingeniería del Software? Software Engineering Body of Knowledge ▪ Proyecto conjunto de IEEE-CS y ACM. ▪ Versión actual de 2014. ▪ Aprobada oficialmente como ISO/IEC TR 19759:2015. ▪ Los objetivos principales de SWEBOK son cinco: ▪ Promover una visión consistente del mundo de la IS. ▪ Clarificar el papel –y delimitar las fronteras- de la IS con respecto a otras disciplinas asociadas: ciencia de la computación, gestión de proyectos, ingeniería de computadores, y matemáticas. ▪ Caracterizar los contenidos de la disciplina. ▪ Proveer acceso a los contenidos del cuerpo de conocimientos. ▪ Proveer las bases para desarrollar planes de estudios o materiales para certificaciones individuales. 17 ¿Qué aborda la Ingeniería del Perspectiva de Software? Ingeniería Gestión Configuración SW Gestión de la IS Requisitos Procesos de IS Áreas de Conocimiento Métodos y Modelos de IS Diseño Calidad SW Áreas de Práctica Construcción Conocimiento profesional IS Economía de la IS Pruebas Fundamentos de Fases en el Computación proceso de Fundamentos Mantenimiento matemáticos desarrollo de software Fundamentos de la Ingeniería 18 Sistemas de Información e Ingeniería del Software Relación entre SI, SIA y Sistema Informático Negocio/Empresa Sistema de información (SI) Sistema de información automatizado (SIA) Sistema informático de soporte ▪ HW, Software (Base + Aplicaciones) 19 Sistemas de Información e Ingeniería del Software Subsistemas Negocio/Empresa Almacén y facturación SI Recursos humanos SIA Contabilidad/Finanzas Gestión comercial 20 Sistemas de Información e Ingeniería del Software Subsistemas ▪ Subsistema de Recursos Humanos ▪ La gestión de la información relacionada con la plantilla ▪ La ejecución de la nómina ▪ Subsistema de Gestión Comercial ▪ Las propias ventas ▪ La función de comercialización ▪ Subsistema de Gestión Contable y Financiera ▪ Subsistema de Control de Almacén ▪ Otros Subsistemas ▪ Sistemas de automatización de oficinas ▪ Sistemas de producción 21 ¿Cómo se Desarrolla el Software? Ciclos de Vida ▪ Ciclo de Vida: ▪ Una aproximación lógica a la adquisición, el suministro, el desarrollo, la explotación y el mantenimiento del software [IEEE 1074]. ▪ Un marco de referencia que contiene los procesos, las actividades y las tareas involucradas en el desarrollo, la explotación y el mantenimiento de un producto de software, abarcando la vida del sistema desde la definición de los requisitos hasta la finalización de su uso [ISO 12207-1]. ▪ Responde a la pregunta: ¿qué procesos se pueden realizar? (no cómo) › Ciclo de Vida ≠ Ciclo de Desarrollo 22 ¿Cómo se Desarrolla el Software? Ciclos de Vida ▪ Estándar ISO 12207:2008 23 ¿Cómo se Desarrolla el Software? Ejemplo de Ciclo de Vida ▪ Modelo en Cascada Fases 24 ¿Cómo se Desarrolla el Software? Fases ▪ Requisitos ▪ Se refiere a la elicitación, análisis, especificación y validación de los requisitos software. ▪ Los requisitos software expresan las necesidades y restricciones que debe satisfacer un producto software para contribuir a la solución de un problema real. Ejemplo de modelado de requisitos 25 ¿Cómo se Desarrolla el Software? Fases ▪ Requisitos › En la industria del software existe el consenso en que los proyectos de I.S. son muy vulnerables cuando estas actividades se realizan de forma pobre. Asignatura Ingeniería de Requisitos 26 ¿Cómo se Desarrolla el Software? Fases ▪ Diseño ▪ El proceso de diseño de software consiste en analizar los requisitos con el fin de producir una descripción de la estructura interna del software que sirva como base para su construcción. ▪ Un diseño software (resultado) debe describir: › La arquitectura (cómo está descompuesto y organizado en componentes) y las interfaces entre dichos componentes; y › Los componentes con el nivel de detalle adecuado para poder construirlos. Asignatura Diseño de Software 27 ¿Cómo se Desarrolla el Software? Fases ▪ Construcción ▪ Se refiere a la creación detallada de software mediante la combinación de codificación, verificación, pruebas unitarias, pruebas de integración y depuración. ▪ Pruebas (Testing) ▪ Sirve para evaluar la calidad de un producto software o para mejorarlo, mediante la identificación de sus defectos y problemas. ▪ Consiste en la verificación dinámica del comportamiento real de un programa frente al comportamiento esperado, para un conjunto finito de casos de prueba (convenientemente seleccionados entre las usualmente infinitas posibilidades de ejecución). Asignatura Ingeniería del SW II Asignatura Procesos Ing. Software 28 ¿Cómo se Desarrolla el Software? Fases Tras el desarrollo hay que tener en cuenta una etapa no menos importante en el CV: ▪ Mantenimiento ▪ Todo producto software, después de su despliegue o entrega, “está destinado” a cambiar o evolucionar. ▪ Algunas causas de ello son: › Defectos descubiertos durante su uso, › Cambios en el entorno operativo, › Nuevos requisitos del usuario,.. Asignatura Procesos Ing. Software 29 ¿Cómo se Desarrolla el Software? ▪ Metodología de Desarrollo: ▪ Conjunto de pasos y procedimientos que deben seguirse para el desarrollo de software. ▪ Conjunto de filosofías, fases, procedimientos, reglas, técnicas, herramientas, documentación y aspectos de formación para los desarrolladores de SI ▪ Conjunto de procedimientos, técnicas, herramientas y soporte documental que ayuda a los desarrolladores a realizar nuevo software ▪ Relación CV – Metodología: › CV = Qué › Metodología = Cómo Asignatura Procesos de Ingeniería del Software 30 ¿Cómo se Desarrolla el Software? ▪ Un metodología de desarrollo por lo tanto representa el camino a seguir para desarrollar software de manera sistemática. ▪ Objetivos: ▪ Mejores Aplicaciones ▪ Un mejor Proceso de Desarrollo que identifique salidas (o productos intermedios) de cada fase de forma que se pueda planificar y controlar el proyecto ▪ Un Proceso Estándar en la organización 31 ¿Cómo se Desarrolla el Software? TÉCNICAS ACTIVIDADES Y TAREAS ABCD PRODUCTOS WWWW WWWW WWWW OTRAS HERRAMIENTAS PROCEDIMIENTOS AUB→C Ent. → Rel. Int N:M → R 32 ¿Cómo se Desarrolla el Software? Tipos de Metodologías ▪ Dirigidas por los planes (Plan Driven o Heavyweight) ▪ Proceso Unificado de Desarrollo (RUP) ▪ METRICA 3 ▪ Ágiles – siguen Manifiesto ágil ▪ XP (Extremme Programming) ▪ Agile UP (Unified Process) ▪ OpenUP ▪ SCRUM › Gestión Asignatura Asignatura Procesos de Ingeniería del Software Gestión de Proyectos Software 33 Paradigmas de Desarrollo en Ingeniería del SW ▪ A lo largo de los últimos años se ha desarrollado software siguiendo tres filosofías principales: ▪ Convencional ▪ Estructurada ▪ Orientada a Objetos 34 Paradigmas de Desarrollo en Ingeniería del SW ▪ Desarrollo Convencional: ▪ Años 50 ▪ Desarrollo artesanal y ausencia de Metodología ▪ Enfocado en la Tarea de Programación ▪ Inconvenientes: › Los resultados finales son impredecibles › No hay forma de controlar lo que está sucediendo en el Proyecto › Los cambios organizativos afectan negativamente al proceso de desarrollo › El éxito de los proyectos se basa mucho en la figura del “héroe” 35 Paradigmas de Desarrollo en Ingeniería del SW ▪ Desarrollo Estructurado: ▪ Años 60 (entorno académico), mediados 70 (industria) ▪ Evolución: › Programación Estructurada: ▪ Normas para escribir código ▪ Facilitar comprensión de Programas ▪ Normas para la aplicación de estructuras de datos y de control Estructurado Convencional PROGRAM NUMEROSIGUALES BEGIN ORG 0 CLEARSCREEN; bsf STATUS,RP0 A :=10 ; clrf PORTB INPUT B; movlw 0xFF REPEAT movwf PORTA IF B=A THEN PRINT “A Y B SON IGUALES” bcf STATUS,RP0 ELSE REDUCEDIFERENCIA(A,B); movf PORTA,W UNTIL B=A; movwf Contador END; movf Contador,F PROCEDURE REDUCEDIFENCIA(A,B); btfsc STATUS,Z BEGIN goto PuntoDecimal IF A>B THEN B:= B+1 sublw d'9' ELSE B:= B - 1 btfss STATUS,C END END 36 Paradigmas de Desarrollo en Ingeniería del SW Desarrollo Estructurado: ❖ Diseño Estructurado ✓ Mayor nivel abstracción (independencia del lenguaje programación) ✓ Elemento básico de diseño: Módulo ✓ Modularidad. Medidas de Calidad de Programas C opción 1 Leer Opción 2 3 37 Paradigmas de Desarrollo en Ingeniería del SW ▪ Desarrollo Estructurado: ▪ Evolución: › Análisis Estructurado ▪ Previamente: Descripción Narrativa Requisitos →Especificaciones: ◼ Monolíticas ◼ Redundantes ◼ Ambiguas ◼ Imposibles de Mantener ▪ Se obtienen Especificaciones Funcionales: ◼ Gráficas ◼ Particionadas ◼ Mínimamente redundantes 38 Paradigmas de Desarrollo en Ingeniería del SW ▪ Desarrollo Orientado a Objetos: ▪ Esencia: Identificación y organización de conceptos del dominio de la aplicación y no tanto de su representación final en un lenguaje de programación ▪ Años 80 ▪ Trata Procesos y Datos de forma conjunta. ▪ Principios: › Abstracción › Ocultación Información › Modularidad ▪ Las técnicas estructuradas han influido en estas metodologías. ▪ Se eliminan fronteras entre fases (naturaleza iterativa) ▪ Nueva forma de concebir los lenguajes de programación y su uso al incorporarse bibliotecas de clases y otros componentes reutilizables. ▪ Hay un alto grado de iteración y solapamiento → Forma de trabajo muy dinámica. 39 Tendencias Actuales y Futuras en IS La Ingeniería del Software es joven, hemos avanzado mucho pero se siguen teniendo otros retos pendientes: ▪ Si hemos ido subiendo de nivel de abstracción en los lenguajes de programación, ¿nos permite la tecnología actual dar otro salto más?. › Java es código fuente, y ¿modelos no?. › ¿Existe alguna manera de construir software más rápida y con menos errores? ▪ La integración sigue siendo un problema difícil. › Integrar sistemas › Integrar tecnologías ▪ Seguimos teniendo dificultades para entender bien a los clientes/usuarios. › Muchos proyectos técnicamente correctos fracasan (el software no sirve a los supuestos destinatarios o no lo usan). ▪ El software es la red. › El concepto clásico cerrado de “aplicación” software está desapareciendo. 40 Tendencias Actuales y Futuras en IS Para enfrentar estos retos surgen algunos nuevos paradigmas y plataformas tecnológicas que no son alternativos a los anteriores, sino complementarios 41 Tendencias Actuales y Futuras en IS Nuevos paradigmas – desarrollo dirigido por modelos MDD MDA Los Modelos son el artefacto central del desarrollo en lugar del código fuente 42 Tendencias Actuales y Futuras en IS Nuevos paradigmas – orientación a servicios ▪ Nuevo enfoque de interacción entre sistemas mediante servicios Arquitecturas: - SOA (Service-oriented Architecture) - Microservicios 43 Tendencias Actuales y Futuras en IS Nuevos paradigmas – Procesos de negocio ✓ Mejora desde perspectiva de proceso ✓ Automatización ✓ Integración Asignatura Ingeniería de Negocio 44 GSD Tendencias Actuales y Futuras en IS DSD Nuevos paradigmas – Desarrollo global de software Local Reducción de costes Aumento de la competitividad Proximidad al mercado y al cliente. Aumento de la productividad (ej., follow the sun..) Innovación y buenas prácticas compartidas ante diversidad cultural y de experiencia. 3Cs (desafíos) Comunicación Coordinación Control 45 Tendencias Actuales y Futuras en IS Nuevos paradigmas – Ingeniería del Software Continua - DevOps Retos: Equipos Despliegues rápidos de calidad Funcionamiento 24 x 7 x 365 Entornos críticos Competencia Acceso multidispositivo / IOT 46 Tendencias Actuales y Futuras en IS Nuevos paradigmas – Sostenibilidad Software ▪ Dimensiones ▪ Económica ▪ Social ▪ Medioambiental ▪ Green Software ◼ A lo largo del ciclo de vida del software se toman decisiones que pueden afectar al consumo del software QuickSort Insertion sort 47 Tendencias Actuales y Futuras en IS ▪ Aplicación enfoques IA generativa y modelos de lenguaje de gran tamaño (LLMs) en Ingeniería del Software Imagen obtenida en Generative AI in Software Development | by Xin Cheng | Medium 48 Tendencias Actuales y Futuras en IS Nuevos paradigmas – Computación Cuántica ▪ Paradigma computacional basado en la mecánica cuántica. Principios fundamentales: ▪ Superposición ▪ Entrelazamiento ▪ Incertidumbre ▪ Tipos de computadoras: Computación Cuántica Universal Computación Cuantica basada en Basada en puertas cuánticas Annealing (problemas de optimización) 49 Tendencias Actuales y Futuras en IS ▪ Computación Cuántica ▪ Cúbit (Qubit) como unidad básica de información: representación de estados simultáneos vs. dificultad conceptual al desarrollar software. N bits: Una de las 2n posibilidades N bits: TODAS LAS 2n posibilidades RETO ➔ ¡No sabemos hacer software cuántico! Necesidad de crear una Ingeniería del Software Cuántico: técnicas y herramientas para desarrollar software cuántico de forma factible 50 Conclusiones Hacer Software es un problema complejo y seguirá siéndolo. La Ingeniería del Software pretende resolverlo mediante la aplicación de maneras sistemáticas y metódicas de trabajar (igual que hicieron hace tiempo otras ingenierías). Es vital para el futuro (profesional, laboral y académico) de la Informática que se incida más en la perspectiva de ingeniería. ▪ Más arquitecto, menos albañil. EL Grado en Ingeniería Informática prepara para los trabajos más cualificados dentro de un sector económico, que está llamado a tener varias profesiones diferenciadas. Una de las profesiones será ingeniería de software. 51