Historia de la ingeniería de software - History of software engineering

La historia de la ingeniería de software comienza en la década de 1960. La redacción de software se ha convertido en una profesión que se preocupa por la mejor manera de maximizar la calidad del software y de cómo crearlo. La calidad puede referirse a qué tan fácil de mantener es el software, a su estabilidad, velocidad, facilidad de uso, capacidad de prueba, legibilidad, tamaño, costo, seguridad y cantidad de fallas o "errores", así como a cualidades menos medibles como la elegancia, la concisión y el cliente. satisfacción, entre muchos otros atributos. La mejor forma de crear software de alta calidad es un problema separado y controvertido que cubre 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 y la mejor forma de entregar el software a tiempo. y tan pronto como sea 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 .

Visió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 de buena fe , junto a la informática y la ingeniería tradicional.
  • Papel de la mujer : antes de 1970, los hombres que ocupaban los puestos de ingeniería de hardware más prestigiosos y mejor pagados a menudo delegaban la escritura de software en mujeres, y leyendas como Grace Hopper o Margaret Hamilton ocupaban muchos puestos de programación de computadoras .
    Hoy en día, hay menos mujeres que trabajan en 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 se esfuerzan por solucionarla.
  • Procesos: los procesos se han convertido en una parte importante de la ingeniería de software. Son aclamados por su potencial para mejorar el software, pero criticados duramente por su potencial para restringir 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 costosos y requerían un gran personal de soporte, las pocas organizaciones que los compraban también tenían los recursos para financiar proyectos de ingeniería de software personalizados grandes y costosos. Las computadoras son ahora mucho más numerosas y mucho más poderosas, lo que tiene varios efectos sobre el software. El mercado más grande puede soportar grandes proyectos para crear software comercial listo para usar , como lo hacen empresas como Microsoft . Las máquinas baratas permiten que cada programador tenga un terminal capaz de compilar bastante rápido . Los programas en cuestión pueden utilizar técnicas como la recolección de basura , que los hacen 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 personalizados, en lugar de utilizar software comercial listo para usar tanto como sea posible.

1945 a 1965: los orígenes

Los supuestos orígenes del término ingeniería de software incluyen una carta de 1965 del presidente de ACM, Anthony Oettinger , conferencias de Douglas T. Ross en el MIT en la década de 1950. Margaret H. Hamilton "es la persona a la que se le ocurrió la idea de nombrar la disciplina, ingeniería de software, como una forma de darle legitimidad".

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 usaron el término crisis de software para referirse a su incapacidad para contratar suficientes programadores calificados.

  • Sobrecostos y presupuestos : el sistema operativo OS / 360 fue un ejemplo clásico. Este proyecto de una década de 1960 finalmente produjo uno de los sistemas de software más complejos en ese momento. OS / 360 fue uno de los primeros proyectos de software grandes (1000 programadores). Fred Brooks afirma en The Mythical Man-Month que cometió un error multimillonario al no desarrollar una arquitectura coherente antes de comenzar el desarrollo.
  • Daño a la propiedad: los defectos del 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.
  • Vida o muerte: los defectos del software pueden matar. Algunos sistemas integrados utilizados en las máquinas de radioterapia fallaron de manera tan catastrófica que administraron dosis letales de radiación a los pacientes. El más famoso de estos fracasos es el incidente de Therac-25 .

Peter G. Neumann ha mantenido una lista actual de problemas y desastres de software. La crisis del software se ha ido desvaneciendo, porque psicológicamente es 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 fundamental no ceder a 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.

1985 a 1989: " No Silver Bullet "

Durante décadas, resolver la crisis del software fue fundamental para los investigadores y las empresas que producían herramientas de software. El costo de poseer y mantener el software en la década de 1980 era dos veces más caro que desarrollar el software.

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

Proyectos de software

Aparentemente, cada nueva tecnología y práctica desde la década de 1970 hasta la de 1990 fue proclamada como una solución milagrosa para resolver la crisis del software. Las herramientas, la disciplina, los métodos formales , el proceso y el profesionalismo se promocionaron como balas de plata:

  • Herramientas: Se enfatizaron especialmente las herramientas: programación estructurada , programación orientada a objetos , herramientas CASE como el sistema CADES CASE de ICL , Ada , documentación y estándares se promocionaron como balas de plata.
  • Disciplina: algunos expertos argumentaron que la crisis del software se debió a la falta de disciplina de los programadores.
  • Métodos formales: algunos creían que si las metodologías formales de ingeniería se aplicaran al desarrollo de software, la producción de software se convertiría en una industria tan predecible como otras ramas de la ingeniería. Abogaron por probar 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 , argumentando que ninguna tecnología o práctica individual lograría una mejora de 10 veces en la productividad en 10 años.

