Software

AI Weekly: La promesa y los límites de las herramientas de programación de máquinas


Expanda su estrategia y tecnología de datos corporativos en Transform 2021.


La programación de la máquina, que automatiza el desarrollo y el mantenimiento de software, se ve mejorada por la IA. Durante su Build Developer Conference en mayo, Microsoft presentó una nueva característica en Power Apps que aprovecha el modelo de lenguaje GPT-3 de OpenAI para ayudar a las personas a elegir fórmulas. ControlFlag de Intel puede detectar automáticamente errores en el código. Y TransCoder de Facebook convierte el código de un lenguaje de programación a otro.

Hay muchos usos posibles de la programación de computadoras. Y a medida que las computadoras se vuelven omnipresentes, la demanda de código de alta calidad atrae a un número cada vez mayor de aspirantes a programadores. Después de años de programación, los expertos aprenden a convertir resúmenes en programas ejecutables concretos. Pero pasan la mayor parte de su tiempo de trabajo sin programar. Según un estudio de la Universidad de Cambridge, al menos la mitad de los esfuerzos de los desarrolladores se dedican a la depuración, que se estima que le cuesta a la industria del software un estimado de $ 312 mil millones al año.

Las herramientas de revisión y sugerencia de código impulsadas por inteligencia artificial prometen reducir significativamente los costos de desarrollo y permitir a los programadores concentrarse en tareas más creativas y menos repetitivas, dijo Justin Gottschlich, científico senior de inteligencia artificial en la división de programación de máquinas de Intel. Gottschlich está liderando el trabajo en ControlFlag, que combina aprendizaje automático, métodos formales, lenguajes de programación y compiladores para detectar patrones de codificación normales e identificar anomalías en el código que probablemente podrían causar un error.

“Antes de la llegada del aprendizaje automático o los sistemas de programación basados ​​en inteligencia artificial, los programadores tenían docenas, tal vez cientos, de herramientas para ayudarlos a ser más productivos, codificar con menos errores lógicos, mejorar el rendimiento del software, etc. Casi todos estos sistemas, sin embargo, estaban ‘basados ​​en reglas’ ”, dijo Gottschlich a VentureBeat por correo electrónico. “Los sistemas basados ​​en reglas, si bien son útiles, tienen un alcance inherentemente limitado por las reglas en las que están programados. Entonces, cuando surgieran nuevos tipos de cosas, los sistemas de las personas necesitarían actualizarse. Además, estos sistemas basados ​​en reglas siempre han sido propensos a errores humanos al crear las reglas codificadas en ellos. Por ejemplo, los programadores pueden crear accidentalmente una regla para encontrar un cierto tipo de error, pero definir incorrectamente las reglas para encontrarlo. Este defecto oculto en el sistema de control podría pasar desapercibido para siempre «.

Gottschlich afirma que los sistemas basados ​​en inteligencia artificial ofrecen ventajas sobre los sistemas basados ​​en reglas de antaño, ya que la inteligencia artificial puede aprender de forma independiente y sin supervisión y, por lo tanto, puede recurrir a bases de datos de código masivas. En el aprendizaje no supervisado, los datos «desconocidos» se alimentan a un algoritmo para el que no existen etiquetas previamente definidas. El sistema debe aprender a clasificar los datos procesándolos para aprender de su estructura.

ControlFlag, por ejemplo, ha sido entrenado en más de mil millones de líneas de código sin etiquetar para reconocer variaciones estilísticas en el lenguaje de programación. TransCoder aprendió a traducir entre C ++, Java y Python mediante el análisis de un corpus de GitHub con más de 2.8 millones de repositorios. Microsoft entrenó un programa de depuración en un conjunto de datos de 13 millones de elementos de trabajo y defectos de 47.000 desarrolladores en los repositorios de AzureDevOps y GitHub. Y los algoritmos de la plataforma de revisión de código DeepCode se enseñaron utilizando miles de millones de líneas de código extraídas de proyectos públicos de código abierto.

Generación de código versus extensión

