Spécification et qualité du logiciel

Slides:



Advertisements
Présentations similaires
EPITECH 2009 UML EPITECH 2009
Advertisements

Analyse et définition des besoins
Qualité en Développement Laurent Henocque Enseignant Chercheur ESIL/INFO France
Analyse et Programmation Orientées Objets
Eléments de Génie Logiciel
La Gestion de la Configuration
Sémantique des déclarations pour le langage Z minimal
Introduction à l’Algorithmique
Algorithmique Résume.
Cours n° 8 Conception et Programmation à Objets
M.E.D.A.L. Module dEnseignement à Distance pour lArchitecture Logicielle Alain VAILLY Diapositive n° 1 IUP MIAGE - Université de NANTES IUP-MIAGE 3ème.
Régine Laleau Centre d'Étude et de Recherche en Informatique du CNAM
UML - Présentation.
C.
Analyse de la tâche et méthode des scénarios
Quoi ? Un tampon.
1 B Système Enjeux et principes Cours DESS Nantes 04 Décembre 2002 Didier ESSAME.
INTRODUCTION.
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les bases de l’Algorithmique
Initiation à la programmation et algorithmique
Introduction à l’algorithmique
le profil UML en temps réel MARTE
Démarche de résolution de problèmes
Algorithmique et Programmation
Initiation à la conception de systèmes d'information
Programmation logique Logique des prédicats du premier ordre
Algorithmique et Programmation
Complément Le diagramme des classes
Techniques de test Boulanger Jean-Louis.
Semaine #1 INF130 par Frédérick Henri.
Semaine #1 INF135 par Frédérick Henri.
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
CSI3525: Concepts des Languages de Programmation
Ift 2251 Introduction au Génie Logiciel
Chapitre 3 Syntaxe et sémantique.
Partie II Sémantique.
Programmation non procédurale Le projet ECOLE 2000
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Modélisation des données Un langage pour décrire  INVARIANT, PRE-CONDITION, EXPRESSION Concepts et notations utilisés  Logique  Ensembles  Relations.
Les assertions en Java.
Introduction à l’algèbre
Paradigmes des Langages de Programmation
Spécification de programmes et de systèmes
INTRODUCTION.
Supports de formation au SQ Unifié
Hatainville Les Moitiers d’Allonne – Tel : Website : stratic.online.com La démarche projet Mars 2001.
Institut Supérieur des Sciences Appliquées et de Technologie Sousse
Algorithmique et programmation (1)‏
Algorithmes et Programmation
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Introduction au Génie Logiciel
Tutorat en bio-informatique
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Le langage Racket (Lisp)
Initiation à la conception des systèmes d'informations
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Sélection de colonnes (la projection)
François CARCENAC,Frédéric BONIOL ONERA-DTIM Zoubir MAMMERI IRIT
Présentation AICHA REVEL INGENIEUR D’ÉTUDE STERIA DEPARTEMENT TRD
Introduction et Généralités sur l’Algorithmique
2.4 Le langage SFC - Un langage de description de systèmes séquentiels
Conception Formelle en PVS Master 2 ISC Chef de Projet: M. Pierre Castéran Présenté par: Roland Atoui Xavier Dumas Sébastien Jardel Laurent Vendredi.
Définition Un algorithme est l’énoncé d’une séquence d’actions primitives réalisant un traitement pouvant être exécuté par un processeur bien défini dans.
Objets et Actions Élémentaires.
Du Cahier des Charges à la Spécification Formelle ?
Algorithmique Boucles et Itérations
1 Spécifications de Problèmes. 2 Plan Définition Motivation Qualités attendues Types de formalismes Rappels du cours de programmation Spécifications structurées.
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Transcription de la présentation:

Spécification et qualité du logiciel Resp. E. Bourreau Interv. M. Leclère leclere@lirmm.fr T. Libourel C. Nebut

Programme Spécification Mesure du logiciel Test Contrôle qualité Jusqu’au vacances de Toussaint 5 Cours lundi 9h45 3 TD lundi 11h30 : 2/10, 9/10, 23/10 2 TP de 3h : S42 et S43 (ou S45) Mesure du logiciel Test Contrôle qualité

