Conception par le contrat
La conception de par le contrat , le DBC ou le programmant par le contrat est une approche à concevoir le logiciel . Elle prescrit que les concepteurs de logiciel devraient définir des caractéristiques d'interface vérifiables précises pour des composants de logiciel basés sur la théorie des types de données abstraits et la métaphore conceptuelle d'un contrat d'affaires.
Puisque " ; Conception de Contract" ; est une marque déposée de logiciel d'Eiffel, les défenseurs du Eiffel , beaucoup de lotisseurs se référeront à elle seulement comme programmant par le contrat ou développement le contrat-premier.
Histoire
La limite a été inventée par le Bertrand Meyer en liaison avec sa conception du langage de programmation d'Eiffel et décrite la première fois dans divers articles commençant en 1986 et les deux éditions successives (1988, 1997) de sa construction orientée objectivement de logiciel de de livre. Autour de ce temps, logiciel d'Eiffel trademarked la conception de limite par Contract. La conception par le contrat a sa racine dans le travail sur la vérification formelle , les spécifications formelles et la logique de Hoare de . Les contributions originales incluent :
Une métaphore claire pour guider le processus de conception.
L'application à la transmission , en particulier un formalisme pour la redéfinition et l'obligatoire dynamique .
L'application à la manipulation d'exception .
Le raccordement avec la documentation de logiciel automatique .
Description
L'idée centrale de DBC est une métaphore sur la façon dont les éléments d'un système logiciel collaborent les uns avec les autres, sur la base des engagements mutuels de et des avantages de . La métaphore vient de la vie d'affaires, où un " ; client" ; et un " ; supplier" ; convenir sur un " ; contract" ; ce qui définit par exemple cela : le fournisseur doit fournir un certain produit (engagement) et est autorisé à compter que le client a payé ses honoraires (avantage).
Le client doit payer les honoraires (engagement) et est autorisé à obtenir le produit (avantage).
Les deux parties doivent satisfaire certains engagements, tels que des lois et des règlements, s'appliquant à tous les contrats.
De même, si une routine d'une classe dans la programmation orientée objectivement fournit une certaine fonctionnalité, il peut :
imposent une certaine obligation d'être garanti sur l'entrée par n'importe quel module de client qui des appels il : la condition préalable - un engagement du de la routine pour le client, et un avantage pour le fournisseur (la routine elle-même), comme il le libère de devoir traiter des cas en dehors de la condition préalable.
Garantir une certaine propriété sur la sortie : le postcondition - un engagement du de la routine pour le fournisseur, et évidemment un avantage (l'avantage principal d'appeler la routine) pour le client.
Maintenir une certaine propriété, assumée sur l'entrée et garantie sur la sortie : la classe invariable de .
Le contrat est la formalisation de ces engagements et avantages. On a pu récapituler la conception par le contrat par le " ; questions" trois ; que le concepteur doit à plusieurs reprises demander :
Qu'attend-il ?
Que garantit-il ?
Que maintient-il ?
Beaucoup de langues ont des équipements pour faire les affirmations comme ces derniers. Cependant, DBC est original en identifiant que ces contrats sont si cruciaux à l'exactitude de logiciel qu'ils devraient faire partie du processus de conception. En effet, DBC préconise écrire les affirmations d'abord.
La notion d'un contrat se prolonge vers le bas au niveau de méthode/procédure ; le contrat pour chaque méthode contiendra normalement les informations suivantes :
Valeurs de
types acceptables et inacceptables d'entrée ou, et leurs significations
Valeurs ou types de retour, et leurs significations
L'erreur et les valeurs d'états de l'exception ou les types, celle peuvent se produire, et leurs significations
Effets secondaires
Le préconditionne que les sous-classes peuvent affaiblir (mais ne pas renforcer)
Postconditions que les sous-classes peuvent renforcer (mais ne pas s'affaiblir)
Invariants * des garanties de bonne fin (plus rares), par exemple pendant le temps ou l'espace ont employé
En employant l'approche de DBC, le code de programme lui-même doit ne jamais essayer de vérifier les conditions de contrat ; l'idée même est que code si le " ; hard" d'échouer ; , avec la vérification de contrat étant le filet de sécurité. Le " de DBC ; hard" d'échouer ; la propriété facilite le comportement de pour-contrat d'élimination des imperfections beaucoup parce que le comportement prévu de chaque routine est clairement spécifié.
Les conditions de contrat devraient ne jamais être violés dans l'exécution du programme : ainsi, ils peuvent rester l'un ou l'autre dedans comme code de mise en point, ou enlevé du code tout à fait pour des raisons d'exécution.
Tous les rapports de classe sont entre les classes de client et les classes de fournisseur. Une classe de client est obligée pour faire des appels aux dispositifs de fournisseur où l'état en résultant du fournisseur n'est pas violé par l'appel de client. Plus tard, le fournisseur est obligé de fournir un état et des données de retour qui ne violent pas les conditions d'état du client. Par exemple, un amortisseur de données de fournisseur peut exiger que les données sont présentes dans l'amortisseur quand un dispositif de suppression s'appelle. Plus tard, le fournisseur garantit au client que quand un dispositif de suppression finit son travail, la donnée élémentaire sera en effet supprimée de l'amortisseur. D'autres contrats de conception sont des concepts de " ; Classe Invariant" ;. Les garanties invariables de classe (pour la classe locale) que l'état de la classe sera maintenu en dessous des tolérances spécifiques à la fin de chaque exécution de dispositif.
L'essai d'unité de examine un module en isolation, pour vérifier qu'il rencontre son contrat supposant que ses sous-traitants rencontrent le leur. L'essai d'intégration de vérifie si les divers modules fonctionnent correctement ensemble. La conception par le contrat stimule également la réutilisation de code, puisque le contrat pour chaque morceau de code est entièrement documenté. Les contrats pour un module peuvent également être considérés comme une forme de la documentation de logiciel pour le comportement de ce module.
Analogie non technique
Un processus dans lequel un certain nombre d'objets (des composants de personnes ou de logiciel, par exemple) interactifs pour satisfaire un but s'appelle une collaboration . Quand deux objets collaborent ensemble, on (le client) demande les services de l'autre (le fournisseur). Le fournisseur alternativement peut demander les services d'autres objets, et en ces collaborations c'est le client et ils sont les fournisseurs. Le processus fonctionne seulement correctement si toutes ces différentes collaborations fonctionnent correctement. Dans un sens très vrai, la chaîne est seulement aussi forte que son lien plus faible.Prendre le processus de partir en vacances, par exemple. Bertrand veut passer deux semaines en Floride. Il réserve les vacances par DBC Holidays Inc., qui se spécialisent en vacances de paquet des États-Unis. Quand il fait la réservation (la collaboration #1), Bertrand est le client et les vacances de DBC sont le fournisseur. Les vacances de DBC arrangent alors des vols par Assertair Corp. (la collaboration #2), et réservent une salle à l'hôtel de plaza de condition préalable à Miami (collaboration #3). En collaboration #2, les vacances de DBC sont le client et Assertair est le fournisseur, et en collaboration #3, l'hôtel est le fournisseur. Et la chaîne des collaborations disparaît plus profonde et plus profonde (par exemple, qui fait le salaire d'Assertair pour entretenir leurs gicleurs ?)
Le cas échéant le lien dans cette chaîne des collaborations se casse, puis le résultat pourrait être que les vacances de Bertrand sont ruinées. Il est essentiel, donc, que chaque joueur en collaboration fait ce qu'elles sont censées pour faire. Dans n'importe quelle collaboration, le client et le fournisseur ont certains engagements. Ces engagements (ou " ; responsibilities" ; , si vous aimez) la chute dans trois types distincts : Les choses de
que le fournisseur promet de faire en tant qu'élément du service il offre au
Des choses que le fournisseur promet de faire en tant qu'élément du service sont décrites comme un genre spécial de règle a appelé un Postcondition . Le Postcondition indique au client ce qui sera vrai si le service est exécuté correctement (par exemple, " ; votre client sera à Miami à 15h30 sur le " du 8 juin ;).
Si Bertrand tourne vers le haut au bureau d'enregistrement sans son passeport, naturellement, alors ligne aérienne ne peut pas vivre jusqu'à son côté du contrat : on ne lui permettra pas de monter à bord de l'avion sans lui. Une règle que le client doit satisfaire avant d'employer un service s'appelle une condition préalable .
Une règle que des états ce qui doivent toujours être vrais s'appelle un invariable. Si la ligne aérienne n'a pas à assurance proportionnée puis personne ne va n'importe où !
La conception de Contract est une discipline pour le logiciel de bâtiment tels que les collaborations entre les objets sont correctes. Une formule pour l'exactitude quand un client emploie les services d'un fournisseur est donnée comme :
Si les invariables ET condition préalable sont vrais avant d'employer le service, alors l'invariable ET le postcondition seront vrais après que le service ait été accompli.
Dans DBC, les responsabilités sont claires : le client doit satisfaire la condition préalable. Ceci la distingue nettement d'une pratique relative connue sous le nom de programmation défensif, où le fournisseur est responsable de figurer dehors quoi faire quand une condition préalable est cassée. Le plus souvent, le fournisseur jette une exception pour informer le client que la condition préalable a été cassée, et dans enferme - DBC et programmation de défensive - le client doit figurer dehors comment répondre à cela. DBC facilite le travail du fournisseur.
Appui de langue
Langues avec l'appui indigène
Les langues qui mettent en application la plupart des dispositifs de DBC à la façon des indigènes incluent :chrome de de de
D
Eiffel
Sather
Lisaac
Nice
conception d'instruments de l'ÉTINCELLE de de par le contrat using l'analyse statique des programmes d'ADA .
Langues avec le tiers appui
De diverses bibliothèques, préprocesseurs et d'autres outils ont été développés pour des langages de programmation existants sans conception indigène par l'appui de contrat :C de de
et C++ , using le DBC pour le préprocesseur de de C , GNU Nana, ² de C, ou le compilateur de Digitals Mars C++ de .
C# , using C# extensible (XC#), ou Spec# .
le terrain communal de de blèsent peut mettre en application DBC par la fonction de macro-instruction et le protocole de metaobject de du CLOS .
Java , using iContract2, Contract4J, jContractor, Jcontract, C4J, préprocesseur de CodePro Analytix, de STclass, de Jass, ovales avec AspectJ, Java modelant la langue (JML), SpringContracts du cadre de ressort de , ou Jass moderne.
Javascript de de , using Cerny.
Nemerle , using des macros.
Perl de de peut soutenir using les modules du CPAN classent : : Contrat (par Damian Conway ) ou carpe : : Informations (par Raphael Manfredi ).
python de de , using PyDBC ou contrats pour le python.
rubis de de , using DesignByContract de Brian McCallister, rubis DBC ou rubis-contrat.
arrangement de de par la prolongation d'arrangement de PLT, soulignant que chaque violation de contrat doit blâmer la partie coupable et doit faire ainsi avec une explication précise.
Outils génériques
le réalisateur parfait de de , using la langue de spécifications parfaite peut vérifier des contrats avec l'analyse statique de code de et produire des programmes dans les langues telles que Java et C++.
Voir également
de programmation défensif Langage de programmation du D
Langage de programmation d'Eiffel
Logique de Hoare de
Construction orientée objectivement de logiciel de
Langue de spécifications parfaite du
Langage de programmation d'ÉTINCELLE
développement Essai-conduit par
.
| Random links: | Michel Rolle | Alignement (jeux de role-playing) | Exposition de troupe | Liste des récompenses de Britney Spears | Gradient Ruling | Diseño_por_el_contrato |