Hay una diferencia, por supuesto, entre las herramientas de codificación impulsadas por IA que pueden generar código a partir de todas las cosas y, por supuesto, extender el flujo de trabajo de un programador. Este último es más común. Startups como Tabine (antes Codota) desarrollan plataformas que sugieren y completan automáticamente scripts en Python, C, HTML, Java, Scala, Kotlin y JavaScript. Ponicode toca AI para verificar la precisión del código. El motor de similitud de código inferido por máquina de Intel puede determinar cuándo dos piezas de código están realizando tareas similares, incluso si utilizan diferentes estructuras y algoritmos. Y DeepCode ofrece un sistema basado en aprendizaje automático para revisiones de código para toda la aplicación, al igual que Amazon.

“En este momento estamos viendo una gran cantidad de asistentes con tecnología de inteligencia artificial que permiten a los ingenieros de software hacer su trabajo de manera más rápida y precisa. Y la razón por la que hay más herramientas auxiliares que herramientas de automatización es porque la automatización impulsada por IA simplemente no ha alcanzado el nivel de precisión que necesita ”, dijo a VentureBeat Patrick Joubert, CEO de Ponicode. “Nuestra industria aún es joven, y aunque ya estamos viendo el potencial de la automatización con generadores de código basados ​​en inteligencia artificial, tenemos que reconocer que el código generado automáticamente todavía es bastante insostenible y que la calidad general aún no está a la altura de los estándares adecuados. Mientras algunos ingenieros trabajan en el futuro de la automatización impulsada por la inteligencia artificial, mi equipo y yo, junto con muchas otras partes interesadas, estamos dedicados a desarrollar herramientas que se pueden utilizar hoy. Creo que en unos años habrá suficientes herramientas para cubrir todos los pasos del ciclo de vida del desarrollo «.

Para Joubert, el autocompletado y el análisis de código son las categorías de herramientas más fascinantes para la programación de máquinas en la actualidad. Los sistemas de autocompletado como Tabnine y Kite usan IA para analizar la semántica y comprender el código, utilizando funciones de autocompletado con una idea del contenido semántico y el propósito del código. Las herramientas de análisis de código como Snyk y DeepCode están diseñadas para encontrar debilidades en el código y sugerir medidas para remediarlas, a menudo con sorprendente velocidad y precisión.

“Cuando vemos las numerosas filtraciones y errores en cualquier software, incluidos los desarrollados por corporaciones multinacionales líderes, podemos estar de acuerdo [the software] La industria aún no está madura. Las herramientas de codificación basadas en IA están destinadas principalmente a mejorar la experiencia del desarrollador y fortalecerla gracias a una mayor velocidad y mayor eficiencia ”, agregó Joubert. “Detrás de estos beneficios centrados en el desarrollador, creo que estamos en camino de permitir que los ingenieros de software desarrollen software estándar de la industria que logre sistemáticamente calidad, innovación y velocidad … autocompletado [in particular is] Esto permite a los ingenieros de software concentrarse en la parte más compleja de su base de código y eliminar la carga de escribir manualmente largas cadenas de código «.

restricciones

A pesar de su potencial, tanto los generadores de código impulsados ​​por IA como las herramientas de soporte de codificación tienen sus límites. Por ejemplo, si bien GitHub solo tiene 250 millones de repositorios de código, la mayoría de los datos no están anotados. Hay pocos ejemplos que describen exactamente lo que hace el código, lo cual es un desafío particular para cualquier sistema que no pueda aprender de datos sin etiquetar.

Para solucionar este problema, IBM lanzó recientemente CodeNet, un conjunto de datos etiquetado de 14 millones de muestras que contiene 500 millones de líneas de código escritas en 55 lenguajes de programación. La compañía afirma que las extensas anotaciones de CodeNet lo hacen adecuado para una amplia variedad de tareas, a diferencia de otros conjuntos de datos que se especializan en tareas de programación específicas. Los investigadores de IBM han realizado varios experimentos con CodeNet, incluida la clasificación de código, la puntuación de similitud de código y la finalización de código.

«Mi conjetura es que comprender la semántica del código de los sistemas probablemente será una de las áreas más importantes de la programación de máquinas en la próxima década», dijo Joubert. “Depende del dominio al que se esté aplicando el sistema de programación de la máquina. Los sintetizadores de programas completos son ahora una realidad para programas pequeños como pruebas unitarias o pruebas de regresión. Sin embargo, con programas más grandes, actualmente es computacionalmente difícil para los sistemas de programación de máquinas generar potencialmente miles o millones de líneas de código sin la ayuda de un programador «.

