Spécification formelle pour les API · Notre motivation − Aider le développement et la...

20

Transcript of Spécification formelle pour les API · Notre motivation − Aider le développement et la...

Page 1: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la
Page 2: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Dániel Darvas (CERN BE-ICS-PCS)

Spécification formelle pour les API

CERN-ESTEREL séminaire

21/01/2016, CERN

Travail conjoint avec B. Fernández, E. Blanco,

R. Speroni, I. Majzik

http://cern.ch/plcspecif

Page 3: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Notre motivation

− Aider le développement et la réingénierie (re-engineering)• Notre code évolue depuis 10+ ans

• Le code et la spécification textuelle sont inconsistants

− La vérification n’a aucun sens sans propriétés à vérifier

− Faciliter d’exprimer les exigences complexes

− Générer (une partie) du code peut être possible

Page 4: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Nos exigences

− Méthode légère (lightweight)

• Facile à apprendre

• Pas besoin de Bac+5 en informatique

− Méthode adaptée aux API

• Facile d’exprimer les exigences communes

• Sémantique adaptée

− Méthode formelle

− Outils disponibles

: B, VDM, Z,

ST-LTL, …

: UML, Simulink,

Spec-TRM, …

Plus d’information: D. Darvas, I. Majzik, E. Blanco. Requirements towards a formal

specification language for PLCs. http://doi.org/10.5281/zenodo.14907

Page 5: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Méthodes de spécification pour les API

Trop théorique Trop proche du code

Exemple: ProcGraphExemple: ST-LTL

Spec2 := ALWAYS( (v >= lowlimit) & (v <= highlimit));

Spec3 := ALWAYS(start -> EVENTUALLY running);

Spec5 := ALWAYS( EStop OR NOT Activate -> Not Run );

Spec6 := ALWAYS( Run_risingEdgeONLY_IF Not EStop & Not Error& Reset_risingEdge );

Spec7 := NEVER( Reset & Reset_previous & NOT EStop & Run_risingEdge );

Page 6: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Notre proposition: PLCspecif

− Spécification simple, formelle, adaptée aux API

− Spécification complète – pour des modules d’API

− Basée sur la connaissance des développeurs dans la

domaine d’API

• En réutilisant les méthodes semi-formelles

fréquemment utilisées

• Automates finis

• Circuits logiques

• Avec sémantiques précises

Page 7: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Notre proposition: PLCspecif

Méthode hiérarchique

− Un arbre de modules

• Modules internes / composés

• Modules feuilles

− La logique est définie dans les modules feuilles

Composite0

Statemachine1 Statemachine2 Composite1

Statemachine3 IoConnection1

IoConnection2

Page 8: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Traitement des entrées

Logique principale

Traitement des sorties

Notre proposition: PLCspecif

Logique principale propre (clean core logic)

− Beaucoup de traitements d’entrées/sorties dans les

programmes API

− Tous les modules sont structurés:

Page 9: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Notre proposition: PLCspecif

Adapté aux API

− Événements utilisés comme dans les API

− Plusieurs formalismes pour la logique principale

• Le développeur peut choisir le meilleur

− Représentation tabulaire des expressions

• Beaucoup d’expressions logiques complexes

Plus d’information: D. Darvas, E. Blanco, I. Majzik. A formal specification method for PLC-

based applications. ICALEPCS 2015. http://icalepcs.synchrotron.org.au/papers/wepgf091.pdf

and http://icalepcs.synchrotron.org.au/posters/wepgf091_poster.pdf

Page 10: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

PLCspecif: exemple (1 module)

Logique principale est

séparée

Sémantique adaptée

aux API

Soutiens la vérification

Page 11: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Où sommes-nous maintenant?

− Le projet a commencé il y a 1,5 ans

− Syntaxe et sémantique (formelle) définies

− Méthode de vérification définis

− Outil très-très expérimental

− Pour le moment, seulement pour des modules d’API

(pas pour des applications complètes)

• Travail futur

− Néanmoins, on a déjà essayé dans la vraie vie

Plus d’information: D. Darvas, I. Majzik, E. Blanco. Syntax and semantics of PLCspecif.

EDMS report 1523877, 2015. https://edms.cern.ch/document/1523877

Page 12: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Étude de cas: vérification de SM18

But: assurer la sûreté des tests

© CERN

Critique pour

la sûreté

Page 13: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

SM18: chronologie de la réalisation

Analyse

• Analyse des exigences (semi-formelles)

• Analyse de la sûreté

Réalisation

• Réalisation du code (manuelle – API de sécurité)

Vérification 1.

• Vérification formelle (vérification de modèles)

• 12 problèmes sont identifiés (et fixés)

Vérification 2.

• Développement de la spécification formelle

• Vérification basée sur la spécification formelle

Page 14: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Vérification basée sur la spécification formelle

Spécification formelle + Vérification de l’équivalence de comportement

• Spécification formelle nécessaire

• Difficile à calculer le résultat

• Complet

• Pas besoin d’extraire les exigences

+2 nouveaux problèmes trouvés!

comparaison

Code APISpécification

PLCspecif

Modèle

formel

Modèle

formel

Par un vérificateur

de modèles

Page 15: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Problèmes trouvés

Au total 14 problèmes trouvés

4 exigences mal comprises

6 problèmes impossible à trouver en utilisant nos

méthodes de tests

2 trouvés seulement en utilisant la spécification

formelle

Page 16: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Résumé

− PLCspecif

• Spécification formelle pour des modules d’API

• Complet, léger, adapté aux API

• Pour le développement du code et la vérification

• Déjà utilisé pour un projet critique

− Travail futur

• Des outils, des outils, des outils

• Extension aux applications d’API complètes

http://cern.ch/plcspecif

Page 17: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la
Page 18: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la
Page 19: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la
Page 20: Spécification formelle pour les API · Notre motivation − Aider le développement et la réingénierie (re- engineering) • Notre code évolue depuis 10+ ans • Le code et la

Composite0

Statemachine1 Statemachine2 Composite1

Statemachine3 IoConnection1

IoConnection2

Exemple:

Basée sur

IEC 61131