Automatic Unit Test Amplification For DevOps - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2019

Automatic Unit Test Amplification For DevOps

Amplification Automatique de Tests Unitaires pour DevOps

Résumé

Over the last decade, strong unit testing has become an essential component of any serious software project, whether in industry or academia. The agile development movement has contributed to this cultural change with the global dissemination of test-driven development techniques. More recently, the DevOps movement has further strengthened the testing practice with an emphasis on continuous and automated testing. However, testing is tedious and costly for industry: it is hard to evaluate return on investment. Thus, developers under pressure, by lack of discipline or time might skip writing the tests. To overcome this problem, research investigates the automation of creating strong tests. The dream was that a command-line would give you a complete test suite, that verifies the whole program. Even if automatically generated test suites achieve high coverage, there are still obstacles on the adoption of such techniques by the industry. This can be explained by the difficulties to understand, integrate and maintain generated test suite. Also, most of the tools rely on weak or partial oracles, \eg absence of run-time errors, which limits their ability to find bugs. In this thesis, I aim at addressing the lack of a tool that assists developers in regression testing. To do so, I use test suite amplification. In this thesis, I define test amplification and review research works that are using test amplification. Test amplification consists of exploiting the knowledge of test methods, in which developers embed input data and expected properties, in order to enhance these manually written tests with respect to an engineering goal. In the state of the art, I reveal main challenges of test amplification and the main lacks. I propose a new approach based on both test inputs transformation and assertions generation to amplify the test suite. This algorithm is implemented in a tool called DSpot. In this thesis, I evaluate DSpot on open-source projects from GitHub. First, I improve the \ms of test suites and propose these improvements to developers through pull-requests. This evaluation shows that developers value the output of \dspot and thus accepted to integrate amplified test methods into their test suite. This proves that DSpot can improve the quality of real projects' test suites. Second, I use DSpot to detect the behavioral difference between two versions of the same program particularly to detect the behavioral change introduced by a commit. This shows that \dspot can be used in the continuous integration to achieve two crucial tasks: 1) generate amplified test methods that specify a behavioral change; 2) generate amplified test methods to improve the ability to detect potential regressions. In this thesis, I also expose three transversal contributions, related to the correctness of program. First, I study the programs' correctness under runtime perturbations. Second, I study the presence of pseudo-tested methods that are methods revealing weaknesses of the tests. Third, I study overfitting patches and test generation for automatic repair.
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.
Fichier principal
Vignette du fichier
bdanglot_thesis_final.pdf (1.34 Mo) Télécharger le fichier
Origine : Fichiers produits par l'(les) auteur(s)
Loading...

Dates et versions

tel-02396530 , version 1 (06-12-2019)

Identifiants

  • HAL Id : tel-02396530 , version 1

Citer

Benjamin Danglot. Automatic Unit Test Amplification For DevOps. Software Engineering [cs.SE]. Université de Lille, 2019. English. ⟨NNT : ⟩. ⟨tel-02396530⟩
427 Consultations
1005 Téléchargements

Partager

Gmail Facebook X LinkedIn More