¿Implementar IA en la ingeniería de software? Aquí tienes todo lo que necesitas saber

¿Implementar Inteligencia Artificial en la ingeniería de software? ¡Aquí tienes todo lo que debes saber!

eyeglasses-codegettyimages-1442975239

Los desarrolladores de software prosperan con la certeza. Si alimentas un programa con un conjunto de entradas, siempre obtendrás las mismas salidas. Durante la mayor parte de la historia del software, el software se construía completamente sobre lógica determinística. Lo que entra determina lo que sale.

Incluso tenemos un término para eso: programación de arriba hacia abajo. Todos los algoritmos siguen una ruta, con ramificaciones que también se basan en la lógica esperada. Cuando depuramos código, recorremos esa misma ruta una y otra vez, encontrando dónde el comportamiento se desvía de la expectativa y arreglándolo.

Función especial

zd-del2

La intersección de la IA generativa y la ingeniería

El auge de la IA generativa puede aprovechar un tremendo potencial para el ámbito de la ingeniería. También puede presentar desafíos, ya que las empresas y los ingenieros deben descubrir el impacto de la IA en sus roles, estrategias comerciales, datos, soluciones y desarrollo de productos. ¿Cómo será el futuro de la incorporación de la IA generativa en el ámbito del software? ENBLE lo decodifica desde todos los ángulos.

Leer ahora

La certeza y la lógica determinística funcionan para mucha parte del software. Pero el mundo real no funciona así. En cambio, la IA es probabilística. Las respuestas nunca son exactas. En cambio, la IA utiliza modelos para predecir comportamientos y luego genera esos comportamientos.

Tal vez la mejor manera de describir esto sea cómo se actualiza el software tradicional en comparación con la IA. El software tradicional recibe actualizaciones y parches. La IA aprende, evoluciona por sí misma, comprende y asimila los comentarios de los usuarios sin intervención manual. Esto hace que el software tradicional sea más preciso, pero la IA más flexible.

Al implementar la IA en la ingeniería del software, obtenemos lo mejor de ambos mundos: software preciso y flexible. Este artículo explorará esa fusión y lo que significa para los desarrolladores y los ingenieros, así como para los usuarios de sus creaciones.

La convergencia de IA e ingeniería de software

Los desarrolladores de hoy tienen la oportunidad de utilizar la IA como parte de su proceso de codificación. Las nuevas herramientas impulsadas por IA ayudan a crear código, encontrar errores, configurar conjuntos de pruebas y generar datos de prueba y muestras. De alguna manera, la IA puede ayudar a mejorar la productividad de un desarrollador, reducir el tiempo dedicado a tareas repetitivas, destacar fallas y ayudar a desarrolladores menos experimentados a producir código como si tuvieran más experiencia.

Pero hay una desventaja: la IA es notoriamente poco confiable. Necesitas poder verificar su trabajo. La IA presenta su trabajo con un nivel aparente de confianza que hace que sus resultados parezcan correctos incluso cuando no lo son. Entonces, si no tienes la habilidad, el conocimiento y la experiencia en el tema en el que le estás pidiendo que trabaje, no podrás decir cuándo está equivocada.

Dicho esto, la IA puede ayudar enormemente con el proceso de desarrollo, mantenimiento y prueba de código. Si bien no todo se beneficiará, hay puntos en el proceso en los que la IA puede intervenir y reducir horas o incluso días de trabajo requerido.

Pero no todo se trata de producir código. También se trata del código producido. La convergencia de la IA y la ingeniería de software permitirá a los desarrolladores crear aplicaciones más inteligentes y centradas en el usuario, y la experiencia de los usuarios del software será más flexible y dinámica que con aplicaciones codificadas a mano tradicionales.

Con el tiempo, veremos cómo algunas aplicaciones evolucionan en tiempo real según los comentarios de los usuarios, y cómo algunos software abordan de manera preventiva errores e incompatibilidades antes de que el usuario los encuentre. No será perfecto, pero definitivamente ayudará a mejorar el software.

IA en tareas diarias de software: ¿Cuál es el beneficio real?

Todo eso suena bien, ¿verdad? Pero vamos al grano: ¿Qué es lo que tiene la IA en la ingeniería de software que puede dar a los desarrolladores unas cuantas horas extras para ver Doctor Who, jugar con el perro o – sé que suena irrazonable – dormir? Veamos cinco áreas que vienen a la mente.

Automatización de tareas repetitivas

Hay un montón de tareas aburridas y mundanas que requieren las habilidades de un desarrollador, pero nada divertidas. Un ejemplo es ayudar a escribir bloques de código repetitivos.

