Articulo de referencia

Historia de la ingeniería de software

La historia de la ingeniería de software comienza alrededor de los años 60. La escritura de software ha evolucionado hasta convertirse en una profesión que se ocupa de cómo maxi...

La historia de la ingeniería de software comienza alrededor de los años 60. La escritura de software ha evolucionado hasta convertirse 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 la facilidad de mantenimiento del software, a su estabilidad, velocidad, facilidad de uso, capacidad de prueba, legibilidad, tamaño, costo, seguridad y número de fallas o "errores", así como a cualidades menos mensurables como la elegancia, la concisión y la 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 cae bajo la amplia rúbrica de la ingeniería de software . [1]

Descripción general

La evolución de la ingeniería de software es notable en varias áreas:

  • Surgimiento como profesión: A principios de la década de 1980, la ingeniería de software ya había surgido como una profesión genuina , [2] para ubicarse junto a la informática y la ingeniería tradicional. [ cita requerida ]
  • El papel de la mujer : Antes de 1970, los hombres que ocupaban los puestos de ingeniería de hardware más prestigiosos y mejor pagados solían delegar la escritura de software en mujeres, y leyendas como Grace Hopper o Margaret Hamilton ocuparon muchos puestos de programación informática . [3] [4]
    Hoy en día, menos mujeres trabajan en ingeniería de software que en otras profesiones, una situación cuya causa no está claramente identificada. Muchas organizaciones académicas y profesionales [ ¿quiénes? ] consideran que esta situación está desequilibrada y se esfuerzan por resolverla. [5]
  • Procesos: Los procesos se han convertido en una parte importante de la ingeniería de software. Se los elogia por su potencial para mejorar el software, pero se los critica duramente por su potencial para limitar a los programadores. [ cita requerida ]
  • Coste del hardware: El coste relativo del software frente al hardware ha cambiado sustancialmente en los últimos 50 años. Cuando los mainframes eran caros y requerían de un gran personal de soporte, las pocas organizaciones que los compraban también tenían los recursos para financiar grandes y costosos proyectos de ingeniería de software a medida. Ahora los ordenadores son mucho más numerosos y potentes, lo que tiene varios efectos sobre el software. El mayor mercado puede dar soporte a grandes proyectos de creación de software comercial listo para usar , como hacen empresas como Microsoft . Las máquinas baratas permiten a cada programador tener un terminal capaz de realizar una compilación bastante rápida . Los programas en cuestión pueden utilizar técnicas como la recolección de basura , que hacen que sean más fáciles y rápidos de escribir para el programador. Por otro lado, muchas menos organizaciones están interesadas en emplear programadores para grandes proyectos de software a medida, y en su lugar utilizan el software comercial listo para usar tanto como sea posible. [ cita requerida ]

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 , [6] [7] conferencias de Douglas T. Ross en el MIT en la década de 1950. [8] 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 Guía Apolo . [9] [10]

Luché para que el software tuviera legitimidad y se le diera el debido respeto a él y a quienes lo desarrollaban, y así comencé a usar el término "ingeniería de software" para distinguirlo del hardware y otros tipos de ingeniería, pero tratando cada tipo de ingeniería como parte del proceso general de ingeniería de sistemas. Cuando comencé a usar esta frase, se consideró bastante divertida. Fue una broma constante durante mucho tiempo. Les gustaba burlarse de mí por mis ideas radicales. El software, con el tiempo y necesariamente, ganó el mismo respeto que cualquier otra disciplina.

—  Margaret Hamilton, entrevista de 2014 con El País [11]

El Comité Científico de la OTAN patrocinó dos conferencias [12] sobre ingeniería de software en 1968 ( Garmisch , Alemania) y 1969, que dieron al campo su impulso inicial. Muchos creen que estas conferencias marcaron el inicio oficial de la profesión de ingeniería de software . [6] [13]

1965 a 1985: La crisis del software

La ingeniería de software fue impulsada por la llamada crisis del software de los años 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. Unos pocos proyectos causaron pérdidas de vidas. [14] La crisis del software se definió originalmente en términos de productividad , pero evolucionó para enfatizar la calidad . Algunos usaron el término crisis del software para referirse a su incapacidad para contratar suficientes programadores calificados. [ cita requerida ]

  • Exceso de costes y presupuesto : el sistema operativo OS/360 fue un ejemplo clásico. Este proyecto, que duró una década y se inició en los años 60, acabó produciendo uno de los sistemas de software más complejos de la época. [13] OS/360 fue uno de los primeros proyectos de software de gran envergadura (1000 programadores [ cita requerida ] ). Fred Brooks afirma en The Mythical Man-Month que cometió un error multimillonario al no desarrollar una arquitectura coherente antes de empezar el desarrollo. [13]
  • Daños a la propiedad: Los defectos de software pueden causar daños a la propiedad. La seguridad deficiente del software permite a los piratas informáticos robar identidades, lo que cuesta tiempo, dinero y reputación. [ cita requerida ]
  • Vida y muerte: los defectos de software pueden matar. Los sistemas integrados utilizados en las máquinas de radioterapia han demostrado tener la capacidad de fallar de manera tan catastrófica que han administrado dosis letales de radiación a los pacientes. Los más famosos de estos fallos son los incidentes del Therac-25 . [15]

