La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur

Présentations similaires


Présentation au sujet: "Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur"— Transcription de la présentation:

1

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

30


Télécharger ppt "Code Contracts Gilles TOURREAU - MVP C# Architecte .NET / Formateur"

Présentations similaires


Annonces Google