Ces méthodes permettent de réaliser une analyse parfaite du problème. La contribution de ces méthodes
est certes positive même si elle reste insuffisante. Elles permettent de dégrossir le problèmes. La
sémantique des modèles conçus reste informelle et mal définie, il y a un manque de rigueur
mathématique, analyse profonde du problème très difficile et couteuse. Par conséquent, il est difficile
prouver certaines propriétés du système. Elles ne garantissent pas la sécurité du système.
En bref, ces méthodes ont une sémantique ou de règles de validation incomplètes. Mais il est impossible
de raisonner/analyser formellement sur le système en vue. Il peut ainsi y avoir des ambigüités, . . .;
ceci constitue des sources de BUG dans le système.
Méthode formelle
Une méthode formelle utilise les mathématiques pour laisser
moins de place aux intuitions et aux erreurs. Elle dispose
des entités suivantes:
1. Un langage qui est un moyen pour exprimer et concevoir
un système, la nature de ce langage peut être symbolique,
graphique etc.
2. Une sémantique qui donne la signification des éléments
du langage
3. Des règles de validation qui permettent d’exprimer les
propriétés désirées du système;, et d’utiliser la
sémantique du système pour validation. Les règles doivent
laisser moins de place aux erreurs et à l’intuition.
Spécification formelle
Il convient de distinguer :
– les opérations exprimant le comportement d’un système
– des opérations caractérisant les données du système.
Les premières opèrent sur les données du système, alors que les dernières
permettent de construire et exploiter les données du système.
Démarche de spécification
Il y a un troisième paradigme qui semble être transversal. C’est le
paradigme des processus (les algèbres de processus). Dans ce
paradigme des processus les systèmes sont décrits par les
équations exprimant leur comportement ou leurs états.
Principe
Une spécification permet de construire, à l’aide des concepts de base fournis, un
modèle du système (logiciel) à développer.
Ce modèle doit avoir les propriétés du système. On peut ensuite raisonner sur le
fonctionnement du système en utilisant le modèle.
Concepts de base
On utilise essentiellement les mathématiques discrètes (Théorie des ensembles), et la
Logique.
Concepts de base
Logique, Algèbre, Domaines définis inductivement.
Exemples de formalisme
les langages de spécification algébriques : LPG, ASL, ACT ONE, CLEAR,
OBJ, PLUSS, LARCH, CASL... pour les systèmes séquentiels
les algèbres de processus : LOTOS (combine ACT ONE et CCS,
CSP) pour les systèmes concurrents.
Spécifications hybrides (hybrid approach)
Principe
La spécification permet de compléter une axiomatisation par un
modèle de données ou bien de compléter un modèle de données
par une axiomatisation.
Concepts de base
Concepts de base des approches orientées état et propriétés.
Exemples de formalisme
– RAISE (Combine VDM et CSP)
– VDM-SL et Réseaux de Petri,
– Extended LOTOS(combine ACT ONE, CCS et CSP),
– ZCCS (combine Z et CCS),
–...
Méthodes de développement formel
Pour résumer l’essentiel des idées dans le processus de mise en place d’un
logiciel reprenons en cœur le slogan :
« Prouver c’est programmer et programmer c’est prouver ! »
La deuxième façon de résumer est de considérer l’interprétation suivante de
l’isomorphisme de Curry-Howard:
Axiomes
Preuve Théorèmes est équivalent à Développement Spécifications
Programmations
Il y a plusieurs approches dans les méthodes formelles :
- l'approche opérationnelle :
le développement est basé sur la description d'un système par un
modèle qui a les propriétés du système.
Vérification des propriétés sur le modèle.
Des raffinements corrects successifs sont effectués sur le modèle.
- l'approche axiomatique :
le développement est basé sur l'axiomatisation qui décrit le
comportement du système.
Des vérifications des propriétés sont effectuées, raffinements
possibles.
- l'approche hybride Intégration de méthodes formelles
Quelques définitions
Méthode formelle =
(1)Langage formel (syntaxe précise et sémantique précise) et (2) Système de preuve ou
de raisonnement formel.
Développement formel = transformation systématique des spécifications en
programmes en utilisant des lois préséniles.
Modelisation :
Hoare : A scientific theory is formalised as a mathematical model of reality, from
which can be deduced or calculated the observable properties and of a well-defined
class of processes in the physical world.
2. (Logique, théorie des modèles) Un modèle d'une théorie T est une structure dans
laquelle les axiomes de T sont valides.
Une structure S est modèle d'une théorie T, ou bien S satisfait T si toute formule de T
est satisfaite dans S.
Théorie (du 1er ordre) = tout ensemble de formules logiques (du 1er ordre) dans un
langage donnée (précisément défini).
Modèle comme interprétation d'une spécification cation - une algèbre comme modèle
d'une spécification cation algébrique (axiomatisation).
Ces deux utilisations de modèle se retrouvent dans les approches orientée modèle (ou
état) et orientée propriétés.
Dans le langage courant,
- modèle = (archétype), ce qui sert ou doit servir d'objet d'imitation pour reproduire
quelque chose.
- modèle = (paradigme), modèle de déclinaison, de conjugaison, etc
- modèle = (référence), . . .
Exemples de théories
La théorie des ensembles : elle est basée sur un
ensemble d'axiomes.
Les objets de cette théorie sont appelés
ensembles.
La classe des ensembles est appelée univers.
Les axiomes de la théorie des ensembles (de
Zermelo+Fraenkel) sont les suivants :
- Axiome de l'ensemble vide : il existe un ensemble qui ne contient aucun élément :
c'est l'ensemble vide.
- Axiome d'extensionalité : deux ensembles sont égaux si et seulement si ils
contiennent exactement les mêmes éléments
Développement formel =
transformation systématique des spécifications
en programmes en utilisant des lois prédéfinies.
Exemples : Synthèse, Raffinement
Quelques définitions (suite)
– l’approche hybride
Développement formel
• Développement formel de logiciel
= Transformation systématique d’un modèle
mathématique en code exécutable
= Transformation de l’abstrait en concret
= Passage des structures mathématiques aux
structures
informatiques
= Raffinement jusqu’au code dans un langage de
programmation
Nouveau cycle de vie
Avec les méthodes formelles les cycles de vie classique ne marchent plus. Il
faut les adapter.
Le cycle de vie de Balzer représente la nouvelle famille de cycles de vie
adaptés au développement formel (ou rigoureux !).
Présentation synthétique du
développement formel
Développement correct de logiciels:
Activité de développement formel
Développement de systèmes
informatiques
Aperçu des formalismes et méthodes
de l’approche orientée modèle
Caractérisation des méthodes : un aperçu
Plusieurs caractéristiques peuvent être utilisées pour
caractériser les méthodes.
Considérons les caractéristiques syntaxiques et
sémantiques :
- L'aspect syntaxique → les moyens de description des
spécifications formelles
-L'aspect sémantique → les possibilités de description
sémantique associées aux spécifications
Eléments d'analyse
Quelles méthodes pour quels systèmes ?
Méthode formelle =
Langage de spécification
Système formel (de raisonnement)
Langage de spécification
Logique, théorie des ensembles : langage de données
Systèmes de transition, algèbres de processus : langage de
comportement
Système formel (de raisonnement)
Systèmes de type
Prouveur de théorèmes (theorem proving)
Vérificateur de modèles (model checking)
Développement formel
Développement formel de logiciel =
Transformation systématique d'un modèle mathématique
exécutable.
= Transformation de l'abstrait en concret
= Passage des structures mathématiques aux structures
informatiques
= Raffinement jusqu'au code dans un langage de
programmation.
• En B
– On spécifie
– On prouve
– On développe
– On code
Une (ou plusieurs) machine abstraite
• Cette notion est proche
– Type abstrait, Module, Classe, Composant
Notion d’états et d’espaces d’états
• Observons une variable dans un modèle logique ;
• Elle peut avoir différentes valeurs au cours du temps, ou
encore plusieurs états au cours du temps ;
• Par exemple une variable entière I : on peut observer
logiquement I = 2, I = 6, I = 0 , ··· à condition que I soit
modifiée... ;
• Suite à une modification I change d’états ;
• Le changement d’état peut être modélisé par une action
qui substitue une nouvelle valeur à celle de la variable ;
• De façon générale, pour I entier, il y a potentiellement tout
l’espace des entiers comme états que I peut avoir : on parle
d’espace d’états.
• On généralise à plusieurs variables hI, Ji, hV1, V2, V4, ...i
Approche de développement en B
• L’approches B est dite : orientées modèle (à états)
– Décrire un espace d’états
– Décrire des opérations qui parcourent cet espace
– Système de transition entre états
Approche de spécification
• Un nuplet de variables décrit un état
(mode = jour, lumiere = eteint, temp = 20)
• Un prédicat (sur les variables) décrit un espace
d’états
lumiere = eteint ∧ mode = jour ∧ temp > 12
• Une opération qui affecte les variables change
l’état
mode := jour
• Spécifier en B = Modéliser, décrire un système de
transition (avec une approche logique)
Machine abstraite
Machine Abstraite
Machine abstraite
Machine abstraite
Machine abstraite
Machine abstraite: Exemple de
régulation de la lumière
Machine abstraite : offre des
opérations
Interface des operations
Op Op
• Un en-tête (nom)
• Des données cachées
• Des opérations visibles d’accès à la machine
Les clauses d’une MA
MACHINE
Nom de la machine abstraite (idem nom de la classe)
SETS
Déclaration des ensembles abstraits et énumérés
VARIABLES
Déclaration des variables (idem attributs d’une classe)
INVARIANT
Typage et propriété des variables
INITIALISATION
Définition de la valeur initiale des variables (idem constructeur)
OPERATIONS
Déclaration des opérations (idem méthodes)
END
L’en-tête
MACHINE
reservation
VARIABLES
nbPlacesLibres, capacite
INVARIANT
nbPlacesLibres NAT
capacite NAT
nbPlacesLibres ≤ capacite
END
Exemple : variable
MACHINE
variable (TYPE)
VARIABLES
valeur
INVARIANT
valeur TYPE
END
Les opérations
• Une en-tête (la signature)
liste des paramètres de sortie <-- NOM (liste des paramètres d’entrée)
• Une pré-condition
– Typage des paramètres d’entrée
– Conditions nominales de fonctionnement de l’opération
(domaine de définition)
• Une transformation
– Définition de l’opération comme une transformation des
données internes et une affectation de valeur aux paramètres
de sortie
Exemple : reserver
MACHINE
reservation
…
OPERATIONS
reserver(nbPlaces)=
PRE
nbPlaces NAT1
nbPlaces ≤ nbPlacesLibres
THEN
Définition de l’opération
END
END
Exemple : opérations de variable
MACHINE
variable (TYPE)
…
OPERATIONS
affecter(v) =
PRE
v TYPE
THEN
Définition de l’opération
END
END
Les transformations
reserver(nbPlaces)=
PRE
nbPlaces NAT1
nbPlaces ≤ nbPlacesLibres
THEN
nbPlacesLibres := nbPlacesLibres-nbPlaces
END
Exemple : affecter
affecter(v)=
PRE
v TYPE
THEN
valeur := v
END
Preuve de cohérence