lundi 7 juin 2004

Les métriques

LES MÉTRIQUES

Les métriques d'un logiciel sont différentes mesures de propriété d'un logiciel. Les mesures sont primordiales en génie logiciel. Elles permettent d'estimer les coûts, les échéanciers et les ressource ce qui permet de définir un coût approximatif pour le système à créer. Nous allons discuter un peu des métriques pouvant être évaluées. Il est donc indispensable d'avoir de bonnes méthodes de travail ainsi que de bons logiciels pour mesurer un logiciel. Nous n'allons pas nous attarder énormément sur la théorie, car des outils existent pour effectuer ces tâches.

Différentes types de mesure

Source lines of code Source lines of code (SLOC)

C'est le nombre de ligne de code du programme. Une telle mesure permet d'estimer l'effort nécessaire pour développer le logiciel. Ça permet d'aussi de connaître l'étendu du logiciel. Il y a deux types de mesure pour le SLOC.
  • Physique
  • Logique

Physique

Le type physique compte ce qui indépendant du langage de programmation: les commentaires, interligne.

Logique

Le type logique compte le nombre de commande, il est dépendant du langage utilisé. Par exemple en c, pascal, Java on pourrait avoir une idée en comptant le nombre de «;». Windows 3.1 a environ un SLOC de 3 millions tandis que celui de Windows XP tourne autour de 40 millions. Le noyau de Linux 2.4 tourne autour de 4 millions. Ce chiffre n'est que pour le noyau et non le gui et cie tel que les chiffres présentés pour Windows.
Un programme ayant un SLOC élevé, sera habituellement plus long à faire, coûteux et nécessitera une bonne gestion.

La complexité cyclométrique

C'est le niveau de complexité de l'application, plusieurs critères déterminent cette complexité: flux de contrôle, flux de données, structure de donnée. Cette mesure détermine le nombre de chemin indépendant dans un algorithme. Plus qu'il y a de chemin, plus la complexité est élevée. Ce nombre détermine aussi la quantité de tests à effectuer si on désire tester toutes les possibilités. Un graphe de contrôle doit être créé afin de pouvoir déterminer la complexité structure du graphe.
  • n = Nombre de noeuds
  • e = Nombre d'arcs
  • v = Nombre cyclomatique
v donne le nombre approximativement de tests nécessaire.
if(x)
 while(y)
  b;
else
  z;
a;

Voici un petit diagramme pour illustrer ce code



Il y a donc 5 noeuds et 6 arcs: n=5, e=6. Il y a 1 point d'entrée et 1 point de sortie. 5-6 + 1 + 1 = 3. Un nombre supérieur entre 30 et 50 comment à être très élevé. Des erreurs peuvent être aisément commises et les tests seront plus complexes à réaliser. Il y a quand même des exceptions, par exemple le switch disponible dans quelques langages... même si le nombre cyclomatique peut être élevé dans cette commande, sa compréhension est fort simple. L'exemple ci-dessus est simple, mais permet de se faire une idée de l'approche. De toute façon, ce genre de calcul est donné à des logiciels qui se chargent d'analyser le code source.

Point de fonction

Les points de fonctions sont utilisés lorsqu'on veut estimer la dimension du projet, le temps de développement ainsi que l'effort pour un projet. Cette méthode consiste à calculer le nombre d'entrée, sortie, interrogation et donnée (interne et externe).

Les entrées

C'est les données qui entrent dans l'application. Ceci peut représenter des données matérielles : écran, cd... ou logiciel: paramètre, variable...

Les sorties

C'est les données qui sortent de l'application.

Les interrogations

C'est un mélange d'entrée et de sortie

Les niveaux de complexité

Un niveau de complexité doit être déterminé pour chaque composant: faible, moyen et élevé. Un nombre est attribué pour faible, moyen et élevé.
Calcul des points de fonction
Type de composant Complexité Nombre Total Total pour le composant
Entrée Faible *4=
Moyen *5=
Élevée *6=
Sortie Faible *4=
Moyen *5=
Élevée *6=
Interrogations Faible *4=
Moyen *5=
Élevée *6=
Nombre de point de fonction
Il faut être prudent avec un tel tableau. Même si un système possède par exemple 20 points de fonctions, cela ne garantit en rien qu'il est moins complexe qu'un qui en inclurait 50. On pourrait avoir un système de gestion sonore qui serait beaucoup plus complexe niveau code et algorithme à produit qu'un système de gestion créer avec vb. Ce type de mesure est efficace pour les systèmes de gestion et les systèmes ayant une interface usager très marqué, mais l'est beaucoup moins pour ceux ayant beaucoup d'algorithmes.

Depth of inheritance Tree

C'est la profondeur de la classe au niveau de l'héritage. Plus une méthode se situe à un niveau inférieur plus que son nombre de méthode et d'attributs son élèvé. La structure devient alors très complexe. Les erreurs peuvent être très difficiles à trouver dans un système avec énormément d'héritage. De plus, si des changements doivent être faits, ils peuvent avoir des impacts un peu partout au niveau des classes.

Number of Children (NOC)

C'est le nombre d'enfants d'une classe.Il y a beaucoup de réutilisation lorsque le nombre d'enfants est élevé. Il peut aussi y avoir un problème au niveau de la classe de base. Des méthodes ont mal été définies, son niveau d'abstraction est trop bas ou trop élevé. Tel que dit précédemment s'il y a beaucoup d'enfants, beaucoup d'héritage a lieu, ce qui rend le système plus complexe à comprendre, à tester.

Coupling between Objects (CBO)

C'est le complage de classe. Le nombre de classes qu'une classe utilise. Lorsque beaucoup de classe est utilisée dans une classe, il y a peu de modularité et donc le risque de réutilisation devient faible. C'est aussi un signe que notre classe peut avoir mal été pensé.Un CBO faible est un indice qu'une classe est réutilisable aisément.

Mesure pour un projet

Les métriques ne s'applique pas uniquement sur les systèmes informatiques. Ils sont très important aussi pour le domaine de la gestion. Connaissant l'expériences des programmeurs, analystes, ils peut être possible de déterminer le nombre de jour homme pour le développement concernés. Une complexité peut être assigné à chaque module à développer. La même stratégie peut être assigné à la correction de problème. La mesure de la complexité à résoudre le problème ainsi que le degré de sévérité permettent d'assigner les bonnes ressources aux problèmes. L'outils Bugzilla offre différents diagrammes et de rapport concernant les problèmes du système. C'est un outils indispensable pour la phase de test.

Logiciel pour les métriques

Divers outils existent pour les métriques dont plusieurs pour Java, en voici quelques-uns.
JStyle
PMD
JDepend