Boris Paskalev, cofundador y director ejecutivo de DeepCode, dice que la creación de algunas líneas de código con IA es «más un juguete que un gran avance en la productividad». Mientras que las técnicas Al igual que el procesamiento del lenguaje natural funciona bien con el texto, debido a que existen límites firmes para las palabras y la sintaxis que deben entenderse, el código no siempre es código, argumenta.

«Dado que no existen reglas formales para el desarrollo de software, [programming] es un arte que requiere una comprensión completa del código y la intención del desarrollador de producir algo que funcione como se espera sin errores ”, dijo Paskalev a VentureBeat. «En la medida en que hemos llegado a utilizar el aprendizaje automático y las redes neuronales para el código, todavía estamos en la fase de ‘invención de la rueda’ … el aprendizaje automático ya está demostrando ser muy útil para el código, pero solo cuando llegue el momento». A través de una representación semántica de aprendizaje automático del código: asegúrese de que todos los hechos semánticos, variables, transiciones y relaciones lógicas estén claramente representados y tomados en cuenta por el modelo de aprendizaje «.

Según Paskalev, estudios recientes sugieren que la IA todavía tiene un camino por recorrer antes de que pueda generar código de manera confiable. En junio, un equipo de investigadores de la Universidad de California en Berkeley, Cornell, la Universidad de Chicago y la Universidad de Illinois en Urbana-Champaign publicó APPS, un punto de referencia para la generación de código a partir de especificaciones de lenguaje natural. El equipo probó varios tipos de modelos en APPS, incluidos OpenAIs GPT-2, GPT-3 y una versión de código abierto de GPT-3 llamada GPT-Neo. En experimentos, encontraron que los modelos podían aprender a generar código que resuelve problemas más simples, pero no sin errores de sintaxis. Aproximadamente el 59% de las soluciones de GPT-3 a problemas introductorios tenían errores, mientras que el modelo de mejor rendimiento, GPT-Neo, solo logró una precisión del 10,15%.

«Cuando se genera código a partir de toda la estructura, normalmente existen desafíos tanto para especificar la intención como para usar los resultados», dijo a VentureBeat Dror Weiss, director ejecutivo de Tabine. “La intención del usuario se puede expresar en lenguaje natural proporcionando ejemplos, escribiendo código en un lenguaje de alto nivel o escribiendo de otra manera. En la mayoría de los casos, sin embargo, esta intención no proporciona una especificación completa del comportamiento deseado. Además, el código generado puede seguir una ruta diferente a la que tenía en mente el desarrollador. Por lo tanto, puede ser difícil para el desarrollador juzgar si el código está realizando exactamente la operación deseada «.

Los investigadores de Facebook AI Baptiste Rozière y Marie-Anne Lachaux, que trabajaron en TransCoder, están de acuerdo con la evaluación de Tabine. “Es intrínsecamente difícil generar código correcto a partir de descripciones de problemas inespecíficos en lenguaje natural que podrían corresponder a varios fragmentos de código diferentes. Una tarea más simple sería generar código a partir de la entrada que sea más específico y más cercano al código de salida, como un pseudocódigo o código escrito en un idioma diferente ”, le dijeron a VentureBeat. “Un gran obstáculo para adoptar … métodos que generan grandes cantidades de código sin supervisión humana es que tienen que ser extremadamente confiables para que sean fáciles de usar. Incluso una herramienta que pudiera generar métodos con un 99% de precisión no generaría una base de código funcional con cientos de funciones. Podría acelerar el proceso de generación de código, pero aún requeriría pruebas e intervención humanas «.

Rozière y Lachaux también señalan que las tareas de generación de código son generalmente mucho más difíciles que las tareas de clasificación porque el modelo tiene mucha libertad y puede producir muchas salidas diferentes, lo que dificulta el control de la exactitud de la generación. Además, en comparación con los lenguajes naturales, los lenguajes de programación son muy sensibles a pequeños errores. Una diferencia de un carácter puede cambiar la semántica del código y hacer que la salida sea incorrecta.

«Los algoritmos actuales de aprendizaje automático pueden no generalizarse lo suficientemente bien a varios problemas para igualar el desempeño humano en la codificación de entrevistas sin conjuntos de datos más grandes o métodos de preentrenamiento sin supervisión mucho mejores», dijeron Rozière y Lachaux.

Posibles beneficios