Los programadores han podido configurar sus IDEs para completar bloques de código como si fueran macros, pero la IA puede aprender el patrón e intención de los bloques de código y ayudar a generarlos utilizando el estilo del programador u organización, sin necesidad de preprogramarlos. Podría sugerir: “He visto que has escrito código así antes. ¿Te gustaría que lo construyese para ti?”

Esto puede ayudar a que los desarrolladores se centren en el trabajo más creativo, sí, pero también puede introducir consistencia en el código sin requerir al desarrollador que trate de ajustarse a un patrón restrictivo.

Análisis predictivo y mejora de la fiabilidad del software

Aquí es donde la IA puede anticipar el comportamiento del código basándose en patrones y tendencias. Las herramientas de IA se pueden utilizar para predecir sobrecargas del sistema, anticipar el comportamiento del usuario, posiblemente optimizar la experiencia del usuario y realizar un mantenimiento preventivo en áreas que necesiten mejoras. Otro gran beneficio sería actualizar el código para cumplir con los requisitos mínimos a medida que cambien y actualicen las plataformas en las que se ejecutan.

Además de ahorrar tiempo de programación, el software puede hacerse más fiable y resistente casi por sí mismo.

Acelerar el ciclo de desarrollo/prueba

El código siempre necesita ser probado. El ciclo típico implica un poco de codificación, un poco de prueba, un poco de corrección… enjuaga, lava, repite. Sin embargo, como las IA pueden ser capaces de predecir el comportamiento del software, podrían señalar errores antes de que la prueba incluso necesite comenzar.

Los entornos de desarrollo han sido capaces durante mucho tiempo de señalar errores de sintaxis y conversión de tipos, que implican un conocimiento de la estructura del lenguaje. Pero si los entornos de desarrollo pueden empezar a señalar errores lógicos, esto podría contribuir en gran medida a acelerar la entrega de código y reducir la cantidad de etapas de corrección necesarias para un proyecto dado.

Reducir los costos de mantenimiento de software

La mayoría de los proyectos de software, una vez completados, requieren un nivel constante de mantenimiento para mantenerse al día con los errores descubiertos, los cambios en la plataforma y los problemas de rendimiento. Escribí un software que ayuda a facilitar las donaciones sin fines de lucro, y paso al menos el 80% de mi tiempo no respondiendo a solicitudes de usuarios ni agregando nuevas capacidades, sino simplemente reescribiendo el código para los requisitos en constante cambio de las pasarelas de pago. Si pudiera reducir algo de ese mantenimiento ingrato y tedioso, se podría proporcionar mucho más valor a los usuarios.

Mantener el elemento humano

A pesar de la incorporación de la IA en el entorno de desarrollo, todas las indicaciones apuntan a que los programadores – verdaderos programadores humanos – seguirán creando la mayoría del software en el futuro previsible.

Reducir la cantidad de tiempo y tedio ciertamente puede ayudar a que los desarrolladores se mantengan alerta, pero las IA también pueden supervisar el rendimiento general del equipo, proporcionando a los gerentes notificaciones si un miembro del equipo ha sido sobreutilizado, sobrecargado o se dirige a un agotamiento. También pueden ayudar a reasignar las tareas del equipo para que cada miembro esté trabajando en sus fortalezas y colaborar en la planificación y asignación de recursos.

Desafíos y limitaciones de la IA en la ingeniería de software

Como con cualquier aumento en la complejidad tecnológica, existen problemas. En esta sección, hablaré sobre tres áreas de preocupación.

Mayor complejidad y desafío de mantenimiento

Aquí está mi mayor preocupación acerca de la IA en la ingeniería de software: A medida que usemos la IA para más y más código, tendremos menos y menos comprensión de cómo funciona todo. Si alguna vez has heredado un proyecto de alguien más, especialmente si esa organización o desarrollador no está disponible para consultar, sabes a lo que me refiero.

Lo que genera la IA será mucho más una caja negra que lo que tú y tu equipo codifican, y el riesgo es que, una vez generado, sea mucho más difícil de mantener para los humanos. No caigas en la trampa de esperar que la IA mantenga su propio software. Cuando el código de la IA se rompa, todo dependerá de ti y tu equipo para descubrir qué salió mal y solucionarlo.

Dependencia de datos

La IA se basa en grandes cantidades de datos para crear sus modelos. Si no estás utilizando un modelo público – por ejemplo, si estás trabajando en algo que es conocimiento especializado único de tu empresa – el conjunto total de datos disponibles para entrenar a una IA puede no ser suficiente.

Además, los sistemas de IA se entrenan con conjuntos de datos amplios, no todos los cuales tienen el nivel de calidad necesario para el trabajo que estás tratando de hacer.