Peter G. Neumann ha elaborado una lista contemporánea de problemas y desastres relacionados con el software. [16] La crisis del software ha ido desapareciendo de la vista, porque es psicológicamente extremadamente difícil permanecer en modo de 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 crucial 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 principal fuente de sus dificultades como la falta de especialización y ha sugerido que sus marcos de problemas 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. [17]

1985 a 1989: "No hay bala de plata"

Durante décadas, la solución de la crisis del software fue una prioridad para los investigadores y las empresas que producían herramientas de software. El coste de poseer y mantener software en la década de 1980 era el doble del de desarrollarlo. [ cita requerida ]

  • Durante la década de 1990, el costo de propiedad y mantenimiento aumentó un 30% con respecto a la década de 1980.
  • En 1995, las estadísticas mostraron que la mitad de los proyectos de desarrollo estudiados estaban en marcha, pero no se consideraban exitosos.
  • El proyecto de software promedio excede su cronograma a la mitad.
  • Tres cuartas partes de todos los grandes productos de software entregados al cliente son fallos que no se utilizan en absoluto o que no satisfacen los requisitos del cliente.

Proyectos de software

Al parecer, cada nueva tecnología y práctica desde los años 1970 hasta los años 1990 se promocionó como una bala de plata para resolver la crisis del software. Las herramientas, la disciplina, los métodos formales , los procesos y el profesionalismo se promocionaron como balas de plata: [ cita requerida ]

  • Herramientas: Se hizo especial hincapié en las herramientas: programación estructurada , programación orientada a objetos , herramientas CASE como el sistema CADES CASE de ICL, [18] Ada , documentación y estándares que se promocionaron como soluciones milagrosas.
  • Disciplina: Algunos expertos 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 se aplicaban metodologías formales de ingeniería al desarrollo de software, la producción de software se convertiría en una industria tan predecible como otras ramas de la ingeniería. Abogaban por demostrar que todos los programas eran correctos.
  • Proceso: Muchos abogaron por el uso de procesos y metodologías definidos como el Modelo de Madurez de Capacidades .
  • Profesionalismo: Esto llevó a trabajar en un código de ética, licencias y profesionalismo.

En 1986, Fred Brooks publicó su artículo No Silver Bullet , en el que sostenía que ninguna tecnología o práctica individual lograría jamás una mejora de diez veces en la productividad en diez años. [ cita requerida ]

Durante la década siguiente se debatió intensamente sobre las balas de plata. Los defensores de Ada , los componentes y los procesos siguieron argumentando durante años que su tecnología favorita sería una bala de plata. Los escépticos no estaban de acuerdo. Al final, casi todo el mundo aceptó que nunca se encontraría una bala de plata. Sin embargo, las afirmaciones sobre balas de plata aparecen de vez en cuando, incluso hoy en día. [ cita requerida ]

Algunos [ ¿quiénes? ] interpretan [ ¿por qué? ] que no existe una solución milagrosa para decir que la ingeniería de software fracasó. [ aclaración necesaria ] Sin embargo, tras una lectura más profunda, Brooks continúa diciendo: "Seguramente haremos un progreso sustancial en los próximos 40 años; un orden de magnitud en 40 años no es nada mágico..." [ cita requerida ]

La búsqueda de una única clave para el éxito nunca ha funcionado. 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 milagrosas para ninguna otra profesión. Otros interpretan que la ausencia de soluciones milagrosas es una prueba de que la ingeniería de software finalmente ha madurado y ha reconocido que los proyectos tienen éxito gracias al trabajo duro. [ cita requerida ]

