1. L'analyse de logiciels, Phylogénie et Évolution
Phylogénie de programmes Évolution de programmes
Alignement de Smith Watermann
Génération de génomes de programmes
Introduction
CCGGTTCTTCTTACAACGCGCACACAGCCARCCAGCACA
CGTAGTACGCUACACGAGCCARCAGTGAGCCTTACGT
ACGCGCACAC - AGCCAR
| | | | | | | | | | | | | |
ACGCU- ACACGAGCC AR
Fichiers .jar
Fichier .class
Programme
Modèle du
programme
Modèle eulérien
Génome du
programme
Chaîne de
caractères
A in B in D dm B
in E co B in C dm
G cr C dm G cr D
dm G cr E dm
G as F ag A
C I C I C D C I
C A C I C D C R
C D C R C D C
R C D C A C G C
Figure 2: L'étude de l'évolution des versions d'un programme.
Software Analysis, Phylogeny and Evolution
Il a été démontré, dans un travail précédent[4], qu'il est possible de représenter de façon unique un programme sous la forme d'une chaîne de caractères représen-
tant les classes du programme et les relations entre celles-ci. L’idée d’utiliser et de généraliser des algorithmes de recherche de patrons utilisés en bioinformatique
dans le contexte de génie logiciel est, selon nos connaissances, complètement nouvelle et très prometteuse. Dans le cadre de l'étude de l'évolution de grands pro-
grammes, nous proposons deux volets : l'étude de l'historique de grands programmes et la recherche de similitudes entre différents programmes (la phylogénie).
En bioinformatique, l'élaboration d'algorithmes efficaces pour l'alignement local ou global de séquences biologiques est une problématique naturelle, étant donné
que l'analyse des données, provenant de séquençage de génomes . Dans le domainde de génie logiciel, il est reconnue que les développeurs et les mainteneurs utili-
sent des patrons récurrents de programmation pour comprendre les programmes. De nombreuses approches ont été développées, pour identifier automatiquement
les patrons et rendre systématique leurs utilisation pendent leurs compréhension [1,2,3]. Cepenant, toutes les approches existantes sont limitées dans leurs perfor-
mances en temps et en mémoire et dans leurs résultats en précision et en rappel, lorsqu'appliquées sur de grands programmes.
Définition:
C'est l'étude de similarités entre différents grands pro-
grammes et des interconnexions entre ceux-ci pour
identifier l'héritage et l'historique communs de pro-
grammes différents.
Objectifs:
Créer un algorithme pour la construction d’un réseau
phylogénique de différents programmes.
En utilisant une des trois méthodes suivantes :
* méthode des distances (phénétiques) .
* méthode de parcémonie.
* méthode de maximum de vraisemblance.
Définition:
C'est l'étude de différentes versions d'un même pro-
gramme dont le but d'en identifier et d'en comprendre
les composantes essentielles d'un même programme.
Objectifs:
Créer un langage de patrons d’évolution décrivant des si-
tuations récurrentes de changement dans l'évolution d'un
programme et facilitant la compréhension de cette évolu-
tion, tel le patron de changement décrivant des
classes/méthodes changeant ensemble (Question 6, 7 et 8).
Liste de questions importantes sur l'évolution
[1] Roel Wuyts. Declarative reasoning about the structure of object-oriented systems. In Joseph Gil, editor, proceedings of the 26th conference on the Technology of Object-Orien
ted Languages and Systems, pages 112-124. IEEE Computer Society Press, August 1998.
[2] Jörg Niere. Fuzzy Logic based intercative recovery of software design. Presented at the ICSE Doctoral Symposium, May 2002.
[3] Alessandro Garcia, Clàudio Sant'Anna, Eduardo Figueiredo, Uira Kulesza, Carlos Lucena, and Arndt von Staa. Modularizing design patterns with aspects: A quantitative
study. In Peri Tarr, editor, proceedings of the 4 th international conference on Aspect-Oriented Software Development, pages 3-14. ACM Press, March 2005.
[4] Olivier Kaczorol, Yann-Gaël Guéhéneuc, and Sylvie Hamel. Efficient identification of design pattrens with bit-vector algorithm. In Giuseppe Antonio di Lucca and Nicolas
Gold, editors, Proceedings of the 10 th Conference on Software Maintenance and Reengineering, pages 173-182.IEEE Computer Society Press, March 2006.
(1) Qui a travaillé sur ces éléments
(2) Quel(s) développeur(s) travaillent sur les
mêmes éléments
(3) Quelle(s) sorte(s) de changement fait un
développeur
(4) Quand le changement a t-il été fait
(5) Pourquoi le changement a t-il été fait
(6) Quels éléments changent fréquemment
ensemble
(7) Quels éléments sont stables (changent
rarement)
(8) Quels éléments sont instables (changent
fréquemment)
(9) Combien de développeurs ont travaillé sur
une version du programme
(10) Combien d’éléments ont été ajoutés,
modifiés, effacés.
Adnane Ghannem , Salima Hassaine , Yann-Gaël Guéhéneuc et Sylvie Hamel
Dép. I.R.O., Université de Montréal
{ghannema | hassaisa | guehene | hamelsyl}@iro.umontreal.ca,
http://www.iro.umontreal.ca
Figure 1: Réseau phylogénique d'un programme.