1 Chapitre 3: Conception par contrat en OCL Cours :Qualités et tests du logicie
1 Chapitre 3: Conception par contrat en OCL Cours :Qualités et tests du logiciel Mourad Kmimech mkmimech@gmail.com Contraintes UML sur les associations sans utiliser OCL Les contraintes (prédéfinies) souvent utilisées : {ordonné} {sous ensemble} {xor} {addOnly} {frozen} 2 Introduction 1 2 2 3 Contraintes UML sur les associations sans utiliser OCL Introduction 4 Contraintes UML sur les associations sans utiliser OCL Introduction 3 4 3 5 Contraintes UML sur les associations sans utiliser OCL Introduction 6 Contraintes UML sur les associations sans utiliser OCL Introduction 5 6 4 7 Contraintes UML sur les associations sans utiliser OCL Introduction UML propose des contraintes, mais ces contraintes reste insuffisante Solution: OCL (Object Constraint Language) 8 Contraintes UML sur les associations sans utiliser OCL 7 8 5 9 • OCL(Object Constraint Language): en français un langage de contraintes Orienté Objet. • définit initialement en 1997 par IBM (Firme international en Informatique côté hardware et Software). • a été adapté par OMG (Object Management Group). La dernière version d’OCL connue sous le nom d’OCL 2.0 date depuis 2003. • OMG= joue un rôle liée à la normalisation de la technologie objet. Introduction Généralité sur OCL 10 Cycle de vie • OCL est un langage de modélisation (ou de spécification) permettant de détecter le plus tôt possible des erreurs dans le cycle de vie du logiciel. •Cycle de vie du logiciel Analyse Conception implémentation test utilisation Cahier des charges: Spécification Langage de modélisation UML/OCL Langage de programmation C++, Java, Eiffel Est-ce que le produit ou le programme fait le travail demandé Généralité sur OCL 9 10 6 11 Introduction Généralité sur OCL Deux utilisations possibles du langage OCL : Pour la conception par contrats. Pour la manipulation des bases de données c'est-à-dire en tant que le langage de requêtes des BDR (SGBDR). SQL :Structured Query Language 12 Exemple d'application Application banquaire Des comptes banquaires Des clients Des banques Spécification Un compte doit avoir un solde toujours positif Un client peut posséder plusieurs comptes Un client peut être client de plusieurs banques Un client d'une banque possède au moins un compte dans cette banque Une banque gère plusieurs comptes Une banque possède plusieurs clients Introduction Pourquoi OCL ? 11 12 7 13 Introduction Pourquoi OCL ? 14 Introduction Pourquoi OCL ? Manque de précision Le diagramme de classe ne permet pas d'exprimer tout ce qui est défini dans la spécification informelle Exemple Le solde d'un compte doit toujours être positif : ajout d'une contrainte sur cet attribut Le diagramme de classe permet-il de détailler toutes les contraintes sur les relations entre les classes ? 13 14 8 15 Introduction Pourquoi OCL ? Diagrammes UML insuffisants Pour spécifier complètement une application Diagrammes UML seuls sont généralement insuffisants Nécessité de rajouter des contraintes Comment exprimer ces contraintes ? Langue naturelle mais manque de précision, compréhension pouvant être ambigüe Langage formel avec sémantique précise : par exemple OCL OCL : Object Constraint Language Langage de contraintes orienté-objet Langage formel (mais simple à utiliser) avec une syntaxe, une grammaire, une sémantique (manipulable par un outil) S'applique entre autres sur les diagrammes UML 16 Introduction Pourquoi OCL ? Diagramme d'instances valide vis-à-vis du diagramme de classe et de la spécification attendue 15 16 9 17 Introduction Pourquoi OCL ? Diagramme d'instances valide vis-à-vis du diagramme de classe mais ne respecte pas la spécification attendue -Une personne a un compte dans une banque où elle n'est pas cliente -Une personne est cliente d'une banque mais sans y avoir de compte 18 Introduction Pourquoi OCL ? Avantage d'OCL : langage formel permettant de préciser clairement de la sémantique sur les modèles UML 17 18 10 19 Aperçu sur le langage OCL Utilisation d'OCL dans le cadre d'UML • OCL peut s'appliquer sur la plupart des diagrammes UML • Il sert, entre autres, à spécifier des : Invariants sur des classes Pré et post conditions sur des opérations Gardes sur transitions de diagrammes d'états ou de messages de diagrammes de séquence/collaboration ... 20 Contexte • Une expression OCL est toujours définie dans un contexte • Ce contexte est l'instance d'une classe • Mot-clé : context •Exemple : context Compte • L'expression OCL s'applique à la classe Compte, c'est-à-dire à toutes les instances de cette classe •Invariants • Un invariant exprime une contrainte sur un objet ou un groupe d'objets qui doit être respectée en permanence • Mot-clé : inv • Exemple : context Compte inv: solde > 0 • Pour toutes les instances de la classe Compte, l'attribut solde doit toujours être positif Aperçu sur le langage OCL 19 20 11 21 Pré et postconditions • Pour spécifier une opération •Précondition : état qui doit être respecté avant l'appel de L'opération (inversement pour la Postcondition : état qui doit être respecté après l'appel de l'opération) •Mots-clés : pre et post • Dans la postcondition, deux éléments particuliers sont utilisables •Attribut result : référence la valeur retournée par l'opération •mon_attribut@ pre : référence la valeur de mon_attribut avant l'appel de l'opération • Syntaxe pour préciser l'opération: Context ma_classe::mon_op(liste_param) : type_retour Aperçu sur le langage OCL 22 Pré et postconditions •Exemples : context Compte::débiter(somme : Integer) pre: somme > 0 post: solde = solde@pre – somme •La somme à débiter doit être positive pour que l'appel de l'opération soit valide • Après l'exécution de l'opération, l'attribut solde doit avoir pour valeur la différence de sa valeur avant l'appel et de la somme passée en paramètre • context Compte::getSolde() : Integer post: result = solde •Le résultat retourné doit être le solde courant • Attention ! On ne décrit pas comment l'opération est réalisée mais des contraintes sur l'état avant et après son exécution Aperçu sur le langage OCL 21 22 12 23 Accès aux objets, navigation • Dans une contrainte OCL associée à un objet, on peut Accéder à l'état interne de cet objet (ses attributs) Naviguer dans le diagramme : accéder de manière transitive à tous les objets (et leur état) avec qui il est en relation •Nommage des éléments • Attributs ou paramètres d'une opération : utilise leur nom directement • Objet(s) en association : utilise le nom de la classe associée (en minuscule) ou le nom du rôle d'association du coté de cette classe • Si cardinalité de 1 pour une association : référence un objet • Si cardinalité > 1 : référence une collection d'objets Aperçu sur le langage OCL 24 Exemple1 : extrait de la spécification la SD Pile en utilisant UML/OCL publicsymbole + visibilité d’une caractéristique UML protectedsymbole # privatesymbole – <<…>> : c’est un stéréotype <<constructor>>opération de création <<query>>opération de consultation <<update>>opération de modification Pile{abstract} <<constructor>>+creer() <<query>>+vide() +dernier():Integer() +card():Integer() <<update>>+empiler(x: Integer) +depiler() T Template T T T Aperçu sur le langage OCL stéréotype 23 24 13 25 Types OCL : types de base •Entier opérateurs = <> + - * / abs div mod max min < > <= >= - est unaire ou binaire •Réel opérateurs = <> + - * / abs floor round max min < > <= >= - est unaire ou binaire •String opérateurs = size(), concat(String),… substring(Entier, Entier) Les chaînes de caractères constantes s’écrivent entre deux simples quotes : ’voici une chaîne’ •Booléen opérateurs : or xor and not b1 implies b2 if b then expression1 And, or, not, xor, not, implies, if-then-else •La plupart des expressions OCL sont de types Boolean •Notamment les expressions formant les inv, pre et post Aperçu sur le langage OCL 26 Aperçu sur le langage OCL Règles de précédence • Ordre de précédence pour les opérateurs/primitives du plus au moins prioritaire @pre . et -> not et - * et / + et - if then else endif >, <, <= et >= = et <> and, or et xor implies • Parenthèses permettent de changer cet ordre 25 26 14 27 Aperçu sur le langage OCL Personne +âge: Integer +majeur: Boolean +marieé: Boolean +catégorie: enum {enfant,ado,adulte} Types énumérés •Leurs valeurs apparaissent précédées de #. Par exemple pour donner un invariant sur la classe suivante : context Personne inv : if age <=12 then catégorie =#enfant else if age <=18 then catégorie =#ado else catégorie=#adulte endif endif 28 préconditionpreavec étiquette optionnelle postconditionpost avec étiquette optionnelle invariantinv Conception par contrat Exemple: pre somme_positive : s>0 post somme_augmente : solde=solde@pre+s étiquette Aperçu sur le langage OCL nommage de contraintes Commentaire en OCL : utilisation de -- context Personne inv: if age < 18 -- vérifie age de la personne then compte -> isEmpty() -- pas majeur : pas de compte else compte -> notEmpty() -- majeur : doit avoir au moins un compte endif 27 28 15 29 Accès aux attributs pour les collections Accès à un attribut sur une collection Exemple dans contexte de Banque : compte.solde Renvoie l'ensemble des soldes de tous les comptes Forme raccourcie et simplifiée de compte -> collect (solde) Aperçu sur le langage OCL 30 Accès aux objets, navigation • Exemples, dans contexte de la classe Compte •solde : attribut référencé directement •banque : objet de la classe Banque (référence uploads/Voyage/ chapitre-3-qualites-et-tests-du-logiciel-2-1.pdf
Documents similaires
-
18
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 05, 2021
- Catégorie Travel / Voayage
- Langue French
- Taille du fichier 1.4566MB