• Résumé  fran\347ais:
    La vérification d'un logiciel consiste à démontrer que toutes les exécutions d''un programme satisfont une spécification. Dans le cas de l'analyseur statique ASTRÉE (http://www.astree.ens.fr/), la spécification est implicite : aucune exécution ne peut conduire à une “erreur à l'exécution” (débordement de tableau, pointeur indéfini, division par zéro, débordement arithmétique, etc.). L'interprétation abstraite est une théorie de l'abstraction, c'est-à-dire des approximations sûres permettant de faire la preuve automatiquement en considérant des sur-ensembles des comportements possibles du programme. Contrairement aux méthodes de recherche d'erreurs comme le model-checking borné ou le test, aucun cas possible n'est omis et la preuve d'erreurs à l'exécution est donc mathématiquement valide. Certaines exécutions dans la sur-approximation peuvent conduire à une erreur sans pour autant correspondre à une exécution réelle (encore dite concrète). On parle dans ce cas d'une “fausse alarme”. Toute la difficulté du problème indécidable de la vérification est de choisir des approximations sûres sans aucune fausse alarme (les erreurs conduisent à de vraies alarmes ne peuvent être éliminées qu'en les corrigeant). Dans le cas d'ASTRÉE, les programmes écrits en C sont des logiciels synchrones de contrôle commande temps réel. ASTRÉE contient des abstractions généralistes (intervalles, octogones, etc) et des abstractions spécifiques au domaine d'application (avec filtres, intégrateurs, divergences lentes à cause d'erreurs d'arrondis, etc). Cette adaptation au domaine d'application a permis de vérifier formellement l'absence d'erreurs à l'exécution dans des logiciels avioniques critiques de grande taille, une première mondiale.
  • Abstract:
    Software verification consists in proving that executions of the software in any admissible execution environment all satisfy a formal specification. In the case of the ASTRÉE static analyser (http://www.astree.ens.fr/), the specification is implicit: no execution can lead to a “runtime error” (RTE) (such as buffer overrun, dangling pointer, division by zero, float overflow, modular integer arithmetic overflow, etc). The ASTRÉE static analyser is designed by abstract interpretation of the semantics of a subset of the C programming language (without dynamic memory allocation, recursive function calls, no system and library calls as found in most embedded software). Abstract interpretation is a theory of abstraction, that is to say of safe approximation allowing for automatic formal proofs by considering an over-approximation of the set of all possible executions of the program. Contrary to bug-finding methods (e.g. by test, bounded model-checking or error pattern search), no potential error is ever omitted. Hence the proof of satisfaction of the specification is mathematically valid. However, some executions considered in the abstract, that is in the over-approximation, might lead to an error while not corresponding to a concrete, that is actual, execution. This spurious execution is then said to lead to a ``false alarmÕÕ. All the difficulty of the undecidable verification problem is therefore to design safe/sound over-approximations that are coarse enough to be effectively computable by the static analyzer and precise enough to avoid false alarms (the errors leading to true alarms can only be eliminated by correcting the program that does not satisfy the specification). In practice, knowing only the over-approximation computed by the static analyser, it is difficult to distinguish false alarms from actual ones. So the radical solution is to reach zero false alarm which provides a full verification. To do so, ASTRÉE is specialized both to precise program properties (i.e. RTEs) and a precise family of C programs (i.e. real-time synchronous control/command C applications preferably automatically generated from a synchronous language). The ASTRÉE static analyser uses generalist abstractions (like intervals, octagons, decision trees, symbolic execution, etc) and abstractions for the specific application domain (to cope with filters, integrators, slow divergences due to rounding errors, etc). Since 2003, these domain-specific abstractions allowed for the verification of the absence of RTEs in several large avionic software, a world première.
     Poster 
			ASTRÉE

copyright notice
Last modified: Thursday, 07-Jun-2007 20:55:32 CEST