Ce cours présente les techniques de pointe en matière d'analyse automatisée. L'analyse automatisée englobe à la fois des approches visant à générer automatiquement un très grand nombre de tests pour vérifier si les programmes répondent aux exigences, et des moyens par lesquels il est possible de *prouver* que le logiciel répond aux exigences et qu'il est exempt de certains défauts courants, tels que la division par zéro, le débordement/sous-débordement, le blocage, la liberté des conditions de course, le débordement de la mémoire tampon/du tableau, les exceptions non capturées, et plusieurs autres bogues courants qui peuvent conduire à des défaillances de programme ou à des problèmes de sécurité. L'apprenant se familiarisera avec la théorie fondamentale et les applications de ces approches, et appliquera une variété de techniques d'analyse automatisée sur des programmes d'exemple.
A l'issue de ce cours, l'apprenant sera capable de : - Comprendre les fondements de la vérification automatisée : randomisation et représentations symboliques - Distinguer les forces et les faiblesses des tests aléatoires, de l'analyse symbolique, de l'analyse statique et du model checking - Utiliser une variété d'outils d'analyse statique et de tests automatisés de pointe pour la vérification automatisée - Créer des exigences exécutables en tant qu'oracle convenant aux tests automatisés et à l'analyse symbolique - Comprendre comment le choix de l'oracle affecte la recherche de fautes pour les stratégies d'analyse automatisée.
- Utiliser les tests automatisés pour atteindre une couverture de mutation complète - Créer un plan de test qui utilise à la fois des tests écrits manuellement et des tests automatisés pour maximiser la rigueur, minimiser l'effort et le temps, et minimiser les coûts de test. Ce cours est destiné aux apprenants intéressés par la compréhension des principes de l'automatisation et l'application d'outils pour l'analyse et le test de logiciels Cette connaissance pourrait bénéficier à plusieurs rôles typiques : Ingénieur logiciel, Ingénieur logiciel en test, Ingénieur en automatisation des tests, Ingénieur DevOps, Développeur logiciel, Programmeur, Passionné d'informatique. Nous attendons de vous une certaine familiarité avec le cycle de vie du développement logiciel, une compréhension des fondamentaux du test logiciel, similaire à ce qui est couvert dans les cours Introduction au test logiciel et Tests boîte noire et boîte blanche.
La connaissance d'un langage orienté objet tel que Java ou la capacité à assimiler rapidement la syntaxe Java pour écrire et modifier du code, ainsi que la volonté d'utiliser des outils et des IDE sont supposées.