23
Les outils de v´ erification: ` a la rescousse du logiciel fiable Xavier Leroy Inria Paris-Rocquencourt Rencontre Inria-industrie, 2013-10-04

Owf 2013 rii panorama leroy

Embed Size (px)

Citation preview

Page 1: Owf 2013 rii panorama leroy

Les outils de verification:a la rescousse du logiciel fiable

Xavier Leroy

Inria Paris-Rocquencourt

Rencontre Inria-industrie, 2013-10-04

Page 2: Owf 2013 rii panorama leroy

La qualite du logiciel a l’Inria

De nombreux travaux sur differentes facettes du probleme :

Genie logiciel :approches classiques (ingenierie dirigee par les modeles) ou pas.

Langages de programmation :langages fonctionnels (OCaml), langages reactifs, langages dedies(domain-specific languages).

Verification et validation :les outils de verification formelle comme alternative au test(cet expose).

Fondations :demonstration automatique (Alt-Ergo, VeriT), interactive (Coq) ;semantiques formelles de langages comme C, Javascript, . . .

Page 3: Owf 2013 rii panorama leroy

Les domaines d’application

Historiquement : le logiciel embarque critiqueou sont en jeu des vies humaines (aeronautique, ferroviaire)ou des interets economiques majeurs (cartes a puce).

En plein essort : le logiciel d’infrastructure systeme et reseaux(Linux, Windows, Apache, OpenSSL, . . . ).

Demain ? des logiciels utilisateurs �grand public�

(navigateurs Web, applis smartphones, applis Web)notamment pour la confidentialite et le respect de la vie privee.

Page 4: Owf 2013 rii panorama leroy

La verification

Methode dominante aujourd’hui : le test(meme a de tres haut niveaux d’exigence, p.ex. DO-178).

Une methode qui atteint ses limites :

• Exigences reglementaires : certaines normes requierent desgaranties plus fortes (Criteres Communs niveau EAL7).

• Difficultes a �couvrir� l’ensemble d’un logiciel complexe(notamment la bonne gestion des entrees erronees).

• Couts considerables pour construire la suite de tests et pourl’administrer.

Page 5: Owf 2013 rii panorama leroy

Verification et validation

Que faire lorsque le test ne suffit plus ?

Reflexe de l’ingenieur : utiliser des mathematiques !

Reflexe de l’informaticien : se faire aider par la machine !

→ Les outils de verification formelle de code.

Page 6: Owf 2013 rii panorama leroy

La verification formelle de logiciel

Etablir des proprietes de surete ou de securite du logiciel qui sontvraies

• de toute execution possible du logiciel ;

• pour toutes les valeurs possibles des entrees ;

• sans executer le logiciel ;

• en temps fini et raisonnable.

Deux exemples dans la suite :

• Analyse statique de valeurs.

• Verification deductive (preuve de programmes).

Les fondements de ces approches sont connus depuis longtemps(preuve de programmes : 1969 ; interpretation abstraite : 1977 ;model checking : 1981) mais c’est l’apparition recente d’outils deverification qui les rend praticables.

Page 7: Owf 2013 rii panorama leroy

L’analyse statique de valeurs

Approximer (par un sur-ensemble) toutes les valeurs que peuventprendre les variables et les cases memoire d’un programme pendanttoutes ses executions.

En deduire que le programme n’a pas de comportement dangereux.

Page 8: Owf 2013 rii panorama leroy

L’analyse statique de valeurs

Approximer (par un sur-ensemble) toutes les valeurs que peuventprendre les variables et les cases memoire d’un programme pendanttoutes ses executions.

En deduire que le programme n’a pas de comportement dangereux.

Page 9: Owf 2013 rii panorama leroy

Exemple d’analyse statique

unsigned char entrees[10];

double table[256];

int i, somme, moyenne;

somme = 0;

for (i = 0; i < 10; i++) {somme += entrees[i]; // somme ∈ [0, 2550]

}moyenne = somme / 10; // moyenne ∈ [0, 255]return table[moyenne]; // acces dans les bornes

Page 10: Owf 2013 rii panorama leroy

Vraies et fausses alarmes

Vraie alarme Fausse alarme(comportement dangereux) (analyse pas assez precise)

Approximation plus fine (polyedre au lieu de rectangle) :pas d’alarme

Page 11: Owf 2013 rii panorama leroy

Proprietes garanties par analyse statique

Principalement : l’absence d’erreurs a l’execution.

• Tableaux et pointeurs :• Pas d’acces hors-bornes.• Pas de dereferencement du pointeur nul.• Pas d’acces apres un free ; pas de double free.• Contraintes d’alignement du processeur.

• Entiers :• Pas de division par zero.• Pas de debordements arithmetiques.

• Flottants :• Pas de debordements arithmetiques (infinis).• Pas d’operations indefinies (not-a-number).

Page 12: Owf 2013 rii panorama leroy

Differents types d’analyses de valeurs

Analyses �non-relationnelles� : proprietes d’une seule variable.

• De type numerique : intervalle de variation x ∈ [a, b] ;congruences x mod N = 0.

• De type pointeur : validite des acces memoire, non-aliasingentre pointeurs.

Analyses relationnelles : invariants entre plusieurs variables.(Exemple : polyedres = inegalites lineaires ax + by ≤ c .)

Analyses de proprietes �non fonctionnelles� :

• Consommation memoire.

• Temps d’execution (WCET).

• Flots d’information.

Page 13: Owf 2013 rii panorama leroy

Analyse de temps d’execution : aiT WCET

Page 14: Owf 2013 rii panorama leroy

Quelques outils d’analyse statique

Outils �generalistes� :

• Coverity

• MathWorks Polyspace verifier.

• Frama-C value analyzer.

Outils specialises a un domaine d’application :

• Microsoft Static Driver Verifier (code systeme Windows)

• Astree (codes de controle-commande).

• Fluctuat (analyse symbolique des erreurs en flottants).

Outils operant sur le code machine apres compilation :

• aiT WCET, aiT StackAnalyzer.

Page 15: Owf 2013 rii panorama leroy

Verification deductive(preuve de programmes)

Annoter le programme avec des formules logiques :

• Preconditions (exigences sur les arguments de fonctions)

• Postconditions (garanties sur les resultats de fonctions)

• Invariants de boucles.

Verifier que :

• Pour chaque fonction, preconditions impliquentpostconditions.

• Pour chaque appel de fonction, les preconditions sontsatisfaites.

Outillage :

• Generateurs d’obligations de verifications.

• Demonstrateurs automatiques.

Page 16: Owf 2013 rii panorama leroy

Exemple de verification deductive

Recherche dichotomique dans une table.

int binary_search(long t[], int n, long v) {

int l = 0, u = n-1;

while (l <= u) {

int m = l + (u - l) / 2;

if (t[m] < v)

l = m + 1;

else if (t[m] > v)

u = m - 1;

else return m;

}

return -1;

}

Page 17: Owf 2013 rii panorama leroy

Specification des pre- et post-conditions

Dans le langage ACSL de l’outil Frama-C :

/*@ requires n >= 0 && \valid_range(t,0,n-1);

@ behavior success:

@ assumes // array t is sorted in increasing order

@ \forall integer k1, k2;

@ 0 <= k1 <= k2 <= n-1 ==> t[k1] <= t[k2];

@ assumes // v appears somewhere in the array t

@ \exists integer k; 0 <= k <= n-1 && t[k] == v;

@ ensures 0 <= \result <= n-1 && t[\result] == v;

@ behavior failure:

@ assumes // v does not appear anywhere in the array t

@ \forall integer k; 0 <= k <= n-1 ==> t[k] != v;

@ ensures \result == -1;

@*/

Page 18: Owf 2013 rii panorama leroy

Specification de l’invariant de boucle

int binary_search(long t[], int n, long v) {

int l = 0, u = n-1;

/*@ loop invariant 0 <= l && u <= n-1;

@ for success:

@ loop invariant

@ \forall integer k;

@ 0 <= k < n && t[k] == v ==> l <= k <= u;

@ loop variant u-l;

@*/

while (l <= u) {

int m = l + (u - l) / 2;

if (t[m] < v)

l = m + 1;

else if (t[m] > v)

u = m - 1;

else return m;

}

return -1;

}

Page 19: Owf 2013 rii panorama leroy

Production et preuve des obligations

Page 20: Owf 2013 rii panorama leroy

Comparaison analyse statique /verification deductive

Analyse statique Verification deductive

Proprietesgaranties

Absence d’erreursa l’execution

Proprietes fonctionnellesarbitrairement complexes

Annotationsmanuelles

Pas ou tres peu Beaucoup

Passage a l’echelle 105–106 lignes 102–103 lignes

Page 21: Owf 2013 rii panorama leroy

Outils et exemples

Quelques outils de verification deductive :

• Pour Java : KeYs

• Pour C# : Spec# / Boogie

• Pour C : Caveat, Frama-C / WP

Quelques exemples de verifications deductives de grande taille :

• L4.verified (NICTA, Australie) :verification du micro-noyau securise seL4 (8000 lignes).

• CompCert (Inria) :verification d’un compilateur optimisant pour le langage C.

Page 22: Owf 2013 rii panorama leroy

Conclusions

Des fondations theoriques deja anciennes . . .

. . . qui sont devenues praticables ces 10 dernieres annees.

Une premiere generation d’outils disponible . . .

. . . qui commencent a etre utilises pour le logiciel critique embarque

. . . et ne demandent qu’a etre essayes dans d’autres domaines.

Un domaine ou l’industrie europeenne est en pointe. . .

. . . et ou la recherche academique est tres active.

Page 23: Owf 2013 rii panorama leroy

Quelques directions de travail

Prise en compte du parallelisme a memoire partagee :

• Analyse statique (absence de data races ; WCET).

• Verification deductive (logiques de separation).

• Formalisation des modeles memoires �faibles� implementespar les multicoeurs.

Traiter d’autres langages que C & Java.

Verification fine des calculs flottants.

Vers une verification formelle des outils de generation de code etde verification.