Paskalev cree que pasarán al menos de cinco a diez años antes de que el procesamiento del lenguaje natural permita a los desarrolladores crear «componentes significativos» o incluso aplicaciones completas a partir de una simple descripción. Pero Gottschlich es más optimista. Señala que las herramientas de codificación impulsadas por IA son valiosas no solo al escribir código, sino también cuando se trata de obtener frutos negativos como actualizar el código existente. La migración de una base de código existente a un lenguaje moderno o más eficiente como Java o C ++, por ejemplo, requiere un conocimiento especializado tanto de los lenguajes de origen como de destino, y a menudo es costoso. El Commonwealth Bank of Australia ha gastado alrededor de $ 750 millones durante cinco años en la migración de su plataforma de COBOL a Java.

“El aprendizaje profundo ya nos permite cubrir las tareas más pequeñas, las tareas repetitivas y redundantes que abarrotan la rutina de un ingeniero de software. Hoy, la IA puede liberar a los ingenieros de software de tareas tediosas que los ralentizan y reducen su creatividad ”, dijo Gottschlich. “La mente humana sigue siendo muy superior cuando se trata de crear, innovar y diseñar las partes más complejas de nuestro software. En mi opinión, la forma más interesante de aprovechar el poder del aprendizaje automático en la actualidad es permitirles acelerar estas partes emocionantes y de valor agregado de su trabajo «.

Joubert y Weiss dicen que tampoco se puede ignorar el valor comercial potencial de la programación de máquinas. Se estima que entre el 19% y el 23% de los proyectos de desarrollo de software fracasan, y esta estadística se mantiene estable durante las últimas décadas. Standish Group descubrió que los proyectos «desafiados», es decir, aquellos que no cumplen con las expectativas en términos de alcance, tiempo o presupuesto, representan aproximadamente el 52% de los proyectos de software. La falta de participación de los usuarios y las directrices claras a menudo son responsables de la falta de puntos de referencia.

“Estamos viendo una gran cantidad de nuevas herramientas que utilizan IA para mejorar el código heredado y ayudar a que los activos existentes alcancen los estándares estándar de la industria. Podemos mejorar los flujos de trabajo de gestión de código heredado de los desarrolladores y ayudar a reducir la alta deuda técnica que se ha acumulado en la industria del software durante los últimos 50 años ”, dijo Joubert. “Atrás quedaron los días en que los desarrolladores tenían que escribir y leer el código línea por línea. Tengo curiosidad por ver cómo cambiarán los otros pasos en el ciclo de vida del desarrollo de software y cómo las herramientas alcanzarán el mismo nivel que Kite o Snyk han alcanzado. El uso de la inteligencia artificial para crear sin esfuerzo código eficiente, diseñado específicamente, probado, seguro y documentado cambiará fundamentalmente la forma en que las empresas de software pueden crear valor e innovación «.

Desde el punto de vista de Weiss, las herramientas de codificación impulsadas por la inteligencia artificial pueden reducir las interacciones «costosas» entre los desarrolladores, como las sesiones de preguntas y respuestas y los comentarios repetitivos sobre las revisiones de código, al tiempo que acortan el proceso de incorporación del proyecto. «[These] Las herramientas mejoran a todos los desarrolladores de la empresa. Toman la inteligencia del código colectivo de la organización y la ponen a disposición de todos los desarrolladores durante el tiempo de desarrollo. Esto permite que cada desarrollador del equipo supere su peso ”, dijo.

Si desea cubrir la IA, envíe consejos de noticias a Kyle Wiggers y suscríbase al boletín semanal de IA y marque nuestro canal de IA, The Machine.

Gracias por leer,

Kyle Wiggers

Autor de AI Staff

VentureBeat

La misión de VentureBeat es ser un mercado digital para que los tomadores de decisiones técnicas obtengan conocimientos sobre tecnologías y transacciones transformadoras. Nuestro sitio web proporciona información importante sobre tecnologías y estrategias de datos para ayudarlo a administrar su organización. Lo invitamos a convertirse en miembro de nuestra comunidad para obtener acceso:

  • información actual sobre los temas de su interés
  • nuestros boletines
  • contenido de liderazgo intelectual cerrado y acceso con descuento a nuestros valiosos eventos, como Transformar 2021: Aprende más
  • Funciones de red y más

miembro volverse

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba