Université Du Québec Montréal
Université Du Québec Montréal
Université Du Québec Montréal
MÉMOIRE
PRÉSENTÉ
COMME EXIGENCE PARTIELLE
DE LA MAÎTRISE EN INFORMA TIQUE
PAR
RANA BOUSLAMA
OCTOBRE 2012
UNIVERSITÉ DU QUÉBEC À MONTRÉAL
Service des bibliothèques ·
Avertissement
La diffusion de ce mémoire se fait dans leo~ respect des droits de son auteur, qui a signé
le formulaire Autorisation de reproduire. et de diffuser un travail de recherche de cycles
supérieurs (SDU-522 - Rév .01-2006}. Cette autorisation .stipule que «conformément ·à
l'article 11 du Règlement no 8 des études de cycles supérieurs, [l'auteur] concède à
l'Université du Québec à Montréal une licence non exclusive d'utilisation et de .
publication oe la totalité ou d'une partie importante de [son] travail de recherche pour
des fins pédagogiques et non commèrciales. Plus précisément, [l'auteur] autorise
l'Université du Québec à Montréal à reproduire, diffuser, prêter, distribuer ou vendre des .·
copies de. [son] travail de recherche à des fins non commerciales sur quelque support
que ce soit, y compris l'Internet. Cette licence et cette autorisation n'entraînent pas une
renonciation de [la] part [de l'auteur] à [ses] droits moraux ni à [ses] droits de propriété
intellectuelle. Sauf ententé contraire, [l'auteur] conserve la liberté de diffuser et de
commercialiser ou non ce travail dont [il] possède un exemplaire ..»
Il
REMERCIEMENTS
J'adresse tout d'abord mes remerciements les plus sincères à mon directeur de
recherche, Monsieur Hakim Lounis, professeur à l'Université du Québec à Montréal, qui m'a
fait confiance en me proposant ce travail. Je tiens à luis exprimer ma profonde
reconnaissance pour sa patience, sa lecture minutieuse de chacun des chapitres de ce
mémoire ainsi pour ses judicieux conseils. Je le remercie pour son encadrement scientifique
et humain et aussi pour son soutien financier. Ce fut un grand plaisir de travailler avec lui .
Mes remerciements vont également vers les membres de jury chargés d'évaluer ce
mémoire et à tous mes enseignants de maîtrise, en particulier M. Hakim Lounis, M. Guy
Tremblay, M. Ghislain Lévesque et M. Roger Villemaire.
Une grande partie de mon travail de recherche s'est faite au sein du laboratoire de
recherche LATECE où l'ambiance a toujours été sympathique. Je voudrais remercier mes
amis et collègues du LA TECE, en particulier Oussama, Tamer, Houda, Ghizlaine et
Ramdhane.
IV
TABLE DES MATIÈRES
1.4.3 .1 Mesures d'héritage ............... ........ ... ...... ... ................ ............ ......... 20
1.4.3.2 Mesures de cohésion .................. ... .. .. .... ..... ............... .. ... .......... ... .. 23
1.4.3.3 Mesures de couplage .. ... .. .... .......... ......... ... ....... ....... ..... .. ... .......... .. 26
1.4.3 .4 Mesures de taille et de complexité .............. ...... .. .. .................. ...... 32
1.5 Prédiction de la qualité de logiciel .............................. .. .. .. ............ .... .. .. .. ............. ......... 34
1.6 Conclusion .... ...... .. ... .. ..... .. ... .. .. ... .. .. .. ........ .... .. .... ..... ... ........ ....... ... .. .. ..... ......... ..... .. .... ... 34
CHAPITRE II
GESTION DES CONNAISSANCES EN GÉNIE LOGICIEL .. .. .. ...... .. ...... .. .... .... .... .. .. ......... 35
2.1 Introduction ..... ..... ..... .......... ... ... .... ...... ... ........ .. ... ... ... .. ... ...... ........ .. .. ... .... ....... ..... .......... 3 5
2.2 La connaissance ............................................. ... .. ... .. .. .. ............... .... .. .... ... .. ... ..... ... .. .. .... 35
2.2.1 Définition .... ... .. ... ........... ... .. .................. .. ... .. ......... ........ .. .. ..................... ...... ... .... 35
2.2.2 Classification des connaissances ......... .. ... ... ...... .. ................. ..... ... ...... .. ........ .... ... 36
2.2.3 La création de la connaissance .. .......... .. .. .. .. .... .. ........ .. .......... .. ........................ .... 36
2. 3 La gestion des connaissances .......... .......... .. ............ ...... .. .................... .. .... .. .......... .. ... ... 3 8
2.3 .1 Le rôle de la gestion des connaissances en génie logiciel... .. ...... .. .. ........ ...... .. .. .. 3 8
2.3.2 Comment gérer le capital de connaissances .. .. .. .......................... .. ........ .. .. .......... 39
2.3.3 Réutilisation des connaissances en génie logiciel... .............. ................ .. .......... .. 41
2.3 .4 Le rôle de la gestion des connaissances dans un système d' aide à la décision .. .41
2.4 Conclusion ........ ... ...... ......... ... .......... .... ... .... ... ............. ................... ....... .. .... ... ... .... ... ... .. 42
CHAPITRE III
UNE APPROCHE POUR L' ACQUISITION DES CONNAISSANCES EN GÉNIE
LOGICIEL ........... ... ...... .. .. .... ... ... ................................ ... ..... .. .. .... ....... .... ...... .. ............. ... ...... .. . 43
3.1 Introduction ...... .... ... .......... ... ..... ... ................... .. .... ....................... .. ...... ... ...... .... .. ...... .... 43
3.2 L' expertise humaine ............. ... .. ... ... .. .. .. .. ..... .. .. ...... ... .. ... .... .. .. .. .. .... .......... ... ........... .... ... 44
3.3 L' apprentissage automatique ... .. ......... ...... ........... .. .. ....... ... .. ......... .. .... ... .... .... .. ... .. ... ... .. 44
3.3 .1 Définition ................................................................................... ......................... 45
3.3.2 Apprentissage supervisé et non supervisé .......................... ........ .. .......... .......... .. .46
3.3.3 Les différentes techniques de l'apprentissage supervisé ........ .. .............. .. .... ...... .47
3.3.4 Apprentissage d' arbres de décision .. .. ...... ....... .. ....................... .. .... ..... ....... .. ....... 47
3.3.5 Apprentissage automatique de règles ............ .. ........ .. .. .. ...... .. .. .. .... .... .................. 49
3.3.5 .1 Règles propositionnelles et règles en logique du premier ordre .. . 50
vii
5.3.2 Éclipse .... ... ... ............................ ....... ............ ..... ......... ... ......................... ...... ..... ... 78
5.4 Diagramme de cas d'utilisation .............................. ...... ..................................... ...... .. .... 79
5.4.1 Les acteurs ...... .... .... .. ................... ... ........ .... ................ .... ........................ ........... 80
5.4.2 Les différents cas d' utilisation ........ .... .. ........... ........................ ........................... 80
5.5 Expérimentation .................................... .............. ....... ..... ..... .......................... ....... ..... ... 81
5.5 .1 Création d' un fichier arff à partir d' un fichier Excel ........................... .. ............. 83
5.5.2 Création d'une classe Java qui correspond à l'hypothèse Hypothèse-
COMP REUT .. .... .... .. ........... ............ .......... .. ... ... .. .... ..................... .. ..... .............. 85
5.5 .3 Apprentissage automatique .............. ......... ...... .................................................... 87
5.5.4 Construction d' une base de règle (fichier .ilr) ...................... .. ............................ 90
5.5 .5 Consultation ou modification d'une base de règles ........ ... ...... .. ...... ................... 92
5.5.6 Laprédiction ......... ... ... ............. .. .......... ............... .. .. .. .. ... ... .... ... ........... ........ .... .... 95
5.5.6.1 Description de l' interface de préd iction .. .... .................................. 98
5.5.6.2 Analyse des résultats de prédiction .. ......................... .. .. .............. 100
5.6 Conclusion ....................... ... .............. ........... ... ......... ............. .. ..... .... .. ......... ......... ... .. .. 104
CONCLUSION ......... .. .... ..................................................................... ........ .. ............. .. ... ..... 1OS
BIBLIOGRAPHIE ........... ... .... ....... .... ...... .. ....... .... ... .. ........................ ........ .... ....................... 109
LISTE DES FIGURES
Figure Page
0.1 Système d'aide à la décision basée sur les connaissances, (Lounis et al., 2009) 2
1.1 Modèle de qualité de McCall (McCall et al. 1977).......... . . . . . . . . . . . . . . . . . . . . . . . .. 8
1.2 Processus de mesure des métriques. .. . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1 Capitalisation des connaissances (Manuel Zacklad et Mickel Grundstein)....... 40
4.1 L' interface Explorer de Weka. .. ........ .. .. .. .. . .. . . . . . . . . . . .. . . . . .. . . .. . . .. .. . .. .. .... 63
4.2 Exemple d' un fichier arff...... ... ... ... ............. . ......... .... ......... .. ........... 64
4.3 Résultats d'apprentissage... ..... . .. ......... .. .. .... ... ........... . .. . ..... .. ... . ....... 66
4.4 Résultats de classification de l'algorithme J48........ .... ... .. . .. .. .. .. . . .. .. .. .. . .. 67
4.5 Résultats d'exécution de l'algorithme Part........... .. .... ....... .. .. ... ....... . .. ... 68
4.6 Résultats d'exécution de l'algorithme ConjuntiveRule.......................... . ... 69
4.7 Résultats d'exécution de l'algorithme JRIP...... ...... ...... ... .. . ..... .... ... ....... 70
4.8 Moteur d'inférence de JRules... . .......... . ......... ....... .... .. . . .... ..... ......... .. 72
4.9 Réseau RETE...... ... .. . . .. . .. ... . ..... . . . ... .. . .. . ... . .. ... ... . .. .. . .. . ... . . . ... . . . . ..... 76
5.1 Diagramme de cas d' utilisation de système d' aide à la décision.. .. .. .. . ....... ... 79
5.2 Extrait d'un fichier Excel d'une base de données ....... ............................. 84
5.3 Résultat de conversion du fichier Excel en un fichier ' arff........... ... . .. . . . . . ... 85
5.4 Création d' une classe Java des objets à prédire.. .... ... . ... .... ...... ......... ....... 87
5.5 Résultat d'apprentissage avec l'algorithme Part............ .. . .. .. . . . ..... . .... .. ... 90
5.6 Exemple de règles JRules. .. . . . ... ... .. . .. . .. . ... .. . .. . .. . .. . .. .... ... . ..... ... ...... .. .. 91
5.7 Création d' un fichier .ilr... ...... .. . ... ...... .. . ... ... . .. . .. ... ...... ... . .. . . . .. . ... ...... 92
5.8 Consultation d' une base de connaissance par un débutant...... .. .. .. ...... .. . . .. .. 93
5.9 Consultation et/ou modification d' une base de connaissances par un expert..... 94
5.10 Liste d' objets à prédire dans un fichier Excel.. . ........... ..... ...................... 96
x
5.11 Exemple d'un ensemble d'objets à insérer dans la mémoire de travail de JRules 97
5.12 Exemple d'exécution d'un modèle pour prédire la réutilisabilité de composants
logiciels..................................................................................... 99
LISTE DES TABLEAUX
Tableau Page
5.1 Résultats de classification des composants logiciels .... .... ..... ..... . .. . . .. . . . 102
XII
RÉSUMÉ
Les métriques logicielles jouent un rôle très important dans la prédiction de la qualité.
Elles aident les gestionnaires dans la prise de décisions afin de budgétiser, contrôler, estimer
le coût et analyser les risques d'un produit au cours de son développement.
Dans ce travail, nous proposons une approche basée sur les connaissances pour
analyser et estimer des facteurs de qualité dans des systèmes à objets. Pour concrétiser notre
approche, nous avons construit un prototype regroupant les fonctionnalités de deux logiciels.
Nous avons utilisé le logiciel Weka pour faire l'apprentissage automatique de connaissances
et ainsi construire des modèles prédictifs. Ensuite, nous avons traduit ces modèles en un
système à base de règle JRules, pour la prédiction et la prise de décision. Ces deux fonctions
principales sont offertes pour deux types d'utilisateur : un débutant et un expert dans le
dom!line de la conception en génie logiciel. Le rôle principal de l'expert est de valider un tel
modèle prédictif.
Nous avons expérimenté notre prototype sur des bases de données qui représentent des
mesures de métriques récoltées sur des logiciels fonctionnels. Les résultats obtenus dans le
cadre de différentes expériences permettent de prédire et d'estimer certains facteurs de qualité
tels que la maintenabilité, la réutilisabilité et la prédisposition aux fautes .
Mots Clés:
Les organisations ont un intérêt certain pour la technologie orientée objet, qui offre
une autre vision du développement du produit logiciel et promet un gain de temps aussi bien
en conception et codage qu'en suivi et maintenance.
Dans de nombreux systèmes orientés objet, des défauts de conception introduits lors
des premières étapes de la conception ou au cours de l'évolution des systèmes, sont des
causes fréquentes de faibles maintenabilité, haute complexité et de comportement erroné des
programmes. La préservation d'une conception correcte doit être une préoccupation
constante. Toutefois, dans les systèmes qui ont un grand nombre de classes et qui sont sujet à
de fréquentes modifications, la détection et la correction des défauts de conception peuvent
être une tâche complexe.
De nos jours, deux types de méthodes sont particulièrement utilisées pour acquérir ces
connaissances et pour construire des modèles prédictifs : les méthodes par expertise humaine
et les méthodes par apprentissage automatique. La première approche se présente sous forme
d'heuristique, elle permet de capitaliser l' expérience des personnes expertes dans un domaine
particulier et de mémoriser leurs connaissances sur un support physique (papier, disque, .. ).
Tandis que les méthodes par apprentissage automatique sont présentées comme des systèmes
intelligents de support à la décision. Ces systèmes supportent la prise de décision en
coordonnant certaines activités telles que la cueillette des données, l'extraction des données,
la génération de concepts, l'induction des règles et des modèles, l'interaction avec les usagers
et enfin la suggestion de solutions.
1
lmphc.tt u1edge
Figure 0.1 Système d'aide à la décision basée sur les connaissances, (Lounis et al., 2009)
Notre étude rentre dans ce cadre et le travail que nous présentons porte sur le
développement d'un prototype dont l'objectif est la prédiction de la qualité et prise de la
bonne décision pour la conception. Il s'agit de générer des règles par apprentissage
automatique à partir d' un ensemble de données, ensuite d'affiner ces règles par un expert du
domaine et enfin les utiliser sur de nouvelles données au sein d'un système à base de règles.
Le deuxième chapitre est une description des connaissances en génie logiciel et une
présentation de différentes méthodes pour les capitaliser.
Le quatrième chapitre est consacré à notre approche. Il comprend une description des
algorithmes sélectionnés pour faire l'apprentissage et la génération de règles. On y décrit le
système à base de règles dont le but est la prise de décision lors de futures conceptions .
Une conclusion qui fait le point sur les contributions de ce travail et met en avant les
perspectives envisagées.
4
CHAPITRE 1
1.1 Introduction
Afin d'approfondir nos connaissances sur la qualité d'un produit logiciel, ce chapitre
donne un aperçu sur les différents aspects du logiciel. Nous commençons par la définition
d' un logiciel, les facteurs de qualité et les attributs de qualité. Ensuite, nous avons traité les
différentes techniques utilisées pour améliorer la qualité d' un logiciel et nous présentons un
axe important, celui de la mesure.
1.2.1 Définition
En génie logiciel, la qualité logiciel est une vue globale du logiciel, basée sur de
nombreux critères : la précision des résultats, la tolérance aux pannes, la simplicité,
l'extensibilité, la compatibilité, la portabilité, la facilité de correction et de transformation, la
performance, la consistance et l'intégrité des informations.
6
Les problèmes de qualité des logiciels sont connus depuis les années 1960 et ils sont
toujours liés au respect des coûts, des délais, du cahier des charges et du niveau de la qualité.
Nous trouvons dans la littérature de multiples définitions de la qualité. En voici quelques-
unes:
• Kitchenham (1996) mentionne que «La qualité est difficile à définir, impossible de
la mesurer, mais facile à connaître»
• Selon Gillies (1992), la qualité est «transparente quand elle est présente, mais
facilement reconnue en son absence »
• La norme ISO 9126 (ISO/IEC 9126, 1991 ), définit six groupes d'indicateurs de
qualité des logiciels : la capacité fonctionnelle, la facilité d'utilisation, la fiabilité, la
performance, la maintenabilité et la portabilité. C'est donc la conformité à des
besoins fonctionnels et à des caractéristiques implicites attendues de tout logiciel
développé.
• Bell et al. ( 1992) définit la qualité par rapport à l'utilisateur final et au logiciel livré.
Il définit un logiciel de qualité comme étant celui qui satisfait les besoins des
utilisateurs, est fiable et facile à maintenir.
Jim McCall est l' un des premiers qualiticiens du logiciel qui a essayé de quantifier la
qualité du produit logiciel.
<<ln his quality madel, McCall attempts ta bridge the gap between users and developers by
focusing on a number of software quality factors thal reflect bath the users views and the
developers priorities » (Midilic D, 2005).
« McCall, dans son modèle, a essayé d'établir le lien entre les utilisateurs et les développeurs,
en se concentrant sur un certain nombre de facteurs de qualité du logiciel qui reflètent les
vues des utilisateurs et les priorités des réalisateurs».
1
8
• Le troisième niveau est constitué des « critères de qualité ». Les critères sont des
propriétés internes au logiciel et ils concernent les développeurs. Ils sont au nombre
de 23.
• Le dernier niveau concerne les métriques qui s' appliquent sur les propriétés internes
et qui sont mesurables.
IVŒTRl S
Flœ.ibility
• Fiabilité : c'est l'aptitude d'un produit logiciel à fonctionner dans des conditions
anormales sans pannes, pour une durée d'utilisation donnée.
• Intégrité: c'est l'aptitude du logiciel à protéger les données qu 'i l manipule contre les
accès non autorisés et malveillants.
• Flexibilité : les ressources et les efforts exigés pour supporter les activités de
maintenance adaptative sont couverts par les exigences de flexibilité. Ceci inclut les
ressources nécessaires pour adapter un package logiciel à un ensemble de clients.
• Testabilité: elle mesure l' aptitude du logiciel à être testé et vérifié afin de s'assurer
que tous ses composants travaillent dans l'ordre spécifié. Il faut noter que le système
est en phase d'exploitation.
10
• Portabilité : c' est la facilité avec laquelle un logiciel peut être transféré vers d'autres
environnements composés de différents matériels et de différents systèmes
d' exploitation.
• Réutilisabilité : c'est l' aptitude d ' un logiciel à être réutilisé, en totalité ou en partie,
dans un nouveau projet logiciel en cours de développement.
Une qualité importante du logiciel bien conçu est d'être modulaire. Deux concepts
qui permettent d ' évaluer dans quelle mesure Je logiciel est modulaire sont la cohésion et Je
couplage (Lounis et al. , 1998).
Un module est défini comme une séquence d'instructions contiguës identifiées par
un nom. Un produit logiciel est dit modulaire si ses composants présentent un haut degré de
cohésion et un faible degré de couplage.
La modularité est un concept très important dans la conception d ' un produit logiciel
selon la méthodologie orienté objet. Il est impératif donc que les modules soient bien conçus
pour assurer un certain niveau de qualités puisqu'ils peuvent influer sur différentes
caractéristiques de qualité comme l'efficacité, la fl exibilité, la facilité de maintenance et la
facilité de réutilisation .
Nous souhaitons que nos systèmes logiciels soient rapides, fiables, faciles à
utiliser, simples à lire, modulaires, structurés, etc. Mais ces adj ectifs recouvrent deux classes
de qualités bien différentes. D ' un côté, nous envisageons des qualités comme la v itesse ou la
facilité d 'utilisation, dont la présence, ou non, dans un produit logiciel peut être détectée par
ses utilisateurs. Ces propriétés peuvent être appelées des facteurs externes de qualité. Les
11
autres qualités d'un produit logiciel, comme celles d ' être modulaire ou facile à lire, sont des
facteurs internes, seulement perceptibles aux informaticiens professionnels qui ont accès au
code source du logiciel.
Les attributs internes de qualité les plus importants dans le développement des
logiciels orientés objet sont: l'héritage, Je couplage, la cohésion, la taille et la complexité.
• Couplage
Le couplage entre deux modules décrit la force des associations qui existent entre deux
modules d'un système. Il dépend de la complexité des interfaces entre modules. Intuitivement
un faible degré de couplage entre les modules est souhaitable car en effet, un module
relativement peu relié aux autres est facile à comprendre, à modifier, à tester et enfin à
réutiliser. De plus, les chances de propagation des erreurs d'un module à un autre se trouvent
d ' autant plus diminuées que le nombre de liens entre ces deux modules est petit.
• Cohésion
De même que le couplage, la notion de cohésion est à la base des bonnes pratiques en
conception orientée objet (Philippe, 2005). Elle mesure la force de dépendance entre les
éléments composant un module donné. La cohésion d'une classe représente Je fait que ses
responsabilités forment un tout cohérent.
Un module possède un haut degré de cohésion si tous ces éléments sont reliés entre eux.
Ces éléments collaborent pour réaliser un objectif commun qui est la fonction du module.
Ainsi, il est important d'assurer une cohésion élevée pour avoir un certain niveau de qualité.
• Héritage
L ' héritage est une caractéristique très importante pour la conception orientée objet. C ' est
un mécanisme qui permet de propager les fonctionnalités d ' un obj et à d'autres. Il se tradu it
par une hiérarchie de classes de plusieurs niveaux.
12
Les attributs externes, que nous traitons dans cette section sont la maintenabilité, la
réutilisabilité et la prédisposition aux fautes.
• Maintenabilité
La maintenance du logiciel est définie dans la norme IEEE 1219, comme la facilité selon
laquelle un logiciel après la livraison peut être maintenu, amélioré au niveau des
performances ou adapté à un nouvel environnement. La maintenance consomme plus de 60%
des ressources totales investies dans le développement du produit logiciel à travers le cycle
de vie (Pressman, R.S, 1997). Au niveau de la littérature, nous retrouvons différents types de
maintenance.
../ Maintenance corrective : modification réactive d' un produit logiciel effectuée après la
livraison au client, due à la non-conformité aux fonctionnalités décrites dans la
documentation d' utilisation du logiciel. Ce type de maintenance permet alors de corriger
les erreurs trouvées dans le code et danse la documentation .
../ Maintenance adaptative : elle désigne les modifications à apporter sur un produit logiciel
après la livraison en tenant compte des changements et de l'évolution de l' environnement
logiciel et matériel, et aussi des nouvelles exigences du client, sans modifier le produit
logiciel de base .
• Réutilisabilité
C'est pour cette raison, qu'un composant logiciel doit être conçu et implémenté de
telle manière qu'il puisse être réutilisé dans d'autres systèmes logiciels. Il existe plusieurs
entités que l'on peut réutiliser. Selon Scott Amber, les niveaux de réutilisation sont les
suivantes (Scott Ambler, 1998):
Vers la fin du 19ème siècle, le physicien Lord Kelvin disait de la mesure: « When you
can measure what you are speaking about, and express it in numbers, you know something
about it; but when you cannat measure it, when you cannat express it in numbers, your
knowledge is of a meager and unsatisfactory kind: it may be the beginning of knowledge, but
you have scarcely, in your thoughts, advanced to the stage of science». (Press man et RogerS,
2004)
Les mesures sont importantes non seulement dans le domaine des sciences exactes
(exemple, physique, chimie, etc.), mais aussi en génie logiciel. Cela nous aide à mieux
comprendre et à maîtriser le processus de développement des logiciels.
Avec l'évolution du génie logiciel et de ses techniques, plusieurs mesures ont été
proposées dans la littérature afin de répondre aux différents besoins en matière de qualité.
D'un autre côté, il y a les mesures qui sont conçues dans le cadre du paradigme
structuré ou dans le cadre de l'orienté-objet (Abreu et carapuça, 1994 ); (Briand, Da/y et
Wuest, 1997); (Briand, Devanbu et Melo, 1997); (Chidamber et Kemerer, 1991); (Li et
Henry, 1993) ; (Lorenz et Kidd, 1994) ; Ce sont des mesures qui touchent les attributs
internes de la conception du logiciel, dont le couplage, l'héritag , la coh 'sion, la taille, etc.
D'un autre côté, il existe d'autres mesures qui sont les mesures proposés par ISO
9126. Par exemple ISO TR 9126-2 (2003a) et ISO TR 9126-3 (2003 b) proposent un
ensemble de mesures qui permettent de mesurer d'une façon quantitative les caractéristiques
de qualité interne et externe du produit logiciel, dont la capacité fonctionnelle (tel que
15
l'aptitude, l'exactitude, etc.), la fiabilité (maturité, tolérance aux fautes, etc.), la facilité
d' utilisation (facilité de compréhension, facilité d' apprentissage, facilité d'exploitation, etc.),
le rendement (comportement vis-à-vis du temps, ressources utilisées, etc.), la maintenabilité
(facilité d'analyse, facilité de modification, stabilité, etc.) et la portabilité (facilité
d'adaptation, facilité d' installation, etc.). ISO TR 9126-4 (2004) propose un ensemble de
mesures pour les caractéristiques de qualité en mode utilisation du produit logiciel, dont
1' efficacité, la productivité, la sécurité et la satisfaction.
Pour améliorer et faire évoluer le domaine de la mesure, il faut savoir d'abord l'utilité de
la mesure pour le logiciel : « pourquoi a-t-on besoin de mesurer le logiciel ? ». En effet, on ne
mesure pas un logiciel pour le plaisir de le mesurer, mais pour des objectifs bien définis.
Oman et Pfleeger (1997) ont distingué six objectifs pour mesurer :
• et mesurer pour supporter les gestionnaires dans leurs prises de décision et pour la
prédiction.
La qualité du produit logiciel est le critère majeur pour son acceptation et son succès.
Le problème de base en gestion de projets est de fournir un produit logiciel en respectant le
budget, les échéances et un certain degré de qualité.
en assurant des coûts de test et de maintenance faibles, la complexité du logiciel devrait être
mesurée. Pour quantifier cette complexité, on se sert de métriques.
1.4.1 Définition
Une métrique est une échelle quantitative et une méthode qui peuvent être employées
pour fournir une indication sur la complexité de la conception et du code source d'un produit
logiciel spécifique. Elle peut aussi servir à faire des tests efficaces au cours de la conception.
Avant d'être utilisée, une métrique passe par un processus de mesure tel qu ' illustré dans les
travaux de Walnut Creek en 1997.
l'e étape : elle consiste à construire une méthode de mesure avant de commencer le
processus de mesure.
2 ème étape : il faut appliquer les règles de la méthode de mesure sur la totalité de logiciel ou
bien sur une partie.
4 ème étape : exploitation des résultats dans des modèles quantitatifs ou qualitatifs.
17
Afin de mesurer la qualité du logiciel, des métriques sont utilisées dans plusieurs
travaux de recherche et sont associées aux différents facteurs de qualité. Les métriques
peuvent être classées sur différentes catégories :
L ' objet de cette section est de présenter des mesures orientées objets qui seront
utilisées pour réaliser nos expérimentations. Nous avons utilisé la terminologie utilisée dans
les travaux de Mao Y. en 1998.
Soit un système orienté objet composé d'un ensemble de classes noté C, on peut définir les
relations d ' héritage pour chaque classe cE C comme les suivants :
Une classe c peut considérer une classe d comme ami si d peut utiliser les éléments non
publics de c, d' où:
Friends ' ( c) c C : 1' ensemble des classes qui déclarent la classe c comme ami
Sachant que :
Others (c) = C \ (Ancestors (c) u Descendant s(c) u Friends (c) u Friends '(c) u {c })
Méthodes:
Une classe c a un ensemble de méthodes M(c). Une méthode peut être virtuelle ou non
virtuelle, héritée, surchargée ou nouvellement définie.
M NEW (c) ç M(c) : l'ensemble des méthodes nouvelles, non héritées et non surchargées de
la classe c,
19
On peut prendre en considération l'ensemble des méthodes publiques et les non publiques
(privées):
Attributs:
Une classe a des attributs hérités ou nouvellement déclarés. Pour chaque classe c E C , soit
AR(m) : l'ensemble des attributs référencés par la méthode rn, tel que mE M(c)
Prédicats:
Interactions :
Ces métriques ont été définies dans les travaux de Chidamber S.R. et Kemerer C.F en 1997.
Elles mesurent la position d' une classe dans l' arbre d' héritage, le nombre de superclasses, le
nombre de sous-classes et de méthodes héritées :
Le DIT d'une classe est la distance maximale entre une classe et la classe racine de l' arbre
d' héritage. En cas d'héritage multiple, DIT vaudra la profondeur maximale depuis la classe
racine jusqu'à la classe mesurée.
0, si parents(c) = 0
DIT(c) ={
1+ max{D/T(c'): c'E Parents(c)}, sinon
C'est la profondeur moyenne de l'arbre d' héritage. L'AID d'une classe sans des descendants
est égale toujours à zéro
21
0 si parents (c) = 0
CLD, Class-to-Lea(Depth:
Le CLD d'une classe est le nombre maximal de niveau d ' héritage de cette classe à une feuille
qui appartient à la même hiérarchie.
0, si Descendants( c) = 0 ·
CLD(c) ={
max{DIT(c')- DIT(c): c'E Descendants(c)}, sinon
Le nombre des sous classes qui héritent directement d'une classe donnée
NOC(c) = IChildren(c)i
C'est le nombre de classes à partir desquelles une classe donnée hérite directement.
NOP(c) =iParent.'(c)i
C'est le nombre de classes distinctes à partir desquelles une classe donnée hérite directement
ou indirectement. Cette mesure donne le même résultat que la métrique DIT si l' héritage
multiple n'est pas utilisé.
NOA(c) = IAncestors(c)l
NMI(c) = IM tNH(c)l
Le nombre de nouvelles méthodes dans une classe, qui ne sont ni héritée, ni surchargées.
Index de spécialisation défini par le rapport du produit NMO et DIT sur le nombre total de
méthodes d' une classe donnée.
De même que le couplage, la notion de cohésion est à la base des bonnes pratiques en
conception orientée objet. La cohésion d'une classe représente le fait que toutes ses
responsabilités forment un tout cohérent.
Un module possède un haut degré de cohésion si tous ses éléments sont reliés entre eux. Ses
éléments collaborent pour réaliser un objectif commun qui est la fonction du module. Ainsi, il
est important d'assurer une cohésion élevée pour avoir un certain niveau de qualité. Les
principales métriques de cohésion sont :
C'est le nombre de paires de méthodes disjointes qui n' utilisent pas des attributs en commun.
LCOM2(c) est le nombre de composants connectés de Ge. tel que Ge = (Ve, EJ est un
LCOM3 (c) est similaire à LCOM2 (c) mais utilise la définition suivante des arcs :
24
LCOM4(c) est définie par Chidamber et Kemerer comme étant Je nombre de paires de
méthodes dans une classe n'ayant aucune référence d'attributs communs, JPJ , moins le
0, si AR(m) = 0 V m E Mlc)
Soit Q=EcdeLCOM 2 (c) et P=
{conditionde LCOM (c), sinon
1
Cette métrique est une variation de LCOM5 . Une valeur de Coh élevée ind ique une cohésion
élevée et une fai ble valeur montre une cohésion basse, elle est définie par :
Co,Connectivitv:
Soient Vc et Ec définies dans LCOM3 , cette métrique est utilisée dans le cas ou LCOM 3 = 1,
TCC est le pourcentage de paires de méthodes publiques d'une classe qui sont connectées
directement ou indirectement en utilisant des attributs communs.
Avec:
LCC est similaire à TCC, sauf que LCC considère aussi les paires de méthodes indirectement
connectées
__
26
La cohésion d ' un ensemble de classes est la somme de la cohésion des classes dans
l'ensemble. Elle représente le nombre d'invocations des autres méthodes de même classe.
Le couplage concerne les relations qu'a un module avec les autres modules du système. II
dépend de la complexité des interfaces entre modules. Intuitivement, un faible degré de
couplage entre les modules est souhaitable, car en effet, un module relativement peu relié aux
autres est facile à comprendre, à modifier, à tester et enfin à réutiliser. De plus, les chances de
propagation des erreurs d'un module à un autre se trouvent d'autant plus diminuées que le
nombre de liens entre ces deux modules est petit.
La définition de cette mesure a été proposée par Chidamber et Kemerer (1994). CBO
est Je nombre de classes avec lesquelles une classe est couplée. Une classe A est couplée avec
une classe B si les méthodes de la classe A utilisent les méthodes ou les attributs de la classe
B ou vice versa. Cela inclut Je couplage basé sur l'héritage (couplage entre deux classes
reliées par héritage).
27
Une petite différente à CBO, CBO' ne prend pas en considération le couplage entre les
classes reliées par 1'héritage.
C'est le nombre de méthodes d' une classe plus le nombre de méthodes invoquées
directement ou indirectement dans cette classe. Cette mesure sert à évaluer la testabilité, la
complexité. Plus une classe a un RFC élevé, plus elle est compliquée à comprendre et plus
l'effort de test sera important.
Cette métrique a été défin ie par Li et Henry (1993). C'est Je nombre d'invocations de
méthodes dans une classe.
28
Cette métrique a été introduite par Lee et al. (1995), c' est Je nombre d' invocations de
méthodes dans une classe pondéré par Je nombre de paramètres des méthodes invoquées.
Même chose que !CP mais compte les invocations de méthodes des classes ancêtres
(couplage par héritage).
Même chose que !CP, mais mesure le nombre d'invocations de classes sans compter le
couplage par héritage.
Cette métrique est définie par Li et Henry. C ' est le nombre d'attributs dans une classe qui ont
une classe comme type (instance d'une classe).
DAC(c) = 2:ACA(c,d)
deC,d*c
Définie par Li et Henry(1993). C'est le nombre des différentes classes qui sont utilisées
comme type pour des attributs d'une classe.
Les métriques suivantes comptent le nombre d'interaction entre classes. Ces mesures
distinguent la relation entre les classes, le locus, et le type (Briand et al., 1997).
Voilà les formules de chacune, comme décrites dans les travaux de Mao Y. en 1998.
- - - - - -
30
ACAIC(c) = LACA(c,d)
deAncesrors(c)
OCAIC(c)= LACA(c, d)
deOthers(c)
FCAEC(c) = LACA(d,c)
deFriends(c)
DCAEC(c)= LACA(d,c)
d eDescendants(c)
OCAEC(c) = L ACA(d,c)
deOthers(c)
ACMIC(c) = IACM(c,d)
deAnces/ors(c)
OCMIC(c) = L ACM(c,d)
deOthers(c)
FCMEC(c) = IACM(c, d)
deFriends(c)
IFMMIC(c)= LAMM(c, d)
deFriends - l (c)
AMMIC(c ) = I AMM(c,d)
deAncestors(c)
32
OMMIC(c) = "i.AMM(c,d)
d eOthers( c)
FMMEC(c)= "i.AMM(d,c)
deFriends(c)
DMMEC(c)= "i.AMM(d,c)
d eDescendants( c)
OMMEC(c) = I AMM(d , c)
deOthers(c)
Le nombre de méthodes locales dans une classe. Pl us NOM est élevée, plus une classe est
complexe.
33
Le nombre de méthodes triviales, qui sont marquées comme incorporées en C++ dans une
classe.
La taille en octet des objets qui seront créés par la partie déclaration d'une classe. Elle est
égale à la somme des tailles de tous les attributs déclarés.
1.6 Conclusion
Nous avons essayé dans ce chapitre de donner une vue globale sur les différents
aspects du logiciel. La partie la plus importante de ce chapitre concerne la mesure logicielle;
elle joue un rôle important dans le développement du logiciel, afin de gérer le processus de
construction tout en contrôlant les coûts de production et en assurant la qualité. Nous avons
donc classifié et présenté les mesures impliquées ains i que leur utilité durant et après le
développement logiciel. Les métriques présentées dans ce chapitre seront utilisées pour
établir l'existence de liens entre des attributs internes et des facteurs de qualité.
CHAPITRE II
2.1 Introduction
Depuis des nombreux siècles, et même depuis l'aube de l'humanité, les hommes ont
préservé et transmis leurs savoirs à travers les générations. Certains chercheurs de divers
domaines ont constaté l'arrivée d'une nouvelle économie dominée par la production, l'échange
et le partage de la connaissance (Zacklad et al. 2001 ). Dans cette économie, la gestion des
connaissances constitue une clé importante qui permet aux organisations d'améliorer leur
performance et d'en obtenir un avantage concurrentiel (Ermine, J.L, 2003).
2.2 La connaissance
2.2.1 Définition
La connaissance est de plus en plus considérée comme un capital stratégique dans les
entreprises et les organisations. La connaissance détenue par une entreprise est la somme
totale des expériences et le savoir-faire de ses employés. C'est l'ensemble des notions et des
principes qu'une personne acquiert par l'étude, l'observation ou l'expérience et qu'elle peut
intégrer à des habilités (Nonaka, 1994).
36
La connaissance est devenue une ressource importante dans les entreprises et les
organisations spécialisées en génie logiciel. Le succès de ces dernières dépend de leurs
habilités, d'une part de transformer les connaissances tacites de leurs employés en
connaissances bien sauvegardées dans des supports électroniques, et d'autre part, de rendre
ces connaissances disponibles pour les autres membres pour accomplir une tâche quelconque
ou prendre une décision pertinente.
• tacites (intangibles) : elles sont plus difficile à saisir et à appréhender. C'est le savoir-
faire intangible, non codifié, qui est profondément ancré dans les personnes et qui se
manifeste en réponse à une situation ou à une action et lors d'une interaction des
collègues, des clients et des personnes. La connaissance tacite réside dans l'esprit
même des personnes et émerge à travers la communauté. L'acquisition de ce type de
connaissances n'est pas une tâche facile. Il peut être très difficile pour un expert de
bien exprimer ses connaissances sur papier, spécialement lorsque cette expérience
provient de sensations et de la pensées.
Le modèle de création des connaissances repose sur la distinction entre savoir tacite et
savoir explicite. La connaissance est convertie selon quatre modes :
37
v' l'externalisation: c'est le transfert des connaissances tacites d'un individu, souvent
expérimenté, vers un groupe d'individus. Il s'agit du passage tacite explicite.
Ainsi, après avoir exploré la littérature sur ce qu'est la connaissance, ses différentes
formes et ses principaux modes de transformation, il convient de s'intéresser au concept de
gestion des connaissances en génie logiciel afin de prédire ou d'estimer la qualité du produit
logiciel.
La gestion des connaissances peut être définie comme étant l' exploitation et
l'utilisation organisée des savoirs tangibles et intangibles contenus dans une entreprise dans
le but d'améliorer sa perfonnance et d'atteindre ses objectifs.
• l'expertise : c'est de trouver et de travailler avec des experts dans l'entreprise et tirer
parti de leurs connaissances et de leurs expériences.
• l'apprentissage: c'est la formation sur le terrain pour développer les carrières et les
compétences .
Voici quelques raisons qui poussent les compagnies de génie logiciel à fai re de la
gestion des connaissances:
• La prise de conscience que l'on entre dans une phase de surinformation et de la valeur
du capital immatériel que représentent aussi bien la connaissance sur les clients que
les savoir-faires et les compétences de leurs employés.
Manuel Zacklad et Mickel Grundstein (2001) ont insisté sur Je fait que la
capitalisation des connaissances est une problématique permanente. Elle s'articule autour de
cinq processus clés inter-reliés : le repérage, la préservation, la valorisation, l'actualisation
des connaissances et le dernier processus concerne les interactions entre les quatre premiers
processus.
~anag:J
Elaborer une vis io n Identifier
Pro mouvoir /Informe riF or mer Localiser
Organiser/Coordonner Caractéri ser
Faciliter/Encourager/Motiver Cartographier
Mesurer/Suivre Estimer
Hiérarchiser
A ccéder
Diffuser
P artager
Exp loiter
Combiner
Cré er
L'élément essentiel d'un SAD est la base de connaissances, dans laquelle se trouvent
toutes les informations et les connaissances spécifiques sur un domaine particulier.
Contrairement à un humain, un SAD peut conserver dans sa mémoire une grande quantité de
connaissances. Ces connaissances doivent être de bonne qualité et bien organisées. Les
connaissances peuvent être sous la forme de règles. Ces dernières peuvent être jumelées à un
moteur d ' inférence (moteur à base de règles comme JRules que nous verrons plus loin) afin
d ' appliquer un raisonnement. Le moteur d'inférence parcourt la base de connaissances en
décidant quelles règles il doit analyser, quelles règles il doit éliminer et lesquelles
42
correspondent bien au problème pour donner un résultat pertinent et logique. Ainsi, les
bénéfices de l'utilisation des SAD à base de connaissances sont nombreux:
2.4 Conclusion
Dans ce chapitre, nous nous sommes intéressés à la gestion des connaissances comme
une solution stratégique dans les organisations de génie logiciel. L'acquisition des
connaissances est une activité critique dans l'élaboration d'une bonne base de connaissances,
et par conséquent, d'un bon système d'aide à la décision pour la prédiction et l' estimation de
la qualité logicielle. Tout comme l'expert humain qui a besoin de bonnes connaissances pour
bien raisonner, un SAD en a lui aussi besoin.
CHAPITRE III
3.1 Introduction
Un problème qui se pose souvent dans le domaine de génie logiciel est le manque de
données qui rend les modèles de prédiction difficiles à généraliser, à valider et à utiliser.
Le choix d' un modèle de prédiction de la qualité est une décision difficile et non
triviale puisque les modèles universels de prédiction de la qualité n'existent pas encore. La
pénurie de données ne fait qu ' accentuer ce problème. Plusieurs raisons sont à l'origine de
cette pénurie de données . Nous relevons par exemple la rareté, voir l'absence, des collectes
44
Un expert est souvent un ex-développeur qui a acquis au fil des années une certaine
expérience lui permettant d'asseoir son expertise. Cette expérience doit couvrir dans l'idéal
une variété de plates-formes et de produits, et une connaissance de la vie d'une application,
voire d'un projet. Il a un rôle clef au sein d' une équipe de développement. L'expert doit
travailler main dans la main avec tous les membres de groupe afin d'obtenir les meilleures
résultats.
C'est par le biais d'échanges permanents avec les développeurs et les chefs de projet
que l'expert pourra communiquer ses connaissances, mais aussi surtout tirer le meilleur du
travail de l'équipe. L'expert doit également être à l'écoute des besoins. Il doit soumettre des
propositions pour l'orientation des développements avec une vision sur le long terme de
l'architecture du système d'information et des problématiques d'intégration des applications,
mais tout en gardant bien en tête les priorités. En effet, il peut être amené à écrire des lignes
et valider la qualité de ce qui est produit ou décoincer une situation techniquement difficile.
Cela signifie donc, surtout, qu'il doit être capable de lire et analyser du code de manière très
rapide.
Un expert peut aussi proposer sa connaissance sous forme de règles. Ces règles sont
par la suite transformées en un module informatique. Le module met donc en application les
règles de l'expert pour résoudre un problème.
Notre objectif dans cette section est de présenter quelques techniques d'apprentissage
automatique utilisées pour l' estimation et la prédiction de la qualité de logiciel.
45
3.3 .1 Définition
Parmi les nombreuses définitions proposées dans la littérature, nous avons retenu une
que nous trouvons très claire
C ' est une définition fournie par Mitchell en 1986: « A learning process can be view
as a transformation of information provided by a source of information (a teacher or
environment) into a more efficient and/or more general form in which it is stored for future
use. This transformation involves the background knowledge of the learner (that includes
goals of learning, concepts leamed from the past experience, hypothesis evaluation criteria,
etc.) and uses various types of inference. The type of inference employed in any given act of
learning depends on the source of information and the goal of learning .... For example, wh en
leaming a concept from examples, explaining the behavior of a system, or discovering an
equation ».
Plusieurs travaux ont été menés concernant la prédiction des attributs de qualité en
uti lisant l'apprentissage automatique. Citons à titre d' exemple les travaux de :
• Porter and Selby en 1990, ont utilisé l'algorithme d' apprentissage automatique 103
pour construire un modèle prédictif qui permet de détecter, au début du cycle de vie
du produit, les composants qui ont un risque élevé à contenir des erreurs et qui
peuvent engendrer un coût très élevé.
• H.Lounis et al. en 1999, ont aussi étudié les algorithmes d'apprentissage et leurs
capacités à estimer la défectuosité de composants logiciels.
46
L'apprentissage supervisé utilise des exemples étiquetés par une classe. Ces
étiquettes ou ces classes peuvent être vues comme fournies par un superviseur ou un
professeur, d ' où le nom d'apprentissage supervisé. La tâche principale de ce type de
classification est d'établir une fonction de classification, appelée hypothèse ou règle,
permettant de trouver la classe de chaque nouvel exemple. Il réalise donc un raisonnement
inductif en passant des exemples particuliers à une fonction de classification générale.
Dans l'apprentissage supervisé, nous allons distinguer deux types d' exemples : les
exemples d'apprentissage qui servent à apprendre une règle de classification et les nouveaux
exemples à classer qui sont les objets sur lesquels les règles seront appliquées afin de
déterminer leurs classes.
L'apprentissage supervisé est très utile pour prédire la classe de nouveaux exemples
non encore classés. Elle est aussi utile pour expliquer les règles apprises et comprendre ce qui
relie les exemples à leurs classes.
Par contre, l'apprentissage non supervisé repose seulement sur ses entrées. Son but est
de découvrir une relation pouvant exister entre les attributs et non la prédiction d'une sortie
en fonction des entrées . Cet apprentissage s'occupe donc de la formation automatique de
classes. II existe différents types d' apprentissage non supervisé. Nous pouvons citer trois
types qui sont les plus populaires :
- Arbres de décisions ;
- Apprentissage de règles ;
Nous présenterons brièvement les techniques d' apprentissage les plus populaires que
sont les arbres de décision et les règles.
Dans les arbres de décision, nous trouvons un point d'entrée qui est constitué par le
premier test, formant ainsi la racine de l'arbre. Après, on fait d' autres tests qui font diriger
l'ensemble des individus vers plusieurs branches qui se subdivisent à leurs tours grâce à
d' autres tests. Chaque point de connexion entre deux branches s'appelle un nœud.
l_
48
Les nœuds terminaux sont dénommés des feuilles. Elles portent la prédiction finale et
la classe à laquelle appartient chaque individu. Cette classification est facilement
compréhensible par un utilisateur car les arbres de décision représentent graphiquement un
ensemble de règles aisément interprétables. Nous pouvons interpréter un arbre de décision
comme étant une forme normale conjonctive : chaque chemin commençant par la racine
menant à une feuille peut s'interpréter comme une conjonction de valeurs d' attributs. Toutes
les branches de l' arbre qui mènent vers des feuilles dont les classes sont identiques peuvent
s'interpréter comme une disjonction.
On peut donc facilement extraire des règles sous forme normale disjonctive, qui sont
non ambiguës et faciles à lire mais peuvent être un peu complexes selon la profondeur de
l'arbre. Ce problème peut être résolu par des méthodes de simplification afin d' éliminer les
risques de sur-apprentissage et de simplifier ces règles.
Les algorithmes d' induction d'arbres de décision les plus connus sont :
ID3: l'algorithme ID3 fut proposé par Quinlan en 1979 afin de générer des arbres de décision
à partir de données. C'est un algorithme basique facile à implémenter dont la première
fonction est de remplacer les experts dans la construction d'un arbre de décision. Les
principales idées sur lesquelles repose ID3 sont les suivantes :
• Dans l'arbre de décision, chaque nœud correspond à un attribut non cible et chaque
arc à une valeur possible de cet attribut. Une feuille de l'arbre donne la valeur
escomptée de l'attribut cible pour l'enregistrement testé décrit par le chemin de la
racine de l'arbre de décision jusqu ' à la feuille .
• Dans l' arbre de décision, à chaque nœud doit être associé l'attribut non cible qui
apporte le plus d' information par rapport aux autres attributs non encore utilisés dans
le chemin depuis la racine.
• La fonction d' entropie, qui était introduite par Claude Shannon lors de ses recherches
concernant la théorie de l'information et qui sert dans plusieurs méthodes du data
49
mining, est utilisée pour mesurer la quantité d'information apportée par un nœud.
L'algorithme ID3 ne peut pas traiter les enregistrements incomplets. De plus, les
attributs sont discrétisés, ce qui n'est pas toujours une solution acceptable. Enfin,
l'arbre produit peut comporter des sous-arbres dans lesquels on ne va presque jamais.
Les arbres de décision ne sont ni robustes, ni compacts ce qui les rendent inadaptés
aux grosses bases de données.
C4.5: Cet algorithme a été proposé en 1993 par Ross et Quinlan, pour pallier les limites de
l'algorithme ID3. L'algorithme C4.5 repose sur les mêmes principes que l'algorithme ID3
mais il présente plus d'avantages que ce dernier.
C4.5 est une amélioration d' ID3 qui permet de travailler à la fois avec des données
discrètes et des données continues. Il permet également de travailler avec des valeurs
d'attribut absentes. Enfin, C4.5 élague l'arbre construit afin de supprimer les règles inutiles et
de rendre l' arbre plus compact.
CART (Classification and Regression Tree): décrit par Breiman et al. à 1984, est basé sur la
recherche de partitions dichotomiques. Chaque nœud comporte donc un test logique simple,
basé sur un attribut unique, qui conduit à deux branches correspondant aux exemples positifs
ou négatifs en fonction des résultats de ce test. Il peut être utilisé aussi bien pour des
variables cibles numériques ou qualitatives. L'algorithme arrête la construction de l'arbre
lorsqu' il obtient des groupes purs (tous les éléments appartiennent à la même classe).
Dans Je cadre de notre travail, Nous nous intéressons aux méthodes de classification
par apprentissage de règles (Mitchell Tom, 1997) qui entre dans le cadre de l'apprentissage
automatique supervisé. Les règles que nous cherchons à générer sont de la forme :
La classe prédite par la règle correspond bien à la classe majoritaire de l'ensemble des
exemples couvert par la condition de la règle. Ensuite, la disjonction de ces règles permet de
couvrir tout l'ensemble d'apprentissage. La prédiction de la classe d'un nouvel exemple se
fait par la recherche d 'une règle dont la condition satisfait la description de cet exemple. Les
structures de ces règles ont 1'avantage d ' être considérées comme des présentations très
expressives et plus faciles à comprendre par l'humain.
Règles propositionnelles :
Les règles en logique de premier ordre ont été proposées dans l'apprentissage de
règles pour pallier les limites des règles propositionnelles en permettant la représentation de
variables et des relations d' une façon plus générale et non spécifique (Clark et al., 1991).
L'apprentissage de règles du premier ordre est aussi connu sous l'appellation d'ILP
'inductive logic programming' .
Comme nous l'avons vu plus haut, ces deux fonnalismes constituent les deux
principales catégories de méthodes d'apprentissage de règles. Dans ce qui suit, nous allons
présenter quelques algorithmes pour chacune de ces catégories.
Les techniques d' apprentissage de règles sont basées généralement sur des algorithmes
de couverture. Il existe deux types d' algorithmes de couverture qui sont :
L' origine de la stratégie de couverture est due à Michalski (1969) (Algorithme AQ).
Tous les algorithmes appelés « separate-and-conquer » ou « covering » (correspondant à la
procédure Séquentiel-Covering présenté par Mitchell en 1997) partagent le même principe :
• Chercher une règle qui couvre une partie des exemples positifs.
• Recommencer récursivement le processus jusqu ' à ce qu'il n'y ait plus d ' exemples
positifs à couvrir.
À la fin de ce processus, chaque exemple de la base d' apprentissage est couvert par au
moins une règle. La construction d'une règle dépend du choix des littéraux (attribut, relation,
valeur) et du test d'arrêt. Pour l'ajout d'un littéral à une règle, nous pouvons prendre le
meilleur littéral au sens d'un critère (ex. l' entropie). L'arrêt peut se faire en fonction d'un
critère numérique lié au taux d'erreur. Ces algorithmes fo urnissent des règles similaires à
celles d'ID3.
Une règle de bonne précision est une règle qui ne commet pas d' erreurs, c'est à dire
qui ne couvre pas d' exemples négatifs; nous disons qu ' une règle est de couverture
quelconque lorsqu ' elle couvre un certain nombre d' exemples positifs mais pas forcément un
grand nombre.
53
Cette procédure commence par initialiser à vide la variable theory qui représente
l'ensemble de toutes les règles construites. Ensuite, tant que l'ensemble des exemples positifs
n'est pas vide, l'algorithme fait appel à la sous-procédure FindBestRule pour chercher la
meilleure règle qui couvre le plus de ces exemples positifs. Il identifie l'ensemble des
exemples couverts par cette règle par la sous-procédure Caver, il vérifie ensuite un critère
d' arrêt avec la sous-procédure RuleStoppingCriterion, il enlève les exemples couverts de
l' ensemble global des exemples et il ajoute la règle à l' ensemble theory. Enfin, il applique un
traitement sur l'ensemble theory afin d'affiner les règles trouvées.
• Sous Procédure pour la recherche de la meilleure règle :
La définition d'un tel biais est une condition nécessaire au bon fonctionnement de la
méthode (Mitchell, 1980). Ce biais formule une restriction ou une préférence sur l'ensemble
des apprentissages possibles, guidant ainsi la recherche.
Il existe trois principaux types de biais selon Johannes Fürnkranz : !es biais de langage
qui définissent le langage des hypothèses recherchées, les biais de recherche qui orientent le
parcours de l'espace de recherche en terme d'élagage et de création de nouvelles hypothèses
et les biais de validation qui englobent les critères d'arrêt de la recherche.
Ils définissent le langage dans lequel sont exprimés les concepts qu 'on veut chercher à
apprendre. Ainsi, en choisissant un langage adapté aux concepts recherchés, nous
restreignons l'espace des concepts possibles. Par exemple, le langage des exemples peut être
un langage lié aux règles propositionnelles attributs/valeurs ou un langage plus expressif
comme les langages de la logique du premier ordre.
Les biais de recherche déterminent dans quelle partie de l'espace des hypothèses on doit
mener la recherche et de quelle façon on doit rechercher dans cet espace d'hypothèses.
La recherche basée sur l'algorithme de type 'Hill-Climbing' est la plus utilisée. Plusieurs
systèmes l'utilisent tel que AQ, CN2 et FOIL.
56
Cette méthode de recherche en profondeur utilise une fonction heuristique pour choisir à
chaque étape la meilleure règle, mais elle comporte quelques inconvénients :
La recherche 'bearn search' explore en parallèle une liste d ' hypothèses candidates.
L ' avantage principal de ce type de recherche est de réduire la myopie relative à la recherche
'hill-climbing' .
La stratégie du meilleur d'abord 'Best first' consiste à sélectionner l' hypothèse la plus
prometteuse par rapport à l' heuristique, parmi toutes les hypothèses rencontrées depuis le
début.
Les biais de recherche reliés aux heuristiques d ' évaluation permettent d ' estimer la qualité
des règles trouvées et de guider les algorithmes vers les bonnes régions dans l' espace de
recherche. La plupart de ces heuristiques peuvent être implémentées dans la sous procédure
EvaluateRule.
Toutes les heuristiques tentent à déterminer les propriétés de base de chaque règle
candidate comme par exemple le nombre d ' exemples positifs et le nombre d ' exemples
57
négatifs qu'elle couvre. Il existe différents types d'heuristique d ' évaluation de règle. Le
premier type est celui des heuristiques de base qui permet de mesurer la couverture relative
de la règle telles que :
../ Accuracy qui permet d' évaluer l' exactitude d' une règle r et elle calcule le
pourcentage des exemples correctement classifiés .
../ Purity qui permet d'évaluer les règles avec leurs puretés. Cette mesure atteint sa
valeur optimale lorsqu'aucun exemple négatif n'est couvert par la règle .
../ Entropie mesure l' homogénéité d' un ensemble d'exemples vis à vis d'un ensemble
de classes que l'on cherche à caractériser. Si tous les exemples appartiennent à une
seule classe, l' entropie est égale à O. L'entropie est utilisée dans les premières
versions du système d' induction de règles CN2 (Clark et al., 1997).
Un deuxième type d' heuristiques pour évaluer les règles permet d ' estimer la complexité,
comme par exemple :
On dit qu ' une hypothèse couvre trop (overfit) les exemples, quand elle est trop spécifique
aux exemples de l' ensemble d' apprentissage. Dans le cas de données bruitées, l' overfiting se
traduit par la création d' hypothèses trop fines, adaptées que pour classer les exemples bruités,
alors que ceux-ci devraient être négligés. Le but d' utiliser ce type de biais est d'éviter la
présence de ce genre d' hypothèses qui ne peuvent classer que les exemples de l'ensemble
d' apprentissage. Ainsi, les biais de validation défin issent un critère d'acceptation pour le
58
3.3.6.1 Le système AQ
Nous présentons dans cette section, le principe général du système AQ (Clark et al.,
1991 ). Ce système fonctionne par apprentissage de règles pour chacune des classes. Il utilise
lors de son apprentissage l'algorithme de couverture séquentiel et il construit chaque règle
par l'approche du plus général au plus spécifique.
Lors de la classification, à chaque étape, il ne considère qu ' une seule classe. Pour chaque
classe, il divise l'ensemble d'exemples d'apprentissage en deux sous-ensembles. Les
exemples positifs pour ceux qui appartiennent à cette classe et les exemples négatifs pour le
reste. Puis, il exécute l'algorithme de couverture sur le sous-ensemble d'exemples positifs.
A chaque fois, il génère une nouvelle règle et les exemples positifs couverts par cette
règle seront supprimés de l'ensemble. Il répète ce processus jusqu'à ce que chaque exemple
soit couvert par au moins une règle
Initialement, l'ensemble des hypothèses ciblées est vide, et l' algorithme essaye
successivement de trouver des règles à ajouter à l'ensemble des hypothèses. Chaque règle
aj outée rendra certains exemples positifs vrais et tous les exemples négatifs faux . Lorsqu'une
règle est trouvée, les exemples positifs qui sont couverts par la règle sont retirés de
l' ensemble d'exemples positifs. De la même façon, le processus continu jusqu'à ce qu'aucune
règle ne puisse être trouvée ou que l' hypothèse trouvée soit complète et consistante.
59
Quinlan a introduit le système POIL en 1993, qui est une variante de l'algorithme de
couverture séquentielle dans le cadre de la logique des prédicats. L'algorithme utilise des
clauses de Hom dans lesquelles les prédicats ne peuvent pas avoir des fonctions parmi leurs
arguments, ceci afin de réduire la complexité de l'espace de recherche.
Le but de POIL est d'induire des règles jusqu 'à ce que tous les exemples soient
couverts. Chaque clause dans POIL est générée par une approche du plus général au plus
spécifique. En commençant par la clause la plus générale, POIL spécialise la clause par
construction de l'ensemble des littéraux candidats, puis il sélectionne le meilleur littéral parmi
cet ensemble.
Le choix du meilleur littéral parmi l'ensemble des littéraux candidats est effectué par
mesure du gain. Cette mesure évalue le nombre d'exemples positifs et négatifs couverts par la
clause, avant et après l'ajout du littéral évalué. Dans POIL, l'espace de recherche est borné,
d'une part en limitant la complexité des clauses possibles à générer, d'autre part en ne
considérant à chaque ajout, que les littéraux les plus discriminants.
60
3.4 Conclusion
Comme nous l'avons souligné, l'apprentissage de règles constitue une grande partie des
travaux en apprentissage automatique. C'est un processus d'acquisition des connaissances par
l'application d'inférences inductives sur des exemples afin de produire des énoncés généraux,
des règles. Un tel processus comprend des opérations de généralisation, de spécialisation, de
transformation, de correction et de raffinement des représentations des connaissances.
CHAPITRE IV
ENVIRONNEMENT EXPERIMENTAL
4.1 Introduction
Pour cela, on a recours aux fonctionnalités du logiciel Weka qui nous aident à faire de
l' apprentissage automatique à partir d'une base de données et de produire des connaissances
(règles), et aussi aux fonctionnalités du logiciel JRules qui nous permettent d'exécuter des
règles sur de nouvelles données.
L' interface principale du logiciel Weka est 'Explorer'. Cette interface sert
principalement à construire des modèles de prédiction où la variable à prédire peut être
nominale ou numérique. Cette interface possède plusieurs onglets qui donnent accès aux
principaux composants de l'espace de travail.
Ce qui nous intéresse le plus dans le cadre de notre travail sont les deux onglets
'Preprocess' et ' Classify'. Le premier permet l'importation de données depuis une base de
données sous le format ' arff. Il permet aussi de filtrer ces données afin de transformer les
types des attributs (ex: transformer un attribut numérique réel en un attribut discret).
63
Fllter
1 Choose ~~~
Current relation Selecte d attribute
Relatk:m: h ypothèse Type: Nominal
Instances: 61 Attrlbutes: 13 Dtstloct: 4 lKllque: 0 (00/o)
Attributes
Remove
Stotus
OK
Nous allons décrire dans ce qui suit le cheminement suivi dans la majorité des cas
pratiques à savoir: la préparation des données, l'application d' un algorithme et l'analyse des
résultats.
Dans notre cas, toutes les données disponibles représentent des mesures logicielles
stockées dans des fichiers Excel. Dans Weka, nous ne pouvons charger que des fichiers du
format 'arff (format spécifique de Weka). C'est pour cette raison que, nos fichiers Excel
doivent être convertis en des fichiers 'arff pour être lu par 'Explorer'. Un fichier 'arff a la
forme suivante :
~rela~;on hypo~hese~
~a~~r;bu~e Reusab;l;~y {~,2,3,4}
• on choisit un algorithme d'apprentissage parmi ceux proposés par Weka, selon nos
besoins.
• on choisi ensuite le type de test, il y' a ici 4 choix:
1. utiliser tout l'ensemble d'apprentissage pour faire les tests (c' est l'option Use
training set).
2. sélectionner un autre ensemble de test (c'est l'option Supplied test set)
3. la validation croisée (l ' option Cross-validation) en choisissant le nombre de
découpage appliqué sur l' ensemble d'apprentissage (dans notre travail pratique
nous avons opté pour ce choix et nous avons mis le ' fold 'à 10). L'algorithme va
apprendre 10 fois sur 9 parties et le modèle sera évalué sur la dixième partie
restante. Les 10 évaluations sont alors combinées. Ce type de validation est
recommandé lorsque l'ensemble des données n'est pas grand.
4. partager l'ensemble de données en une partie pour l'apprentissage et une autre
partie pour faire les tests (l'option Percentage split). (en général 2/3 pour
apprentissage et 113 pour le test).
• lancer l'apprentissage et construire le modèle de prédiction.
Les résultats sont structurés en trois parties (figure 4.3) : la première partie représente
les résultats sommaires, la deuxième donne les résultats par classes et la troisième représente
une matrice de confusion. Les résultats sommaires donnent une statistique sur le nombre total
d' instances correctement classifiées (les vrais positifs) et incorrectement classifiées, la valeur
de Kappa, l'erreur absolue moyenne. Les résultats par classes nous fournissent le taux
d'instances classifiées correctement et incorrectement via les taux TP (' true positif) et FP
(' false positif ), la précision et d'autres informations statistiques. Pour la dernière partie, celle
de la matrice de confusion, elle nous donne plus de précision concernant le nombre
d'instances correctement et incorrectement classifiées correspondants aux taux TP et FP pour
chaque classe.
66
•
( Preprocess rC~sslfy Ck.Jste;}.~AssocU!te HSelect ~ttrlbutes fVIsut~6ze 1
Closslfler
. !
! *'*•A!ift!*5R%1§44·ifiii€€M 1
TP Rate f P Rate Pteci~ion R~call F-Hea~u:t:~ ROC A:t:~a Cl a~~
o. 2 66 o. 052 o. 333 O. ZB6 O. JOB o. 573 cla~~el
! o. 412 0.149 o. 412 o. 412 o. 41 2 o. 59 c1a~~ez
i O. -1S 0 .156 o. -'17-1 o. -15 o. <162 o. 656 cla•••3
St:~tus
OK G~xo
Dans cette section, nous décrivons les algorithmes utilisés dans notre application et qui
sont disponibles dans le logiciel d'apprentissage Weka. Dans le cadre de notre travail, nous
nous intéressons aux algorithmes d ' apprentissage à base de règles. Nous avons sélectionné
les algorithmes de classification les plus populaires et les plus adoptés à nos données qui sont
: J48, Part, Conj unctiveRu le et DecisionTable.
4.2.4.1 J48
L'algorithme J48 de Weka a été utilisé pour générer des arbres de décision . C'est
une mise en œuvre de l'algorithme C4 .5 de Quinlan en 1993 dans le cadre de l'apprentissage
supervisé. Cet algorithme permet ·la construction d ' un arbre de décision élagué ou non dont le
67
but de classifier des nouvelles instances avec un certain degré d'erreur tolérée. C4.5
commence par la phase d'expansion, il commence à construire l'arbre de décision en divisant
récursivement l'ensemble d'apprentissage. Pour construire les sous arbres, C4.5 utilise une
variable qui permet de calculer le taux de gain de l'information pour chacun des attributs
possibles qui pourraient potentiellement être utilisés pour diviser les données. L'attribut qui a
la plus grande valeur de gain est choisi comme racine d'un sous arbre. Cette méthode de
construction des sous arbres est répétée plusieurs fois jusqu'à ce que l'arbre final classifie
toutes les instances de l'ensemble d'apprentissage. Pour avoir un bon classificateur, l'arbre
de décision doit être élagué. L'élagage de l'arbre de décision s'effectue en remplaçant un
sous arbre entier par une feuille. Cette substitution a lieu si une règle de décision établit que
le taux d'erreur attendu dans le sous arbre est supérieur que celui d'une simple feuille.
Voilà un exemple d'exécution de l'algorithme J48 sur quelques instances d'une base
de données (la base de données est décrite dans le chapitre 5, section 5.5). Elle permet de
classifier le niveau de réutilisation des composants logiciel.
4.2.4.2 Part
Cet algorithme permet de produire des règles par la génération itérative des arbres de
décision partiel en combinant deux approches : Les avantages de C4.5 et la technique
d'apprentissage automatique de règles « diviser pour régner ». Il fournit des résultats aussi
précis que ceux de l' algorithme C4.5. PART permet d ' éviter l' optimisation globale de C4.5
et fournit un ensemble de règles compactes et exactes (Frank et al., 1998). Il adopte la
stratégie de « diviser pour régner » avec laquelle il construit une règle, supprime les instances
couvertes par cette dernière et continue à créer les règles récursivement jusqu'à ce qu'il ne
reste aucune instance. En combinant les méthodologies, « diviser pour régner » avec les
arbres de décision ajoute la flexibilité et la vitesse pour la génération des règles. Il est, en
effet, inutile de construire un arbre de décision plein pour obtenir une règle simple. L'idée
principale est de construire un arbre partiel de décision au lieu d' un arbre entièrement
exploré.
C l esslfler output
0 U s e tr e ln lno ,;et
0 S uppUed te st s et l
0 C ross -ve11do tlon Poids (! a .. -~ < 1 --- C.l. a ee 1.1: :Lec m.odel.
N OP > S AND
' N PA < - .1. AND
l! N PA < - 0 AND
( 3 . 0/ 1 .0)
N OT < - 8 AND
1 CSB
NOP
>
>
.1. 6
0
AND
AN'D
~ NAD < - 3 AND
N OT < - 8 AND
l CZS > .1.6: c.Laeee2 (7 . 0)
N OD <- 6 AND
R"J"C < - 11 AND
NOT< - 3: c1o~~e 2 (5 . 0 )
~~~======~~~======~~-=~~-======~~~~~~,y~~=~-===~=~~~==~~-~~~~~·-==--==·=~
~~xo
4.2.4.3 ConjuntiveRule
Cette classe utilise une méthode d'apprentissage à base de règles conjonctives simples
pour des classes numériques et nominales. Une règle se compose d'un ensemble de
conditions liées ensemble par une conjonction AND et d'une conséquence. Chaque condition
est une description sous la forme attribute <op> value, où <op> peut être soit un<,<=,>,
>=. Dans le cas de la classification, la conséquence est la distribution des classes disponibles.
Elle correspond à une moyenne pour la régression. Si une instance de test n'est pas couverte
par cette règle alors la prédiction est la classe distributions/valeurs par défaut qui couvre les
données non couvertes par aucune règle. Ce classificateur sélectionne un antécédent en
calculant le gain de l'information de chaque antécédent et élague la règle générée en utilisant
l'erreur réduite d'élagage (REP: Reduced Error Pruning) ou un pré-élagage simple basé sur
le nombre d'antécédents. L'information d'un antécédent est la moyenne pondérée des
entropies des données couvertes et non couvertes par la règle. Ci-bas, des résultats
d'apprentissage de cet algorithme avec Weka.
-------------------- ------------
4
j (Nom) Reusebi l ity ii@*WWE* Q4!AP·i*'' 4 +€19 1
'----=-":.::c
"'~'_ __,) { C1ass
Cove ~ed
die t~ibutions:
by the ~ u1 e:
Result lli!>t (rioht-click For option!5')
c 1essc1 c1eeae2 c1esse3 c 1esee4
10: 36:51 - rules.PART 0 .0 238 1 0.095238 0.30952 4 0 . 57 1429
~1
S t&tu:::
4.2.4.4 JRIP
JRIP produit des règles indépendantes. Il intègre une première procédure de post-
élagage afin de retirer les propositions inutiles, et une seconde procédure pour réduire le
nombre de règles dans la base. Il en résulte souvent un classifieur plus compact par rapport
aux autres algorithmes d'apprentissage .
1'1ore options .. .
<
St atus
OK
xO
Nous avons choisi d'implémenter nos règles en utilisant ILOG JRules. Ce dernier
permet une exécution rapide même pour un nombre élevé de règles et cela comparativement à
d'autres environnements à base de règles.
Dans JRules, une règle est écrite avec le langage ILR (ILOG Rule Langage) puis
exécutée par le moteur de JRules. Le langage IRL a une syntaxe similaire à celle du langage
Java et il permet d'utiliser les opérateurs et les collections Java dans l'expression des règles.
Une règle est composée d'une partie condition et d' une partie action. Elle a la forme
when {condition} then {action}. Une condition peut porter sur un type, une relation, une
annotation, etc. La partie Action décrit les actions à faire si la partie Condition est satisfaite.
Dans notre cas, elle peut prédire un facteur de qualité d' une classe ou d'un composant d'un
nouveau produit logiciel.
L'objectif d'un moteur d'inférence est de déterminer quelles sont les règles qui peuvent être
appliquées. Il est composé de trois éléments essentiels :
• Une base de règles qu'on appelle le ruleset: elle contient les règles, les fonctions et
les activités qui· seront traitées par le moteur.
• Une mémoire de travail 'working memory' : elle contient les objets (des faits) qu'on
insère. Les règles seront exécutées sur ces objets et leurs valeurs.
• Agenda : elle contient la liste des instances des règles en attente d'être exécutées sous
la forme de paires <règle, n-uplet> ; tout n-uplet et règle sont tels que le n-uplet
Inference Engine
\'Vo rking;
RlùeSet J:vleinOIY
..i\.genlla
• Instance Rlùel
• Instance Rlùe2
• Instance Rlùe3
• Compiler les règles afin de construire un réseau RETE servant à filtrer les règles
éligibles en fonction des données. Une règle est dite éligible si ces conditions sont
vérifiées à vrai sur un ensemble d'objets présents dans la mémoire de travail.
• La première étape détermine les règles éligibles et les objets associés. L'ensemble
« règle + objets associés » est appelé une « instance de règles ». Ces instances seront
mises dans 1'agenda.
73
• La deuxième étape consiste à choisir quelle règle sera exécutée dans l'agenda. Le
choix de la règle dépend de sa priorité.
• La dernière étape consiste à exécuter la règle et mettre à jour les objets en apportant
des modifications selon la base de faits.
Ainsi, le moteur JRules analyse les objets modifiées et réorganise la mémoire de travail.
Cette mise à jour peut modifier l'agenda et d' autres règles peuvent s'y ajouter. Chaque cycle
produit de nouvelles conclusions qui pourraient être considérées, à l'itération suivante,
comme des faits sur lesquelles s'appliquent des règles. Ce processus peut se répéter pendant
un certain nombre de cycles ou jusqu'à qu ' aucune donnée ne vérifie les règles du système de
production.
La règle d'ILOG JRules a une structure simple, composée d'un entête, une partie pour
les conditions et une partie pour l'action. La partie entête définit le nom de la règle, le paquet
à laquelle la règle est attachée et sa priorité.
La partie des conditions utilise la structure orientée objet de Java pour effectuer le
filtrage sur les instances de classe. Les conditions des règles sont également utilisées pour
tester les valeurs de champ. Cela fournit un mécanisme de filtrage pour les objets. Lorsque la
partie conditionnelle d'une règle est vérifiée, à savoir des objets valides ont été trouvés, la
partie action de la règle peut être exécutée. Les actions peuvent varier du simple au
complexe. La règle dans le langage de règles ILOG a la structure suivante:
rule my Rule {
packet = MyPa cke t;
pri ority = h igh;
when { condi t i ons }
then {actions ... }
L
74
La priorité de la règle détermine l'ordre dans lequel les règles sont exécutées dans une
application. Elle détermine aussi la position d'une règle dans l' agenda. La priorité peut être
un entier ou une expression entière. Si elle n'est pas spécifiée, la valeur 0 est utilisée. Il existe
deux types de priorités, statiques ou dynamiques. Les priorités statiques sont des valeurs
fixes, alors que les priorités dynamiques sont variables en fonction de valeurs déterminées
par l' expression de la règle.
• Priorité statique : une priorité statique peut être utilisée pour modifier la séquence
d'exécution d'une règle parmi d ' autres différentes d'elle. Les priorités statiques sont
des types entiers pour le langage Java. Plus le nombre est élevé, plus la priorité de la
règle est forte . !LOG JRules fournit quatre valeurs de priorité prédéfini (minimum,
bas, haut et maximum).
• Priorité dynamique : une priorité dynamique est utilisée pour modifier l' ordre
d'exécution d' une même règle quand il existe différents instance de règles dans
l'agenda. Les priorités dynamiques sont des expressions dont les valeurs dépendent
d'une variable située dans la partie condition d'une règle.
4.3.3 Agenda
L ' agenda est un endroit dans le moteur d'inférence où on peut mettre en file d'attente
les instances de règles à exécuter. L ' agenda fonctionne selon une stratégie bien définie :
lorsque les conditions d'une règle donnée sont satisfaites et qu'un fait est déclaré dans la
mémoire de travail, la règle est placée dans l'agenda et elle sera exécutée selon sa priorité.
Les critères d' ordonnancement des règle dan 1' agenda sont :
• réfraction : une règle déj à exécutée ne peut être réinsérée dans l'agenda que
s' il y a un nouveau fait qui se produit;
75
• priorité : c'est le deuxième critère qui permet de décider la position que peut
prendre une règle dans 1' agenda;
L'algorithme RETE (Le mot RETE signifie réseau en italien) permet de « filtrer »
les objets de la mémoire de travail pour déterminer les règles éligibles et les instances de
règles d'une manière optimisée. Comme son nom l'indique, le principe est d' utiliser un
réseau prenant comme source les objets de la mémoire de travail pour établir des feuilles
représentant les règles qui seront ajoutées à l' agenda. Le réseau RETE est form é de 5 types
de nœuds : la racine, les nœuds type, les nœuds alpha, le nœud bêta et les feuilles . Le nœud
racine est le point d' entrée de tous les objets. Les nœuds intermédiaires (type, alpha et bêta)
représentent des conditions des règles. Les nœuds alpha servent à faire des tests de filtrage,
ils représentent les littéraux de la partie condition d' une règle. Les nœuds beta sont des
nœuds de jointures. Ces derniers reçoivent comme entrée plusieurs faits et copient en sortant
le résultat de l' opération. Tous les objets, passent alors par ce réseau est subissent des tests à
chaque nœud, Si ces objets arrivent à une feuille du réseau RETE, la règle correspondante est
ajoutée à l' agenda (documentation JRules).
Si on exécute chaque règle su r chaque fait dans l'ordre, Le moteur de règles sera alors
un facteur de ralentissement et non d'amélioration des performances. La sophistication de
l'algorithme RETE permet de gagner du temps grâce à des mécanismes tel que le partage de
76
conditions, où une condition partagée par plusieurs règles peut être évaluée une seule fois
pour toutes les règles.
4.4 Conclusion
5.1 Introduction
L'objectif de ce chapitre est de formaliser et représenter des modèles qui prédisent des
facteurs de qualité tels que le coût d ' une maintenance corrective, la réutilisabilité et la
prédisposition aux fautes pour des nouveaux logiciels. Nous construirons des modèles de
prédiction par l'application de techniques d'apprentissage automatique sur des mesures
d'attributs internes (couplage, cohésion, taille, complexité, etc.) qui sont collectées sur des
applications réelles.
Avant l'implémentation de notre prototype, nous avons conçu son architecture, défini
ses modules, identifier ses utilisateurs potentiels et choisit les technologies adéquates et les
outils efficaces à utiliser.
• Construction d'une base de règles à partir des modèles générés par les algorithmes
d'apprentissage (des fichiers '.ilr' manipulables par le logiciel JRules)
• Prédiction et prise de décision en exécutant les règles (.ilr) sur de nouvelles données
extraites du code source de nouvelles applications
5.3 .1 Java
Java est un langage de programmation orienté objet. Il est conçu pour que les
programmes qui l'utilisent soient fiables sous différents aspects. Java a la particularité d'être
portable sur plusieurs systèmes d'exploitation tels que Windows ou Linux. L'interpréteur
Java peut exécuter les bytecode directement sur n'importe quelle machine sur laquelle il a été
porté. Sa bibliothèque d'exécution est indépendante de la plateforme.
5.3.2 Éclipse
Eclipse est un environnement de développement intégré qui est utilisé pour créer
diverses applications. C'est un logiciel libre «open source ». Il fournit un Framework basé sur
les plug-ins; Le Framework facilite la création, l'intégration et l'utilisation d'outils logiciels.
Sous Eclipse, nous avons développé notre plateforme intégrant les deux logiciels Weka et
JRules. Nous avons pu aussi concevoir et implémenter les différentes interfaces graphiques à
l'aide de l'éditeur visuel d' Eclipse. Dû au fait qu'Eclipse est basé sur une architecture ouverte
et un modèle de plug-ins, nous le considérons comme le meilleur outil pour implémenter
notre prototype.
79
Le diagramme des cas d'utilisation décrit ci-dessous nous donne une vision globale
du comportement fonctionnel de notre prototype. Nous allons décrire toutes les
fonctionnalités ainsi que les acteurs (les utilisateurs) de notre système.
0
créer un fichier arff
0
"'"' "'"'1 valider/modifier un modèle prédictif
0
apprendre un modèle prédictif
0
consultation d'une bas e de
conn aiss ance
Les utilisateurs de notre système d ' aide à la décision sont regroupés en deux
catégories : les débutants qui sont des utilisateurs novices et inexpérimentés dans le domaine
du génie logiciel, et nous avons aussi les experts qui ont la capacité, du fait de leur
expérience, d'exprimer des jugements pertinents dans certaines situations.
Un expert peut lui aussi solliciter toutes ces tâches avec la poss ibilité de créer et
modifier les bases de connaissance (ajouter, supprimer ou modifier une condition dans une
règle, etc.) afin de valider un modèle. Toutes les fonctionnalités de notre outil sont résumées
dans le diagramme de cas d'utilisation suivant:
Le logiciel Weka, comme vu dans le chapitre 4, ne manipule que des fichiers au format
arff. Quant à JRules, lors de l'exécution d ' une base de règles, il analyse les objets présents
81
dans sa mémoire de travail. Ces objets sont des instances de classes Java ; on doit
donc créer nos fichier arff et nos classes Java avant l'exécution de tels scénarios.
5.5 Expérimentation
Dans le menu Java, nous avons un item qui s'appelle 'Classe java' qui nous permet
de créer une classe java.
Dans le menu Weka, nous avons deux items qui sont: ' Fichier arff' pour créer un
fichier ' arff' et 'Apprentissage' pour faire l'apprentissage en utilisant les fonctionnalités de
Weka.
Dans le menu JRules, nous avons aussi deux items : « Débutant » et « expert ». Le
premier permet à un débutant en conception en génie logiciel de consulter une base de
connaissances et le second permet à un expert de consulter ou de modifier une base de
connaissances.
Le dernier menu est celui du 'decision engine' . Il contient lui aussi deux items : le
premier nous sert à importer de nouveaux objets d' une application à analyser (par exemple
des classes pour lesquelles nous voulons faire une prédiction). Le second nous permet donc
d' exécuter les modèles de prédiction à l'aide du moteur JRules.
Les données, sur lesquelles nous avons travaillé, ont été collectées du système multi-
agents LALO (Language d'Agents Logiciel Objets), système développé et maintenu depuis
1993 au CRIM (Centre de Recherche Informatique de Montréal). Ce système est composé de
84 classes en C++ et dont la taille est de 47 K lignes de code. Deux outils ont été utilisés pour
extraire les mesures à savoir QMOOD et GEN++. Les mesures sont dérivées de l'analyse
statique du système LALO (seules les classes développées sont considérées).
Pour définir le niveau de réutilisabilité d' un composant logiciel, une classification a été
proposée par les développeurs spécialistes dans le domaine des systèmes multiagents :
• Réutilisable avec de grands changements : plus de 25% de code source doit subir des
changements pour que le composant logiciel soit réuti lisable; nommée c/asse3.
• Non réutilisable : composants ne pouvant pas être réutil isés. Ils sont spécifiques à
l'application; désignée par classe4.
Toutes les données que nous avons sont sur des fichiers Excel. À l'aide de notre outil,
l' utilisateur, soit un expert, soit un débutant, peut convertir un fichier Excel en un fich ier arff.
Les transformations consistent à :
84
• Écrire Je contenu des cellules situées dans la même ligne dans le fichier Excel, sur
une même ligne dans le fichier arff en séparant les valeurs par des virgules.
Voici un exemple de fichier de données sous Je format ' .arff tel que créé par notre outil et
qui correspond à la 1ère hypothèse Hypothèse-COMP-REUT.
85
1
Conversion en arff
Visualisation
1 @relation twpothèse_ Com p_Réu
@attribute N O M real
@attribute RFC real
: @attribute CIS real
1 @attribute NOT real
@attribute NOP real
@attribute NOD real
@attribute NAD real
@attribute NR.A. real
@attribute NP.A. real
@attribute NO O real
@attribute 1\JPM real
@attribute CSB real
1 @attribute Reusab ility {classe1, classe2, c lasse3, c la sse 4}
@data
7, 12, 7, 2, 0, 3, 3 , 0, 0, 1, 0 .71, 88, classe 4
7, 13, 7 , 1, 0, 1 , 1 , 0, 0, 1, 0 .57, 76, classe4
Le moteur ILOG JRules exécute une base de règles sur des objets . Ces objets sont
des nouveaux composants dont nous désirons prédire le niveau de réutilisabilité dans le futur.
La première étape pour pouvoir m_anipuler ces objets (composants logiciels) est de
créer une classe Java qui sert à décrire ces objets, c'est-à-dire, définir la structure d'un objet.
Cette définition avec Java se fait de la manière suivante : déclaration des données membres et
déclaration des méthodes. Les données membres permettent de conserver des informations
relatives à la classe, tandis que les méthodes représentent les traitements qu'il est possible de
réaliser avec les objets instanciés de la classe.
86
Nous exploitons le fichier 'arff pour créer la classe correspondante à l' hypothèse
Hypothèse-COMP-REUT. L'utilisateur (débutant ou expert) commence par importer le
fichier arff pour prendre les noms des attributs, il saisit ensuite le nom du package où le
programme s'exécute. Il saisit aussi le nom de la classe et a la possibilité d 'ajouter ou de
supprimer des attributs. Enfin, il appuie sur le bouton 'Create Java class'. Le résultat de
l'exécution est dans la figure suivante:
87
-• w~~ •w~ -~""-w ~~-~~• --"-""'" ~~~~ ·-~·~""'-~-w~~w"~-~~-~ -w..,..,-.. • - - " - ~-··--~~ - -~--·
''PO_Cmp_RE.a~
' package SAD; 1~
1 open public class Campo s ani{
! : ·~.·--~--~111~--,,----------------------07,~1-~~
save
Une des fonctionnalités les plus importantes de notre outil est l'apprentissage; il nous
permet de construire les modèles prédictifs.
Avant d'aborder la présentation des résultats, nous définissons le mode de test utilisé
lors de l'apprentissage et les critères d' évaluation des modèles. L'application des algorithmes
88
d' apprentissage sur les bases de données est accomplie en mode validation croisée stratifiée
10-fold. Nous avons choisi ce mode pour deux raisons :
• Ce mode d'expérimentation est adéquat pour les bases de données de petite taille
puisque la base de données que nous exploitons contient seulement 83 objets.
• La validation croisée permet de générer des résultats pertinents.
Notre prototype permet de faire la tache de l'apprentissage avec trois algorithmes qui
sont déjà décrits dans le chapitre 4: Part, ConjunctiveRule et JRIP.
Nous présentons, dans cette section, les résultats de l'application de l' algorithme Part. Cet
algorithme permet de produire des règles par la génération itérative d' arbres de décision. Les
résultats sont des règles de la forme (condition et action) accompagnées d' un couple de
nombres écrits entre parenthèses.
Le modèle de classification généré par 1' algorithme Part consiste en 11 règles, 10 règles
explicites et l règle par défaut. Ces règles sont :
NPM > O. 77 AND NAD <= 3 AND CSB <= 324 AND CSB > 4: classe4 (2 7. 0/2.0)
N OP > 5 AND NPA < = 1 AND NPA < = 0 AND NOT <= 4 AND NOP < = 7: classe ] (3.0/ 1.0)
NOT <= 8 AND CSB > 16 AND NOP > 0 AND NAD <= 3 AND NAD > 0: classe3 (16.0/ 1.0)
89
NOP <= 5 ANDCIS < = 12 AND NRA <= 0: classe4 (9.0/ 1.0)
: classe] (2.0)
Une fois le modèle de classification induit par Part, l'étape suivante consiste à évaluer ce
modèle afin de déterminer son efficacité prédictive. Un modèle possédant une bonne
efficacité prédictive implique que les métriques utilisées sont pertinentes pour identifier les
classes ou les composantes logicielles susceptibles d' être réutilisés dans le futur. Pour
connaitre la cohérence et la complétude d'un modèle, il faut calculer le pourcentage
d' efficacité de chacune de ces règles.
Au sein d 'un tel scénario, un expert en génie logiciel qui a une bonne expérience peut
soumettre des propositions afin de modifier la structure d ' une règle.
Voilà le résultat de notre outil lors de 1' apprentissage avec 1' algorithme Part.
90
N OO <= 6AND
RFC <= 11 AND
N OT <= 3: c l asse2 ( 5 .0)
save rul es
1 1
Nous avons choisi d'implémenter les règles en uti lisant ILOG JRules. Ce dernier
permet une exécution rapide même pour un nombre élevé de règles. Ainsi, les règles
produites par les algorithmes d' apprentissage devront être transformé en règles exécutables
avec JRules. Comme c'est mentionné dans le chapitre précédent, les règles de JRules ont une
syntaxe très semblable du code Java. Nous commencons d' abord par donner à chacune des
règles une priorité, et cette dernière sera calculée de la façon suivante : les nombres écrits
entre parenthèse dan s une règle produite par apprentissage et qui représentent le nombre
91
Dans JRules, la priorité d'une règle doit être un entier. Puisque cette formule nous
donne des réels (des pourcentages), alors nous devons transformer ces résultats en des entiers
et attribuer un nombre entier comme priorité pour chaque règle. La règle qui a le pourcentage
le plus élevé doit avoir la priorité la plus grande et les règles qui ont le même pourcentage
auront la même priorité. Si par exemple, nous avons 4 règles avec des pourcentages
différentes (100 %,100%, 89.99 %, 50%), alors la première et la deuxième règle auront la
plus grande priorité qui est 3, la troisième aura la priorité 2 et la dernière aura la priorité 1.
Lors de l'exécution, le moteur JRules commence par exécuter la règle qui a la plus grande
priorité. Voici un exemple de transformation d'une règle Weka en une règle JRules:
rule règle2{
priority= /* 100.0*/5
NOT <= 8 AND CIS > 16: classe2 (7.0) when { ?a :Composant (NOTO <= 8 ; CISO >16 ); ) then { modify ?a {
=) Type=' classe2 ";} );
L'interface de l' apprentissage nous permet de faire cette transformation automatique. Comme
les règles JRules manipulent des objets, nous avons donc besoin d' importer la classe Java qui
correspond à ces objets. Nous appuyons, alors, sur le bouton ' Transform' pour visualiser ces
transformations. Le résultat va être des règles telles que codées en JRules. Elles seront aussi
organisées selon leurs priorités. La première aura la plus haute priorité et la dernière aura la
plus petite priorité. La règle aura 4 parties : Le nom, la priorité, les conditions et l'action. La
92
dernière étape est de sauvegarder notre base de règles dans un fich ier d'extension '. ilr', le
format spécial de JRu les.
' Transform
1 1
Résuttats
ru le rè gle1 -: ~
t-
priority= r-1 00 0*1 5 ;
w h en { ? a :Compos a nt (NOTO > 8 ; NPM O > 0 .67 ) ; ) th en { modift ? a {Type=" c l as s e 4 ' ;
Sys tem .out.println('\ n");System .out.printl n('Règle numero 1 : le ni\'eau de la ré u tili s ation e s t c e" + ? ""'
rul e règl e2-: t-
priority= r--1 00 0*1 5 ;
w h en { ? a :C om p o sa nt (NOTO «= 8 ; C IS O > 16 ) ; ) th en { m odify ?a { T ype= " c la s s e2 ";
Sys te m .out.println('\n") ;Sy stem .out.println('Règle numero 2 : le n i\'ea u de la réutili sati on est c e" + ?
rule règle3-:
priorlty= F 1 00 0*1 5 ;
wh en { ? a :Compo sa nt (N O O O «= 6 ; RF CO «= 11 ; N OT O «= 3 ) ; } th en { m o dify ? a {Typ e=" cl a s
Sys tem .out.printl n ('\n"); System .out.println('Règle numero 3 : le ni\'ea u de la réuti li sation est c e"+ ?
ru le rè g le4:
priority= F 1 00 0*1 5 ;
Mhcn ?~ · r- n,-,nn<>~nt f"-IAn" - ?. "-J("'IM" •1 n \ · 1 thon mn.-<;<, , ?~ T'm c ~" 1<> ., <>01 • .
ç
~ Ill •
~a.iè. mle~J
1 1
Nous décrivons dans cette section deux autres fonctionnalités offertes par notre outil
que nous trouvons dan s le menu 'JRules ' . Ce Menu contient deux items, le premier concerne
un nouvel utilisateur que nous avons appelé débutant, et le second concerne un expert dans le
domaine. Un débutant ne peut que consulter une base de connaissances (règles). Par contre
93
\iisuaUzel
rule règle1 {
' ....
1-
priority= r-1 00 .0*1 5 ;
wh en {?a :Composant (NOTO >8; NPMO >C .67 ); } th en { modify ?a {Type= " clas s e4
System .out.println('\n");System.out.println('Règle numero 1: le niveau de la réutilisation -
rule règle2{ t-
priority= r-1 00.0*1 5 ;
whe n {?a :Composant (NOTO «= 8; CISO > 16 ); } then { modify ?a { Type=" classe2"
System .out.p rintln ('l.n");System.o ut.println('Règle numero 2: le nivea u de la réutili s ation
rule règle3{
priority= r-1 00 .0*1 5 ;
w h en { ?a :Composant (1-.JOOO «= 6 ; RFCO ~= 11 ; NOTO «= 3 ); } th en { modify ?a {
System .out.println('\n");System .out.println('Règle numero 3: le niveau de la réutilisation
rule règle4{
priority= r-1 00.0*1 5; ...
1-
~ 1 Ill 1 1~
Quitter
~
' '~
' "' ' " - '' -
'"
rule règle2{
priority= 1*1 00 .0*1 5 ; f-
wh en { ?a :Com posant (NOTO «= 8 ; C ISO >16 ) ; } th en { modify ?a {Type= " cla ss e2'
System.out.println ('\n");Sys tem .out.println\'Règle numero 2: le niveau de la réutili s atior
rule règ le 3{
prioritv= 1*1 00 .0*1 5 ;
w h en { ?a :C omposant (1\J OOO «= 6 ; RFCO <= 11 ; NOTO <= 3 ); } th en { modify ?a {
System .out.println\'\n");Syst em .out.println('Règ le numero 3: le niveau de ra réutilisatior
rule règle4{
priority= 1*1 00 .0*1 5 ;
when { ?a :Composant (NADO <= 2 ; NOMO > 1 o ); }th en { modify ?a { Type=" crasse1 ·-
.....
-
~ 1 IH 1 1~
save
1 1
Figure 5.9 Consultation et/ou modification d' une base de connaissances par un
expert
Un expert peut ajouter ou supprimer une cond ition dans une règle, il peut aussi changer
l'action d' une règle ou même sa priorité. Dans cet exemple, à l'aide de cette interface,
l'expert peut ajouter, par exemple, une condition à la 1ère règle (figure 5.9).
rule règle] {
priority= 5 ;
Un expert voit que si on ajoute la condition ' CSB>20' à cette règle, elle devient plus
pertinente, il peut aussi changer la priorité de règle, donc cette dernière passe de priorité 5 à
priorité 1.
rule règle1{
priority= 1 ,·
then {modify? a{Type = "c/asse4 ",· System. out.println("\n '') ,·System. out.println("Règle numero
1: le niveau de la réutilisabilité de l'objet " + ?a.nameObjetO + " appartient à " +
?a. TypeQ),}} } ;
À la fin d' une telle consultation ou modification, l'expert peut sauvegarder la nouvelle règle.
5.5.6 La prédiction
La fonctionnalité principale de notre outil est la prédiction. Cette tâche peut être faite
soit par un débutant ou par 11n expert. La prédiction d'un facteur de qualité d' un composant
logiciel ou d' une classe d' un code source est le fait de lui attribuer une classification.
L'utilité d'un modèle de prédiction est multiple. Dans le cas de la maintenance
préventive, il peut déterminer quelles classes doivent être réécrites et de quelle façon. II peut
être utilisé aussi pour déterminer quelle classe est susceptible d' engendrer des fautes . Dans le
cadre de notre expérimentation, notre but est d'identifier les composants potentiellement
réutilisables dans une application future. Nous allons alors exploiter les bases de
connaissances que nous avons générées lors de l' apprentissage pour faire la prédiction.
Nous devons, d' abord, préparer le format des objets à prédire. Chaque objet (ex., une classe
ou un composant) possède la même structure : un ensemble de paires attribut-valeur. Ces
paires sont les différentes mesures de métriques associées à la taille et à la complexité.
96
Dans un environnement normal de travail, les objets Java doivent être initialisés et stocker
dans la mémoire de travail du moteur ILOG JRules; nous utilisons alors, l'action 'assert'. Si
par exemple, nous voulons insérer dans la mémoire de travail une classe de nom 'C 1',
l'instruction est la suivante:
Assert classe (Cl, ml, m2, m3, m4, mS , ... ) ; où ml, m2, m3, ... sont les mesures de
métriques associées à cette classe par rapport à un attribut interne de qualité (couplage,
héritage, complexité, taille).
Chaque règle dans ILOG JRules est écrite dans un fichier de règles. Ce fichier est d' extension
' .ilr'. En voici un exemple :
import Package . *;
import java.util. * ;
setup
{
assert Classe ("Cl", ml, m2, m3, ... , mn);
assert Classe ("C2", ml, m2, m3 , .. . , mn);
97
};
rule règlel {... .. . ..};
rule règle2{ ........ };
rule règle3{ .. ......};
Les objets à prédire nous sont fournis dans un fichier Excel. Nous devons convertir Je
contenu de ce fichier en des instructions JRules spécifiques au fichier ' .ilr' afin de les insérer
automatiquement en phase de prédiction dans la mémoire de travail de JRules.
La figure ci-dessous montre les résultats de conversion des données du fichier Excel
vers JRules.
1!! Système d"aide à la décision pour la conception en GL ~§ŒJ
Java W'eka JRules Decision engine
-
setup 1.=:.
assert Co mpo s ant ("Agenda" , 12. 54 , 12, 1, 2, 2, 2 , 1, 0, 2 , 0 . 83 , 80) ;
Figure 5.11 Exemple d'un ensemble d'obj ets à insérer dans la mémoire de travail
de JRules
98
Classes à Prêdire as sert Composant ('Agenda', 12, 54, 12, 1, 2, 2, 2, 1, 0, 2, 0.83, 80) ;
~ssert Composant ('Argsser, 15, 26, 15, 2, o,2, 1, 1, 0, 4, 0.87, 8) ;
lmport Ruleset assert Composant ï BasicAgen!', 31, 92, 16, 17, 12, 13, 3, 6, 0, 1, 0.71, 268) ;
assert Composant ("BeliefAction', 14, 24, 14, 6, 5, 3, 3, 0,1, 4, 0.71, 96):
);
rule règle!{
priority= 1'1 000'1 5;
when {?a :Composant (NOTO >8; NPMO >0.67 ); ) then { mod i~ ?a{Type= ' classe4 ';
System.outprintln('\n");System.outprintln('Règle numero 1: le niveau de la réutilisabilité d
rule règle2{
priority= 1"1 oo.o•t 5:
wh en (?a Composant (NOTO •= 8; CISO >16); ) then ( modi~ ?a(Type=" classe2 ';
save System.out.println('\n');System.out.prinlln('Règte numero 2: le niveau de la réutilisabilité d
Le ' rule set' contient 4 objets à prédire et 11 règles à exécuter. Les règles sont:
rule règle! {
priority= /*100.0*/ 5;
when { ?a :Composant (NOT() >8 ; NPM() >0.67 ); } then { modify ?a { Type= " classe4 ";
} };
rule règle2{
priority= /* 100.0*/ 5 ;
when { ?a :Composant (NOT() <= 8 ; CIS() > 16 ); } then { modify ?a { Type= " classe2 ";}
};
rule règle3 {
priority= /*100 .0*/ 5 ;
when { ?a :Composant (NOO() <= 6 ; RFC() <= Il ; NOT() <= 3 ); } then { modify ?a {
Type=" classe2 "; } };
rule règle4{
priority= / * 100.0*/ 5 ;
when { ?a :Composant (NAD() <= 2 ; NOM() > 10 ); } then { modify ?a { Type= " classe!
";} } ;
ru le règleS{
priority= / *100.0*/ 5;
when { ?a :Composant (NPM() <= 0.7 ); } then { modify ?a { Type= " classe2 "; } };
r ule règle6{
priority= /* 100.0*/ 5;
101
rule règle7 {
priority= /*94.117645*/ 4;
when { ?a :Composant (NOT() <= 8 ; CSB() > 16 ; NOP() >0 ; NAD() <= 3 ; NAD() >0 );
} th en { mod ify ?a { Type= " classe3 ";} };
rule règle8 {
priority= /*93.1 0345*/ 3 ;
when { ?a :Composant (NPM() >0. 77 ; NAD() <= 3 ; CSB() <= 324 ; CSB() >4 ); } then {
modify ?a {Type=" classe4 "; } };
rule règle9 {
priority= /* 90.0*/ 2 ;
when { ?a :Composant (NOP() <= 5 ; CIS() <= 12 ; NRA() <= 0 ); } then { modify ?a {
Type= " classe4 "; } };
rule règlelO{
priority= /*80.0*/ 1 ;
wh en { ?a :Composant (NRA() > 1 ); } then { modify ?a { Type= " classe4 "; } };
rulerègle11 {
priority= /*75.0*/ 0;
when {?a :Composant (NOP() >5 ; NPA() <= 1 ; NPA() <= 0; NOT() <= 4; NOP() <= 7
); } then { modify ?a { Type=" classe! "; } };
Les règles seront exécutées selon leurs priorités. Ils sont identifiés par des numéros.
La règle numéro 6 est la règle par défaut. Les règles numéro 1, 2, 3, 4 et 5 possèdent la plus
grande priorité et la règle numéro 11 a la plus faible priorité.
102
~
Classe] Classe2 Classe3 Classe4
t
Agenda R4 R6 /R7 R8
ArgsSet R4 R6 R8
BasicAgent Rl/R10
BeliefAction R6/ R7
C ' est dans cette activité que les connaissances et les modèles de prédiction sont
validées et vérifiées. Il est très important d' exécuter différents tests afin de valider les
éléments de la base de connaissance. Pour ce faire, les résultats de tests et d' exécutions faites
précédemment seront présentés aux experts pour en vérifier la précision . L' expert est le
mieux placé pour valider ces résultats. À vrai dire, un expert pourrait éliminer, par exemple,
la règle par défaut numéro 6, car elle est trop générale et inutile. Il pourrait aussi examiner les
autres règles en les modifiant, soit en ajoutant un ou plusieurs tests à la condition de la règle,
soit aussi en supprimant un. Tout ça dépend de son niveau d' expertise et de ses
connaissances. L ' expert est le seul uti lisateur qui a le droit de faire ces amélioration s et ces
mises à j our aux modèles de prédiction. Il utilise pour cela le «le bon sens » et 1' intuition afin
104
de prendre une telle décision et valider un modèle de prédiction. Le but est d'obtenir des
modèles plus performants et plus précis pour l'estimation de la qualité.
5.6 Conclusion
Notre outil nous permet de vérifier certaines hypothèses portant sur l'existence de
relations entre les facteurs de qualité dont la réutilisabilité, la propension à engendrer des
erreurs et la maintenabilité d' une part, et les attributs internes que sont : l'héritage, la
cohésion, le couplage, la taille et la complexité, d'autre part.
• la qualité d'un produit logidel qui représente le cadre général de notre mémoire,
• les techniques d'apprentissage automatique et la capitalisation des connaissances,
• l'estimation et la prédiction de la qualité.
Nous avons commencé à décrire la qualité du produit logiciel par la définition des
concepts de base tels que les facteurs de qualité, les attributs internes et externes ainsi que les
métriques liées à chaque attribut interne de qualité. En deuxième lieu, nous avons effectué
une étude sur les méthodes de ges1ion et d'acquisition des connaissances en génie logiciel.
Nous avons abordé l'apprentissage automatique et en particulier l'apprentissage des règles
qui représente une approche efficace permettant de créer de nouveaux modèles prédictifs et
de découvrir de nouvelles connaissances. Enfin, l' accent a été mis sur le concept de
106
prédiction et de prise de décision qui est la base de ce mémoire. À l'aide d'un moteur
d'inférence et de règles, les utilisateurs peuvent détecter les problèmes liés aux composants
logiciels, prédire la qualité et prendre des décisions sur la conception et sur le choix de
développement.
Nous avons, alors, développé une plateforme d' un système d' aide à la décision
regroupant les fonctionnalités de Weka et JRules. Nous avons implémenté les différentes
interfaces à l' aide d' Éclipse. Plusieurs tâches peuvent être réalisées à l'aide de notre
prototype telles que: convertir un fichier 'Excel' en un fichier ' arff , l'apprentissage pour
deux types d'utilisateurs (expert et débutant), la création, la consultation et la mise à jour
d'une base de connaissances (règles) et la prédiction en exécutant sur de nouvelles données
les modèles générés par l' apprentissage.
Afin d'améliorer ce travail, nous proposons notamment d' ajouter les fonctionnalités
suivantes à notre prototype:
Abdel-Ghaly A.A., Chan P.Y. et Littlewood B., (1986). Evaluation of competing software
reliability predictions. IEEE Transactions on Software Engineering, vol 12, p.950-967.
Abdi M.K. , Lounis H. et Sahraoui H., (2006). Analyzing Change Impact in Object-Oriented
Systems.
Abdi M. K., Lounis H. et Sahraoui H., (2009). Predicting Change Impact in Object-Oriented
Applications with Bayesian Networks
Abreu, Fernando B. et Rogério C., (1994). Candidate Metrics for Object- Oriented Software
within a Taxonomy Framework. Journal of Systems and Software, North-Rolland,
Elsevier Science, vo l 26, p. 87-96.
Almeida M., Lounis H. et Melo W. L., (1999). An Investigation on the Use of Machine
Learned Models for Estimating Software correctability. International Journal of
Software Engineeri ng and Knowledge Engineering.
Almeida M.A., Lounis H. et Melo W.L., (1998). An Investigation on the Use of Machine
Learned Models for Estimating Correction Costs.
Bailly C., Challine J.F., Gloess P.Y., Ferri H.C. et Marchesin B., (1987). Les langages
orientés objet. concepts, Langages et Applications, Cepadues édition.
Barbara K. , (1996) Software quality: the e/usive Target, national Computing Centre, Shari
Lawrence Pfleeger, Systems/Softaware, Inc, vol 13, p. 12-21.
Bell D., Morrey 1. et Pugh J., (1992). Software Engineering: A Programming Approach,
Prentice Hall Publisher.
110
Boukadoum M ., Sahraoui H. et Lounis H., (200 1). Machin e Learning Approach to Predict
Software Evolvability using Fuzzy Binary Trees. In Proc. of Internatinal Conference on
Artificial Intelligence.
Breiman L., Friedman J., Olshen R. et Stone C., (1984). Classification and Regression Tree,
California: Wadsworth International.
Briand L.C., Wüst J., Ikonomovski S. et Lounis H., (1999). Investigating Quality Factors in
Object-Oriented Designs: an Industrial Case Study.
Chidamber S., Kemerer C., (1994). A metric suite for abject oriented design. IEEE
Transactions on software engineering, vol20, p. 476-493 .
Clark, Peter et Robin B., (1991). Rule Induction with CN2: Sorne Recent Improvement. p.
151-163 .
Clark, Peter et Tim N, ( 1988). The CN2 Induction Algorithm. Machine Learning Journal, p.
261 - 283.
111
Ermine, J.L., (2001). Ingénierie et capitalisation des connaissances. Paris: Hernèse: science
publication : chapitre 4, p. 65-102.
Ermine, J.L., (2003). La gestion des connaissances. Paris: Herme science: Lavoisier, p.
166.
Fenton N. et Pfleeger S., (1997). Software Metrics A rigorous & Practical Approach.
London: Cmabridge Unversity Press, Cambridge.
Frank E. et Witten J.H., (1998). Generating Accurate Rule Sets Without Global Optimization.
In Shavlik, J., ed., Machine Leaming: Proceedings of the Fifteenth International
Conference, Morgan Kaufmann Publishers, San Francisco, CA.
Gillies A.C., (1992) software quality, theory and management, chapman & hall, p. 19-40.
ISO/IEC 9126-1 (2001) Software engineering --Product quality --Part 1: Quality madel.
International Organization for Standardization, International Electrotec 1mi cal
Commission.
ISO/IEC TR 9126-4 (2004) Software engineering --Product quality --Part 4: Quality in use
metrics. International Organization for Standardization, International Electrotechnical
Commission.
112
Jacquet J.P. et Abrao A., (1997), From Software Metrics to Software Measurement Methods:
A Process Mode!. Third International Symposium and Forum on Software Engineering
Standards, Walnut Creek.
Lee Y.S., Liang B.S., Wu S.F. et Wang F.J., (1995). Measuring the Coupling and Cohesion
of an Object Oriented Program Based on Information Flow. In Proceedings of
Internationnal conference on Software Quality,Maribor, Slovenia.
Li W. et Henry S., (1993). Maintenance metrics for the abject oriented paradigm. In
Proceedings of the First International Software Metrics Symposium. p. 52-60.
Baltimore, Maryland.
Li W. et Henry S., (1993). Object oriented metrics that predicts maintainability. System and
Software,
Lorenz M. et Kidd J., (1994). Object-oriented software metrics: a practical guide. États-
Unis: Englewood Cliffs, N.J.: PTR Prentice Hall, A Pearson Education Company. p.
146.
Lounis H., Abdi M.K. et Sahraoui H., (2009). Predicting Maintainability expressed as
Change Impact with Machine-Learning techniques.
Lounis H., Abdi M.K. et Sahraoui H., (2009). Inducing Knowledge for Change Impact
Analysis.
Lounis H., Ait-Mahiedine L., (2004). Machine Learning-Based Quality Predictive Models:
Towards an Artificial Intelligence Decision Making System.
Lounis H., Sahraoui H. et walcelio L., ( 1998). Vers un modèle de prédiction de la qualité du
logiciel pour les systèmes à objets.
Mao Y., ( 1998), A me tric based detection of reusable object-oriented software components
using machine learning algorithm, Masterthesis, Mc Gill University, Montreal.
McCall J.A., Richards P.K. et Walters G.F., (1977). Factors in software quality. Technical
report, US Rome Air Development Center Reports.
Michalski R.S., (1969). On the Quasi-Minimal Solution of the General Covering Problem,
Proceedings of the V International Symposium on lnformatoon Processing (FCIP 69),
Vol. A3 (Switching Circuits), Bled, Yugoslavia, p.125-128
Milicic D., (2005) Software quality attributes and trade-o.ffs, chapter 1 -Software Quality
Models and Philosophies.
Mitchell T.M., Carbonell J.G. et Michalski R.S .. (1986). Machine learnin: A Guide to current
Research. Kluwer Academie Publishers .p.194.
Paul E.U., (1989). Incrementa! Induction of Decision Trees. Journal Machine Learning, vol4 ,
p. 161-186
Paul M.E., (2001). Knowledge Management in software Engineering, A State of the Art
Report.
Pressman et Roger S., (1997). Software engineering: a practitioner's approach. 4th ed.
Édition New York, N.Y.: McGraw-Hill.
Pressman et Roger S., (2004). Software Engineering: A Practitioner's Approach, 6th ed. New
York, NY, USA: McGraw-Hill, p. 880.
Quinlan J.R. et Cameron-Jones R.M ., (1993). FOIL: A midterm report. In proceedings of the
European Conference on Machine Learning, p. 3-20.
Quinlan J.R, (1993), C4.5: Programs for Machine Learning, Morgan Kaufmann (Ed.). p.
302.
Scott A., (1998). A Realistic Look at Object-Oriented Reuse. Journal Software Development,
vol6, p. 30-38,
William W.C., (1995). Fast effective rule induction. In: twelfth international conference on
machine learning, vol3 , p. 115-123.
Yazid H. et Lounis H., (2006). Exploring an Open Source Data Mining Environment for
Software Product Quality Decision Making.