Outils d’analyse statique Année : 2006/2007 GLG101 : Test et Validation du logiciel Nom du fichier : OUTILS_ANALYSE_STATIQUE.PPT Rédacteur : Jean-Yves Bouttery Présentation: le 15 mai 2007 Auditoire : Mr ANDRZEJAK Willy et Auditeurs CNAM Outils d’analyse statique 2006-2007
INTRODUCTION Augmentation puissance des ordinateurs. Augmentation complexité des programmes. Risque de catastrophes . *Airbus 88. *Ariane V en 96. *Pb de tous les jours. 2006-2007
Comment éviter cela? En effectuant des tests Boite noire Boite blanche 2006-2007
Différences Tests boîtes noires Tests boîtes blanches Tests fonctionnels Méconnaissance de l’implémentation technique du besoin fonctionnel Les jeux d’essai dépendent des spécification du besoin Tests boîtes blanches Tests structurels Les jeux d’essai dépendent de l’analyse du code source 2006-2007
Plan de l’exposé Différentes utilisations des outils. Informations produites. Méthodes d’analyse. Les outils. 2006-2007
Différentes utilisations. 1. La recherche de métriques. -La proportion de code à l’intérieur de boucles. -Le taux de commentaires. -Le nombre de lignes plus lisibles et faciles à maintenir. 2006-2007
Différentes utilisations. 2. Erreurs pouvant survenir à l’exécution. -Etendre le travail du compilateur. -ex: l’accès à un tableau à l’extérieur de ses bornes gain de temps pour régler les pb 2006-2007
Différentes utilisations. 3. Le découpage ou slicing. -Réutilisation d’une partie de code. -Faciliter la compréhension. Faire ressortir certaines instructions d’un programme en relation avec une propriété. Possibilité de réduire le problème de l’indécidabilité de l’analyse statique. 2006-2007
Différentes utilisations. 4. Politique de sécurité. Recherche de codes malicieux . 2006-2007
Plan de l’exposé Différentes utilisations des outils. Informations produites. Méthodes d’analyse. Les outils. 2006-2007
Informations produites. 1. l’ arbre syntaxique. -La syntaxe d’un langage étant représentée par une grammaire, il est possible de faire un arbre syntaxique du programme. -départ pour acquérir les informations 2006-2007
Informations produites. 2. Le graphe de flot de contrôle. -les noeuds = instructions. -arc vers nœuds=instruction suivante -Il met en évidence les boucles, instructions conditionnelles Un chemin = scénario d’exécution. 2006-2007
Informations produites. void main() { int x = 0; int y = 1; while (y < 10) y = 2 * y; x = x + 1; } printf ("%d",x); printf ("%d",y); 2006-2007
Informations produites. 3. Le graphe de dépendance de contrôle. -montre quelles instructions seront exécutées en fonction de la valeur d’une expression dans le programme. -Pour deux noeuds p et q, un arc va de p vers q si la valeur de l’expression p a un impact sur le fait que l’instruction q soit exécutée ou non. 2006-2007
Informations produites. 2006-2007
Informations produites. 4. L’analyse du flot de données. -informe sur le déplacement des données dans le programme. Une information de base qui peut être très utile est l’ensemble des variables utilisées et celui des variables modifiées pour chaque instruction du programme. 2006-2007
Informations produites. void main() { int x = 0; Utilise={} Définit={x} int y = 1; Utilise={} Définit={y} while (y < 10) Utilise={y} Définit={} y = 2 * y; Utilise={y} Définit={y} x = x + 1; Utilise={x} Définit={x} } printf ("%d",x); Utilise={x} Définit={} printf ("%d",y); Utilise={y} Définit={} 2006-2007
Informations produites. 5. Le graphe de dépendance de données. -Dans ce graphe, un arc va de p vers q s’il est possible que la valeur d’une des variables modifiées à l’instruction p soit utilisée à l’instruction q sans qu’elle ne soit modifiée entre temps. 2006-2007
Informations produites. 2006-2007
Informations produites. 5. Graphe de dépendance du programme. -l’union du graphe de dépendance de contrôle et du graphe de dépendance de données. 2006-2007
Informations produites. 2006-2007
Informations produites. 6. Il existe toute une série de graphes qui peuvent être créer en fonction des besoins.(dépendance système) 2006-2007
Informations produites. 7. Le découpage. -Le découpage arrière: Les noeuds qui peuvent atteindre le nœud choisi en suivant les arcs à contresens. -Le découpage avant: Les noeuds que l’on peut atteindre à partir du noeud choisi en suivant les arcs. 2006-2007
Informations produites. 2006-2007
Informations produites. 2006-2007
Informations produites. int somme(int a,int b) { int c; c = a + b; return c; } void main() int x;int y; x =somme(2,3); printf("%d",x); y = somme(x,3); printf("%d",y); 2006-2007
Informations produites. La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007
Plan de l’exposé Différentes utilisations des outils. Informations produites. Méthodes d’analyse. Les outils. 2006-2007
Les méthodes 1. analyse lexicale et syntaxique. -L’analyse lexicale consiste à découper le programme en petites entités appelées ’’tokens’’ (opérateurs, mots réservés, variables, constantes numériques, alphabétiques…). 2006-2007
Les méthodes 1. analyse lexicale et syntaxique. -L’analyse lexicale consiste à découper le programme en petites entités appelées ’’tokens’’ (opérateurs, mots réservés, variables, constantes numériques, alphabétiques…). 2006-2007
Les méthodes Lors de l'analyse syntaxique, on vérifie que l'ordre des tokens correspond à l'ordre défini pour le langage. On dit que l'on vérifie la syntaxe du langage à partir de la définition de sa grammaire. arbre de la suite des tokens obtenus lors de la phase récédente 2006-2007
Les méthodes. La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007
Les méthodes Les métriques de Halstead sont basées sur l'interprétation du code comme une séquence de marqueurs, classifiés chacun comme étant un opérateur ou une opérande. nombre d'opérateurs uniques (distints)(n1) nombre d'opérandes uniques (distinctes)(n2) nombre total d'opérateurs (N1) nombre total d'opérandes (N2) 2006-2007
Les méthodes On peut obtenir: Longueur du programme (N) :N1+N2 Taille du vocabulaire (n) : n1+n2 Volume du programme (V) : V=N* Log2(n) Nbre de lignes de programme et de commentaire… Le niveau de difficulté (D) /de programme (L)… 2006-2007
Les méthodes Le nombre cyclomatique de McCabe v(G). Il mesure le nombre de chemins linéaires indépendants dans un module de programme. La complexité McCabe est l'un des métriques de software les plus largement acceptées, elle est conçue pour être indépendante du langage et du format de langage. 2006-2007
Les méthodes 2. Par interprétation abstraite. Les chercheurs ont développé des méthodes de preuve de la correction des programmes. Ceci consiste à fournir une sémantique décrivant formellement les exécutions d'un programme, puis démontrer un théorème exprimant que ces exécutions ont une certaine propriété = impossible 2006-2007
Les méthodes L'interprétation abstraite procède par approximation correcte de la sémantique. Si l'approximation est suffisamment grossière, elle est calculable par un ordinateur. Si elle est suffisamment fine, elle permet d'obtenir une preuve formelle de correction. L'objectif est donc de rechercher des approximations suffisamment précises et peu coûteuses à calculer. 2006-2007
Les méthodes L'interprétation abstraite procède par approximation correcte de la sémantique. Si l'approximation est suffisamment grossière, elle est calculable par un ordinateur. Si elle est suffisamment fine, elle permet d'obtenir une preuve formelle de correction. L'objectif est donc de rechercher des approximations suffisamment précises et peu coûteuses à calculer. 2006-2007
Les méthodes Avec cette description, il est possible de vérifier statiquement (sans exécution du programme) des propriétés dynamiques, c'est-à-dire dépendantes de l'exécution (code mort, débordement de tableau, flot de données, etc.). 2006-2007
Plan de l’exposé Différentes utilisations des outils. Informations produites. Méthodes d’analyse. Les outils. 2006-2007
Les outils La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007
Les outils La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007
2006-2007
Conclusion. Réponse à beaucoup de questions Mais l’analyse statique n’est pas suffisante pour garantir le bon fonctionnement d’un programme. En effet il y a toujours le problème de l’indécidabilité De certaines actions, c’est pour cela que l’analyse statique doit être couplée à l’analyse fonctionnelle. La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007
Conclusion. Questions??? Examen: différence boites noires et blanches. Qu’est ce que l’indécidabilité en analyse statique. La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu’il ne faut pas l’emprunter, car elle ne retourne pas dans la fonction main à l’endroit où la fonction somme a été appelée. 2006-2007