Sin embargo, también se podría decir que, de hecho, hoy en día existe una variedad de balas de plata , incluidas metodologías livianas (ver " 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 prueba de diseño integrados con memoria/diferencias/deshacer, y tiendas especializadas que generan software de nicho, como sitios web de información, a una fracción del costo del desarrollo de sitios web totalmente personalizados. Sin embargo, el campo de la ingeniería de software parece demasiado complejo y diverso para que una sola "bala de plata" mejore la mayoría de los problemas, y cada problema representa solo una pequeña parte de todos los problemas de software. [ cita requerida ]

1990 a 1999: El protagonismo de Internet

El auge de Internet condujo a un crecimiento muy rápido de la demanda de sistemas de visualización de información internacional y de correo electrónico en la World Wide Web. Los programadores debían manejar 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 y el almacenamiento de imágenes (como el uso de imágenes en miniatura). [ cita requerida ]

El aumento del uso de navegadores, que funcionan con 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 computadoras MS Windows, y la gran proliferación de correo electrónico no deseado se convirtió en un importante problema de diseño en los sistemas de correo electrónico, inundando los canales de comunicación y requiriendo una preselección semiautomatizada. Los sistemas de búsqueda de palabras clave evolucionaron hacia motores de búsqueda basados ​​en la web , y muchos sistemas de software tuvieron que ser rediseñados para la búsqueda internacional, dependiendo de la optimización de motores de búsqueda (SEO). Se necesitaban sistemas de traducción de lenguaje natural humanos 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. [ cita requerida ]

2000 a 2015: Metodologías ligeras

Con la creciente demanda de software en muchas organizaciones pequeñas, la necesidad de soluciones de software económicas condujo 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. El uso de prototipos rápidos evolucionó hacia metodologías enteramente 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 sistemas de software pequeños. Los sistemas de software muy grandes todavía usaban 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 administrar el desarrollo y el mantenimiento de los cálculos y algoritmos de software, el almacenamiento/recuperación y la visualización de la información. [ cita requerida ]

La ingeniería de software es una disciplina joven y aún en desarrollo. Las direcciones en las que se está desarrollando la ingeniería de software incluyen: [ cita requerida ]

Aspectos

Los aspectos ayudan a los ingenieros de software a manejar los atributos de calidad al proporcionar herramientas para agregar o eliminar código repetitivo de muchas áreas en el código fuente . Los aspectos describen cómo todos los objetos o funciones deberían comportarse en circunstancias particulares. Por ejemplo, los aspectos pueden agregar control de depuración , registro o bloqueo a todos los objetos de tipos particulares. Los investigadores están trabajando actualmente para comprender cómo usar los 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.

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 sistemática y formal del código , para intentar industrializar el proceso de desarrollo de software.

La conferencia Future of Software Engineering (FOSE), celebrada en ICSE 2000, documentó el estado del arte de la ingeniería de software en 2000 y enumeró muchos problemas que se resolverían durante la próxima década. Los temas de FOSE en las conferencias ICSE 2000 [19] e ICSE 2007 [20] también ayudan a identificar el estado del arte en ingeniería de software. [ cita requerida ]

La ingeniería de software hoy en día

La profesión está intentando definir sus límites y contenidos. El Cuerpo de Conocimientos de Ingeniería de Software SWEBOK se ha presentado como estándar ISO durante 2006 (ISO/IEC TR 19759). [ cita requerida ]

En 2006, Money Magazine y Salary.com clasificaron la ingeniería de software como el mejor trabajo en Estados Unidos en términos de crecimiento, salario, niveles de estrés, flexibilidad en horarios y ambiente de trabajo, creatividad y facilidad para ingresar y avanzar en el campo. [21]

Subdisciplinas

Inteligencia artificial

Una amplia variedad de plataformas ha permitido desarrollar diferentes aspectos de la IA, desde sistemas expertos como Cyc hasta aprendizaje profundo y plataformas robóticas como Roomba con interfaz abierta. [22] 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 del McKinsey Global Institute de 2011 encontró una escasez de 1,5 millones de profesionales y gerentes de datos e IA altamente capacitados [23] y una serie de campamentos de entrenamiento privados han desarrollado programas para satisfacer esa demanda, incluidos programas gratuitos como The Data Incubator o programas pagos como General Assembly . [24]

Idiomas

La IA simbólica temprana inspiró a Lisp y Prolog , que dominaron la programación de IA temprana. El desarrollo de IA moderna a menudo utiliza lenguajes convencionales como Python o C++ , [25] o lenguajes especializados como Wolfram Language . [26]

Figuras destacadas en la historia de la ingeniería de software

Véase también

Referencias

  1. ^ "CS302: La historia del software de Jared King". learn.saylor.org . Archivado desde el original el 19 de noviembre de 2018 . Consultado el 17 de febrero de 2018 .
  2. ^ "La ingeniería de software... ha surgido recientemente como una disciplina por derecho propio". Sommerville, Ian (1985) [1982]. Ingeniería de software . Addison-Wesley. ISBN 978-0-201-14229-7.
  3. ^ Abbate, Janet (2012). Recodificación del género . Cambridge, MA: MIT Press. pp. 39. ISBN 978-0262534536.
  4. ^ Ensmenger, Nathan (2012). Los chicos de la informática toman el control . Cambridge, MA: MIT Press. ISBN 978-0262517966.
  5. ^ "Episodio 576: Cuando las mujeres dejaron de programar". NPR Planet Money . 17 de octubre de 2014. Consultado el 27 de junio de 2018 .
  6. ^ ab Meyer, Bertrand (4 de abril de 2013). «El origen de la «ingeniería de software»» . Consultado el 25 de noviembre de 2016 .
  7. ^ Tadre, Matti (3 de diciembre de 2014). La ciencia de la computación . CRC Press. pág. 121. ISBN 978-1-4822-1770-4.
  8. ^ Mahoney, Michael. "Las raíces de la ingeniería de software" (PDF) . CWI Quarterly . 3 (4): 325–334. Archivado desde el original (PDF) el 20 de febrero de 2011 . Consultado el 10 de febrero de 2023 .
  9. ^ Conferencia internacional sobre ingeniería de software 2018 que celebra su 40.° aniversario y 50 años de ingeniería de software. "ICSE 2018 - Sesiones plenarias - Margaret Hamilton". YouTube . Consultado el 9 de junio de 2018 .{{cite web}}: CS1 maint: numeric names: authors list (link)
  10. ^ Rayl, AJS (16 de octubre de 2008). "Ingenieros y científicos de la NASA: transformando los sueños en realidad". Sitio web del 50.º aniversario de la NASA . NASA . Archivado desde el original el 29 de junio de 2010. Consultado el 25 de noviembre de 2016 .
  11. ^ "Primer ingeniero de software | IEEE Computer Society". 5 de octubre de 2018. Consultado el 5 de marzo de 2023 .
  12. ^ Brian Randell (2001). "Conferencias de ingeniería de software de la OTAN". ncl.ac.uk . Consultado el 25 de noviembre de 2016 .
  13. ^ abc King, Jared (2016). "La historia del software" de Jared King". CS302: Ingeniería de software . Saylor.org . Archivado desde el original el 19 de noviembre de 2018 . Consultado el 25 de noviembre de 2016 .
  14. ^ Terapia-25
  15. ^ Leveson, NG; Turner, CS (1 de julio de 1993). "Una investigación de los accidentes del Therac-25". Computer . 26 (7): 18–41. CiteSeerX 10.1.1.372.412 . doi :10.1109/MC.1993.274940. ISSN  0018-9162. S2CID  9691171. 
  16. ^ Neumann, Peter G. "RIESGOS-LISTA: RIESGOS-FORUM Digest". El resumen de riesgos .
  17. ^ {Michael Jackson, "Ingeniería e ingeniería de software" en S Nanz ed, El futuro de la ingeniería de software, Springer Verlag 2010; Michael Jackson, Marcos de problemas: análisis y estructuración de problemas de desarrollo de software; Addison-Wesley, 2001}
  18. ^ DJPearson "El uso y abuso de un sistema de ingeniería de software" Conferencia Nacional de Computación 1979
  19. ^ "ICSE2000: Convocatoria de participación". ul.ie .
  20. ^ "ICSE 2007: Inicio". ucl.ac.uk .
  21. ^ Kalwarski, Tara; Daphne Mosher; Janet Paskin; Donna Rosato (2006). "Los mejores empleos en Estados Unidos". Revista MONEY . CNN . Consultado el 20 de abril de 2006 ., "MONEY Magazine y Salary.com investigaron cientos de empleos, teniendo en cuenta su crecimiento, salario, niveles de estrés y otros factores. Estas carreras ocuparon el primer puesto. 1. Ingeniero de software..."
  22. ^ "Hacking Roomba". hackingroomba.com . Archivado desde el original el 18 de octubre de 2009.
  23. ^ Manyika, James; Chui, Michael; Bughin, Jaques; Brown, Brad; Dobbs, Richard; Roxburgh, Charles; Byers, Angela Hung (mayo de 2011). «Big Data: la próxima frontera para la innovación, la competencia y la productividad». McKinsey Global Institute. Archivado desde el original el 6 de marzo de 2013. Consultado el 16 de enero de 2016 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  24. ^ "Nueva York ofrece un nuevo campo de entrenamiento para científicos de datos: es gratuito, pero es más difícil entrar que en Harvard". Venture Beat . Archivado desde el original el 15 de febrero de 2016 . Consultado el 21 de febrero de 2016 .
  25. ^ "C++ Java". infoworld.com . Consultado el 6 de diciembre de 2017 .
  26. ^ Ferris, Robert (7 de abril de 2016). «Cómo el amigo de Steve Jobs cambió el mundo de las matemáticas». CNBC . Consultado el 28 de febrero de 2018 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=History_of_software_engineering&oldid=1240593905"