alphaspirit - Fotolia
Focus sur UnReview, l’outil de revue de code « intelligent » acquis par GitLab
Au début du mois de juin, GitLab a annoncé l’acquisition d’UnReview, une startup proposant un outil d’aide à la révision de code propulsé au machine learning. Malgré la jeunesse du projet, le concurrent de GitHub y croit dur comme fer et prévoit d’étendre ses pratiques de la data science à toute sa plateforme DevOps.
Fondée en 2018 par Alexander Chueshev, doctorant au LIP6 (le laboratoire d’Informatique Sorbonne Université/CNRS), Stackeer.io est une startup moscovite composée de quatre personnes dont le mantra était de rendre le « processus intelligent de développement de logiciels » avant son rachat pour un montant confidentiel par GitLab.
Stackeer.io est plus connue pour avoir développé UnReview, un système de recommandation de revue de code propulsé au machine learning.
« Pour un projet donné, UnReview collecte automatiquement l’historique des commits et des merge requests afin d’identifier qui est responsable de la révision et pour quelle partie du code source », explique Alexander Chueshev, désormais ingénieur backend sénior machine learning chez GitLab, auprès du MagIT.
« Sur la base de ces informations, UnReview entraîne notre modèle [de machine learning] et recommande des réviseurs, en tenant compte de leur expérience dans la partie du code source proposée par une demande de fusion », ajoute-t-il.
Une fois les étapes d’extraction, de nettoyage, d’entraînement de données effectuées, Unreview fournit une interface pour observer ces préconisations par le biais d’une visualisation graphe.
Le projet est né d’un constat simple. Que ce soit les contributeurs de gros projets open source ou les programmes de développement dans les entreprises, l’identification d’un responsable d’une partie du code peut s’avérer complexe.
Ce problème « n’était pas abordé dans plusieurs projets que nous avons analysés. Après avoir effectué des recherches, nous avons découvert qu’UnReview semblait être une idée intéressante sur le plan commercial et technologique », relate Alexander Chueshev.
Recommander le bon développeur pour réviser le code
Outre la recommandation de la bonne personne chargée de réviser un élément de code spécifique, UnReview doit « résoudre le problème du démarrage à froid, c’est-à-dire lorsque le code source proposé est inconnu du moteur de recommandation » et « d’équilibrer la charge de révision au sein de l’équipe », selon l’ingénieur.
UnReview s’appuie sur une combinaison de techniques de machine learning et de deep learning, notamment la factorisation matricielle et les réseaux de neurones. « L’idée est de créer un moteur multicouche, où chaque couche réduit la liste des recommandations possibles en fonction de certaines hypothèses et/ou conditions », précise le fondateur.
D’abord conçu pour GitHub, GitLab et Bitbucket, UnReview est désormais uniquement connecté à GitLab qui proposera cet outil en mode SaaS. « Les six premiers mois du processus d’intégration seront consacrés à l’adaptation des suggestions de révision de code d’UnReview », indique Taylor McCaslin, principal Product Manager, Security & Data Science chez GitLab.
Wayne HaberDirecteur ingénierie, Gitlab
« Notre première preuve de concept consistera à mettre en œuvre UnReview avec les technologies GitLab (nous avons un accès natif aux données qu’UnReview n’avait pas), puis à le “nourrir” pour notre propre usage interne avec les développeurs GitLab tout en améliorant le produit GitLab lui-même », détaille Wayne Haber, directeur de l’ingénierie chez GitLab.
« Ensuite, nous utiliserons ce que nous avons appris pour améliorer les fonctionnalités de manière itérative, puis nous l’intégrerons dans notre service SaaS où il recommandera des mainteneurs et des réviseurs aux clients qui opteront pour cette fonctionnalité », continue-t-il.
« Les versions futures prendront également en compte le contexte de la merge request, c’est-à-dire le fait d’identifier précisément quel code source a été modifié et comment cela affecte les autres parties d’un projet », prévoit Alexander Chueshev.
GitLab se met à la data science et au MLOps
Chez Gitlab, ce rachat fait suite à l’acquisition de Peach Test et Fuzzit l’année dernière. Ces trois acquisitions s’inscrivent en parallèle de la phase ModelOps, un groupe composé de deux groupes de recherche conduits chacun par un ingénieur en charge des expérimentations MLOps et DataOps. Ils consacrent 20 % de leur activité au développement de solutions pour les équipes de data sciences : un ETL open source nommé Meltano et une suite MLOps capable de s’appuyer sur les fondamentaux de GIT et de se connecter avec les outils de data sciences les plus populaires (Anaconda, JupyterHub, Delta Lake, Trifacta, TensorFlow Serving, AWS Sagemaker, UbiOps, PyTest, PyTorch, Keras, Scikit-learn, etc.). Dans le cadre de ce plan, GitLab compte établir des partenariats avec des éditeurs et des startups.
« Cette acquisition et la phase ModelOps de GitLab ont pour objectif fondamental d’activer les workloads de data science au sein de GitLab CI et d’enrichir les fonctionnalités de notre plateforme DevOps avec l’apprentissage automatique, pour les rendre plus intelligentes et plus automatisées », vante Taylor McCaslin.
« Nous commençons par incorporer du machine learning dans des domaines spécifiques de notre plateforme que les utilisateurs souhaiteraient plus intelligents. Il ne s’agit pas d’utiliser l’IA et le ML comme des termes marketing à la mode, mais d’apporter de la valeur à nos clients », défend-il.
UnReview, une technologie à faire fructifier
Concernant UnReview, Wayne Haber reconnaît que la technologie est encore à un « stade précoce ». « Cependant, des validations et des tests approfondis ont été effectués sur des données de production. Nous continuons à travailler sur l’approche par itération », déclare-t-il.
De son côté, Taylor McCaslin s’interroge sur la meilleure manière d’intégrer UnReview dans l’offre self-hosted de GitLab. « Le déploiement de ce type de technologie nécessite une infrastructure IT spécialisée qui peut être coûteuse à exploiter », déclare-t-il. « Nous voulons donc être prudents quant à la manière dont nous exposons cette fonctionnalité aux clients self-hosted qui peuvent ne pas avoir d’expérience ou de compréhension de ces ressources IT spécifiques ».
Cette technologie complétera le Danger Bot de GitLab chargé, en sus de l’automatisation des tests, de la répartition aléatoire de l’action de relecture à un développeur.
Un bon nombre d’outils de revue de code du marché visent eux aussi à automatiser la détection des erreurs, les tests, le suivi d’audit et à résoudre les conflits les plus communs. GitHub, Atlassian, Snyk (par le rachat de DeepCode).
Les défis de l’IA appliquée à la revue de code
Extraire les métadonnées de merge, des pull requests, des dépendances et des contributeurs ne suffit pas pour répondre à la problématique ciblée par UnReview.
Alexander Chueshev identifie plusieurs défis. « Dans certains cas, il est difficile d’identifier le réviseur pour le merge request, car beaucoup [de programmeurs] peuvent contribuer, mais tout le monde n’a pas la permission de fusionner ou la connaissance de domaines spécifiques du code auxquels ils peuvent ne pas avoir contribué historiquement », indique-t-il.
Aussi, les affectations précédentes sur lesquelles doit s’appuyer UnReview sont parfois réalisées au hasard, ou à l’inverse, les revues de code sont toujours adressées à la même personne. Cela génère potentiellement des recommandations biaisées. « Nous avons découvert que souvent quelques réviseurs font la plupart des modifications. Cela peut conduire à la surcharge de travail pour certains développeurs. Par inadvertance, ils cloisonnent les connaissances, ce qui provoque un goulet d’étranglement [dans la chaîne DevOps] », observe l’ingénieur.
UnReview doit donc « optimiser la charge des révisions [entre les membres des équipes] tout en faisant comprendre pourquoi la personne a été sélectionnée ». Cette explicabilité apparaît clé dans la réussite du projet.