Is this Build Failure Related to my Patch? An Empirical Study of Unrelated Build Failures in Continuous Integration
Cette étude empirique analyse 77 354 échecs de construction CI répartis sur sept projets Apache afin de quantifier l'effort développeur gaspillé sur des échecs sans rapport et démontre que des modèles d'apprentissage semi-supervisé à partir de données positives et non étiquetées (PU), exploitant des caractéristiques telles que la latence CI et les motifs d'erreur, peuvent prédire efficacement ces échecs non actionnables pour aider les développeurs à prioriser leurs efforts de débogage.
Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète
Imaginez que vous êtes un chef travaillant dans une cuisine très animée et chaotique (c'est l'environnement d'Intégration Continue). Toutes les quelques minutes, une nouvelle commande arrive (un push de code), et la cuisine commence automatiquement à préparer un plat-test pour vérifier si les nouveaux ingrédients fonctionnent.
Parfois, le plat-test brûle ou a un goût terrible. Habituellement, cela signifie que le chef qui vient d'ajouter les nouveaux ingrédients a fait une erreur. Mais parfois, l'alarme incendie se déclenche parce que le précédent chef a laissé le feu allumé, ou que le four est tombé en panne, ou qu'une autre personne a fait tomber un plateau dans la pièce voisine. C'est ce que l'article appelle un « Échec de construction sans rapport ».
Le problème est que le chef qui vient d'ajouter les nouveaux ingrédients ne sait pas pourquoi le plat a échoué. Il passe des heures (l'article indique une médiane de 4 heures) à vérifier frénétiquement ses propres épices et couteaux, essayant de prouver : « Ce n'était pas moi ! » Cela gaspille beaucoup de temps et cause du stress.
Ce que les chercheurs ont fait
Les auteurs (une équipe de chercheurs) ont décidé d'enquêter sur ce chaos de cuisine. Ils ont examiné 77 354 « plats brûlés » (échecs de construction) provenant de 7 grands projets logiciels open source (comme Apache Hadoop et HBase).
- Le travail d'enquête : Ils ont lu manuellement des milliers de commentaires laissés par les développeurs après un échec. Ils ont recherché des phrases comme « ceci n'est pas lié à ma modification » ou « sans rapport ». Ils ont trouvé environ 10 300 cas où les développeurs ont explicitement déclaré : « Cet échec n'est pas de ma faute. »
- L'entretien : Ils ont sélectionné un échantillon plus petit et représentatif de 371 de ces cas « pas de ma faute » et les ont analysés comme un détective analysant une scène de crime. Ils se sont demandé : Pourquoi les développeurs ont-ils dit que ce n'était pas de leur faute ?
- Les découvertes : Les raisons les plus courantes étaient :
- Tests sans rapport : Le test qui a échoué vérifiait en réalité quelque chose provenant d'une autre partie de la cuisine, et non le nouvel ingrédient.
- Interférence externe : Quelque chose en dehors de la cuisine a changé (comme un fournisseur livrant de la farine de mauvaise qualité à tout le monde).
- Non reproductible : L'incendie s'est produit une fois, mais lorsqu'ils ont essayé de préparer à nouveau le plat, tout allait bien (peut-être une surtension électrique aléatoire).
- Le groupe « Non spécifié » : Une énorme partie (35 %) du temps, les développeurs disaient simplement « Ce n'est pas moi » sans expliquer pourquoi.
- Les découvertes : Les raisons les plus courantes étaient :
La solution : un « Assistant intelligent »
Puisque les développeurs ne peuvent pas toujours expliquer pourquoi un échec est sans rapport immédiatement, les chercheurs ont construit un Assistant intelligent (un modèle d'apprentissage automatique) pour deviner à leur place.
Ils ont utilisé une technique spéciale appelée Apprentissage PU (Apprentissage Positif-Non étiqueté).
- L'analogie : Imaginez que vous essayez d'enseigner à un chien à trouver un type spécifique de balle. Vous avez quelques balles que vous savez être du bon type (les exemples Positifs). Mais vous avez un énorme tas de balles mélangées où vous ne savez pas lesquelles sont du bon type et lesquelles sont mauvaises (le tas Non étiqueté). Vous ne pouvez pas simplement dire « tout le reste est une mauvaise balle » car certaines d'entre elles pourraient en fait être du bon type, vous ne les avez simplement pas encore vérifiées.
- Comment cela a fonctionné : Les chercheurs ont nourri leur modèle avec les « échecs sans rapport connus » et le « tas inconnu ». Le modèle a appris à repérer des motifs suggérant qu'un échec est probablement sans rapport, même sans étiquette claire.
À quel point l'assistant était-il bon ?
Le modèle a été testé sur les mêmes 7 projets.
- Il était très bon en précision (quand il disait « Ce n'est pas de votre faute », il avait généralement raison, environ 70 % à 88 % du temps).
- Il était bon en rappel (il a trouvé la plupart des échecs sans rapport, bien qu'il en ait manqué certains).
- Il a nettement surpassé le hasard ou des règles simples.
Les « indices » utilisés par le modèle
Les chercheurs ont identifié trois principaux indices qui ont aidé le modèle à décider si un échec était sans rapport :
- L'écart de temps (Latence CI) : Si un développeur a poussé du code et attendu longtemps avant de déclencher la construction, il est plus probable que quelqu'un d'autre ait cassé la cuisine entre-temps.
- L'erreur « Déjà vu » : Si le message d'erreur ressemble exactement à un message qui s'est produit récemment, il s'agit probablement d'une répétition d'un ancien problème, et non d'un nouveau causé par le chef actuel.
- Le bavardage : S'il y a beaucoup de commentaires sur le problème avant que l'échec ne se produise, cela suggère que le problème est complexe et implique probablement le travail d'autres personnes, et non seulement le push actuel.
La conclusion
L'article conclut qu'en utilisant cet « Assistant intelligent », les développeurs peuvent obtenir un indice rapide : « Il y a de fortes chances que cet échec ne soit pas de votre faute. »
Cela ne signifie pas qu'ils peuvent ignorer le problème, mais cela leur dit : « Ne passez pas 4 heures à vérifier votre propre code. Vérifiez peut-être le four ou demandez à l'autre chef. » Cela les aide à arrêter de perdre du temps sur de fausses alertes et à reprendre la cuisine (le codage) plus rapidement.
Note importante : L'article se concentre entièrement sur l'identification de ces échecs dans les projets logiciels. Il ne prétend pas que cette méthode fonctionne pour le diagnostic médical, le trading financier ou tout autre domaine en dehors du développement logiciel. C'est strictement un outil pour les équipes logicielles afin de gérer leur propre chaos de « cuisine ».
Noyé(e) sous les articles dans votre domaine ?
Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.