Thèse de Benjamin Danglot

Amplification automatique de tests unitaires pour le DevOps

Au cours de la dernière décennie, les tests unitaires rigoureux sont devenus un élément essentiel de tout projet logiciel sérieux, qu’il soit dans l’industrie ou dans le monde universitaire. Le mouvement de développement agile a contribué à ce changement culturel avec la diffusion mondiale des techniques de développement pilotées par les tests. Plus récemment, le mouvement DevOps a encore renforcé la pratique des tests en mettant l'accent sur les tests continus et automatisés. Cependant, les tests sont fastidieux et coûteux pour l’industrie: il est difficile d’évaluer le retour sur investissement. Ainsi, les développeurs sous pression, par manque de discipline ou de temps, peuvent omettre l’écriture des tests. Pour surmonter ce problème, la recherche étudie l’automatisation de la création de tests. Le rêve était qu'une ligne de commande vous donne une suite de tests complète, qui vérifie l'ensemble du programme. Même si les suites de tests générées automatiquement atteignent une couverture élevée, il existe toujours des obstacles à l'adoption de telles techniques par l'industrie. Cela s'explique par les difficultés à comprendre, intégrer et gérer la suite de tests générée. En outre, la plupart des outils reposent sur des oracles faibles ou partiels, par exemple, l'absence d'erreurs à l'exécution, ce qui limite leur capacité à détecter les bogues. Dans cette thèse, mon objectif est de remédier à l’absence d’un outil permettant aux développeurs de réaliser des tests de régression. Pour ce faire, j'utilise l'amplification de la suite de tests. Je propose une nouvelle approche basée à la fois sur la transformation des entrées de test et la génération d’assertions pour amplifier la suite de tests. Cet algorithme est implémenté dans un outil appelé DSpot. Deuxièmement, j'utilise DSpot pour détecter la différence de comportement entre deux versions du même programme. En particulier, j’utilise DSpot pour détecter le changement de comportement introduit par un commit dans les projets sur GitHub. Cela montre que DSpot peut être utilisé dans l'intégration continue pour accomplir deux tâches cruciales: 1) générer des méthodes de test amplifiées qui spécifient un changement de comportement; 2) générer des méthodes de test amplifiées pour améliorer la capacité à détecter les régressions potentielles. Dans cette thèse, j'expose également trois contributions transversales liées à l'exactitude du programme. Tout d'abord, j'étudie la correction des programmes sous des perturbations à l'exécution. Deuxièmement, j'étudie la présence de méthodes pseudo-testées qui révèlent les faiblesses de la suite de tests. Troisièmement, j'étudie le surapprentissage des correctifs et la génération de tests pour la réparation automatique.

Jury

M. Martin MONPERRUS KTH Royal Institute of Technology Co-directeur de thèse Mme Lydie DU BOUSQUET Université Joseph Fourier Rapporteur M. Jordi CABOT Université polytechnique de Catalogne Rapporteur M. Lionel SEINTURIER Université de Lille Co-directeur de thèse M. Benoit BAUDRY KTH Royal Institute of Technology Examinateur M. Daniel LE BERRE Université d'Artois Examinateur M. Vincent MASSOL XWiki Invité

Thèse de l'équipe Spirals soutenue le 14/11/2019