ML à la rescousse: Outils de développement AI

L'apprentissage automatique continue de pénétrer les sphères les plus diverses de l'activité humaine, et un domaine technologique comme le développement de logiciels, bien sûr, ne pourrait pas faire exception. Selon les prévisions de Sergey Markov, spécialiste de l'IA et de l'apprentissage automatique, exprimé dans la conférence «Résultats de l'IA-2019» , en 2020, un grand nombre d'outils de développement utilisant l'apprentissage automatique apparaîtront. Cela m'a conduit à l'idée que certains de ces outils devraient être disponibles sur le marché en ce moment - peuvent-ils alors aider au quotidien un développeur web ordinaire écrivant en Java, Python et JS? 

À plus long terme, je dirai que, malheureusement, il n’existe actuellement aucune solution ouverte capable de générer au moins du code de «combat». Le plus proche est venu Bayouet DeepCoder, mais ces projets sont encore trop bruts. Des progrès plus importants sont observés dans des domaines connexes - tels que l'auto-complétion, l'analyse statique, la génération de tests. J'en parlerai dans l'article.



Kite - Smart Autocomplete et documentation intégrée dans Python IDE


Site Web: https://kite.com/
Prix: Entièrement gratuit.

Plugin pour accélérer l'écriture de code à l'aide de l'auto-complétion intelligente. Kite indexe la base de code du projet, ce qui signifie afficher les conseils les plus pertinents. En plus de la saisie semi-automatique elle-même, si nécessaire, vous pouvez ouvrir la documentation intégrée avec des exemples de code pour plus de 800 bibliothèques en un seul clic (le plus utile pour les bibliothèques comme numpy ou pandas). Une fois par semaine, un rapport est envoyé par courrier avec des statistiques sur l'utilisation de la fonction d'auto-substitution. 
 

Les suggestions de cerf-volant (marquées d'une icône) sont beaucoup plus pertinentes que les suggestions natives. Un pop-up avec de la documentation vous dira ce qui peut être transféré vers kwargs

Kite avait l'habitude d'envoyer de petits morceaux de code au serveur, ce qui ne convient pas à beaucoup pour des raisons de sécurité, mais bonne nouvelle! - Maintenant, Kite a abandonné cette pratique, et toute l'analyse a lieu localement. Le plug-in est assez convivial à utiliser - il est facile à installer et fonctionne rapidement sans charger le système. Kite prend en charge la plupart des IDE populaires: Idea, PyCharm, Sublime, Vim, Vs code, Spyder et Atom.


En bout de ligne: peut-être le projet le plus prêt à être utilisé au combat dans la sélection. Je recommande à tous ceux qui écrivent en Python.

Pour les autres langues, il existe des produits similaires - Codota pour Java ou TabNine, qui prend en charge 22 langues. Je n'ai pas eu le temps de les essayer, mais j'ai l'impression que Codota offre des conseils plus conservateurs, tandis que TabNine (pour Java) propose des morceaux entiers de code, y compris des noms de variables (parfois sans aucun contexte) et va droit au but.

DeepCode - un analyseur de code statique axé sur la recherche de vulnérabilité


Site Web: https://www.deepcode.ai/
Prix: La version cloud est gratuite pour les projets et équipes open source pouvant accueillir jusqu'à 30 personnes. Il existe une option auto-hébergée pour GitLab et BitBucket Enterprise, le prix est négociable.

Comme les développeurs l'ont bien dit, DeepCode est une grammaire pour le code. Le but est d'aider le développeur à détecter les erreurs et les vulnérabilités dans le code. La solution auto-hébergée se présente sous la forme d'un conteneur Docker, est intégrée au système de contrôle de version via des crochets et est configurée en 10 minutes. Un bot est également disponible pour vérifier les demandes de tirage. Prise en charge déclarée de Java, Python, JavaScript et TypeScript.


Exemple de recommandation DeepCode

Impressions d'utilisation: très satisfait du faible pourcentage de faux positifs. Tous les problèmes trouvés étaient bien réels et ne se sont pas déclenchés pour des raisons indépendantes de la qualité de la vérification (le code avec des bogues n'a pas démarré, le code non sûr n'a pas utilisé d'entrée utilisateur). Les avertissements de performances semblent également tout à fait raisonnables. Le nombre de problèmes détectés par rapport à l'analyseur de code Java FineBugs ou au même PVS-Studio semble insignifiant - 200 contre 2-4 mille. Je ne sais pas s'il faut considérer cela comme un plus, mais au moins 200 pièces peuvent vraiment être démontées, ce qui ne peut pas être dit environ 4 000. 


