Historia de la ingeniería de software.
La historia de la ingeniería de software comienza alrededor de la década de 1960. Escribir software se ha convertido en una profesión que se ocupa de cómo maximizar la calidad del software y de cómo crearlo. La calidad puede referirse a cuán fácil de mantener es el software, a su estabilidad, velocidad, usabilidad, capacidad de prueba, legibilidad, tamaño, costo, seguridad y cantidad de fallas o "errores", así como a cualidades menos mensurables como la elegancia., concisión y satisfacción del cliente, entre muchos otros atributos. La mejor manera de crear software de alta calidad es un problema independiente y controvertido que abarca los principios de diseño de software, las llamadas "mejores prácticas" para escribir código, así como cuestiones de gestión más amplias, como el tamaño óptimo del equipo, el proceso, la mejor manera de entregar el software a tiempo y lo más rápido posible, la "cultura" del lugar de trabajo, las prácticas de contratación, etc. Todo esto se incluye en el amplio ámbito de la ingeniería de software.
Descripción general
La evolución de la ingeniería de software es notable en varias áreas:
- Emergencia como profesión: A principios de la década de 1980 la ingeniería de software ya había surgido como Bona fide profesión, estar al lado de la informática y la ingeniería tradicional.
- Función de la mujer: Antes de 1970 los hombres llenando los papeles de ingeniería de hardware más prestigiosos y mejor pagados a menudo delegaron la escritura de software a las mujeres, y leyendas como Grace Hopper o Margaret Hamilton llenaron muchos trabajos de programación de computadoras.
Actualmente, menos mujeres trabajan en la ingeniería de software que en otras profesiones, situación cuya causa no está claramente identificada. Muchas organizaciones académicas y profesionales consideran esta situación desequilibrada y están tratando de resolverla. - Procesos: Los procesos se han convertido en una gran parte de la ingeniería de software. Están aclamados por su potencial para mejorar el software, pero fuertemente criticados por su potencial para constreñir a los programadores.
- Costo del hardware: El costo relativo del software frente al hardware ha cambiado sustancialmente en los últimos 50 años. Cuando los mainframes eran caros y requerían grandes personal de apoyo, las pocas organizaciones que los compraban también tenían los recursos para financiar proyectos de ingeniería de software personalizado grandes y costosos. Las computadoras son ahora mucho más numerosas y mucho más poderosas, que tiene varios efectos en el software. El mercado más grande puede apoyar grandes proyectos para crear comercial fuera del software de plataforma, como lo hacen empresas como Microsoft. Las máquinas baratas permiten a cada programador tener un terminal capaz de compilación bastante rápida. Los programas en cuestión pueden utilizar técnicas como la recolección de basura, lo que hace que sean más fáciles y más rápidos para que el programador escriba. Por otro lado, muchas menos organizaciones están interesadas en emplear programadores para grandes proyectos de software personalizado, en lugar de utilizar el software comercial fuera de la plataforma tanto como sea posible.
1945 a 1965: Los orígenes
Los primeros usos del término ingeniería de software incluyen una carta de 1965 del presidente de ACM, Anthony Oettinger, y conferencias de Douglas T. Ross en el MIT en la década de 1950. Margaret H. Hamilton es la persona a quien se le ocurrió la idea de nombrar la disciplina, ingeniería de software, como una forma de darle legitimidad durante el desarrollo de la Computadora de Orientación Apollo.
Luché por traer la legitimidad del software para que —y los que lo construyen— se le diera su debido respeto y así empecé a utilizar el término "ingeniería de software" para distinguirlo de hardware y otros tipos de ingeniería, sin embargo tratar cada tipo de ingeniería como parte del proceso general de ingeniería de sistemas. Cuando empecé a usar esta frase, se consideró muy divertido. Fue una broma constante durante mucho tiempo. Les gustaba engañarme sobre mis ideas radicales. El software finalmente y necesariamente ganó el mismo respeto que cualquier otra disciplina
—Margaret Hamilton, entrevista de 2014 con El País
El Comité Científico de la OTAN patrocinó dos conferencias sobre ingeniería de software en 1968 (Garmisch, Alemania —ver informe de la conferencia) y 1969, lo que dio al campo su impulso inicial. Muchos creen que estas conferencias marcaron el inicio oficial de la profesión de ingeniería de software.
1965 a 1985: La crisis del software
La ingeniería de software fue impulsada por la llamada crisis del software de las décadas de 1960, 1970 y 1980, que identificó muchos de los problemas del desarrollo de software. Muchos proyectos superaron el presupuesto y el cronograma. Algunos proyectos causaron daños a la propiedad. Algunos proyectos provocaron pérdidas de vidas. La crisis del software se definió originalmente en términos de productividad, pero evolucionó para enfatizar la calidad. Algunos utilizaron el término crisis de software para referirse a su incapacidad para contratar suficientes programadores calificados.
- Costo y presupuesto Overruns: El sistema operativo OS/360 fue un ejemplo clásico. Este proyecto de decenio de los años sesenta produjo finalmente uno de los sistemas de software más complejos en ese momento. OS/360 fue uno de los primeros grandes (1000 programadores) proyectos de software. Fred Brooks dice: El Hombre-Mes Místico que cometió un error multimillonario de no desarrollar una arquitectura coherente antes de comenzar el desarrollo.
- Daño de la propiedad: Los defectos del software pueden causar daño de la propiedad. La mala seguridad del software permite que los hackers roben identidades, costando tiempo, dinero y reputación.
- Vida y muerte: Los defectos del software pueden matar. Los sistemas incrustados utilizados en máquinas de radioterapia demuestran la capacidad de fallar tan catastróficamente que administran dosis letales de radiación a los pacientes. Los más famosos de estos fracasos son los Therac-25 incidentes.
Peter G. Neumann ha mantenido una lista contemporánea de problemas y desastres de software. La crisis del software ha ido desapareciendo de la vista, porque psicológicamente es extremadamente difícil permanecer en modo crisis durante un período prolongado (más de 20 años). Sin embargo, el software –especialmente el software integrado en tiempo real– sigue siendo riesgoso y omnipresente, y es fundamental no caer en la complacencia. Durante los últimos 10 a 15 años, Michael A. Jackson ha escrito extensamente sobre la naturaleza de la ingeniería de software, ha identificado la fuente principal de sus dificultades como la falta de especialización y ha sugerido que sus marcos problemáticos proporcionan la base para una &" práctica normal" de la ingeniería de software, un requisito previo para que la ingeniería de software se convierta en una ciencia de la ingeniería.
1985 a 1989: "No hay solución milagrosa"
Durante décadas, resolver la crisis del software fue de suma importancia para los investigadores y las empresas que producían herramientas de software. El costo de poseer y mantener software en la década de 1980 era dos veces más caro que desarrollarlo.
- Durante la década de 1990, el costo de propiedad y mantenimiento aumentó en un 30% a lo largo de la década de 1980.
- En 1995, las estadísticas mostraron que la mitad de los proyectos de desarrollo encuestados estaban en funcionamiento, pero no se consideraban exitosos.
- El proyecto de software promedio supera su programa a la mitad.
- Tres cuartas partes de todos los productos de software grandes entregados al cliente son fallos que no se utilizan en absoluto, o no satisfacen los requisitos del cliente.
Proyectos de software
Aparentemente, cada nueva tecnología y práctica desde los años 1970 hasta los años 1990 fue anunciada como una solución milagrosa para resolver la crisis del software. Las herramientas, la disciplina, los métodos formales, los procesos y el profesionalismo se promocionaron como soluciones milagrosas:
- Herramientas: Especialmente enfatizadas fueron herramientas: programación estructurada, programación orientada hacia objetos, herramientas CASE tales como el sistema CADES CASE de ICL, Ada, documentación y estándares fueron utilizados como balas de plata.
- Disciplina: Algunos pundits argumentaron que la crisis del software se debía a la falta de disciplina de los programadores.
- Métodos formales: Algunos creían que si las metodologías de ingeniería formal se aplicarían al desarrollo de programas informáticos, la producción de software se convertiría en una industria tan predecible como otras ramas de la ingeniería. Ellos abogaron por probar todos los programas correctamente.
- Proceso: Muchos abogaron por el uso de procesos y metodologías definidos como el modelo de madurez de capacidad.
- Profesionalidad: Esto llevó a trabajar en un código de ética, licencias y profesionalismo.
En 1986, Fred Brooks publicó su artículo No Silver Bullet, argumentando que ninguna tecnología o práctica individual lograría jamás una mejora diez veces mayor en la productividad en 10 años.
El debate sobre las soluciones milagrosas se prolongó durante la década siguiente. Los defensores de Ada, los componentes y los procesos continuaron argumentando durante años que su tecnología favorita sería una solución milagrosa. Los escépticos no estuvieron de acuerdo. Al final, casi todos aceptaron que nunca se encontraría una solución milagrosa. Sin embargo, las afirmaciones sobre balas de plata surgen de vez en cuando, incluso hoy en día.
Algunos interpretan que no hay una fórmula milagrosa en el sentido de que la ingeniería de software fracasó. Sin embargo, al leer más, Brooks continúa diciendo: "Seguramente lograremos avances sustanciales en los próximos 40 años; un orden de magnitud en 40 años no es mágico..."
La búsqueda de una única clave para el éxito nunca funcionó. Todas las tecnologías y prácticas conocidas sólo han logrado mejoras incrementales en la productividad y la calidad. Sin embargo, tampoco existen soluciones mágicas para ninguna otra profesión. Otros interpretan que no hay una solución milagrosa como una prueba de que la ingeniería de software finalmente ha madurado y ha reconocido que los proyectos tienen éxito gracias al trabajo duro.
Sin embargo, también se podría decir que, de hecho, hoy en día existe una variedad de soluciones mágicas, incluidas metodologías ligeras (consulte "Gestión de proyectos"), calculadoras de hojas de cálculo, navegadores personalizados, motores de búsqueda en el sitio, generadores de informes de bases de datos, editores de codificación de pruebas de diseño integrados con memoria/diferencias/deshacer, y tiendas especializadas que generan software especializado, como sitios web de información, a una fracción del costo de un software totalmente personalizado. desarrollo de sitios web. Sin embargo, el campo de la ingeniería de software parece demasiado complejo y diverso para que se pueda aplicar una única “solución milagrosa”. para mejorar la mayoría de los problemas, y cada problema representa sólo una pequeña porción de todos los problemas de software.
1990 a 1999: prominencia de Internet
El auge de Internet provocó un crecimiento muy rápido de la demanda de sistemas internacionales de visualización de información y correo electrónico en la World Wide Web. Se requirió que los programadores manejaran ilustraciones, mapas, fotografías y otras imágenes, además de animaciones simples, a un ritmo nunca antes visto, con pocos métodos conocidos para optimizar la visualización/almacenamiento de imágenes (como el uso de imágenes en miniatura).
El crecimiento del uso del navegador, que se ejecuta en el lenguaje de marcado de hipertexto (HTML), cambió la forma en que se organizaba la visualización y recuperación de información. Las conexiones de red generalizadas llevaron al crecimiento y la prevención de virus informáticos internacionales en las computadoras con MS Windows, y la gran proliferación de correo electrónico no deseado se convirtió en un problema importante de diseño en los sistemas de correo electrónico, inundando los canales de comunicación y requiriendo una detección previa semiautomática.. Los sistemas de búsqueda de palabras clave evolucionaron hasta convertirse en motores de búsqueda basados en la web, y muchos sistemas de software tuvieron que ser rediseñados para realizar búsquedas internacionales, dependiendo de la optimización de los motores de búsqueda (SEO). Se necesitaban sistemas humanos de traducción de lenguaje natural para intentar traducir el flujo de información en múltiples idiomas extranjeros, y muchos sistemas de software se diseñaron para el uso en varios idiomas, basándose en conceptos de diseño de traductores humanos. Las bases típicas de usuarios de computadoras pasaron de cientos o miles de usuarios a, a menudo, muchos millones de usuarios internacionales.
2000 a 2015: Metodologías ligeras
Con la creciente demanda de software en muchas organizaciones más pequeñas, la necesidad de soluciones de software económicas llevó al crecimiento de metodologías más simples y rápidas que desarrollaron software en ejecución, desde los requisitos hasta la implementación, de manera más rápida y sencilla. más fácil. El uso de creación rápida de prototipos evolucionó hacia metodologías livianas, como la Programación Extrema (XP), que intentó simplificar muchas áreas de la ingeniería de software, incluida la recopilación de requisitos y las pruebas de confiabilidad para el creciente y vasto número de Pequeños sistemas de software. Los sistemas de software muy grandes todavía utilizaban metodologías muy documentadas, con muchos volúmenes en el conjunto de documentación; sin embargo, los sistemas más pequeños tenían un enfoque alternativo más simple y rápido para gestionar el desarrollo y mantenimiento de cálculos y algoritmos de software, almacenamiento/recuperación y visualización de información.
Tendencias actuales en ingeniería de software
La ingeniería de software es una disciplina joven y aún está en desarrollo. Las direcciones en las que se está desarrollando la ingeniería de software incluyen:
Aspectos
Aspects ayuda a los ingenieros de software a lidiar con los atributos de calidad al proporcionar herramientas para agregar o eliminar código repetitivo de muchas áreas del código fuente. Los aspectos describen cómo deberían comportarse todos los objetos o funciones en circunstancias particulares. Por ejemplo, los aspectos pueden agregar control de depuración, registro o bloqueo a todos los objetos de tipos particulares. Actualmente, los investigadores están trabajando para comprender cómo utilizar aspectos para diseñar código de propósito general. Los conceptos relacionados incluyen programación generativa y plantillas.
Experimental
La ingeniería de software experimental es una rama de la ingeniería de software interesada en diseñar experimentos con software, recopilar datos de los experimentos y diseñar leyes y teorías a partir de estos datos. Los defensores de este método defienden que la naturaleza del software es tal que podemos avanzar en el conocimiento del software únicamente a través de experimentos.
Líneas de productos de software
Las líneas de productos de software, también conocidas como ingeniería de familias de productos, son una forma sistemática de producir familias de sistemas de software, en lugar de crear una sucesión de productos completamente individuales. Este método enfatiza la reutilización extensa, sistemática y formal del código, para intentar industrializar el proceso de desarrollo de software.
La conferencia Futuro de la Ingeniería de Software (FOSE), celebrada en ICSE 2000, documentó el estado del arte de la SE en 2000 y enumeró muchos problemas que se resolverán durante la próxima década. Las pistas de FOSE en las conferencias ICSE 2000 y ICSE 2007 también ayudan a identificar el estado del arte en ingeniería de software.
La ingeniería de software hoy
La profesión está tratando de definir su límite y contenido. El Software Engineering Body of Knowledge SWEBOK ha sido presentado como norma ISO durante 2006 (ISO/IEC TR 19759).
En 2006, Money Magazine y Salary.com calificaron la ingeniería de software como el mejor trabajo en Estados Unidos en términos de crecimiento, salario, niveles de estrés, flexibilidad horaria y trabajo. ambiente, creatividad y lo fácil que es entrar y avanzar en el campo.
Subdisciplinas
Inteligencia artificial
Una amplia variedad de plataformas ha permitido el desarrollo de diferentes aspectos de la IA, desde sistemas expertos como Cyc hasta aprendizaje profundo y plataformas robóticas como Roomba con interfaz abierta. Los avances recientes en redes neuronales artificiales profundas y computación distribuida han llevado a una proliferación de bibliotecas de software, incluidas Deeplearning4j, TensorFlow, Theano y Torch.
Un estudio de 2011 del McKinsey Global Institute encontró una escasez de 1,5 millones de profesionales y gerentes de datos e inteligencia artificial altamente capacitados, y una serie de bootcamps privados han desarrollado programas para satisfacer esa demanda, incluidos programas gratuitos como The Data Incubator o programas pagos como General Assembly..
Idiomas
Las primeras IA simbólicas inspiraron a Lisp y Prolog, que dominaron la programación inicial de IA. El desarrollo moderno de la IA suele utilizar lenguajes convencionales como Python o C++, o lenguajes especializados como Wolfram Language.
Personajes destacados de la historia de la ingeniería de software
- Charles Bachman (1924–2017) es especialmente conocido por su trabajo en el área de bases de datos.
- László Bélády (1928-2021) editor en jefe de las transacciones de IEEE en Ingeniería de Software en los años 80.
- Fred Brooks (nacido en 1931) más conocido por gestionar el desarrollo de OS/360.
- Peter Chen (nacido en 1947) conocido por el desarrollo de modelado de entidad-relación.
- Edsger W. Dijkstra (1930–2002) desarrolló el marco para una forma de programación estructurada.
- David Parnas (nacido en 1941) desarrolló el concepto de información oculta en programación modular.
- Michael A. Jackson (nacido en 1936) método de ingeniería de software responsable del método JSP de diseño de programas; método JSD de desarrollo del sistema (con John Cameron); y enfoque Problem Frames para analizar y estructurar problemas de desarrollo de software.
- Richard Stallman, creó las utilidades del sistema GNU y defendió el software libre.
Contenido relacionado
Tarjeta perforada
CPython
Arquitectura Harvard