• Aucun résultat trouvé

CHAPITRE 3 : APPROCHE CONCEPTUELLE

3.2 Aperçu de l’approche

Nous optons pour une approche qui calcule la probabilité qu’une classe, dans un sys- tème orienté objet JAVA, soit impactée suite à un changement apporté dans une autre classe. Nous nous basons sur les liens entre les classes du système « donnée d’entrée » pour identifier la dépendance entre les changements « donnée de sortie ». Pour cela, nous

énumérons les relations entre les classes qui influencent la propagation du changement dans le système ainsi que l’historique du changement. Ces données d’apprentissage sont extraites à partir du code source du système ce qui nous permet d’être indépendant des données des systèmes de contrôle de version (e,g. CVS,SVN) qui s’avèrent, dans cer- tains cas, difficiles à obtenir. Des classificateurs bayésiens sont générés à partir de ces données. Ils sont implémentés pour calculer la probabilité qu’une classe soit affectée par un changement élémentaire introduit sur une autre classe.

Notre approche se déroule en trois étapes, comme le montre la figure 3.1. Nous pré- sentons dans la suite de cette section chacune d’elles. :

Figure 3.1 – Les étapes de notre approche

3.2.1 Extraction des données d’apprentissage :

Notre méthode nécessite des données d’apprentissage afin de générer le modèle de prédiction. Ces données sont extraites à partir de code source des versions successives de système considéré. Il y a deux sortes d’informations essentielles pour notre approche : les relations entre les classeset l’historique des changements. En effet, les relations entre les classes permettent de connaitre les liens qui sont susceptibles de propager les effets d’un changement. D’autre part, l’historique des changements permet de savoir quand un

type de changement donné a été propagé dans le système.

Nous commençons par définir les relations qui influencent la propagation du change- ment, en sachant que la nature de ces relations est hétérogène. Les relations entre classes peuvent être structurelles c.à-d., liens explicites dans le code, ou conceptuelles.

Certains types de relations reflètent la structure du système. Elles comportent l’exis- tence ou l’absence de certains types de liens entre les classes ainsi que le nombre ou la fréquence d’un type de liens. Les liens structurels utilisés sont : héritage, implanta- tion, agrégation, association et le nombre d’invocations. Afin extraire ces liens entre les classes du système, nous implémentons une méthode de rétro-ingénierie statique.

Nous analyserons aussi la propagation à travers les relations conceptuelles. Les iden- tificateurs utilisés par les développeurs pour les noms des classes, méthodes, attributs et variables dans le code source contiennent des informations importantes [20]. La modi- fication d’un identificateur dans une classe donnée influence le changement des autres classes qui utilisent cet identificateur. Plus deux classes utilisent les mêmes identifica- teurs plus la probabilité de propagation du changement augmente. Un lien conceptuel consiste en un nombre qui exprime la similitude entre deux classes. L’analyse textuelle des classes du système permet d’extraire les identificateurs et de calculer la similarité en implémentant une méthode de pondération et une méthode de similarité.

Le second type de donné nécessaire est l’historique du changement. Les modifica- tions appliquées entre chaque deux versions successives du système considéré sont ex- traites en analysant le code source. Les changements complexes sont représentés par un ensemble simplifié appelé des changements atomiques (élémentaire). Nous traitons ces modifications en trois niveaux de granularité : classe, méthode et attribut. Ainsi que le mainteneur peut procéder à trois types d’opération : ajout, modification et suppression.

3.2.2 Génération du modèle de prédiction :

Nous nous intéressons à prédire l’impact d’un seul type de changement élémentaire avant son application dans le système. Pour cela, nous utilisons un modèle de prédiction pour chaque type de changement. Le mainteneur fournit le type du changement à appli- quer ainsi que la relation entre la classe à changer et la classe à analyser. Notre modèle

évalue cette relation en se basant sur les informations d’apprentissage afin de calculer la probabilité de propagation du changement entre les deux classes.

L’hétérogénéité des facteurs d’influence rend la tâche de la construction du modèle plus difficile. En effet, un changement pourrait être propagé par une relation structurelle, et/ou une relation conceptuelle. En plus, ces liens propagent le changement dans un cas et pas dans un autre. D’autre part, le problème de propagation du changement est de nature incertaine ce qui rend la phase de la prédiction difficile.

Tenant compte des problèmes cités dessus, nous avons décidé d’utiliser les classifi- cateurs bayésiens comme modèle de prédiction. Ce type de modèle est facile à mettre en œuvre. Il nous permet d’étudier la propagation à travers les deux types de relation utili- sés (structurel, conceptuel) séparément et de façon combinés. Ces caractéristiques nous permettent de pallier l’incertitude qui existe dans les problèmes de l’analyse de l’impact. Pour générer ce modèle, les données extraites dans la première phase servent comme base d’apprentissage pour les classificateurs bayésiens.

3.2.3 Modèle de prédiction pour un ensemble des changements

En général, la maintenance des systèmes ou leur modification impose de faire plu- sieurs changements de différents types en même temps. Un ensemble des changements élémentaires peuvent être introduits sur une seule classe.

Nous devrions calculer une seule valeur de probabilité qui reflète la possibilité de propagation de l’ensemble des changements à appliquer. Dans ce mémoire, nous propo- sons une façon pour prédire les classes qui seront impactées suite à l’introduction d’un ensemble des changements élémentaire sur une classe à changer. En effet, pour chaque type de changement existant dans l’ensemble à appliquer, nous générons une probabi- lité en utilisant le classificateur bayésien associé à ce type. Par la suite, les probabilités obtenues sont combinées dans une seule valeur en utilisant une méthode de logique com- binatoire.

Le reste de ce chapitre consiste à détailler et expliquer la première étape de notre approche. La deuxième et la troisième étape seront exposées dans les chapitres 4 et 5.

Documents relatifs