Le bot vérifie chaque demande de pull

L'essentiel: si vous avez toujours été contrarié par le nombre de faux positifs lorsque vous travaillez avec des linters, vous devriez essayer DeepCode. C'est aussi un excellent moyen de contribuer à l'open source: créez vous-même le projet, exécutez le test - et quelques demandes d'extraction utiles dans votre poche.

DiffBlue - générateur de tests unitaires pour Java 


Site Web: https://www.diffblue.com/ 
Prix: 3375 $ par mois pour une équipe de 25 personnes. Un tarif gratuit pour un usage individuel est toujours dans les plans.

Ce produit a l'air le plus ambitieux de la sélection. Une startup britannique l'année dernière qui a reçu 20 millions d'investissements de Goldman Sachs. Si au départ je cherchais quelque chose qui génère du code pour les tests, alors DiffBlue génère des tests pour le code avec la possibilité d'être intégré dans CI. Le produit présente une bonne intégration avec l'infrastructure de test Spring Boot. Fonctionne avec Gradle, Maven, testng, Junit.

Le développeur a annoncé deux modes de fonctionnement: 

  • Essentiel: les tests sont générés par la signature de la méthode
  • Avancé: le corps de la méthode est également pris en compte et des tests sont générés pour chaque branche du code. 

DiffBlue est fourni comme un utilitaire CLI pour l'incorporation dans CI ou comme un plugin pour IntelliJ IDEA pour générer des tests pendant le développement.


DiffBlue lui-même imprègne les classes, génère des fixtures et des assertions.
 
Sur des projets réels, DiffBlue s'est révélé ambigu. 

  1. . — «». , , .   Gradle . . jar' , jcover.config. c Serializable, Active Record . — 3000 (sic!), coverage 3%.
  2. Deuxième cas, beaucoup plus de succès. Microservice sans état sur Spring Boot. Selon les développeurs, ils consacrent beaucoup de temps à la prise en charge des applications Spring Boot. Tout a fonctionné sans erreur, la couverture est passée de 28 à 42%, mais uniquement selon les instructions. Dans les succursales, la couverture n'a augmenté que de 6% (41% à 47%). En effet, de nombreux tests ont été testés par des getters ou des setters. Peut-être qu'en mode avancé, les résultats seraient encore plus intéressants.


Cela arrive aussi. Pour une classe avec une dizaine de méthodes publiques et une logique complexe, cela s'est avéré être un mannequin.

L'essentiel: si tout fonctionnait comme prévu, ce serait très cool et logique, mais c'est encore loin. La version 0.1 montre que les gars sont toujours en avance.

Conclusion


L'utilisation de l'IA pour la programmation prend de l'ampleur, mais jusqu'à présent, l'industrie est encore au tout début du voyage. Il existe de nombreuses applications possibles: dans certains, il y a déjà eu concurrence, dans d'autres jusqu'à présent, seuls des produits uniques sont présentés. L'objectif principal et apparemment le plus évident - la génération du code lui-même - n'a encore été pris par personne, mais il est déjà en mesure d'augmenter la vitesse de développement, de réduire le nombre de bogues dans l'ancien code et d'empêcher l'apparition de nouveaux.

All Articles