Sin un esfuerzo focalizado y una inversión continua en áreas críticas de conocimiento de ingeniería del software, la nueva generación de aplicaciones y sistemas no será posible. Vivimos en una era de transformación donde los procesos de la ingeniería del software, las técnicas, prácticas, herramientas y el dominio científico que lo apoya permite que los sistemas de defensa, salud, energía, educación, automoción y comercio sean una realidad.
El software proporciona las capacidades para muchas actividades esenciales en la vida moderna. Permite la funcionalidad de los teléfonos móviles, automóviles, equipos médicos y mucho más. En los automóviles de hoy en día, por ejemplo, cada componente está conectado a un ordenador central y millones de líneas de código posibilitan todas las características que esperamos; podemos conectarnos con amigos y familiares que viven por todo el mundo a través de redes sociales; podemos acceder fácilmente al petróleo, el gas y la electricidad porque el software administra su flujo a través de tuberías y redes eléctricas.
La industria del software no son solo las empresas que desarrollan software, sino organizaciones de diferentes industrias (defensa, espacio, aviónica, energía, ferrocarril, automoción, energía, salud, etc.) que forman cadenas de valor con sus proveedores y donde la ingeniería de software y sistemas es un área donde se debe investigar e innovar al igual que ocurre en otras disciplinas científicas.
¿Cómo podría ser el futuro de la ingeniería del software?
Los días de requisitos interminables y revisiones de diseño ya no existen. Un equipo multidisciplinar de ingenieros aeronáuticos, pilotos e ingenieros de software diseñan juntos la próxima nave espacial mediante presentación de ideas que se convierten en diseños viables basados en el acceso a un amplio conocimiento sobre sistemas Ciberfísicos ya codificado, así como limitaciones de la física. Estos diseños se muestran en tiempo real y el equipo compara las capacidades de maniobra y vuelo sobre la marcha usando simulaciones en tiempo real. El diseño final es seleccionado basándose en la opción que mejor balancea coste, capacidades y tiempo. La idea que tenemos hoy en día del ciclo de vida de desarrollo software parece artesanal en comparación con este proceso fluido e iterativo.
El desarrollo de software del futuro es probable que sea más parecido a expresar capacidades que a programar o disponer de un repositorio de algoritmos. Los ingenieros deberán volverse expertos en expresarse de una manera que permita a los ordenadores a aprender de la experiencia. El software elegante ya no se referirá a una programación bien implementada, sino que será el resultado de que las personas trabajen con sistemas automatizados y de inteligencia artificial para implementar las mejores ideas que los humanos puedan imaginar de la manera más asequible, ética y segura.
Las conversaciones con los ordenadores se llevarán a cabo en el lenguaje del dominio; por ejemplo, con biólogos desarrollando capacidades de software hablando de secuenciación y genes, no aprendiendo Python. Se necesitarán especialistas de todo tipo para enseñar a los ordenadores adecuadamente y la forma en que interactúan será significativamente diferente de lo que se hace hoy día.
El uso de la simulación puede convertir todo el proceso actual de prueba y evaluación en una experiencia inmersiva. Imagina que se plantea un nuevo diseño de hardware y software para una serie de dispositivos de vuelo. En un entorno de realidad virtual totalmente inmersivo, los cambios se emulan con la telemetría completa de los dispositivos actuales que alimentan el entorno. Los ingenieros pueden ver la nueva configuración desde cualquier punto de vista y no solo en un rango visual. Todos los datos y metadatos disponibles del entorno actual también se presentan en tiempo real. Cuando el efecto deseado no es el esperado, el ingeniero realiza cambios y ve inmediatamente el impacto en el entorno espacial holístico.
Esta visión de futuro será posible gracias a la intersección de tres áreas: la ingeniería de software y sistemas, la ingeniería de ciberseguridad y la ingeniería de inteligencia artificial, considerando también de manera transversal las ciencias sociales y humanidades. Aunque queda mucho por recorrer, la importancia de la ingeniería del software es clara: las personas y la IA colaborarán de un modo confiable para evolucionar rápidamente sistemas complejos en base a las directrices de los programadores.
Áreas de Investigación presentes y futuras
Para cumplir con este escenario futurista es necesario investigar en nuevos paradigmas de desarrollo y arquitectónicos. El proceso de desarrollo software se orientará a una eficiencia y confiabilidad a gran escala gracias a:
- Uso de inteligencia artificial en el desarrollo software. Utilizar técnicas de IA para facilitar la toma de decisión en la ingeniería de software y facilitar el aprendizaje continuo de la gran cantidad de datos de ingeniería de software. (Inteligencia Artificial en el Desarrollo de Software ¿por qué no? - Inspiring Blog)
- Aseguramiento continuo en la evolución de los sistemas software. Realizar eficiente y rápidamente un aseguramiento continuo de sistemas software mientras se consideran dominios industriales específicos y evidencias que serán necesarias para el sistema software futuro. http://www.darpa.mil/program/automated-rapid-certification-of-software
- Construcción de software mediante desarrollo de componentes. Los sistemas de sistemas y el gran volumen de software interconectado repercuten en que el modo más realista de su desarrollo y evolución sea a través de tecnologías que permita un desarrollo de componentes seguros y válidos.
Algunas características de los sistemas del futuro plantean nuevos retos y problemáticas como introducir componentes IA en los sistemas, considerar elementos sociales como parte del sistema o, el uso de la computación cuántica. Esto motiva nuevos paradigmas de arquitectura:
- Ingeniería de inteligencia artificial para sistemas software. Focalizado en la incertidumbre de incluir y gestionar componentes de IA en un sistema software.
- Ingeniería social de los sistemas software. Focalizada en el reto de modelar el comportamiento humano y características sociales en los sistemas.
- Ingeniería de software cuántico. Considerar los aspectos de la computación cuántica que deben ser abstraídos o expuestos a niveles más elevados para potenciar el desarrollo de software cuántico. (Ingeniería de Software Cuántico y su ciclo de vida: una nueva disciplina de investigación para los próximos años - Inspiring Blog).
¿Será posible?
Aquellos países y centros de investigación que dispongan de una estrategia científico-tecnológica en la ingeniería de software como área nuclear obtendrán ventajas competitivas y un liderazgo diferencial con impacto en la industria del software, entendida esta como la cadena de valor formada en sectores como la defensa, espacio, energía, salud, automoción, etc. Centenares de investigadores y científicos, sobre todo en el mundo anglosajón, lo interiorizan como un vertical en sí mismo a la altura de otras áreas como la energía, la automoción o la salud, entre otras.