Cette page présente les ressources du cours de M. Monperrus à la promotion 2015-2016 du master IAGL de l'Université de Lille. Ce cours fait partie des UVs Outils pour la Programmation des Logiciels (OPL) et Intelligence des Données et des Logiciels (IDL).
Informations Pratiques
Prérequis: bonne connaissance de la programmation et bases du génie logiciel (test, design).
Horaires des cours: cf Calendrier numérique
Page Moodle: http://moodle.univ-lille1.fr/course/view.php?id=932
Contact: martin.monperrus@univ-lille1.fr
Objectifs du cours
Ce cours a pour objectif l'étude du génie logiciel automatisé, défini comme l'art d'inventer, de designer, d'implémenter et de valider des outils logiciels pour améliorer et automatiser l'ingénierie du logiciel. Au delà de l'objectif technique, ce cours a aussi pour objectif de vous faire travailler votre créativité, votre écrit, votre oral, votre sens critique.
Certains outils embarquent une forme d'intelligence, ce qui justifie le nom de l'UV Intelligence des Données et des Logiciels (IDL).
Le cours est organisé autour de 3 thèmes. Chaque thème donne lieu à un projet. Cette année, les thèmes sont:
analyse et transformation de code source;
to be decided
réparation automatique de bugs
Modalités d'évaluation
Il y aura 4 rendus de projets, 3 autours des thèmes, plus le projet final. Le projet est un prototypage et une évaluation d'une technique existante ou un développement libre dans le cadre du thème.
Dates des rendus:
17 novembre 2015
16 décembre 2015
18 janvier 2016
9 février 2016
Le sujet du projet final est libre, sous la seule contrainte de rentrer dans le périmètre du « génie logiciel automatisé ».
Les projets sont notés de la manière suivante:
Excellent travail (20/20)
Très bon travail (17/20)
Bon travail (14/20)
Passable (11/20)
Mauvais (8/20)
Nul (4/20)
Consignes pour les rapports: http://www.monperrus.net/martin/bon-rapport
Les rendus doivent être au format ZIP (pas de TAR.GZ ou 7Z), avec le rapport à la racine du ZIP, et le code d'expérimentation.
Rattrapage: Le rattrapage est organisé comme suit. L'étudiant retravaille sur le(s) rendu(s) qui ont été noté(s) en dessous de la moyenne. Une nouvelle évaluation est faite (et une seule) sur le nouveau code et le nouveau rapport produit, et ce avec le même niveau d'exigence que pendant l'année. Le rendus de rattrapage sont à rendre par email un mois après la fin des cours. Un rendu de rattrapage en retard ne sera pas considéré.
Thèmes 2015-2016
Thème 1: L'analyse et la transformation de code source.
Qu'est ce qu'un AST ? que peut on faire avec de la transformation ?
Lectures:
Spoon: A Library for Implementing Analyses and Transformations of Java Source Code slides
Enhancing server availability and security through failure-oblivious computing
A source-to-source compiler for generating dependable software
Building useful program analysis tools using an extensible Java compiler
Automatically Fixing C Buffer Overflows Using Program Transformations
A Dynamic Technique for Eliminating Buffer Overflow Vulnerabilities (and Other Memory Errors)
Projets:
Prototypage inspiré d'un des papiers
P1: Transformation automatique de code fail-safe en code fail-fast et vice-versa, cf http://www.yegor256.com/2015/08/25/fail-fast.html.
P2: Transformation automatique des entiers en arithmétique à précision arbitraire (int -> BigInteger).
P3: Transformation des calculs flottants en programmes continus (cf Continuity and Robustness of Programs)
Votre idée (à valider ensemble)
Thème 2: Ingénierie des suites de tests
Qu'est ce qu'un bon test ? A quoi sert l'isolation ? Comment mesurer la qualité d'une suite de test ? Comment écrire des assertions ? Comme écrire et vérifier des contrats sur un domaine d'entrée ? Comment sont implémentés les drivers de tests et les assertions ? Quelles implications pour la localization de faute ? Quels sont les avantages et inconvénients d'un langage spécifique pour les test ? Quelle est la taille d'une bonne suite de test par rapport au code applicatif ?
Lectures:
Dynamic Analysis can be Improved with Automatic Test Suite Refactoring
Evosuite: automatic test suite generation for object-oriented software
Coverage Is Not Strongly Correlated With Test Suite Effectiveness
Assertions Are Strongly Correlated with Test Suite Effectiveness
Assertion-driven development: Assessing the quality of contracts using meta-mutations
Jartege: a tool for random generation of unit tests for java classes
TestEra: A novel framework for automated testing of Java programs
Projets:
Prototypage inspiré d'un des papiers
Votre idée (à valider ensemble)
Répliquer la table 3 de "Coverage Is Not Strongly Correlated With Test Suite Effectiveness" avec pitest
Répliquer la table 3 de "Coverage Is Not Strongly Correlated With Test Suite Effectiveness" avec Major
Ajouter des opérateurs de mutation orientés-objet à pitest
Mettre à jour et appliquer Testevol à Commons Math, Commons Collections, etc.
Ajouter les opérateurs de Offutt et al. (et d'autres au besoin) à metamutator. Le valider sur des grands projets.
Thème 3: Réparation automatique de bugs
Qu'est ce que la réparation automatique ? Qu'est ce qu'un oracle ? Comment éviter les régressions ?
Lectures:
Introduction courte http://www.monperrus.net/martin/introduction-to-automatic-software-repair.pdf
Introduction longue http://www.monperrus.net/martin/survey-automatic-repair.pdf.
Using mutation to automatically suggest fixes for faulty programs
Automatic Repair of Buggy If Conditions and Missing Preconditions with SMT
Managing Performance Vs. Accuracy Trade-offs with Loop Perforation
Projets:
Prototypage inspiré d'un des papiers
Compétition. Le but de la compétition est de réparer le plus de bugs possibles de IntroClassJava. IntroClassJava est un ensemble de programmes buggés d'étudiants de L1 de l'Université de Californie. Chaque programme vient avec un moins un test qui ne passe pas. Vous avez carte blanche, vous pouvez réutiliser, étendre des outils de réparation ou implémenter le vôtre. Le gagnant est celui qui répare le plus de bugs automatiquement, de manière correcte et acceptable. Le gagnant sera noté "Excellent". Liste d'outils pour réparer des bugs en Java: cf http://www.monperrus.net/martin/automatic-software-repair-tools.
Tableau d'honneur
Thème 1:
Transformation de code en fail-safe (Dieulin Mambouana, Romain Sommerard)
Reproducing Google Guice Operation and Annotations using Spoon (Gissel Fernandez, Pauline Dessingue)
Analyse et détection du non-respect de normes de conventions (Kevin Once, Antoine Philippe)
Thème 2:
CoCoSpoon : Couverture de code en temps réel avec Spoon (Maxime Clément, Jordan Piorun)
Génération automatisée de tests de non-régression (Kevin Once, Antoine Philippe)
Thème 3:
Thème libre: