L'outil détecte les similitudes entre les programmes pour aider les programmeurs à écrire des logiciels plus rapides et plus efficaces.
La programmation informatique n'a jamais été facile. Les premiers codeurs écrivaient des programmes à la main, dessinant des caractères sur du papier millimétré avant de les convertir en grandes piles de cartes perforées pouvant être traitées par un ordinateur. Une erreur, et il faudra peut-être tout refaire.
De nos jours, les codeurs utilisent de nombreux outils puissants qui automatisent une grande partie du travail, de la détection des erreurs au cours de la saisie au test de votre code avant de l'appliquer. Mais sinon, peu de choses ont changé. Une erreur stupide peut encore planter un logiciel entier. Et à mesure que les systèmes deviennent de plus en plus complexes, la recherche de ces erreurs devient de plus en plus difficile.
«Parfois, plusieurs jours peuvent être nécessaires aux équipes de codeurs pour corriger un bogue», explique Justin Gottschlich, directeur du groupe de recherche en programmation machine chez Intel.
C'est pourquoi certaines personnes pensent que nous devrions simplement faire programmer les machines elles-mêmes. La génération automatique de code est un sujet de recherche brûlant depuis plusieurs années. Microsoft intègre la génération de code de base dans ses outils de développement logiciel largement utilisés, Facebook a créé un système appelé Aroma qui met automatiquement fin aux petits programmes et DeepMind a développé un réseau neuronal qui peut créer des versions plus efficaces d'algorithmes simples que celles développées par les humains. Même le modèle de langage OpenAI GPT-3 peut composer des extraits de code simples , tels que des mises en page de pages Web, à partir de requêtes en langage naturel.
Gottslich et ses collègues l'appellent programmation machine.... En collaboration avec un groupe d'Intel, du MIT et du Georgia Institute of Technology d'Atlanta, il a développé un système appelé Machine Inferred Code Similarity , ou MISIM, qui peut extraire la signification d'un morceau de code - ce que le code dit à un ordinateur - de de la même manière que les systèmes de traitement du langage naturel (PNL) peuvent lire un paragraphe rédigé en anglais.
MISIM peut alors suggérer d'autres façons d'écrire le code, en suggérant des correctifs et des moyens de le rendre plus rapide ou plus efficace. La capacité de l'outil à comprendre ce qu'un programme essaie de faire lui permet d'identifier d'autres programmes qui font des choses similaires. En théorie, cette approche pourrait être utilisée par des machines qui ont écrit leur propre logiciel basé sur une courtepointe patchwork de logiciels préexistants avec un contrôle ou une intervention humaine minimal.
MISIM fonctionne en comparant des extraits de code avec des millions d'autres programmes qu'il a déjà vus, extraits d'un grand nombre de référentiels en ligne. Premièrement, il traduit le code dans une forme qui capture ce qu'il fait, mais ignore la façon dont il est écrit, car deux programmes, écrits de manière très différente, font parfois la même chose. MISIM utilise ensuite le réseau neuronal pour rechercher un autre code ayant une signification similaire. Dans une pré-impression, Gottshlich et ses collègues rapportent que MISIM est 40 fois plus précis que les systèmes précédents qui tentent de le faire, y compris Aroma.
MISIM est un pas en avant passionnant, déclare Veselin Raychev, CTO de la société suisse DeepCode, dont les outils de détection d'erreur - parmi les plus avancés du marché - utilisent des réseaux de neurones formés à des millions de programmes pour suggérer des améliorations aux codeurs au fur et à mesure qu'ils les écrivent.
Mais l'apprentissage automatique est toujours incapable de prédire si quelque chose est un bogue, dit Raichev. En effet, il est difficile d'enseigner à un réseau neuronal ce qui est ou n'est pas un bogue s'il n'est pas étiqueté comme tel par un humain.Selon lui, il y a eu de nombreuses études intéressantes sur les réseaux de neurones profonds et la correction d'erreurs, "mais pratiquement ils ne sont pas encore là, de très loin". En règle générale, les outils de détection de bogues de l'IA donnent beaucoup de faux positifs, a-t-il déclaré.
MISIM gère cela en utilisant l'apprentissage automatique pour identifier les similitudes entre les programmes, plutôt que de détecter directement les bogues. En comparant un nouveau programme à un logiciel existant qui est connu pour être correct, il peut alerter l'encodeur des différences importantes qui peuvent entraîner des erreurs.
Intel prévoit d'utiliser cet outil comme système de recommandation pour ses propres développeurs, offrant des alternatives pour écrire du code plus rapidement ou plus efficacement. Mais comme MISIM n'est pas lié à la syntaxe d'un programme particulier, il peut faire beaucoup plus. Par exemple, il peut être utilisé pour traduire du code écrit dans un langage plus ancien tel que COBOL vers un langage plus moderne tel que Python. Ceci est important car de nombreuses institutions, y compris le gouvernement américain , comptent toujours sur des logiciels écrits dans des langues que peu de codeurs savent comment maintenir ou mettre à jour.
En fin de compte, Gottslich pense que cette idée peut être appliquée au langage naturel. Combiné avec PNL (Traitement du langage naturel, à ne pas confondre avec la programmation neuro-linguistique ), la capacité de travailler avec le sens du code séparément de sa représentation textuelle peut un jour permettre aux gens d'écrire des logiciels en décrivant simplement ce qu'ils veulent faire avec des mots, dit-il.
«Créer de petites applications pour votre téléphone ou des choses de ce genre vous aidera dans votre vie de tous les jours - je pense que ce n'est pas si loin», déclare Gottshlich. «J'aimerais voir 8 milliards de personnes créer des logiciels d'une manière qui leur est naturelle.»