Grandes étapes du développement de logiciels Étude « système » Cahier des charges avec description des besoins et contraintes clients Analyse fonctionnelle Identification des grands scénarios et des composants (modules) utiles Spécification Définition du rôle de chaque module Conception Choix de structures de données, d’algorithmes… Codage Implémentation Intégration Assemblage des différents composants Test Vérification du respect des spécifications Maintenance Permettre l’évolution du logiciel

Spécifier pour modéliser L’étape de spécification force à comprendre ce que doit faire chaque composant La spécification permet d’argumenter sur la cohérence du composant La spécification permet d’énoncer des propriétés sur le système avant même son développement

Spécifier pour valider La validation consiste à se demander si le texte formel « dit bien » ce que l'on veut qu'il dise, s'il « traduit » bien la demande informelle faite par celui qui commande le logiciel La validation ne peut pas être automatisée La spécification permet de poser les bonnes questions afin de s’assurer de l’adéquation des composants au cahier des charges

Spécifier pour programmer Une spécification est un contrat que le programmeur doit respecter quand il décide du comment critères de langages, bibliothèques… critères de complexité critères de généricité La spécification est une référence pour la suite du développement

Spécifier pour vérifier Une spécification permet à chaque étape du développement de vérifier que la réalisation du système respecte les attentes initiales En conception : Cet algorithme calcule-t-il bien ce que j’ai spécifié ? En intégration : Ce programme réalise-t-il bien le composant initialement spécifié (notamment en termes de fonctionnalités)

Exemple : ce programme est il correct ? début c:=0; répéter si a mod 2 ≠ 0 alors c := c + b ; a := a div 2; b := b x 2; jusqu’à a =1; c := c + b; fin

Spécifier Définir le quoi pas le comment ! Nom Des données en entrée Des résultats en sortie Une post-condition La définition des résultats en fonction des données d’entrée Une pré-condition Les conditions nominales = conditions sous lesquelles l’opération doit garantir qu’elle que le résultat est bien celui attendu

Spécification + Programme  Vérification Quoi : nom : multiplication russe données : a,b deux entiers résultat : c le produit de a par b Comment : début c:=0; répéter si a mod 2 ≠ 0 alors c := c + b ; a := a div 2; b := b x 2; jusqu’à a =1; c : = c + b ; fin Ok ?

Quel langage pour spécifier Informel, Semi-formel… L’approche formelle consiste à utiliser un langage formel syntaxiquement et sémantiquement bien défini par opposition à une spécification en langage naturel qui peut donner lieu à différentes interprétations Par opposition à une spécification semi-formelle (ex. UML) qui dispose d’une syntaxe précise mais pas d’une sémantique bien définie

L’approche formelle L’intérêt de cette approche est qu’elle oblige le « spécifieur » à énoncer sans ambiguïté ce que doit faire son programme Ainsi les problèmes sont soulevés dès le début et non durant l’étape de conception où l’on pourra se consacrer aux difficiles problèmes de l’optimisation Elle permet par ailleurs de prouver formellement des propriétés sur le système dès sa spécification (il n’est plus utile d’attendre son implémentation pour réaliser des tests exhaustifs)

Spécification formelle c  multiplication russe (a,b) = PRE a  NATURAL  b  NATURAL  a ≠ 0 THEN c := a x b END début c:=0; répéter si a mod 2 ≠ 0 alors c := c + b ; a := a div 2; b := b x 2; jusqu’à a =1; c : = c + b ; fin Preuve formelle

L’approche formelle Les méthodes formelles ne sont pas limitées à la spécification Conception : par reformulation formelle on passe de la spécification à du pseudo-code Codage : puis on génére automatiquement du code exécutable Test Preuve :On prouve à chaque étape le respect des spécifications initiales

