Mesure de la structure du système GEF492A 2014 Référence: [HvV §12.1.5] Capt Vincent Roberge Collège Militaire Royal du Canada Génie électrique et génie informatique roberge.segfaults.net PPL22-MesureStructureSysteme.pdf
Aperçu Structure du système Graphe d'appels Flux d'information 2 Automne 2014GEF492
Qualité de conception Qualité du produit L’habileté à maintenir et la réutilisation sont fonction de la qualité du produit Les aspects de la qualité de la conception incluent: complexité basée sur la grandeur et la structure (dernière séance) structure du système dépendances entre modules (séance d'aujourd'hui) abstraction procédurale – de données – de contrôle modularité cohésion et couplage masquage d’information 3 Automne 2014GEF492 (discutés lors de mesures OO)
Structure du système On peut imaginer la structure du système comme l'ensemble de modules, ainsi que les relations entre ceux-ci, qui forment l'entité logicielle Est-ce que le module A contient le module B? Est-ce que le module A précédé le module B lors de l'exécution? Est-ce que le module A passe données / contrôle au module B? Est-ce que le module A utilise le module B? Afin de minimiser la complexité du système, notre intuition nous pousse à limiter l'information qu'un module doit maintenir vis-à-vis les autres On minimise les relations d'usage et on les garde locales Organisation des dépendances (hiérarchies ou grappes) 4 Automne 2014GEF492
Exemple System - Gagnants † 5 Automne 2014GEF492 ChoisitGagnant () Tri(A) Permute(a,b) Stock(s) ObtientGrandeur( A) trit(tableau) stock(a) permute(x,y)obtientGrandeur(A) stock(gagnant) † Pourrait être un système procédural ou orienté objet
Graphes d'appel On définit un graph d'appel comme étant un graph qui représente les relations d'utilisation (use-relationship) entre modules où: Les modules sont représentés par les nœuds du graphe Appels procéduraux (utilisations) sont représenté par des arcs Exemple (Gagnant) 6 Automne 2014GEF492 AB D C E Ex
Impuretés de graphes d'appels (1) Les cycles dans un graphe représentent des dépendances cycliques, qui diminuent la qualité du design Un graphe d'appels est idéalement acyclique Un graphe acyclique peut être représenté à l'aide d'une hiérarchie Exemple (Gagnants) 7 Automne 2014GEF492 A B D C E Ex
Impuretés de graphes d'appels (2) Faire appel au travers de plusieurs niveaux de la hiérarchie créé souvent de la confusion entre les niveaux d'abstraction et diminue également la qualité du design Idéalement, le graph devrait être strictement hiérarchique Exemple (Gagnant) 8 Automne 2014GEF492 A B D C E Ex
Impuretés de graphes d'appels (3) Dans la situation la plus pure, chaque module est utilisé par un et un seul module Le graphe idéal est donc un arbre Exemple (Gagnant modifié) 9 Automne 2014GEF492 A B D†D† C E † D stocke maintenant ses variables locales à l'interne, de façon temporaire Ex
Mesurer l'impureté du graphe (1) Bien que la structure en arbre soit idéale du point de vue de la structure, celle-ci n'est pas toujours réaliste, ou même désirée. Ceci nous donne par contre un jalon pour mesurer la structure du système. Alors, étant donné un graphe G avec n nœuds et e arcs, on définit l'impureté de l'arbre m(G) comme le nombre d'arcs supplémentaires divisé par le nombre maximum d'arcs supplémentaires m(G) = (e - e arbre )/(e max - e arbre ) = 2 (e-n+1)/ (n-1)(n-2) théorèmese max = n(n-1)/2 {arcs maximum du graphe} e arbre = (n-1) {arrêtes dans un arbre} 10 Automne 2014GEF492
Mesurer l'impureté du graphe (2) Exemple 1 (Gagnant): n = 5, e = 5 m(G) = 2 (e-n+1)/ (n-1)(n-2) = 2/12 = 1/6 notez que e max = n(n-1)/2 = 10 e arbre = (n-1) = 4 Ete extra = e - e arbre = 1 e max_extra = e max - e arbre = 6 Exemple 2 (Gagnant modifié): n = 5, e = e arbre = 4 {un arbre} m(G) = 0 Exemple 3 (Perdant): n = 5, e = e max = 10 {tout un dégât} m(G) = 1 11 Automne 2014GEF492
Mesure des flux d'information (1) Rappelons-nous qu'il n'est pas toujours désirable de représenter tous les systèmes avec une belle structure hiérarchique Ce qu'on recherche est la minimisation des dépendances intermodules, où les dépendances sont des flux d'information, et non uniquement des appels procéduraux On a besoin d'une mesure qui compte non seulement les arcs du graphe, mais également le flux d'information qui y circule Les flux de données peuvent être directs (flux locaux) Passé d'un module à un autre Ou indirect (flux globaux) Passé au travers d'une structure de donnée globale 12 Automne 2014GEF492
Mesure de flux d'information (2) Définitions Un flux local existe du module A au module B si: - A invoque B et lui passe un paramètre, où - B invoque A et A retourne une valeur Un flux global existe du module A au module B si: - A fait la mise à jour d'une structure de donnée globale, et - B récupère cette structure de donnée et L'entrance est le nombre de flux entrant M La sortance est le nombre de flux sortant de M 13 Automne 2014GEF492
Mesure de flux d'information (3) Définissons également complexité(M) = (entrance(M) * sortance(M)) 2 Interprétations un module avec grande entrance a probablement une faible cohésion dans une structure hiérarchique, une hausse dans le flux d'information d'un niveau à un autre démontre probablement un niveau d'abstraction manquant Limites chaque flux est traité de façon égale, peut importe la complexité ne convient pas bien aux structures orientées objet 14 Automne 2014GEF492
MESURES ORIENTÉES OBJET Prochaine séance: Automne 2014GEF492 15