1 / 30

Code C ontracts

Code C ontracts. Amine ZEMZEMI - MSP Etudiant / Stagiaire Sup Galilée amine.zemzemi@msp-france.com http://amine-zemzemi.blogspot.com. Gilles TOURREAU - MVP C # Architecte .NET / Formateur Winwise gilles.tourreau@winwise.com http://gilles.tourreau.fr. L’expert de référence !.

ian-hayden
Download Presentation

Code C ontracts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Code Contracts Amine ZEMZEMI - MSP Etudiant / Stagiaire Sup Galilée amine.zemzemi@msp-france.com http://amine-zemzemi.blogspot.com Gilles TOURREAU - MVP C# Architecte .NET / Formateur Winwise gilles.tourreau@winwise.com http://gilles.tourreau.fr

  2. 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 92100 Boulogne-Billancourthttp://www.winwise.com

  3. 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

  4. Qu’est ce qu’un contrat ?

  5. Qu’est ce qu’un contrat ?

  6. 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

  7. 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

  8. Code Contracts Exécutable avec validation 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

  9. 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 • NamespaceSystem.Diagnostics.Contracts • Tous les contrats doivent être spécifiés au début des méthodes

  10. 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

  11. 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())

  12. 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

  13. Démo Les pré-conditions Les post-conditions Les invariants

  14. 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

  15. 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

  16. Spécification des contratsdans 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()

  17. Démo L’héritage des contrats Les contrats dans une interface

  18. 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

  19. Démo Vérification des contrats à la compilation

  20. 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

  21. Démo Utilisation de Code Contracts sur du code existant

  22. 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

  23. Assembly de contrats A.Contracts.dllContrats compilés • Projet A • Code C# • + • Contrats • Compilation • + • Code • Contracts • Rewriter Intégrateur A.dll Code C# compilé Production

  24. Démo Séparation des contrats

  25. 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

  26. Ressources • Site officiel de Code Contrats • http://research.microsoft.com/en-us/projects/contracts/ • Code Contracts Extensions pour Visual Studio • http://visualstudiogallery.msdn.microsoft.com/85f0aa38-a8a8-4811-8b86-e7f0b8d8c71b/ • Common Compiler Infrastructure • http://ccimetadata.codeplex.com/ • http://cciast.codeplex.com/ • Pex • http://research.microsoft.com/en-us/projects/pex/

  27. Questions Amine ZEMZEMI - MSP Etudiant / Stagiaire Sup Galilée amine.zemzemi@msp-france.com http://amine-zemzemi.blogspot.com Gilles TOURREAU - MVP C# Architecte .NET / Formateur Winwise gilles.tourreau@winwise.com http://gilles.tourreau.fr

  28. 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 http://technet.com http://msdn.com

More Related