Télécharger la présentation
Publié parLaurentin Claude Modifié depuis plus de 9 années
2
Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur
Winwise Amine ZEMZEMI - MSP Etudiant / Stagiaire Sup Galilée
3
L’expert de référence ! Société d’expertise sur les technologies Microsoft Partenaire historique et stratégique de Microsoft Plus de 90 collaborateurs certifiés interviennent sur des missions à forte valeur ajoutée : Missions d’expertise Conseil & Audit Réalisation de projets à engagement de résultats Une offre couvrant l’ensemble du cycle de vie des applications : Travail collaboratif, portail d’entreprise et Workflow Business Intelligence & Data Management Interfaces utilisateurs, Rich Internet Application & desktop application Architecture d’entreprise et Architecture Life cycle Management Infrastructure, Sécurité et Réseaux Centre de formation et de Certification Microsoft WINWISE 130/136 Rue de Silly Boulogne-Billancourt
4
Agenda Introduction à Code Contracts Spécifier des contrats
Les pré-conditions Les post-conditions Les invariants L’héritage des contrats Vérification des contrats à la compilation Création des contrats sur du code existant Assembly de contrats Extensibilité de Code Contracts
5
Qu’est ce qu’un contrat ?
6
Qu’est ce qu’un contrat ?
7
Avant… Utilisation des exceptions :
ArgumentException InvalidOperationException … Les conditions ne sont pas héritées dans les classes dérivées Duplication de code ! Les conditions ne peuvent pas être spécifiées dans les interfaces Vérification à l’exécution uniquement La documentation doit-être faite explicitement Les conditions sont compilées et utilisées sur les exécutables en production
8
Fonctionnalités de Code Contracts
Permet de spécifier très simplement : Des pré-conditions Des post-conditions Des invariants Supporte l’héritage Possibilité de définir des contrats dans des interfaces Vérification à la compilation Extensibilité Génération de la documentation XML
9
Code Contracts Exécutable avec validation Code C# + Les contrats
Code Contracts Rewriter Code C# + Les contrats Code et contrats compilés (méta-données) Doc. XML Compilation Code Contracts Doc Liste des contrats non respectés Code Contracts Check
10
Spécifier des contrats
Les contrats sont spécifiés à l’aide de méthodes Ces méthodes sont compilées Elles représentent des méta-données (comme les attributs .NET) Utilisation de la classe statique Contracts Disponible dans le .NET Framework v4.0 Namespace System.Diagnostics.Contracts Tous les contrats doivent être spécifiés au début des méthodes
11
Les pré-conditions Vérifie une condition au début d’une méthode
Par exemple : Tester la validité d’un paramètre Les appelants de cette méthode doivent obligatoirement respecter les pré-conditions
12
Les post-conditions Vérifie une condition à la fin d’une méthode
Par exemple : L’appel à une méthode Add() avec deux entiers positifs doit retourner une valeur positive Les post-conditions peuvent Vérifier la valeur de retour d’une méthode (Result()) Comparer l’ancienne valeur d’un champ ou d’un paramètre (OldValue()) Vérifier la valeur d’un paramètre en sortie (out) (ValueAtReturn())
13
Les invariants Vérifie une condition sur l’état d’un objet
Par exemple : Vérifier qu’un champ ne doit jamais être null. L’invariant est vérifié A la fin de toutes les méthodes d’une classe Après la vérification des post-conditions
14
Les pré-conditions Les post-conditions Les invariants
Démo Les pré-conditions Les post-conditions Les invariants
15
L’héritage des contrats
Tout contrat spécifié dans une méthode virtual, sera automatiquement hérité dans les méthodes redéfinie de la classe dérivée. Il n’est donc pas nécessaire de spécifier explicitement les contrats dans les méthodes redéfinies
16
Les interfaces Code Contracts permet de spécifier des contrats sur des interfaces Définir une classe abstraite implémentant l’interface et marqué de l’attribut ContractClassFor Marquer l’interface avec l’attribut ContractClass faisant référence à la classe abstraite précédemment créée
17
Spécification des contrats dans une interface
[ContractClass(typeof(ClasseAbstraite))] Interface C# Interface C# Méthode M() Méthode M() Compilation + Code Contracts Rewriter [ContractClassFor(typeof(Interface))] Classe abstraite implémentant l’interface Classe implémentant l’interface Méthode M() + Contrats Méthode M() + Contrats Classe implémentant l’interface Méthode M()
18
L’héritage des contrats Les contrats dans une interface
Démo L’héritage des contrats Les contrats dans une interface
19
Vérification des contrats à la compilation
Peut-être lancé en ligne de commande ou depuis Visual Studio Nécessite l’édition Premium ou Ultimate Utilitaire (cccheck) lancé après la compilation Chaque appel à une méthode contenant des contrats est vérifiée L’appelant de la méthode doit donc « prouver » qu’il respecte bien tous les contrats
20
Vérification des contrats à la compilation
Démo Vérification des contrats à la compilation
21
Code Contracts sur du code existant
Une pré-condition écrite à l’aide d’un if-then-throw peut-être transformé en contrat. Utilisation de la méthode Contract.EndContractBlock() Une pré-condition écrite à l’aide d’un helper peut-être transformé en contrat. Utilisation de l’attribut ContractArgumentValidator
22
Utilisation de Code Contracts sur du code existant
Démo Utilisation de Code Contracts sur du code existant
23
Assembly de contrats Permet de créer 2 d’assemblies :
Un assembly contenant le code sans les contrats Utilisation en production Suppression des contrats => Gain de performances Un assembly contenant uniquement les contrats Pour être utilisé durant le développement Par un intégrateur
24
A.Contracts.dll Contrats compilés
Assembly de contrats A.Contracts.dll Contrats compilés Projet A Code C# + Contrats Compilation + Code Contracts Rewriter Intégrateur A.dll Code C# compilé Production
25
Séparation des contrats
Démo Séparation des contrats
26
Extensibilité des contrats
Possibilité de redéfinir tout ou partie des contrats => Réécriture des méthodes de la classe Contract Possibilité de créer des agrégations de contrats (Abbreviators) Regroupement de plusieurs contrats
27
Ressources Site officiel de Code Contrats
Code Contracts Extensions pour Visual Studio Common Compiler Infrastructure Pex
28
Questions Gilles TOURREAU - MVP C# Architecte .NET / Formateur Winwise
Amine ZEMZEMI - MSP Etudiant / Stagiaire Sup Galilée
29
MSDN et TechNet : l’essentiel des ressources techniques à portée de clic
Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.