Méthode formelle (informatique)


En informatique, les méthodes formelles sont des techniques permettant de raisonner rigoureusement sur des programmes informatiques, ou aussi des matériels électroniques, afin de démontrer leur correction, en se basant sur des raisonnements de logique mathématique.

Ces méthodes permettent d'obtenir une très forte assurance de l'absence de bogue dans les logiciels. Cependant, elles sont généralement coûteuses en ressources (humaines et matérielles) et actuellement réservées aux logiciels les plus critiques. Leur amélioration et l'élargissement de leurs champs d'application pratique sont la motivation de nombreuses recherches scientifiques en informatique.

Ces techniques sont basées sur les sémantiques des programmes, c'est-à-dire sur des descriptions mathématiques formelles du sens d'un programme donné par son code source (ou parfois, son code objet).

Citons notamment :

Il existe des gradations et des mélanges possibles entre ces méthodes. Par exemple, un assistant de preuve pourra être suffisamment automatisé pour prouver automatiquement la plupart des lemmes utilitaires d'une preuve de programmes. Un model-checker pourra être appliqué sur un modèle construit à l'aide d'un prouveur automatique de théorèmes. Une interprétation abstraite préalable pourra limiter le nombre de cas à démontrer dans une preuve de théorèmes, etc.

Les méthodes formelles peuvent s'appliquer à différent stade du processus de développement d'un système (logiciel, électronique, mixte), de la spécification jusqu'à la réalisation finale. Voir l'exemple de la méthode B Méthode B

Sommaire

Spécification

Les méthodes formelles peuvent être utilisées pour donner une spécification du système que l'on souhaite développer, au niveau de détails désiré. Une spécification formelle du système est basée sur un langage formel dont la sémantique est bien définie (contrairement à une spécification en langage naturel qui peut donner lieu à différentes interprétations). Cette description formelle du système peut être utilisée comme référence pendant le développement. De plus, elle peut être utilisée pour vérifier (formellement) que la réalisation finale du système (décrite dans un langage informatique dédié) respecte les attentes initiales (notamment en terme de fonctionalité).

La nécessité des méthodes formelles s'est fait sentir depuis longtemps. Dans le rapport ALGOL 60, John Backus présentait une notation formelle pour décrire la syntaxe des langages de programmation (notation appelée Backus normal form, BNF).

Développement

Une fois qu'une spécification a été développée, elle peut être utilisée comme référence pendant le développement du système concret (mise au point des algorithmes, réalisation en logiciel et/ou circuit électronique). Par exemple:

Vérification

Une spécification peut être utilisée comme base pour prouver des propriétés sur le système. La spécification est le plus souvent une représentation abstraite (avec moins de détails) du système en développement: débarrassé de détails encombrant, il est en général plus simple de prouver des propriétés sur la spécification que directement sur la description complète et concrète du système. Certaines méthodes, comme la Méthode B, s'appuient sur ce principe: le système est modélisé à plusieurs niveaux d'abstraction, en partant du plus abstrait et en allant au plus concret (ce processus est appelé « raffinement » puisqu'il ajoute des détails au fur et à mesure); la méthodologie assure que toute propriété prouvée sur le modèles abstraits sont conservées sur les modèles concrets (il n'est pas nécessaire de refaire les preuves). ha

Preuves formelles

Les méthodes formelles prennent tout leur intérêt lorsque les preuves elles-mêmes sont garanties correcte formellement. On peut distinguer deux grandes catégories d'outils permettant la preuve de propriété sur des modèles formels:

Quelques méthodes/langages de développement formel

Le site international des méthodes formelles, voir [1] Le site de Formal Methods Europe, voir [2]

Voir aussi

See also: Méthode formelle (informatique), Assistant de preuve, Bogue, Code objet, Code source, Informatique, Interprétation abstraite, John Backus, Lemme, Logiciel critique