50 Años de la Ingeniería de Software Problemas, Logros, Tendencias y Retos

Publicado en

Autor

Nota: Esta columna está basada en el contenido de la conferencia que ofrecí en CONISOFT’18, 24-26 de octubre de 2018, en San Luis Potosí.

Dediqué mi columna anterior a los 60 años de la computación en México, iniciados por la llegada de la primera computadora a la UNAM. Sin embargo, este no es el único aniversario redondo que nuestra comunidad debe festejar. Este año también se cumplen los 50 años del nacimiento de la Ingeniería de Software como disciplina.

Se reconoce a Margaret Hamilton, quien dirigió el desarrollo del sistema de navegación de la nave espacial Apolo por haber acuñado en 1965 el término “ingeniería de software”. Posteriormente el término también fue utilizado por personas como Anthony Oettinger (presidente de la ACM) en 1966, y Friedrich Ludwic Bauer (Comité de Ciencias de la OTAN) en 1967. Sin embargo, el nacimiento formal de esta disciplina se ubica en octubre de 1968, cuando el Comité de Ciencia de la OTAN, preocupado por lo que nombró como la Crisis de Software, convocó a los mejores científicos computacionales del momento a una reunión en Alemania.

A continuación les presento un breve resumen de los principales problemas que identificaron los asistentes, con citas del reporte de la reunión [1] en cursiva, a las cuales agrego mi visión personal de los mayores logros alcanzados durante estos 50 años.

Problemas y Logros

Proceso de desarrollo de software

Problemas en 1968

  • Falta una comprensión más completa del proceso de diseño del programa.
  • Construimos sistemas como los hermanos Wright construyeron aviones: “construye todo, empújalo por el precipicio, déjalo caer y vuelve a empezar.”

Logros hasta 2018

Durante los últimos 50 años hemos transitado por diferentes modelos: cascada, espiral, iterativo-incremental o ágil tipo Scrum. Hemos generado múltiples estándares para apoyar el desarrollo de software: CMM/CMMI, TSP/PSP, ISO/IEC 12207, 29110, 15504, MoProSoft, mps.Br o ESSENCE. Hemos integrado el cuerpo de conocimiento de la Ingeniería de Software (SWEBOK) y hemos generado el Manifiesto por el Desarrollo Ágil de Software, que está cambiando la forma de trabajar y las relaciones humanas.

A pesar de todos estos avances, tengo la sensación de que, en muchas ocasiones, seguimos imitando a los hermanos Wright. ¿Ustedes qué opinan?

Calidad de software

Problemas en 1968

  • Dificultades para lograr una fiabilidad suficiente en los sistemas, que cada vez son más integrados en las actividades centrales de la sociedad.
  • Particularmente alarmante son las fallas, aparentemente inevitables de un software, que pueden impactar una cuestión de vida o muerte.

Logros hasta 2018

La calidad de software tiene dos vertientes: del proceso y del producto. En la primera hemos avanzado introduciendo conceptos y técnicas de verificación y validación. El aseguramiento de calidad y la mejora de procesos también son un avance.

Con respecto a la calidad del producto tenemos un primer gran acuerdo en forma en el estándar ISO/IEC 25000 para identificar las características de calidad de software y su posible medición. Sin embargo, mi impresión es que para lograr la calidad nos enfocamos más en los ciclos de pruebas (testing) y sus respectivas correcciones, que en la prevención de defectos. ¿Ustedes qué opinan?

Costos

Problemas en 1968

  • T.J. Watson dijo que OS / 360 le costó a IBM más de 50 millones de dólares al año durante su preparación, y una inversión de al menos 5,000 años-hombre.
  • Los costos de desarrollo del software estaban integrados con los costos de desarrollo del hardware. No se cuantificaba el valor y costo del software como tal.

Logros hasta 2018

Para justificar el costo del software tuvimos que empezar a medir el tamaño del software. El primer intento fue usar el número de líneas de código (LOCs), pero fue criticado porque software con la misma funcionalidad puede tener diferentes tamaños LOCs dependiendo del lenguaje e incluso estilo de programación. Luego tuvimos una propuesta más sensata con los Puntos de Función ajustados a ciertos parámetros de complejidad, que eventualmente se convirtieron en el estándar ISO/IEC 14143, llamado de forma estelar “Puntos Funcionales Cosmic” :)

El problema de intangibilidad de software sigue causando estragos en la estimación de costos. La forma más popular es definir el precio en términos del costo por hora/hombre, pero hay gran discrepancia sobre cuál es la tarifa justa. Todavía es común encontrarse con quienes cuestionan por qué cuesta tanto el tiempo de las personas que desarrollan software, “si solo usan su cabeza y una computadora”. ¿Ustedes qué opinan?

Gestión

Problemas en 1968

  • Dificultades de cumplir fechas y especificaciones.
  • Dificultad para evaluar el avance real de un proyecto.
  • La gerencia de programación continuará mereciendo su mala reputación por la falta de efectividad en cuanto a costos y cronogramas.

Logros hasta 2018

Nos hemos apoyado en otras disciplinas. Por ejemplo, aprovechamos el cuerpo de conocimiento de la administración de proyectos PMBoK generado por el PMI. Su última publicación, el Agile Practice Guide, muestra su esfuerzo de estar al tanto de las tendencias. A pesar de estos avances, me temo que “la gerencia de programación continuará mereciendo su mala reputación” ¿Ustedes qué opinan?.

Profesión

Problemas en 1968

  • La ingeniería de software se encuentra en una etapa muy rudimentaria en comparación de otras ramas establecidas de la ingeniería.
  • Confrontaciones con ingenieros de hardware porque ellos son industriales y nosotros somos artesanos.

Logros hasta 2018

Para mejorar la profesionalización se han creado las carreras de ingeniería de software. La primera en el mundo fue fundada en 1996 en Rochester Institute of Technology por un profesor mexicano, el Dr. Fernando Náveda. La primera en México es la de la Universidad Autónoma de Yucatán en 2004.

También se han propuesto varios esquemas de certificación profesional como el Certified Software Development Professional (CSDP) de IEEE o el mexicano Estándar Técnico de Competencias para el Desarrollo de Software: Ingeniero de Software del NYCE (2014). Que yo sepa, ninguno ha tenido gran demanda. En mi opinión es porque el mercado laboral es relativamente inmaduro y prefiere las certificaciones de alguna habilidad técnica que profesional.

Los códigos de ética profesional de los desarrolladores de software tampoco han tenido gran difusión. A finales de los 1990s se creó el Código de Ética y Práctica Profesional de Ingeniería de Software de IEEE/ACM y recientemente (2018) se publicó el ACM Code of Ethics and Professional Conduct. Ambos merecen ser revisados y discutidos. Si se tomaran en cuenta nos beneficiaremos todos, pero si NO…nos amolaremos, también todos.

La profesionalización de los Ingenieros de Software ha tenido un avance significativo, pero creo que todavía nos falta elevar la conciencia del impacto que la calidad de nuestro trabajo tiene en la sociedad. ¿Ustedes qué opinan?.

Regresando a la preocupación general por la Crisis de Software del año 1968, a pesar de todos los avances y logros mencionados la situación no ha cambiado mucho. Según los reportes de Standish Chaos Group, el porcentaje de proyectos exitosos se mantiene de manera constante en aproximadamente 30%. Esto es buena noticia para ustedes, tienen mucho que innovar :).

El Futuro

El futuro de la ingeniería de software es muy desafiante. Para fundamentarlo, presento un muy breve resumen de algunas tendencias y retos abordados en la conferencia “The Future of Software Engineering” [2].

Tendencias

La computación en la nube reduce costos de arranque, y los ambientes de desarrollo en la nube facilitan el desarrollo de software remoto.

Se reduce el uso de computadoras personales a favor de los dispositivos móviles, pero su variedad es abrumadora.

Los usuarios son móviles, nómadas y "siempre conectados”.

Han surgido nuevos tipos de aplicaciones: Smart City, Internet de las Cosas (IoT), Realidad aumentada/virtual.

Inteligencia Artificial: robótica, machine learning, procesamiento de lenguaje, reconocimiento de imágenes …ya no es ciencia ficción.

Los sistemas ya casi no se hacen desde cero, evolucionan a sistemas complejos.

Retos

Estas tendencias tendrán que modificar la forma de abordar problemas y dar soluciones en la Ingeniería de Software. Sus próximos retos son los siguientes:

Se requiere el cambio profundo y radical en los métodos y técnicas utilizados para concebir, diseñar, desarrollar, probar y desplegar software.

Escalabilidad de procesos de software necesaria por la complejidad de productos y exigencia de “time to market”.

La calidad y, sobre todo, la seguridad del software se están volviendo aún más críticas.

El número de ambientes/plataformas objetivo que un desarrollador debe considerar para desarrollo de software está aumentando significativamente.

El software debe diseñarse para minimizar el uso de los recursos de hardware y de comunicación y, en consecuencia, reducir el consumo de energía (Green IT).

Conclusión

Para concluir esta columna les quiero recordar mi lema:

“La calidad de nuestras vidas depende de la calidad del software, y la calidad del software depende de la calidad de sus creadores y de las organizaciones que los respaldan.”

Referencias

  1. P. Naur, B. Randell. Software Engineering: Report of a conference sponsored by the NATO Science Committee. Garmisch, Germany, 1968. https://sg1.run/xq
  2. A.Fugetta y E. Di Nitto, Proceedings on the Future of Software Engineering (FOSE). Hyderabad, India, 2014. https://sg1.run/xr
Bio

La Dra. Hanna Oktaba es profesora de la UNAM y su objetivo principal es generar conocimiento a través de la creación y promoción de estándares.