Master 2015 2016
Stages de la spécialité SAR
Refactoring Automatique


Site : Site de Puck
Lieu : LIP6
Encadrant : Cédric Besse (Cedric.Besse@lip6.fr), Mikal Ziane (Mikal.Ziane@lip6.fr)
Dates :du 01/02/2016 31/08/2016
Rémunération :500€/mois
Mots-clés : Master SAR, autre qu’ATIAM

Description

RESUME :

Il s’agit de définir et configurer un algorithme qui casse automatiquement des dépendances inutiles dans du code Java. Ce travail s’appuiera sur des expérimentations à l’aide de notre outil Puck.

MOTIVATION :

Parmi les enjeux majeurs du développement logiciel, la prise en compte des changements est un des plus saillants : les logiciels sont trop rigides. Plus précisément, lorsqu’une source de changements n’a pas été anticipée ou n’a pas été prise en compte lors de la conception du logiciel, des dépendances nuisibles sont alors fréquemment introduites entre des éléments de code qui varient à des rythmes différents. Les changements se propagent alors le long de ces dépendances et leur coût peut devenir exorbitant. Des techniques de refactoring [Fowler et al 99] bien connues permettent, avant la prise d’un compte d’un changement, de découpler (d’isoler) les parties du logiciel directement concernées de sorte que l’impact du changement sera alors local et non plus global, réduisant ainsi le coût de sa réalisation. Ce travail de refactoring peut néanmoins être fastidieux et sujet à erreurs. Il convient donc de l’automatiser autant que possible. Ceci nécessite tout d’abord d’identifier et délimiter rigoureusement les dépendances nuisibles que les transformations de refactoring doivent cibler. Ce problème commence à être pris en charge par de plus en plus d’environnements de développement (par exemple IntelliJ Idea) et notamment par notre outil Puck [Puck] à travers son langage Weland d’expression de contraintes de couplage. Puck est capable de produire un ensemble de solutions candidates en combinant systématiquement un petit nombre de transformations de refactoring de base. Puck est aussi capable de produire le code Java correspondant à une solution candidate. Il reste à mettre au point un algorithme ou des heuristiques pour explorer efficacement ces solutions candidates de façon à permettre le traitement aussi automatique que possible de programmes de taille industrielle. L’apprentissage automatique d’heuristiques sera une démarche à considérer.  CONTEXTE

Le stage aura lieu dans l’équipe Move du département Systèmes Complexes du LIP6 en accompagnement de la thèse de Loïc Girault. Elle s’appuiera sur notre outil : Puck.

TRAVAIL A FAIRE :

Le stage consistera à :
- Déterminer et valider un algorithme de recherche [AISearch] [Okeeffe 08] [Harman 12]. En particulier il s’agira de définir une fonction de fitness. Cette dernière devra faire un compromis entre la complexité induite par l’ajout d’une indirection lorsqu’on casse une dépendance et la réduction du nombre de dépendances nuisibles.
- Dans un deuxième temps, définir et valider un algorithme d’apprentissage [Zhang 03] pour améliorer la fonction de fitness et pour suggérer des heuristiques.

SERA FOURNI AU STAGIAIRE :

- le langage exprimant les contraintes de couplages,
- une description informelle des transformations de découplage,
- une série de cas d’applications composés chacun d’un programme java à corriger, de la contrainte de couplage que devrait respecter le programme et d’un exemple de correction du programme qui respecte donc la contrainte.

CONNAISSANCES REQUISES :

Une connaissance de Java est souhaitée. Une partie de Puck est faite en Scala donc une familiarité avec ce langage serait appréciée. Des notions de compilation, concernant les techniques de recherche et d’apprentissage en I.A et les notions de refactoring de code permettraient de démarrer plus rapidement mais elles peuvent être acquises pendant le stage.

Bibliographie

[Fowler et al 99] Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Refactoring : Improving the Design of Existing Code, Addison-Wesley, 1999.  [Okeeffe 08] Mark O’Keeffe, Mel Ó Cinnéide, Search-based refactoring for software maintenance, Journal of Systems and Software, Volume 81, Issue 4, April 2008, Pages 502- 516, ISSN 0164-1212, http://dx.doi.org/10.1016/j.jss.200....

[Harman 12] Mark Harman, S. Afshin Mansouri, and Yuanyuan Zhang. 2012. Search-based software engineering : Trends, techniques and applications. ACM Comput. Surv. 45, 1, Article 11 (December 2012), 61 pages. DOI=http://dx.doi.org/10.1145/2379776.2...

[Puck] http://puck.lip6.fr/

[AISearch] http://intelligence.worldofcomputin...