Outil SANTE: Détection d erreurs par analyse statique et test structurel des programmes C



Documents pareils
Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Cours 1 : La compilation

Formula Negator, Outil de négation de formule.

CURRICULUM VITAE. Informations Personnelles

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Gestion mémoire et Représentation intermédiaire

Processus d Informatisation

Analyse de sécurité de logiciels système par typage statique

Forthcoming Database

BIG Data et R: opportunités et perspectives

Vérification formelle de la plate-forme Java Card

REMOTE DATA ACQUISITION OF EMBEDDED SYSTEMS USING INTERNET TECHNOLOGIES: A ROLE-BASED GENERIC SYSTEM SPECIFICATION

Bases de programmation. Cours 5. Structurer les données

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Dafoe Présentation de la plate-forme UIMA

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Économétrie, causalité et analyse des politiques

Une méthode d apprentissage pour la composition de services web

TP1 : Initiation à Java et Eclipse

Rapport d activité. Mathieu Souchaud Juin 2007

Qualité de la conception de tests logiciels : plate-forme de conception et processus de test

Machines virtuelles Cours 1 : Introduction

OCL - Object Constraint Language

Programmation d'agents intelligents Vers une refonte des fils de raisonnement. Stage de fin d'études Master IAD 2006

AGROBASE : un système de gestion de données expérimentales

ACTIVITÉ DE PROGRAMMATION

Principe de symétrisation pour la construction d un test adaptatif

Qualité du logiciel: Méthodes de test

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Editing and managing Systems engineering processes at Snecma

STAGE IREM 0- Premiers pas en Python

Programmer en JAVA. par Tama

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Méthodologie de conceptualisation BI

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Introduction au langage C

Gestion de projets logiciels. Xavier Dubuc

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Eclipse Process Framework et Telelogic Harmony/ITSW

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

physicien diplômé EPFZ originaire de France présentée acceptée sur proposition Thèse no. 7178

Prise en compte du facteur humain. Cédric Soubrié

Ingénierie et gestion des connaissances

Métriques de performance pour les algorithmes et programmes parallèles

SEMINAIRE SAS VISUAL ANALYTICS LAUSANNE, MARCH 18 : JÉRÔME BERTHIER VALERIE AMEEL

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Mobile OGSI.NET: Grid Computing on Mobile Devices

T. Gasc 1,2,3, F. De Vuyst 1, R. Motte 3, M. Peybernes 4, R. Poncet 5

Traduction des Langages : Le Compilateur Micro Java

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

ÉVALUATION DE LA MAINTENABILITÉ DE S3MDSS AVEC L OUTIL SONAR

Liste de conférences et revues Thème Com A

LIVRE BLANC Décembre 2014

IFT2255 : Génie logiciel

Objets et Programmation. origine des langages orientés-objet

CEG4566/CSI4541 Conception de systèmes temps réel

Génération de code binaire pour application multimedia : une approche au vol

Automatisation de l administration système avec

Génie logiciel (Un aperçu)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Retour d expériences avec UML

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Analyse des logiciels d application spécialisée pour le courtage en épargne collective

Les simulations dans l enseignement des sondages Avec le logiciel GENESIS sous SAS et la bibliothèque Sondages sous R

Entreposage de données complexes pour la médecine d anticipation personnalisée

Un environnement de déploiement automatique pour les applications à base de composants

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Premiers Pas en Programmation Objet : les Classes et les Objets

La technologie Java Card TM

Auto-évaluation Programmation en Java

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Administrateur de Parc PC

L enseignement de méthodes agiles dans un contexte d apprentissage actif

Quatrième partie IV. Test. Test 15 février / 71

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Vulgarisation Java EE Java EE, c est quoi?

SARM: Simulation of Absorption Refrigeration Machine

Une proposition d extension de GML pour un modèle générique d intégration de données spatio-temporelles hétérogènes

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

E 5040 TREIZIÈME LÉGISLATURE SESSION ORDINAIRE DE

Vers une approche Adaptative pour la Découverte et la Composition Dynamique des Services

Initiation à l algorithmique

Utilisation de l ingénierie des modèles pour la conception collaborative de produits mécaniques

Préparer un état de l art

Open Source, Mythes & Réalités La création de valeur grâce aux technologies Open Source

HERMES 5.1. Méthode de gestion pour tous les projets MANUEL DE REFERENCE

Guide d utilisation du service e-banking

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

1 Actuate Corporation de données. + d analyses. + d utilisateurs.

Les BRMS Business Rules Management System. Groupe GENITECH

Vers l'orchestration de grilles de PC par les mécanismes de publicationsouscription

Algorithmique et Programmation Fonctionnelle

Algorithmique et Programmation, IMA

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Transcription:

Outil SANTE: Détection d erreurs par analyse statique et test structurel des programmes C Omar Chebaro LIFC, Université de Franche-Comté, 25030 Besançon France CEA, LIST, Laboratoire Sûreté des Logiciels, PC 94 91191 Gif-sur-Yvette France omar.chebaro@cea.fr Résumé. Ce papier présente un prototype appelé SANTE (Static ANalysis and TEsting), qui implémente une nouvelle méthode combinant l analyse statique et le test structurel pour la détection des erreurs à l exécution dans les programmes C. Tout d abord, un outil d analyse statique (Frama-C) est appelé pour générer des alarmes lorsqu il ne peut pas garantir l absence d erreurs à l exécution. Ensuite ces alarmes guident la génération de tests structurels dans PathCrawler qui va essayer de confirmer les alarmes en activant des bugs sur certains cas de test. Mots clés: test structurel, analyse statique, erreurs à l exécution, déboguage des programmes C, alarm-guided test generation. 1 Introduction La validation des logiciels est une partie cruciale dans le cycle de leur développement. Deux techniques de vérification et de validation se sont démarquées au cours de ces dernières années : l analyse statique et l analyse dynamique. Ces deux techniques ont longtemps été considérées et étudiées comme deux domaines séparés. Les points forts des deux techniques sont complémentaires. L analyse statique (1) est imprécise mais correcte. En effet, ses résultats peuvent être plus faibles que souhaités, mais ils présentent l avantage d être valables pour l ensemble des exécutions. L analyse dynamique quant à elle est une méthode précise mais incomplète. En effet, pour un cas de test donné, l analyse dynamique peut examiner le comportement exact du programme. Cependant cette analyse est incomplète en raison du grand nombre (voire infinité) de cas de tests possibles. Pour résumer, si aucune menace d erreur (d un type particulier) n est levée lors de l analyse statique dans aucun des comportements possibles d un programme donné alors il est certain que ce programme ne contient pas ce genre d erreurs. Cependant, les erreurs potentielles signalées par cette analyse peuvent s avérer de fausses alarmes. Par contre, même si l analyse dynamique ne peut en général prouver l absence d erreurs dans un programme, une erreur détectée par cette analyse est forcément réelle.

SANTE: Détection d erreurs par analyse statique et test structurel FIG. 1 SANTE : Architecture Ce papier décrit notre outil nommé SANTE (Static ANalysis and TEsting) qui implémente une méthode mixte de recherche des erreurs à l exécution dans les programmes C par analyse statique et test structurel afin de rendre leur recherche plus précise, automatique et diminuer le nombre de fausses alertes. Le papier est organisé comme suit. La section 2 décrit notre outil et son implémentation. La section 3 donne quelques perspectives et conclut. 2 Implémentation SANTE (2; 3) est basé sur deux outils : Frama-C, une plate-forme pour l analyse statique des programmes C, et PathCrawler, un outil de génération de tests structurels. Frama-C (4) est développé en collaboration entre le CEA LIST et le projet ProVal de l IN- RIA Saclay. Il est organisé sous forme d une architecture à greffons. Chaque greffon peut

Omar Chebaro faire un type d analyse et se servir des résultats d analyses faites par les autres greffons. Frama-C est distribué en open source sur (4) avec ses différents greffons. Développé au CEA LIST, PathCrawler (5; 6) est un outil de génération de tests structurels pour les fonctions C. Il analyse le code source pour déduire les cas de test. Il cherche à satisfaire le critère de couverture de tous les chemins, ou le critère de couverture de tous les k-chemins (k-path) qui restreint la génération aux chemins avec au plus k itérations successives de chaque boucle. Il utilise la recherche en profondeur d abord. SANTE assemble ces deux outils hétérogènes utilisant différentes technologies (telles que l interprétation abstraite et la programmation en logique avec contraintes). La figure 1 illustre l architecture de SANTE. Notre choix d implémentation a été de relier PathCrawler à Frama-C via un nouveau greffon dans Frama-C, et d adapter PathCrawler afin qu il accepte les informations fournies par d autres greffons. L idée principale détaillée dans (2) est d appeler l analyse de valeurs (7) de Frama- C qui va calculer et sauvegarder les sur-ensembles des valeurs possibles des variables à chaque instruction du programme. Entre autres, ces ensembles peuvent être utilisés pour exclure la possibilité d une erreur à l exécution. L analyse de valeurs va générer des alarmes pour les instructions pour lesquelles l absence d erreurs d exécution n est pas assurée par analyse statique. Par exemple, pour l instruction y = x/z, le gréffon émet "Alarme : z peut être 0!" et retourne la condition caractérisant un état d erreur (z == 0) si 0 est contenu dans le sur-ensemble de valeurs calculées pour z avant cette instruction. Ensuite, ces alarmes sont transférées à PathCrawler, qui les utilisera pour guider la génération de tests. PathCrawler essaie de confirmer les alarmes en activant des erreurs sur certains cas de test lors de son parcours de tous les chemins ou k-chemins. Nous appelons cette technique alarm-guided test generation. Cette approche passe par la génération automatique des branches d erreurs correspondant à la transition symbolique à couvrir (l instruction menaçante) avec des conditions sur les variables caractérisant un état d erreur. Dans l exemple précédant, si l alarme est émise, l instruction menaçante y=x/z ; sera remplacée par if(z==0) storebugandexit(); else y=x/z; Nous avons adapté l algorithme de génération de PathCrawler pour qu il cherche à couvrir ces branches obtenues à partir des résultats de l analyse statique. En cas de réussite, Path- Crawler signale une erreur à l exécution et arrète l exécution du cas de test en cours. Les techniques d évaluation symbolique à l aide de la programmation par contraintes (8) sont utilisées pour concrétiser la menace et générer un cas de test. Notre prototype SANTE traite actuellement le langage C avec les tableaux, pointeurs, conditionnels, boucles et appels de fonctions. Il prend en entrée le code source du programme sous test, et le contexte de test qui comprend les domaines des variables d entrée et éventuellement des préconditions. Il produit en sortie les erreurs trouvées avec des cas de tests activant ces erreurs, et les menaces restantes qui sont de fausses alarmes (faux positifs) ou des erreurs qu on n a pas pu confirmer à cause de l incomplétude du test. Un travail en cours vise à enregistrer ces résultats dans l AST de Frama-C, pour que d autres greffons puissent les exploiter par la suite.

SANTE: Détection d erreurs par analyse statique et test structurel 3 Conclusion Les premiers résultats obtenus sont prometteurs (2). Ils montrent que l outil SANTE combinant l analyse statique et l analyse dynamique est plus performant que chacun de ces outils utilisés séparément. Il est plus précis qu un analyseur statique et plus efficace en termes de temps et de nombre d erreurs détectées qu un outil de test structurel. Les perspectives de travail incluent la poursuite des recherches visant à éliminer les alarmes non confirmées, mieux traiter d autres types d alarmes (par exemple les pointeurs non valides, les variables non initialisées) et intégrer le slicing de programme qui pourrait simplifier le programme par rapport à la menace détectée et donc accélerer la phase de géneration de test. Remerciements. Je remercie mes encadrants Alain Giorgetti, Jacques Julliand et Nikolai Kosmatov pour leurs nombreux conseils et discussions ainsi que tous les membres des équipes Frama-C et PathCrawler d avoir fourni les outils et de leur disponibilité. Références [1] Nielson, F., Nielson, H.R., Hankin, C. : Principles of Program Analysis. Springer-Verlag New York, Inc., Secaucus, NJ, USA (1999) [2] Chebaro, O., Kosmatov, N., Giorgetti, A., Julliand, J. : Combining static analysis and test generation for C program debugging. In Fraser, G., Gargantini, A., eds. : TAP 10, 4th Int. Conf. on Tests and Proofs. Volume 6143 of LNCS., Malaga, Spain (2010) (A paraître). [3] Chebaro, O., Kosmatov, N., Giorgetti, A., Julliand, J. : Combining Frama-C and Path- Crawler for C program debugging. extended abstract. In : GDR GPL 2010, 2èmes journées nationales du Groupement de recherche CNRS du Génie de la programmation et du logiciel, Pau, France (2010) 217 218 [4] Frama-C : Framework for static analysis of C programs (2007-2010) http ://www.frama-c.com/. [5] Botella, B., Delahaye, M., Hong-Tuan-Ha, S., Kosmatov, N., Mouy, P., Roger, M., Williams, N. : Automating structural testing of C programs : Experience with PathCrawler. In : AST, Vancouver, Canada, IEEE Computer Society (2009) 70 78 [6] Williams, N., Marre, B., Mouy, P. : On-the-fly generation of structural tests for C functions. In : ICSSEA 03, Paris (October 2003) [7] Canet, G., Cuoq, P., Monate, B. : A value analysis for C programs. IEEE International Workshop on Source Code Analysis and Manipulation (2009) 123 124 [8] Kosmatov, N. : Chapter XI : Constraint-Based Techniques for Software Testing. Advances in Intelligent Information Technologies Book Series. In : Artificial Intelligence Applications for Improved Software Engineering Development : New Prospects. IGI Global (2009) ISBN : 1605667587.

Omar Chebaro Summary This paper presents our tool prototype called SANTE (Static ANalysis and TEsting), implementing a new combination of static analysis and structural program testing for detection of run-time errors in C programs. First, a static analysis tool (Frama-C) is called to generate alarms when it cannot ensure the absence of run-time errors. Second, these alarms guide a structural test generation tool (PathCrawler) trying to confirm alarms by activating bugs on some test cases.