Développer des logiciels à partir de spécifications formelles : la méthode B Prolonge le module spécifications formelles du M1 : la spécification en B En M2 : comment passer du quoi (la spécification) au comment (le code associé) par raffinements successifs : conception et codage L'objectif de ce cours est d'avoir une ouverture sur le développement de logiciels par spécifications formelles

La méthode B : le raffinage Raffiner consiste à reformuler les données et opérations d'une machine abstraite à l'aide de données et opérations plus proches de l'implémentation tout en conservant les propriétés de la machine abstraite. Suppression des pré-conditions Suppression de l’indéterminisme Introduction de la séquence et des boucles Chaque raffinement donne lieu à une preuve de la validité de la reformulation de la machine abstraite. La dernière phase de raffinement permet d'atteindre un niveau de pseudo-code que l'outil associé, l'atelier B, peut alors traduire automatiquement dans différents langages (C, Ada, C++). Le test du logiciel devient inutile, puisque le programme produit est formellement prouvé correct à la spécification initiale.

La notion de machine abstraite 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

La machine abstraite Un en-tête (nom) Des données cachées Op Op Un en-tête (nom) Des données cachées Des opérations visibles d’accès à la machine D Op Op Op Op Op Op

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 Un nom + optionnellement des paramètres pour la généricité MACHINE MACHINE MACHINE MACHINE calculatrice reservation pile(ELEMENT) variable (TYPE) END END END END

Les données La définition des données s’appuie sur un langage d’expressions les symboles désignant les données de base de la machine (ensembles abstraits, variables, constantes…) les expressions booléennes les expressions arithmétiques les ensembles, relations, fonctions, les suites… Ces données sont caractérisées par un invariant Une formule de la logique des prédicats exprimée au moyen de prédicats ensemblistes (appartenance, inclusion…) et de comparateurs arithmétiques.

Exemple : réservation 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) Une pré-condition 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

Exemple : opérations de variable MACHINE variable (TYPE) … OPERATIONS v<--obtenir = Définition de l’opération ; affecter(v) = PRE v TYPE THEN Définition de l’opération END

Les transformations La définition des opérations s’appuie sur le langage des substitution généralisées La transformation de base est la substitution simple devient égal, notée := Les autres transformations permettent de modéliser le résultat de tous les changements d’états réalisables par algorithmique Les boucles en particulier sont souvent modélisée par des substitutions indéterministes

Exemple : reserver 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 La dernière étape de la spécification consiste à prouver la cohérence de chaque machine abstraite On prouve pour chaque opération que lorsque la machine est dans un état correct Les propriétés invariantes I sont supposées vérifiées lorsque l’opération est appelée dans des conditions nominales la pré-condition P d’appel est supposée vérifiée alors sa transformation S amène la machine dans un état correct un état qui satisfait l’invariant I

Deux étapes de preuve Calcul de [S]I la plus faible pré-condition Condition minimale garantissant que l’état de la machine après l’opération respecte l’invariant On applique simplement la substitution S à la formule I On prouve que les conditions initiales (invariant et pré-condition) impliquent cette plus faible pré-condition Pour chaque opération, la formule dont il faut établir la validité est donc de la forme I  P  [S]I

Illustration sur reserver MACHINE I  P  [S]I reservation VARIABLES nbPlacesLibres, capacite INVARIANT nbPlacesLibres  NAT  capacite NAT  nbPlacesLibres ≤ capacite OPERATIONS reserver(nbPlaces)= PRE nbPlaces  NAT1  nbPlaces ≤ nbPlacesLibres THEN nbPlacesLibres := nbPlacesLibres-nbPlaces END I P S

B en pratique On définit les données internes de la machine et leurs propriétés invariantes ; On définit les opérations d’accès à la machine : pré-condition et transformation ; L’atelier vérifie la syntaxe et le typage ; L’atelier calcule les plus faibles pré-conditions et génère les preuves à faire ; L’atelier tente de les prouver automatiquement ; Si certaines preuves n’ont pas été démontrées, on détermine si : l’opération est incorrecte et on corrige le prouveur n’est pas assez « fort » et on aide le prouveur à réaliser la démonstration