Année : 2006/2007
GLG101 : Test et Validation du logiciel
Nom du fichier :
OUTILS_ANALYSE_STATIQUE.doc
Rédacteur
: Jean
-
Yves Bouttery
Remis le
15
7
Destinataires
: Mr
ANDRZEJAK Willy
Outils d’analyse statique
2
INTRODUCTION.
L’analyse statique de programmes est une famille de techniques permettant de dériver des
résultats sur l'exécution de programmes sans exécuter ces derniers.
Au lieu de reconnaître le comportement du programme à l’exécution, il s’agit ici de découvrir
ce qu’il serait par une simple lecture et analyse du code source ou binaire selon le cas.
Cette façon de faire offre des avantages sur l’autre approche. Puisqu’il n’y a pas d’exécution,
la crainte de dommages n’est plus et il n’y a plus de temps d’exécution.
Par contre, il n’est pas possible d’être certain de certaines propriétés avec l’analyse statique à
cause du problème de l’indécidabilité. Par exemple, dans un programme assembleur, une
instruction indique de sauter à une adresse contenue dans un registre quelconque. Puisqu’il
n’y a pas d’exécution, on ne connaît pas cette adresse et les possibilités de valeurs du registre
peuvent être très grandes. On ne pourra donc pas étudier statiquement tous les scénarios
d’exécution possibles du programme. Du fait de la complexité des programmes informatique,
nous utilisons des programmes qui se nomment outils d’analyse statique.
Dans un premier chapitre, nous verrons les différentes utilisations possibles de ces outils.
Nous verrons ensuite les informations utiles que nous pouvons retirer de cette analyse et nous
essaierons de comprendre les méthodes qui permettent aux outils de trouver à ces
informations.
Nous terminerons enfin par une série de tableaux avec des noms d’outils d’analyse statique.
3
I. Les différents objectifs de l’analyse statique
Métriques.
L’analyse statique est utilisée en génie logiciel dans le but de calculer certaines métriques sur
le code source d’un programme. La proportion de code à l’intérieur de boucles dans le
programme et le nombre de scénarios d’exécution possibles en sont des exemples. Une autre
métrique peut être le taux de commentaires dans le programme. Cela a pour utilité d’inciter et
d’aider les programmeurs à faire des programmes plus lisibles et donc plus faciles à
maintenir.
Détection d’erreurs pouvant survenir à l’exécution.
Une autre fonctionnalité des outils d’analyse statique est d’étendre le travail des compilateurs.
Il arrive que certaines erreurs provoquent l’arrêt d’un programme en cours d’exécution parce
qu’elles n’ont pas pu être détectées au cours de la compilation. Pour cette raison, ce sont ces
problèmes de programmation qui prennent le plus de temps à être réglé. Les outils d’analyse
statique peuvent découvrir certaines de ces erreurs en lisant le code source. L’accès à une
variable à partir d’un pointeur nul ou l’accès à un tableau à l’extérieur de ses bornes en sont
des exemples.
Les graphes.
Certains outils d’analyse statique construisent quelques types de graphes que nous verrons par
la suite. Dans le cas l’outil en question ne va pas plus loin, c’est-à-dire que son objectif est
de faire les graphes associés à un programme, il faudrait être en mesure de récupérer la
structure de données des graphes dans le but de l’analyser avec un autre programme par la
suite.
Le découpage.
Les outils qui font du découpage de programmes sont des outils d’analyse statique. Puisque le
découpage utilise le graphe de dépendance d’un programme pour calculer ses résultats, le
choix d’un outil de découpage sera fait en fonction de la qualité des dépendances qu’il trouve
à l’intérieur du programme analysé.
4
Politique de sécurité.
Un outil d’analyse statique peut faire de la détection de code malicieux.
Il doit se baser sur une politique pour donner son verdict sur le programme analysé.
Une façon de faire est l’utilisation d’automates de sécurité. Les transitions de ces automates
correspondent aux instructions du programme. Ils comportent un ou plusieurs états qui ne
doivent pas être atteints ; s’ils le sont, cela signifie que la politique n’a pas été respectée. Si un
scénario d’exécution du programme possède une suite d’instructions, donc de transitions de
l’automate, qui fait atteindre un état tel que la politique n’est pas respectée, le programme est
considéré comme malicieux.
5
void main()
{
int x = 0;
int y = 1;
while (y < 10)
{
y = 2 * y;
x = x + 1;
}
printf ("%d",x);
printf ("%d",y);
}
II. Informations retirées et méthode utilisées
1. Les informations retirées.
Dans les sections de ce chapitre, il sera d’abord question des informations utiles qu’on peut
tirer du code source d’un programme et leurs représentations, souvent sous forme de graphes.
Ensuite, la technique du découpage (aussi appelé focalisation ou slicing) qui est utile entre
autres pour la détection de code malicieux sera présentée. Enfin, il sera question de l’étape de
vérification du programme en se servant des différentes informations recueillies.
L’arbre syntaxique.
Avant de tirer les informations pertinentes d’un programme, il est important, dans le cas d’un
code source, de vérifier que ce dernier respecte bien les règles de syntaxe du langage utilisé
pour l’écrire. La syntaxe d’un langage étant représentée par une grammaire, il est possible de
faire un arbre syntaxique du programme. C’est à partir de cet arbre que les informations
seront tirées puisque ce dernier écarte les détails inutiles reliés au code comme les
commentaires et l’indentation.
Dans le cas du code exécutable, il peut être nécessaire que le programme soit d’abord
désassemblé dans le but d’obtenir le code assembleur et ainsi obtenir un arbre syntaxique pour
ce type de code qui sera utilisé par la suite pour l’analyse.
Le graphe de flot de contrôle.
Il s’agit d’un graphe orienté dans lequel les noeuds représentent des instructions. Pour tout
noeud, un arc quitte vers chaque noeud pour lequel les instructions peuvent suivre
immédiatement celles du noeud courant. Il met en évidence les boucles, instructions
conditionnelles et branchements. Un chemin dans ce graphe représente un scénario
d’exécution du programme. Le programme suivant servira à
donner un exemple pour ce type de graphe (voir figure 2.1) et
sera également utilisé pour les autres graphes.
1 / 22 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !