Analyse statique de programmes

Un article de Wikipédia, l'encyclopédie libre.

En informatique, 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.

Elle se distingue ainsi de l'analyse dynamique, ou test, qui revient à essayer le programme sur différentes entrées jugées représentatives, afin de vérifier s'il produit les résultats attendus sur ces entrées.

L'analyse statique est utilisée pour repérer des erreurs de programmation ou de conception, mais aussi pour déterminer la facilité ou la difficulté à maintenir le code.

Sommaire

[modifier] Relecture de code

Une autre méthode d'analyse statique, parmi les plus empiriques, consiste à faire lire le code source d'une application par une personne expérimentée mais extérieure à l'équipe de développement. Ceci permet de porter un regard neuf sur le code, du point de vue de sa conception comme de sa réalisation.

La relecture de code peut être guidée par des résultats obtenus par des méthodes d'analyse automatique du code, notamment parmi celles qui cherchent à évaluer la complexité du code et le respect de règles éventuelles de codage.

[modifier] Méthodes formelles

L'analyse statique englobe une famille de méthodes formelles qui dérivent automatiquement de l'information sur le comportement de logiciels ou de matériels informatiques. Une application possible de l'analyse statique est l'aide automatisée au débogage, en particulier la recherche d'erreurs à l'exécution – grosso modo, des évènements qui forcent le programme à « planter ».

L'analyse de programmes – y compris la recherche d'erreurs possibles à l'exécution – est indécidable : il n'existe aucune méthode « mécanique » qui peut toujours répondre sans se tromper au vu d'un programme si celui-ci peut ou non produire des erreurs à l'exécution. Ceci est un résultat mathématique fondé sur des résultats d'Alonzo Church, Kurt Gödel et Alan Turing dans les années 1930 (voir le problème de l'arrêt et le théorème de Rice).

Cependant, l'application d'un certain nombre de principes lors du codage permet de réduire le risque d'erreurs à l'exécution et ont en outre l'avantage de faciliter la maintenance du code. Par exemple, le fait de ne pas combiner une affectation et un test réduit le risque lié à l'ordre dans lequel les instructions sont exécutées. Autre exemple, le fait d'avoir des instructions de branchement imbriquées sur trop de niveaux est généralement l'indice d'une complexité du code, qui induit une difficulté à le comprendre et à le tester par la suite. Ce genre de motifs (ou patterns en anglais) sont retrouvés en analysant l'arbre syntaxique du code à l'aide d'un parser, de règles de codage et de métriques.

Il existe deux grandes familles d'analyses statiques formelles de programmes :

  • le model checking considère des systèmes à état fini, ou qui peuvent être réduits vers des systèmes à états finis par abstraction ;
  • l'analyse statique par interprétation abstraite approxime le comportement du système, par exemple par au-dessus.

L'intérêt du monde industriel pour des outils d'analyse statique, spécialement pour le développement de logiciels critiques, s'est développé à la suite de l'explosion du vol inaugural de la fusée Ariane 5 à cause d'un bogue informatique – sans doute un des bogues les plus chers de l'histoire[1].

[modifier] Voir aussi

[modifier] Liens Externes

[modifier] Notes et références

  1. Interview de Jean-Jacques Lévy