Sigo recordando a la gente que traer una IA a un proyecto de ingeniería de software es como contratar a un grupo de estudiantes talentosos de verano. Pueden ser brillantes y rápidos, pero a veces fallarán y tendrás que limpiar después de que se vayan. Mientras que tu IA no se irá, te dejará con problemas que no puede resolver.

Preocupaciones éticas

En ¿Está la IA en la ingeniería de software alcanzando un ‘momento Oppenheimer’?, discutí los problemas éticos que la IA plantea a los desarrolladores de software. Ten en cuenta que los programadores no están capacitados para lidiar con preocupaciones éticas. De hecho, hice una especialización en ética y filosofía política junto con mi especialización en ciencias de la computación, pero en ese momento yo era el único especialista en ciencias de la computación que tenía eso como especialización. (Divulgación completa: Elegí eso como especialización porque una chica que me gustaba estaba tomando clases de filosofía. Por lo tanto, incluso mi especialización en ética no fue completamente ética).

Los programadores están entrenados para ser buenos tecnólogos, pero el impacto social no forma parte de la mayoría de los planes de estudio de ciencias de la computación. Los programadores y desarrolladores autodidactas podrían estar aún más alejados de la formación en ética. Por lo tanto, esperar que un ejército de técnicos talentosos vea y esté en la vanguardia de consideraciones éticas históricas es poco realista.

Las empresas que utilizan IA deben esperar ampliar la capacitación de sus equipos técnicos en cuestiones de impacto social o buscar expertos consultores que les ayuden a asesorar y guiar a los desarrolladores a medida que ingresan a este territorio muy desconocido de los factores humanos.

Herramientas y plataformas para la ingeniería de software impulsada por IA

Afortunadamente, los desarrolladores y las organizaciones no tienen que embarcarse en sus viajes de IA construyendo todas sus propias herramientas. Se ha invertido mucho en investigación fundamental y producción de herramientas y bibliotecas prácticas que se pueden licenciar e incluir en proyectos.

En esta sección de guía de recursos, presento una rápida visión general de cinco categorías de herramientas que es probable que desees usar, y señalo algunos de los principales líderes en cada sector. Esto te dará un punto de partida tangible y práctico para tu próximo proyecto.

Frameworks de aprendizaje automático de propósito general

Las herramientas en esta categoría proporcionan estructuras y funcionalidades fundamentales para diseñar, entrenar e implementar modelos de aprendizaje automático.

  • Google TensorFlow: Una plataforma de código abierto de principio a fin diseñada para el aprendizaje automático que facilita la creación e implementación de modelos de ML.
  • Facebook PyTorch: Una plataforma de gráficos computacionales dinámicos que ofrece flexibilidad en la construcción de modelos de aprendizaje profundo.
  • Keras: Una API de redes neuronales de alto nivel, escrita en Python y capaz de ejecutarse sobre TensorFlow, PyTorch y otros.

Plataformas de desarrollo de IA basadas en la nube

Estas plataformas ofrecen infraestructura en la nube para desarrollar, entrenar e implementar modelos de aprendizaje automático a gran escala, a menudo integradas con otros servicios en la nube.

  • Google Vertex AI: Una plataforma unificada en Google Cloud que ofrece herramientas y servicios integrales para construir, implementar y escalar modelos de IA y aprendizaje automático en conjuntos de datos diversos.
  • Amazon AWS SageMaker: Un servicio completamente administrado que ayuda a los desarrolladores a construir, entrenar e implementar modelos de aprendizaje automático.
  • Microsoft Azure Machine Learning: Un conjunto de servicios en la nube que utiliza herramientas de aprendizaje automático para entrenar e implementar modelos más rápidamente. Piénsalo como Aprendizaje Automático como Servicio.

IA para código y desarrollo de software

Las herramientas en esta sección ayudan a los desarrolladores en el proceso de codificación, ofreciendo sugerencias, autocompletado y análisis de código automatizado basado en IA.

  • OpenAI Codex: Esta herramienta alimenta aplicaciones como GitHub Copilot, ayudando a los desarrolladores a escribir código más rápido con sugerencias impulsadas por IA.
  • Github Copilot: Un asistente de código impulsado por IA que sugiere líneas enteras o bloques de código a medida que los desarrolladores escriben, lo que ayuda a acelerar el proceso de codificación y garantizar las mejores prácticas.
  • Snyk Code: Ofrece a los desarrolladores análisis de código automatizados, detección de vulnerabilidades de seguridad y recomendaciones para correcciones mediante el análisis de proyectos de código abierto masivos.

No te confundas con estas ofertas. GitHub Copilot está impulsado por OpenAI Codex. Mientras que OpenAI Codex sirve como una herramienta de IA de propósito general para muchas tareas de codificación diferentes y se puede integrar en varias plataformas, GitHub Copilot es una herramienta especializada para la finalización y asistencia de código en tiempo real dentro del entorno de Visual Studio Code.

Snyk Code se enfoca en el análisis automatizado de código y detección de vulnerabilidades de seguridad mediante el análisis de vastos proyectos de código abierto.

Modelos y plataformas pre-entrenados

Estas herramientas ofrecen modelos que están pre-entrenados en una gran cantidad de datos, lo que permite a los desarrolladores afinarlos para tareas específicas sin comenzar desde cero.

  • Transformers de Hugging Face: Una biblioteca que ofrece modelos pre-entrenados principalmente para tareas de procesamiento del lenguaje natural, con énfasis en arquitecturas de transformers.
  • spaCy: Una biblioteca de software de código abierto para el procesamiento avanzado del lenguaje natural en Python, conocida por su velocidad y eficiencia.

También: ¿Quieres construir tu propio chatbot de IA? Saluda a HuggingChat de código abierto

Herramientas de búsqueda de arquitectura neuronal

Finalmente, las herramientas en esta categoría automatizan el proceso de encontrar la arquitectura de red neuronal más óptima para un conjunto de datos o tarea específica. (Nota: Esta categoría de herramientas a menudo se abrevia como NAS. Este NAS es muy diferente del NAS que se refiere a almacenamiento conectado a la red.)

  • AutoKeras: Una biblioteca de software de código abierto para automatizar el aprendizaje automático y ayudar a encontrar el modelo adecuado para tu conjunto de datos.
  • AutoML de Google: Proporciona soluciones en la nube que automatizan el diseño y ajuste de modelos de aprendizaje automático en base a un conjunto de datos proporcionado.

Llamar al panorama de herramientas y plataformas impulsadas por IA en ingeniería de software “vasto” sería una subestimación severa. La IA generativa, y la IA en general, se ha convertido en la tendencia más caliente en tecnología y no muestra signos de desaceleración. A medida que aumentan los requisitos de desarrollo, los desarrolladores buscan las herramientas más adecuadas para completar sus proyectos. Te hemos mostrado solo una pequeña muestra de los recursos disponibles.

Ten en cuenta que este es un entorno muy cambiante. Al compilar esta lista, encontramos varias herramientas que una vez (como el año pasado) fueron recursos bastante populares pero que fueron adquiridas, fusionadas en otros proyectos o simplemente cerradas, ya que sus desarrolladores de código abierto encontraron nuevas oportunidades con trabajos remunerados que ofrecen un mayor potencial a largo plazo.

No solo es importante desarrollar habilidades con las herramientas que utilizas: las empresas y los programadores también deben incorporar la comprensión del cambio constante en sus habilidades, para poder adaptarse a un mercado y un conjunto de tecnologías que se están innovando a gran velocidad.

Mirando hacia el futuro: el futuro de la IA en ingeniería de software

La convergencia de la inteligencia artificial con la ingeniería de software tradicional no es una tendencia pasajera. Proporciona demasiado “valor fácil” como para ser ignorada, pero a medida que brinda nuevas eficiencias, también abre los muchos desafíos que hemos discutido en este artículo y en la Special Feature.

A medida que nos adentramos en el futuro, surgen varias tendencias y predicciones clave:

  • Desarrollo con IA primero, con el aprendizaje automático en el núcleo de los proyectos
  • Software autoadaptativo que evoluciona en tiempo real en función de las necesidades del usuario
  • IA colaborativa que se asocia con los desarrolladores, comprendiendo el contexto y la dinámica del equipo
  • Un enfoque en una IA ética y responsable que enfatiza la transparencia y la equidad
  • Ciberseguridad impulsada por IA que detecta y aborda proactivamente las amenazas
  • Modelos de IA personalizados que atienden necesidades específicas, democratizando los beneficios de la IA
  • Un énfasis en el aprendizaje continuo para los desarrolladores, dado la naturaleza en constante evolución de la IA
  • Código y soluciones escritas principalmente por IA que son opacas para los desarrolladores humanos

Es emocionante y un poco preocupante pensar en el impacto que la IA promete para la ingeniería de software. Como con cualquier avance tecnológico, surgirán desafíos. Sin embargo, si el último año ha sido un indicador, la integración de la IA en la ingeniería de software es un viaje lleno de oportunidades, listo para redefinir los límites de lo que el software puede lograr.


Puedes seguir mis actualizaciones diarias del proyecto en las redes sociales. Asegúrate de suscribirte a mi boletín semanal de actualizaciones en Substack y de seguirme en Twitter en @DavidGewirtz, en Facebook en Facebook.com/DavidGewirtz, en Instagram en Instagram.com/DavidGewirtz y en YouTube en YouTube.com/DavidGewirtzTV.