El debate sobre las balas de plata 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 estaban de acuerdo. Al final, casi todo el mundo aceptó que nunca se encontraría una bala de plata. Sin embargo, las afirmaciones sobre las balas de plata surgen de vez en cuando, incluso hoy.

Algunos interpretan que la ausencia de una fórmula mágica significa que la ingeniería de software falló. Sin embargo, con más lecturas, Brooks continúa diciendo: "Seguramente lograremos un progreso sustancial 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 solo 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 fórmula mágica como prueba de que la ingeniería de software finalmente ha madurado y reconocen que los proyectos tienen éxito gracias al trabajo duro.

Sin embargo, también se podría decir que, de hecho, existe una variedad de soluciones milagrosas en la actualidad, que incluyen 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, diseño integrado -Editores de codificación de prueba 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 un sitio web totalmente personalizado. No obstante, el campo de la ingeniería de software parece demasiado complejo y diverso como para que una sola "solución milagrosa" mejore la mayoría de los problemas, y cada problema representa sólo una pequeña parte de todos los problemas de software.

1990 a 1999: prominencia de Internet

El auge de Internet condujo a un crecimiento muy rápido de la demanda de sistemas internacionales de visualización de información / 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 / 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 computadoras con MS Windows, y la gran proliferación de correo electrónico no deseado se convirtió en un problema de diseño importante en los sistemas de correo electrónico, inundando los canales de comunicación y requiriendo una preselección semiautomática. . 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 búsquedas internacionales, dependiendo de la optimización de motores de búsqueda (SEO). Se necesitaban sistemas de traducción de lenguaje natural humano para intentar traducir el flujo de información en varios idiomas extranjeros, con muchos sistemas de software diseñados para uso en varios idiomas, basados ​​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. El uso de prototipos rápidos evolucionó a metodologías livianas completas , como Extreme Programming (XP), que intentó simplificar muchas áreas de la ingeniería de software, incluida la recopilación de requisitos y las pruebas de confiabilidad para la creciente y gran cantidad 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 administrar el desarrollo y mantenimiento de cálculos y algoritmos de software, almacenamiento / recuperación de información y visualización.

Tendencias actuales en ingeniería de software

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

Aspectos

Los aspectos ayudan a los ingenieros de software a lidiar con los atributos de calidad al proporcionar herramientas para agregar o eliminar código estándar de muchas áreas del código fuente . Los aspectos describen cómo deben comportarse todos los objetos o funciones en circunstancias particulares. Por ejemplo, los aspectos pueden agregar depuración , registro o control de bloqueo en 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 en software, en recopilar datos de los experimentos y en 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 solo 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 extensiva, sistemática y formal del código , para tratar de 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 SE en 2000 y enumeró muchos problemas por resolver durante la próxima década. Las pistas de FOSE en las conferencias ICSE 2000 e ICSE 2007 también ayudan a identificar el estado del arte en ingeniería de software.

Ingeniería de software hoy

La profesión está tratando de definir su límite y contenido. El Cuerpo de Conocimientos de Ingeniería de Software SWEBOK se ha presentado como una norma ISO durante 2006 (ISO / IEC TR 19759).

En 2006, Money Magazine y Salary.com calificaron a la ingeniería de software como el mejor trabajo en Estados Unidos en términos de crecimiento, salario, niveles de estrés, flexibilidad en las horas y ambiente de trabajo, creatividad y lo fácil que es ingresar y avanzar en el campo.

Subdisciplinas

Inteligencia artificial

Una amplia variedad de plataformas ha permitido que se desarrollen diferentes aspectos de la IA, que van desde sistemas expertos como Cyc hasta marcos de aprendizaje profundo y plataformas de robots 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 inteligencia artificial y datos altamente capacitados, y varios bootcamps privados han desarrollado programas para satisfacer esa demanda, incluidos programas gratuitos como The Data Incubator o programas pagos como General Assembly .

Idiomas

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

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

Ver también

Referencias

enlaces externos