IFT3913
Qualité du logiciel et métriques
Chapitre 7
Mesure du produit logiciel
2
Plan du cours
Introduction
Modèles de processus du développement du logiciel
Théorie de la mesure
Qualité du logiciel
Mesure de la qualité du logiciel
Études empiriques
Mesure du produit logiciel
Collection et analyse des métriques
3
Introduction
De nombreux travaux montrent que les attributs internes du produit logiciel ont un impact sur ses attributs externes
– Une bonne structure interne donne une bonne qualité du produit
– Agir sur la structure interne permet de contrôler la qualité du produit
Les attributs internes peuvent être mesurés très tôt dans le cycle de développement
– Grâce à la prédiction, des actions correctives peuvent-être entreprises, réduisant ainsi les coûts de maintenance
Attributs internes
Taille, couverture, … Données de test
Taille, réutilisation, modularité, couplage, cohésion, fonctionnalité, complexité algorithmique, structuration du flot de contrôle, …
Code
Taille, réutilisation, modularité, couplage, cohésion, fonctionnalité, …
Conception
Taille, réutilisation, modularité, fonctionnalité, redondance, …
Spécification
Attributs internes (exemples) Produit
5
Taille
Historiquement, un des premiers aspects mesurés du logiciel
Similaire à l’attribut taille d’un humain (attributs grandeur, poids)
Par analogie, les attributs important de la taille sont
– Taille physique – Fonctionnalité – Complexité
6
Taille: taille physique
C’est la taille physique d’un produit
Elle peut être mesurée aussi bien au niveau du code qu’au niveau de la spécification ou de la conception
Code
– La mesure la plus utilisée est le Nombre de Lignes de Code
– Mesure ambiguë : différentes façons de la mesurer
• Inclusion ou non des commentaires et des déclarations
• Comment compter si une ligne qui contient plusieurs instructions
7
Taille: taille physique
Code (suite)
– La définition la plus répondue est
« Est considérée comme ligne de code toute ligne qui ne soit pas un commentaire ni une ligne vide.
Le nombre d’instructions ou de parties d’instructions n’est pas important » Ceci inclut les entêtes de programmes, les
déclarations et les instructions (exécutables et non exécutables)
– Cette mesure est désignée par NCLOC (Non- Comment Lines Of Code)
Taille: taille physique
Code (suite)
– Le nombre de commentaires peut être mesuré par le nombre de lignes de commentaires (CLOC) – La taille physique totale est donc
LOC = NCLOC + CLOC – On peut ainsi mesurer la densité de
commentaires par CLOC/LOC
– LOC peut être plus pratique à utiliser que NCLOC
• Elle est plus facile à extraire
• Elle renseigne sur le nombre de pages pour imprimer le programme, l’espace nécessaire pour le stockage et la
9
Taille: taille physique
Code (autres mesures)
– Le nombre d’octets nécessaires au stockage du programme
• Mesure indépendante du type de langage
• Facile à extraire
– Le nombre de caractère CHAR est une autre mesure de la taille physique
• Facile à extraire
• Peut être une base pour le calcule de LOC LOC = CHAR/α
oùαest le nombre moyen de caractères par ligne de texte
10
Taille: taille physique
Code (autres mesures)
– Le nombre d’instructions livrées (DSI)
• Mesure dépendante du langage de
programmation
11
Taille: taille physique
Spécification et conception
– Il est très difficile de trouver une mesure similaire à LOC ou CHAR
– La nature des documents est très variée et il est difficile de déterminer les types
d’objets atomiques à compter (comme les caractères ou les lignes dans le cas du code)
– Les documents sont composés de texte et de diagrammes
Taille: taille physique
Spécification et conception
– Dans l’industrie, une mesure utilisée est le nombre de page
• Avantage : uniformise le texte et les diagrammes
• Inconvénient : comment gérer les pages contenant du texte et des diagrammes – Une idée serait de mesurer le texte et
trouver une unité de mesure pour les
diagrammes
13
Taille: taille physique
Spécification et conception
– DeMarco propose une méthode de développement du logiciel mettant en œuvre 3 vues
– Cette méthode permet de bien identifier les objets atomiques
– Aucune mesure de taille physique n’est cependant définie
États, transition État/Transition
États
Entités, relations Entité/Relation
Données
Ellipses
Éléments de données Flot de données
Dictionnaire de données Fonctionnelle
Objets atomiques Diagramme
Vue
14
Taille: taille physique
Prédiction
– Il est très utile de prédire la taille physique du code (LOC) très tôt dans le cycle de
développement
– Soit α le ratio d’expansion obtenu à partir de données historiques
– Soit Si la taille de conception d’un module i – LOC peut être estimer par la formule suivante
conception taille
code taille
_
= _ α
∑
== m
i
Si
LOC
1
α
15
Taille: taille physique
Prédiction
– α dépend de chaque organisation – Une autre façon de prédire LOC a été
proposé par Walston & Felix
– D est la taille de la documentation en pages et L la taille du code en milliers de LOC
01 .
49L
1D =
Taille: fonctionnalité
Intuitivement, c’est le nombre de fonctions fournies dans le logiciel
Il existe deux travaux reconnus pour la mesure de la fonctionnalité
– Les points de fonctions (Albrecht) – Les métriques BANG (DeMarco)
L’objectif de ces deux travaux est de produire
des mesures de taille qui permettent de bien
prédire le coût et l’effort de développement
17
Taille: fonctionnalité
Points de fonctions
– L’objectif est de mesurer la quantité de fonctionnalité offerte par un logiciel à partir de sa spécification
– Pour calculer le nombre de points de fonctions FP (function points), il faut d’abord calculer le compte de fonctions non ajusté UFC (unadjusted function count)
18
Taille: fonctionnalité
Points de fonctions
– Pour calculer UFC, il faut déterminer à partir d'une certaine représentation du logiciel, le nombre d'éléments des types suivants
• Entrées externes: éléments de données fournis par l'utilisateur (tels que des noms de fichiers et des sélections de menus). Ceci n’inclus pas les requêtes de l’utilisateur
• Sorties externes : éléments de données fourni à l'utilisateur (tels que les états et les messages)
• Requêtes externes : entrées interactives exigeant une réponse
• Fichiers externes : interfaces compréhensibles par une machine avec d'autres systèmes
• Fichiers internes : Fichiers principaux logiques dans le système
19
Taille: fonctionnalité
Points de fonctions
– Exemple (vérificateur d’orthographe) – Spécification :
• Le vérificateur accepte en entrée un fichier document et optionnellement un fichier dictionnaire personnel
• Le vérificateur affiche tous les mots qui ne sont ni dans le fichier dictionnaire, ni dans le fichier dictionnaire personnel
• L’utilisateur peut à tout moment demander le nombre de mots traités et le nombre d’erreurs trouvées durant le processus de vérification
Taille: fonctionnalité
Points de fonctions
# entrées externes = 2
# sorties externe = 3
# requête externes = 2
Vérificateur
Utilisateur Utilisateur
Dictionnaire
Requête # erreurs
Requête # mots traités
Fichier document
Fichier dictionnaire personnel
Message # mots traités
Message # erreurs trouvées à date
Rapport des mots erronés Contenu du dictionnaire
21
Taille: fonctionnalité
Points de fonctions – Complexité subjective
• Échelle ordinale
• Valeurs : simple, moyen et complexe
• Les entreprises ont développé des heuristiques pour affecter une valeur à un type.
– Facteur de pondération (fpond)
• Un coefficient qui correspond à une combinaison (type d’éléments – complexité subjective)
complexe Moyen
simple
10 7
5 Fichiers internes
15 10
7 Fichiers externes
6 4
3 Requêtes externes
7 5
4 Sorties externes
6 4
3 Entrées externes
Facteur de pondération Types d’éléments
22
Taille: fonctionnalité
Points de fonctions – Calcul de UFC
– Exemple (Vérificateur)
• Quelle est la valeur de UFC si tous les éléments sont de complexité moyenne ?
• Quelle est la valeur de UFC si le fichier dictionnaire était complexe
) _ (
* ) _ _ _
15
(
1
i fpond i
type éléments Nb
UFC
∑
i=
=
23
Taille: fonctionnalité
Points de fonctions
– Calcul du nombre de points de fonction FP
– Facteur de complexité technique (TFC)
• C’est un facteur d’ajustement de UFC dans une plage de
±35% (0.65 <=TFC<=1.35)
• Facteurs influençant la complexité TFC
UFC FP = *
F14 Facilité de changement F13 Sites multiples
F12 Facilité d’installation F11 Facilité de Réutilisation
F10 Traitements complexes F9 Interface complexe
F8 Mise à jour en ligne F7 Facilité d'opération
F6 Saisie de données en ligne F5 Configuration très utilisée
F4 Exigences de performances F3 Fonctions distribuées
F2 Communication de données F1 Back-up fiable et récupération
Taille: fonctionnalité
Points de fonctions
– Facteur de complexité technique
• Calcul de TFC
Pour chaque facteur on attribue une valeur dans une échelle ordinale (0,1,2,3, 4,5) où 0 veut dire que le facteur est non pertinent et 5 veut dire essentiel
( =0.65 si tous les Fi=0 et 1.35 si tous les Fi=5)
∑
=+
= 14
1
01 . 0 65 . 0
i
Fi TFC
25
Taille: fonctionnalité
Les métriques BANG (DeMarco)
– Deux métriques Bang selon le type du système
• Fonctions
• Données
– La métrique Bang fonctions
• Consiste à compter les nombre de processus de bas niveau dans le DFD
• Ce comptage de base est pondéré en fonction du type de processus et du nombre de nœuds données utilisés par le processus
- La métrique Bang données
• Consiste à compter les nombre d’entités dans le ERD
• Ce comptage de base est pondéré en fonction du nombre de relations impliquant chaque entité
26
Structure du flot de contrôle
De nombreux travaux sur les métriques ont porté sur la structure du flot de contrôle
Graphe de flot de contrôle – Graphe orienté
• nœud = instruction du programme
• Arc = le flot de contrôle entre une instruction et une autre
– Autre concepts
• Degré_entrée d’un nœud = nombre d’arcs incidents
• Degré_sortie d’un nœud = nombre d’arcs sortants
• Nœud procédure = un nœud de degré_sortie 1
• Nœud prédicat = un nœud de degré_sortie > 1
• Chemin = une séquence d’arcs consécutifs
• Chemin simple = une séquence d’arcs consécutifs sans répétition
27
Structure du flot de contrôle
Exemple de graphe de flot de contrôle
10 lire p 20 lire e 30 Cal := 1 40 Si e ~= 0 alors 50 Tant que e > 0 faire 60 cal := cal * p 70 e := e - 1 80 Fin_faire 90 Fin_si 100 écrire cal 110 fin
10 20 30 40
90
50 60 70 80
100 110
Structure du flot de contrôle
Graphe de flot de contrôle
P0 P2 Pn
Séquence n a
A T F D0
If a than A
a A
T F
D1
If a than A else B B
a A1
1 n
Cn
Case a of 1 : A1
2 : A2
… n : An An A2 2
a T
F F
D2 D3 a
29
Mesure de la complexité
Complexité cyclomatique de McCabe
– Pour un graphe de flot de contrôle F comportant n nœuds (dont d nœuds prédicats) et e arcs, il existe trois façons de la mesurer
• V(F) = e – n + 2
• V(F) = 1 + d
• V(F) = r (r est le nombre de régions de F)
30
Mesure de la complexité
Complexité cyclomatique de McCabe
– Exemple
10 20 30 40
90
50 60 70 80
100 110 v(F) = 12 – 11 + 2
= 1 + 2
= 3
31
Couplage
Définition
– C’est le degré d’interdépendance entre modules
Types de couplage entre deux modules x et y (du moins mauvais au plus mauvais)
– Pas de couplage (R0) : Indépendant
– Couplage de données (R1) : x, y communiquent avec des paramètres
– Couplage de signature (R2) : x, y acceptent le même type d'enregistrement comme paramètre
– Couplage de contrôle (R3) : x passe un paramètre à y qui influence le contrôle
– Couplage par variables globales communes (R4) : x et y accèdent à la même donnée globale
– Couplage de contenu (R5) : x modifie des données ou des instructions à l'intérieur de y
Couplage
Graphe de couplage
(3,2)
(3,2) (5,1)
(2,2) (2,2)
Relation de couplage (signatures)
Occurrences
M1
M3 M4
M2
Module
) 1 ,
( = + +
n i n y x c
3
Mesure de couplage
i est la pire relation de couplage et n le nombre d’interconnexions entre x et y
33
Couplage
Mesure de couplage – c(x,y) est de type ordinal
– Soit un système S comportant les modules M
1, …, M
m, comment définir une mesure global du
couplage C(S) ?
{
c M M i j m}
S
C( )est la valeur médianedel'ensemble ( i, j):1≤ ≤ ≤
– D’autres mesures de couplage pour un module x existent. Par exemple, le nombre maximum, le nombre moyen et le nombre total d’interconnexions
34
Cohésion
Définition
– La cohésion d'un module est le degré de participation des composants à la même tâche
Types de cohésion (du plus désirable au moins désirable) – Fonctionnelle : le module effectue une seule fonction bien définie.
– Séquentielle: le module effectue plus d'une fonction, mais dans l'ordre défini par la spécification
– Communicationnelle: le module effectue plusieurs fonctions toutes sur le même ensemble de données
– Procédurale : le module effectue plusieurs fonctions appartenant au même processus
– Temporelle: le module effectue plusieurs fonctions intervenant toutes dans le même laps de temps.
– Logique: le module effectue plusieurs fonctions liées logiquement – Cohésion par coïncidence: le module effectue plusieurs fonctions
sans aucune liaison entre elles
35
Cohésion
Un module peut avoir plusieurs types de cohésion
On caractérise un module par sa moins désirable cohésion
La mesure de cohésion est de type ordinale
La cohésion d’un système peut être mesuré comme suit
module de total nb
lle fonctionne cohésion
une ayant modules de cohésion nb de
Ratio =
Les métriques orientées objet
La majorité des métriques proposées sont destinées au paradigme
procédural
Elles ne s’appliquent pas au paradigme des objets
Des métriques spécifique OO ont été proposées ces dernières années
Les plus connues sont celles de
Chidamber et Kamerer
37
Les métriques orientées objet
Depth of Inheritance Tree (DIT) – Définition:
• Profondeur de la classe dans 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
– Considérations:
• Plus une classe se situe profondément dans l'arbre d'héritage, plus le nombre de méthodes et de comportements, dont elle hérite, sera grand. Ceci rendra son comportement d'autant moins prévisible.
• Plus un arbre est profond, plus la conception est complexe
• Plus une classe se situe profond dans l'arbre d'héritage, plus il est probable qu'elle réutilise des méthodes héritées
38
Les métriques orientées objet
Number Of Children (NOC) – Définition:
• Nombre de descendants immédiat de la classe dans la hiérarchie de classe.
– Considérations:
• Plus le nombre d'enfants est élevé plus la réutilisation effective est importante, car l'héritage est une forme de réutilisation
• Plus le nombre d'enfants est élevé, plus le risque d'une utilisation inadéquate du mécanisme de l'héritage est grand. On pourra alors se trouver face à soit une mauvaise abstraction pour la classe de base
• Le nombre d'enfants donne une idée de l'influence potentielle d'une classe sur la conception. Si une classe a un nombre important d'enfants, elle pourra requérir d'avantage d'efforts de test
39
Les métriques orientées objet
Weighted Methods per Class (WMC) – Définition:
• Somme pondérée des complexités des méthodes d'une classe. Si toutes les méthodes d'une classe sont de complexité 1
– Considérations:
• Le nombre et la complexité des méthodes d'une classe est un bon indicateur du temps à passer pour
développer et maintenir une classe.
• Plus on a de méthodes dans une classe, plus l'impact pourra être grand sur les classes enfants via l'héritage.
• Les classes qui ont un grand nombre de méthodes complexes sont en général plus spécifiques à l'application et donc moins réutilisables.
Les métriques orientées objet
Coupling Between Objects (CBO) – Définition:
• Nombre d'autres classes auxquelles une classe est couplée. Deux classes sont dites couplées si une méthode de l'une utilise une méthode ou un attribut de l'autre
– Considérations:
• Un couplage excessif entre classes se fait au détriment de la modularité et empêche la réutilisation.
• Pour promouvoir l'encapsulation, le couplage entre classe devrait être minimal. Plus une classe est couplée à d'autres classes, plus une modification de cette classe peut influencer de classes.
• Une mesure du couplage est importante pour déterminer
41
Les métriques orientées objet
Response For a Class (RFC) – Définition:
• RFC vaut la cardinalité de l'ensemble de réponse d'une classe. L'ensemble de réponse d'une classe est l'ensemble des méthodes qui peuvent être directement appelée lors de l'exécution de n'importe quelle méthode de cette classe (= réponse à un message).
– Considérations:
• Si un grand nombre de méthodes peuvent être appelées en réponse à un message, le test et le débogage d'une classe deviennent plus compliqués, car ils requièrent un niveau de compréhension plus élevé de la part du testeur
• La complexité d'une classe est d'autant plus élevée qu'elle peut appeler un grand nombre de méthodes
42
Les métriques orientées objet
Lack of COhesion in Methods (LCOM) – Définition:
• LCOM compte le nombre de paires de méthodes qui n’accèdent pas aux même attributs diminué du nombre de paires de méthodes qui accèdent aux même attributs (= 0 si la différence est négative)
– Considérations:
• Une forte cohésion est signe d’une bonne encapsulation
• Une faible cohésion suggère qu’une classe doit être décomposée en 2 ou plusieurs classes
• Toute mesure de disparité entre les méthodes aide à trouver les fautes de conception
• Une faible cohésion augmente la complexité et par conséquent la probabilité d’existence d’erreurs dans le processus de développement