Roger S. Presuman Ingeniería de Software un Enfoque practico LA IMPORTANCIA DEL SOFTWARE Durante las tres primeras décadas de la informática, el principal desafió era desarrollar el hardware de las computadoras de forma que se redujera el coste de procesamiento y almacenamiento de datos. A lo largo de la década de los 80, los avances en microelectrónica han dado como resultado una mayor potencia de cálculo a la vez que una reducción del coste. Hoy el problema es diferente. El principal desafío es reducir el coste y mejorar la calidad de las soluciones basadas en computadoras —soluciones que se implementan con el software. La potencia de las grandes computadoras de ayer está hoy disponible en un simple circuito integrado. Las imponentes capacidades de procesamiento y almacenamiento del hardware moderno representa un gran potencial de cálculo. El software es el mecanismo que nos facilita utilizar y explotar este potencial. La evolución del software El contexto en el que se ha desarrollado el software esta fuertemente ligado a las cuatro décadas de evolución de los sistemas informáticos. Un mejor rendimiento del hardware, un tamaño más pequeño y un coste más bajo, han dado lugar a sistemas informáticos más sofisticados. Nos hemos trasladado de los procesadores con tubos de vacío a dispositivos electrónicos. En sus libros populares sobre “la revolución de las computadoras”, Osborne [0SB79] la caracteriza como una “nueva revolución industrial”; Toffler [TOF8O] llamó a la llegada de piezas microelectrónicas la “tercera ola de cambio” en la historia de la humanidad; y NAISBITT [NA1821 predijo que la transformación de la sociedad industrial en una “sociedad de la información” tendrá un profundo impacto en nuestras vidas. La Figura 1. 3 describe la evolución del software dentro del contexto de las áreas de aplicación de los sistemas basados en computadoras. Durante los primeros años de desarrollo de las computadoras, el hardware sufrió continuos cambios, mientras que el software se veía simplemente como un añadido. La programación de computadoras era un arte de “andar por casa” para el que existían pocos métodos sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, aunque comenzaron a aparecer algunos deslices en los costes o planificación. Durante este período se utilizaba en la mayoría de los sistemas una orientación por lotes. Algunas excepciones notables fueron algunos sistemas interactivos tales como el sistema de reserva de billetes de la American Airlines y los sistemas de tiempo real orientados a la defensa, tales como SAGE. Sin embargo, la mayor parte del hardware se dedicaba a la ejecución de un único programa que a su vez se dedicaba a una aplicación específica. Durante los primeros años era normal que el hardware fuera de propósito general. Por otra parte, el software se diseñaba a medida para cada aplicación y tenía una distribución relativamente pequeña. Roger S. Presuman Ingeniería de Software un Enfoque practico La producción de software (es decir, de programas desarrollados para ser vendidos a uno o más clientes) estaba en su infancia. La mayoría del software se desarrollaba y utilizaba por la misma persona u organización. La misma persona lo escribía, lo ejecutaba y si fallaba lo depuraba. Debido a que la movilidad en el trabajo era baja, los ejecutivos estaban seguros de que esa persona estaría allí cuando se encontrara algún error. Debido a este entorno personalizado del software, el diseño era un proceso implícito, ejecutado en la cabeza de alguien, y la documentación no existía normalmente. Figura 1.3 A lo largo de los primeros años aprendimos mucho sobre la implementación de sistemas informáticos, pero relativamente poco sobre la ingeniería de las computadoras. Sin embargo, en honor a la verdad, debemos reconocer que durante esta era se desarrollaron muchos sistemas informáticos excepcionales. Algunos de éstos permanecen en uso hoy, y por sus características, continúan admirándose con toda justicia. La segunda era de la evolución de los sistemas de computadora (Figura 1.3) se extiende desde la mitad de la década de los 60 hasta finales de los 70. La multiprogramación, los sistemas multiusuarios, introdujeron nuevos conceptos de interacción hombre-maquina. Las técnicas interactivas abrieron un nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y software. Los sistemas de tiempo real podían recoger, analizar y transformar datos de múltiples fuentes, controlando así los procesos y produciendo salidas en milisegundos en vez de minutos. Los avances en los dispositivos de almacenamiento en línea condujeron a la primera generación de sistemas de gestión de base de datos. La segunda era se caracterizó también por el uso del software como producto y la llegada de las “casas de software”. El software se desarrollaba para una amplia distribución en un mercado multidisciplinario. Se distribuían los programas para computadoras grandes y minicomputadoras a ciento y a veces miles de usuarios. Los patronos de la industria, gobierno y universidad se aprestaban a “desarrollar el último paquete de software” y ganar así mucho dinero. Conforme creció el número de sistemas informáticos, comenzaron a extenderse las bibliotecas de software de computadoras. Las casas desarrollaron proyectos que producían Roger S. Presuman Ingeniería de Software un Enfoque practico programas de decenas de miles de sentencias fuente. Los productos software comprados al exterior añadieron cientos de miles de nuevas sentencias. Una nube negra apareció en el horizonte: todos estos programas —todas estas sentencias fuente— tenían que ser corregidos cuando se detectaran fallos, se modificaran por cambios en los requerimientos del usuario o se adaptaran a un nuevo hardware que se hubiera comprado. Estas actividades se llamaron colectivamente mantenimiento del software. El esfuerzo gastado en el mantenimiento del software comenzó a absorber recursos en una medida alarmante. Aún peor, la naturaleza personalizada de muchos programas los hacía virtualmente imposibles de mantener. Había comenzado una crisis del software. La tercera era de la evolución de los sistemas de computadoras comenzó a mediados de los 70 y continúa hoy. El sistema distribuido —computadoras múltiples, cada una ejecutando funciones concurrentemente y comunicándose con alguna otra— incrementó notablemente la complejidad de los sistemas informáticos. Redes de área local y global, comunicaciones digitales de alto ancho de banda y creciente demanda de acceso “instantáneo” a los datos, supusieron una fuerte presión sobre los desarrolladores de software. La tercera era también se caracteriza por la llegada y amplio uso de los microprocesadores y computadoras personales. El microprocesador es una parte integral de un amplio espectro de productos “inteligentes” que incluyen a automóviles, hornos microondas, robots industriales, equipos de diagnóstico de suero sanguíneo. En muchos casos, la tecnología del software es integrada en estos productos por equipos técnicos que conocen el hardware, pero normalmente son novatos en el desarrollo de software. Las computadoras personales han sido la catálisis para el crecimiento de muchas compañías de software. Mientras que las compañías de software de la segunda era vendían cientos o miles de copias de sus programas, las compañías de software de la tercera era venden decenas e incluso centenas de miles de copias. El hardware de las computadoras personales se ha convertido rápidamente en un producto estándar, mientras que el software suministrado con el mismo marca la diferencia. De hecho, mientras que las ventas de computadoras personales se estabilizaron hacia mitad de los 80, las ventas de productos software continuaron creciendo. Mucha gente en la industria y como particular gasta más dinero en software, de lo que gastaron en la computadora sobre la que se ejecuta el software. La cuarta era en software de computadora está ahora empezando. Autores tales como Feigenbaum y McCorduck [FE183] predijeron que las computadoras de la “quinta generación” y su correspondiente software tendrá un profundo impacto en el equilibrio de la potencia política e industrial de todo el mundo. Ya, las técnicas de la cuarta generación para el desarrollo de software (tratado más adelante en este capítulo) están cambiando la forma en que algunos segmentos de la comunidad informática construye los programas de computadora. Los sistemas expertos y el software de inteligencia artificial se han trasladado finalmente del laboratorio a aplicaciones prácticas, en un amplio rango de problemas del mundo real. Conforme nos movemos en la cuarta era, continúa intensificándose la crisis del software. Por ahora podemos describir la crisis del software de la siguiente forma: Roger S. Presuman Ingeniería de Software un Enfoque practico 1. La sofisticación del hardware ha dejado atrás nuestra capacidad de construir software que pueda explotar el potencial del hardware. 2. Nuestra capacidad de construir nuevos programas no puede descansar, debido a la demanda de nuevos programas. 3. Nuestra capacidad de mantener los programas existentes está amenazada por el mal diseño y el uso de recursos inadecuados. Como respuesta a la crisis del software, muchas industrias están adoptando prácticas de ingeniería del software —el tema al que se dedica este libro. Una perspectiva industrial En 105 primeros días de la informática, los sistemas basados en computadoras se desarrollaban usando técnicas de gestión orientadas al hardware. Los gestores del proyecto se centraban en el hardware, debido a que el factor principal del presupuesto en el desarrollo del sistema. Para controlar los costes del hardware los gestores instituyeron controles formales y estándares técnicos. Exigían un análisis y diseño completo antes de que algo se construyera. Medían el proceso para determinar dónde podían hacerse mejoras. Dicho sencillamente, aplicaban los controles, métodos y herramientas que reconocemos como ingeniería del hardware. Desgraciadamente, el software no era normalmente más que un añadido. En los primeros días, la programación se veía como un arte. Existían pocos métodos formales y pocas personas los usaban. El programador aprendía normalmente su oficio mediante prueba y error. La jerga y desafíos de la construcción del software de computadoras crearon una mística que pocos ejecutivos se preocuparon de penetrar. El mundo del software era virtualmente indisciplinado, ¡y muchos practicantes de entonces lo amaban! Hoy, la distribución de costes para el desarrollo de sistemas informáticos ha cambiado dramáticamente. El software, en vez del hardware, es normalmente el elemento principal del coste. En las pasadas décadas los ejecutivos y muchos practicantes técnicos se habían hecho las siguientes preguntas: • ¿Por qué lleva tanto tiempo terminar los programas? • ¿Por qué es el coste tan alto? • ¿Por qué no podemos encontrar todos los errores antes de darle el software a nuestros clientes? • ¿Por qué tenemos dificultad en medir el progreso conforme se desarrolla el software? Estas, y muchas otras preguntas, son una manifestación de la característica del software y la forma en que se desarrolla —un problema que ha llevado a la adopción de la práctica de la ingeniería del software.