ML to the Rescue: Herramientas para desarrolladores de IA

El aprendizaje automático continúa penetrando las esferas más diversas de la actividad humana, y un área tecnológica como el desarrollo de software, por supuesto, no podría ser una excepción. Según el pronóstico del especialista en inteligencia artificial y aprendizaje automático Sergey Markov, expresado en la conferencia "Resultados de AI-2019" , en 2020 aparecerán una gran cantidad de herramientas de desarrollo que utilizan el aprendizaje automático. Esto me llevó a la idea de que algunas de estas herramientas deberían estar disponibles en el mercado ahora mismo. ¿Pueden entonces ayudar "en casa" al desarrollador web habitual escribiendo en Java, Python y JS? 

Mirando hacia el futuro, diré que, desafortunadamente, actualmente no hay soluciones abiertas que puedan generar al menos algún código de "combate". Más cerca de esto vino Bayouy DeepCoder, pero estos proyectos aún son demasiado crudos. Se observa un mayor progreso en áreas relacionadas, como autocompletar, análisis estático, generación de pruebas. Hablaré de esto en el artículo.



Kite: autocompletado inteligente y documentación incorporada en el IDE de Python


Sitio web: https://kite.com/
Precio: completamente gratis.

Complemento para acelerar la escritura de código con la ayuda de autocompletado inteligente. Kite indexa la base del código del proyecto, lo que significa mostrar los consejos más relevantes. Además del autocompletado, si es necesario, puede abrir la documentación incorporada con ejemplos de código para más de 800 bibliotecas con un solo clic (lo más útil para bibliotecas como numpy o pandas). Una vez a la semana, se envía un informe por correo con estadísticas sobre el uso de la función de sustitución automática. 
 

Las sugerencias de cometas (marcadas con un icono) son mucho más relevantes que las nativas. La ventana emergente con documentación le dirá qué se puede transferir a kwargs

Kite solía enviar pequeñas piezas de código al servidor, lo que no es adecuado para muchos por razones de seguridad, ¡pero son buenas noticias! - Ahora Kite ha abandonado esta práctica, y todo el análisis tiene lugar localmente. El complemento es bastante fácil de usar: es fácil de instalar y funciona rápidamente sin cargar el sistema. Kite es compatible con la mayoría de los IDE populares: Idea, PyCharm, Sublime, Vim, código Vs, Spyder y Atom.


El resultado final: quizás el proyecto más listo para el uso de combate en la selección. Se lo recomiendo a todos los que escriben en Python.

Para otros idiomas, hay productos similares: Codota para Java o TabNine, que admite 22 idiomas. No tuve tiempo para probarlos, pero parece que Codota ofrece sugerencias más conservadoras, mientras que TabNine (para Java) ofrece piezas enteras de código, incluidos nombres de variables (a veces sin ningún contexto) y va al grano.

DeepCode: un analizador de código estático centrado en la búsqueda de vulnerabilidades.


Sitio web: https://www.deepcode.ai/
Precio: la versión en la nube es gratuita para proyectos de código abierto y equipos de hasta 30 personas. Existe una opción de alojamiento propio para GitLab y BitBucket Enterprise, el precio es negociable.

Como los desarrolladores lo expresaron acertadamente, DeepCode es un Grammarly para el código. El propósito es ayudar al desarrollador a detectar errores y vulnerabilidades en el código. La solución autohospedada viene en forma de contenedor acoplable, se integra en el sistema de control de versiones a través de ganchos y se configura literalmente en 10 minutos. También hay un bot disponible para verificar las solicitudes de extracción. Soporte declarado para Java, Python, JavaScript y TypeScript.


Ejemplo de recomendación de DeepCode

Impresiones de uso: muy satisfecho con el bajo porcentaje de falsos positivos. Todos los problemas encontrados fueron bastante reales y no se activaron por razones independientes de la calidad de la verificación (el código con errores no se inició, el código inseguro no utilizó la entrada del usuario). Las advertencias de rendimiento también parecen bastante razonables. El número de problemas detectados en comparación con el analizador de código Java FineBugs o el mismo PVS-Studio parece insignificante: 200 contra 2-4 mil. No sé si considerar esto como una ventaja, pero al menos 200 piezas realmente se pueden desmontar, lo que no se puede decir sobre 4 mil. 


El bot verifica cada solicitud de extracción

El resultado final: si siempre te molesta la cantidad de falsos positivos cuando trabajas con linters, debes probar DeepCode. También es una excelente manera de contribuir al código abierto: bifurca el proyecto por ti mismo, ejecuta la prueba y un par de solicitudes de extracción útiles en tu bolsillo.

DiffBlue - generador de pruebas unitarias para Java 


Sitio web: https://www.diffblue.com/ 
Precio: $ 3375 por mes para un equipo de 25 personas. Una tarifa gratuita para uso individual todavía está en los planes.

Este producto se ve el más ambicioso en la selección. Una startup británica el año pasado que recibió 20 millones de inversión de Goldman Sachs. Si inicialmente estaba buscando algo que genere código para las pruebas, DiffBlue genera pruebas para el código con la capacidad de integrarse en CI. El producto presenta una buena integración con la infraestructura de prueba Spring Boot. Trabaja con Gradle, Maven, testng, Junit.

El desarrollador anunció dos modos de operación: 

  • Esencial: las pruebas se generan por la firma del método
  • Avanzado: el cuerpo del método también se tiene en cuenta y se generan pruebas para cada rama en el código. 

DiffBlue se suministra como una utilidad CLI para incrustar en CI o como un complemento para IntelliJ IDEA para generar pruebas durante el desarrollo.


DiffBlue en sí mismo empapa clases, genera accesorios y aserciones.
 
En proyectos reales, DiffBlue demostró ser ambiguo. 

  1. . — «». , , .   Gradle . . jar' , jcover.config. c Serializable, Active Record . — 3000 (sic!), coverage 3%.
  2. Caso dos, mucho más exitoso. Microservicio sin estado en Spring Boot. Según los desarrolladores, dedican mucho tiempo a admitir aplicaciones de arranque de primavera. Todo funcionó sin errores, la cobertura aumentó del 28 al 42 por ciento, pero solo de acuerdo con las instrucciones. En las sucursales, la cobertura creció solo un 6% (41% a 47%). Esto se debe a que muchas pruebas fueron probadas por getters o setters. Quizás en el modo avanzado los resultados serían aún más interesantes.


También pasa Para una clase con una docena de métodos públicos y lógica compleja, resultó ser un maniquí.

El resultado final: si todo funcionara, según lo planeado, sería genial y tendría sentido, pero esto aún está muy lejos. La versión 0.1 muestra que los muchachos todavía están por delante.

Conclusión


El uso de la IA para la programación está ganando impulso, pero hasta ahora la industria todavía está en el comienzo del viaje. Hay muchas aplicaciones posibles: en algunas, ya ha habido competencia, en otras hasta ahora solo se presentan productos individuales. El objetivo principal y aparentemente más obvio, la generación del código en sí, aún no ha sido asumido por nadie, pero ya puede aumentar la velocidad de desarrollo, reducir la cantidad de errores en el código antiguo y evitar la aparición de nuevos.

All Articles