• Aucun résultat trouvé

Chapitre 5 Impl´ ementation

5.2 Rapprochement de Frama-C et PathCrawler

Les outils Frama-C et PathCrawler sont d´evelopp´es ind´ependamment l’un de l’autre et n’ont pas ´et´e initialement con¸cus pour collaborer. sante assemble ces deux ou- tils h´et´erog`enes, utilisant diff´erentes technologies telles que l’interpr´etation abstraite et la programmation en logique avec contraintes. Dans cette partie, nous d´ecrivons d’une part l’int´egration de PathCrawler dans Frama-C par le greffon PC Analyzer et d’autre part l’adaptation de la g´en´eration de test dans PathCrawler afin de d´etecter des er- reurs `a l’ex´ecution `a partir des assertions ACSL.

Frama-C est extensible par construction, grˆace `a son architecture `a greffons. Chaque greffon peut utiliser les r´esultats d’analyses faites par les autres greffons. ainsi que les fonctionnalit´es fournies par le noyau mˆeme de Frama-C. Notre choix d’impl´ementation est donc de relier PathCrawler `a Frama-C via un nouveau greffon dans Frama-C, et d’adapter PathCrawler afin qu’il accepte les informations fournies par d’autres greffons. Comme PathCrawler, le noyau de Frama-C se base sur le format normalis´e CIL [CIL06]. Mais Frama-C ´etend CIL avec le langage de sp´ecification ACSL (ANSI /

ISO C Specification Language) [BFH+08]. Cette extension de CIL ´etend l’interface d’uti-

lisation ainsi que les types et les op´erations afin de traiter correctement les programmes C annot´es. Par cons´equent, la version de CIL utilis´ee dans Frama-C et celle qui ´etait utili- s´ee dans PathCrawler avant cette th`ese (avant la version 2.8) n’´etaient pas compatibles

5.2. Rapprochement de Frama-C et PathCrawler

1 l e t startup _ =

2 i f Options . Enabled . get () then

3 begin

4 Format . printf " @ \ n [ P C A n a l y z e r] started ... @ . " ; 5 l e t proj = c r e a t e P r o j e c t () in 6 l e t ast = c o p y A s t T o P r o j e c t proj in 7 try 8 v i s i t F u n c t i o n s ast ; 9 g e n e r a t e P i f F i l e s; 10 g e n e r a t e L a n c e u r; 11 g e n e r a t e I n s t r u m e n t e d C o d e ; 12 Format . printf " @ \ n [ P C A n a l y z e r] f i n i s h e d ... @ . " ; 13 with Exit -> () 14 end

Figure 5.1 – Fonction principale de PC Analyzer

et les arbres de syntaxe abstraite fournis par les deux ´etaient compl`etement diff´erents.

5.2.1

PC Analyzer

Nous avons d´evelopp´e un greffon de Frama-C nomm´e PC Analyzer (PathCrawler Analyzer). Il est ´ecrit en OCAML et est d´esormais utilis´e dans toutes les distributions de PathCrawler, depuis la version 2.8 de f´evrier 2010. Ce greffon r´ealise l’´etape d’ana- lyse et d’instrumentation, la premi`ere ´etape dans le fonctionnement de PathCrawler, qui consiste `a instrumenter le programme sous test et `a g´en´erer les fichiers n´ecessaires `a l’´etape de g´en´eration de tests. Ces derniers sont g´en´er´es `a partir de l’arbre de syntaxe abstraite fourni par Frama-C.

PC Analyzer exploite les services fournis par le noyau de Frama-C. Il est ´egalement bien plac´e pour exploiter les analyseurs distribu´es avec Frama-C. PC Analyzer adapte ´egalement PathCrawler afin qu’il accepte les informations fournies par d’autres gref- fons.

La figure 5.1 pr´esente sommairement la fonction principale de PC Analyzer. La condi- tionnelle `a la ligne 2 v´erifie si l’option PC Analyzer est s´electionn´ee. Les lignes 4 et 12

marquent le d´ebut et la fin du traitement. `A la ligne 5, la fonction createProject utilise

les primitives fournies par le noyau de Frama-C pour cr´eer un nouveau projet d’analyse. La fonction copyAstToProject (ligne 6) utilise aussi les primitives fournies par le noyau de Frama-C. Elle copie l’arbre de syntaxe normalis´e dans ce projet et retourne cet arbre.

`

A la ligne 8, la fonction visitFunctions parcourt l’arbre de syntaxe (ast) pour collec- ter les informations n´ecessaires pour cr´eer les fichiers PIF (voir la section 3.3.3). Cette fonction utilise le visiteur pathcrawlerVisitor que nous avons d´evelopp´e `a cet effet et qui h´erite du visiteur fourni par le noyau de Frama-C. La fonction generatePifFiles

(ligne 9) g´en`ere les fichiers PIF (regroup´es sous le nom f.pif dans la figure 3.5) ainsi que le fichier de pr´econdition par d´efaut (nomm´e params dans la figure 3.5). La fonction

generateLanceur (ligne 10) g´en`ere le lanceur (nomm´e lanceur.c dans la figure 3.5).

La fonction generateInstrumentedCode (ligne 11) g´en`ere le fichier instrument´e (nomm´e

inst.c dans la figure 3.5).

La mise en œuvre du PC Analyzer ouvre la voie `a d’autres pistes de recherche de com- binaisons potentielles entre l’analyse dynamique faite par PathCrawler et les autres greffons d’analyse statique de Frama-C, notamment le WP et le RTE.

5.2.2

Traitement des assertions dans PathCrawler

PC Analyzer apporte une partie du langage de sp´ecification ACSL `a PathCrawler. Actuellement PC Analyzer impl´emente un sous ensemble d’ACSL, notamment les asser-

tions avec le mot cl´e assert. Des travaux en cours au laboratoire de sˆuret´e des logiciels

(LSL) au CEA LIST visent `a impl´ementer les pr´econditions ACSL dans PC Analyzer. Le traitement d’assertions dans PC Analyzer correspond `a l’ajout des branches d’er- reurs pr´esent´e dans la partie 4.5.1. Ces branches ´etendent les capacit´es de l’outil pour lui permettre de rechercher les cas de test atteignant une situation d’erreur `a l’ex´ecution (acc`es `a la m´emoire invalide, division par z´ero, d´ebordement de buffer, ...). Pour cela nous int´egrons dans le programme `a tester des objectifs de test suppl´ementaires repr´esentant ces situations.

Ce traitement des assertions dans PathCrawler ´etend son domaine d’utilisation. PathCrawler ´etait initialement utilis´e pour v´erifier des propri´et´es structurelles, par exemple l’absence de code mort ou encore la couverture des instructions par un ensemble de tests et des propri´et´es de performance, par exemple le pire temps d’ex´ecution (WCET) d’un programme C. L’ajout des assertions ´etend PathCrawler afin qu’il puisse v´erifier des propri´et´es de sˆuret´e telles que l’absence d’erreurs `a l’ex´ecution. Il peut ´egalement g´e- n´erer des cas de test exhibant des violations d’assertions ins´er´ees dans le programme par l’utilisateur.

Documents relatifs