IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Java : Google introduit la programmation par contrat


Sujet :

Java

  1. #1
    Expert éminent sénior
    Avatar de Idelways
    Homme Profil pro
    Développeur Ruby on Rails / iOS
    Inscrit en
    juin 2010
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Ruby on Rails / iOS

    Informations forums :
    Inscription : juin 2010
    Messages : 1 374
    Points : 68 508
    Points
    68 508
    Par défaut Java : Google introduit la programmation par contrat
    Java : Google introduit la programmation par contrat
    Avec une extension open source qui aiderait aussi à sécuriser les programmes



    Google vient de passer sous licence open source un projet destiné à introduire la programmation par contrat au langage Java.

    Ce paradigme de conception logiciel initié pour le langage Eiffel devrait faciliter le développement et aider la détection précoce des imperfections dans les premières phases de créations du code.

    Ce nouveau projet, appelé Cofoja (contraction de « Contracts For Java ») devrait également permettre de sécuriser les applications contre les exploits de type dépassement de tampon notamment, véritable plaie de sécurité pour Java - comme pour d'autres langages.

    Concrètement, la programmation par contrats définit des critères auxquels doit correspondre chaque valeur passée à une méthode d'un programme en exécution. Des critères peuvent aussi être spécifiés aux valeurs de retour de ces méthodes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    interface Time {
      ...
     
      @Ensures({
        "result >= 0",
        "result <= 23"
      })
      int getHour();
     
      @Requires({
        "h >= 0",
        "h <= 23"
      })
      @Ensures("getHour() == h")
      void setHour(int h);
     
      ...
    }

    Il s'agit donc de contrats entre les composants du même programme qui assurent l'intégrité de ce dernier et aident à réduire considérablement le nombre de bogues, qui sont détectés plus tôt dans le cycle de développement.

    Un concept aux objectifs similaires à ceux de la programmation pilotée par les testes (TDD) sauf que les assertions avec Cofoja sont écrites et testées directement dans le programme et non pas dans des classes dédiées aux tests et exécutées séparément durant cette phase.

    Les développeurs Java pourront donc définir des contrats sur la longueur des valeurs d'entrées éliminant ainsi le risque d'attaques par dépassement de tampon.

    Cofoja s'appuie sur le projet « Modern Jass », un ensemble d'annotations Java développées par Johannes Rieken et repris par deux ingénieurs à temps partiel.



    Le projet Cafoja est disponible sur Google code sous licence LGPL

    Source : le blog de Google open source

    Et vous ?

    Que pensez-vous de ces extensions ?

  2. #2
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : février 2010
    Messages : 1 619
    Points : 4 280
    Points
    4 280
    Par défaut
    Ca me fait penser à mes tests JUnit.
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 2 199
    Points
    2 199
    Par défaut
    J'ai du mal à percevoir la place à lui donner entre
    - le typage fort
    L'exemple donné, n'est finalement qu'une définition de type déguisée, exprimée autrement.
    - le découplage des métiers
    L'exemple donné est simpliste, mais au vu de ce qui est présenté, on pourrait imaginer mettre des règles relatives aux métiers. Mais pour autant, ce n'est pas son rôle. Ne serait ce que par le fait qu'aucune modalité de réponse n'est proposée.

    Pour autant ce n'est pas du test comme on peut l'avoir entendu jusqu'à présent, puisque on valide cette règle jit*, et non à postériori dans le scénario d'un cas de test.

    * D'après ce que j'ai compris ici :
    Concrètement, la programmation par contrats définit des critères auxquels doit correspondre chaque valeur passée à une méthode d'un programme en exécution.
    Bref, je trouve l'idée sympa au départ, et je suis sur qu'elle sera utile dans l'état actuelle des choses, mais il y à quand même quelque chose qui me chiffonne.

    a+

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2009
    Messages : 491
    Points : 1 139
    Points
    1 139
    Par défaut
    Citation Envoyé par kaymak Voir le message
    J'ai du mal à percevoir la place à lui donner
    Il faut lire le bouquin OOSC2 et cela devient clair (tout programmeur devrait l'avoir lu d'ailleurs, c'est une base de l'informatique).

    Object-Oriented Software Construction, 2nd Edition by Bertrand Meyer.
    Prentice Hall Professional Technical Reference.
    1254 + xxviii pp.
    Soft cover.
    ISBN 0-13-629155-4
    This Jolt Award winner takes the reader through the clear, logical, and comprehensive formation of a method for object-oriented software development ... the Eiffel method. During this journey, the author evolves a notation capable of expressing the products of each phase of development, from analysis through implementation. This notation is Eiffel the language.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 2 199
    Points
    2 199
    Par défaut
    Bon, si vraiment il faut en passer par la lecture complète du bouquin.... J'ai plus qu'à !
    http://fr.wikipedia.org/w/index.php?...=0-13-629155-4


    merci,
    a+

  6. #6
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2010
    Messages : 1 229
    Points : 3 551
    Points
    3 551
    Par défaut
    Ça existe en Ada depuis les années 70
    heure : integer (1..23);
    "Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

    Je soutiens Diaspora*, le réseau social libre.

    Veillez à porter une attention toute particulière à l'orthographe...

    Blog collaboratif avec des amis : http://geexxx.fr

    Mon avatar a été fait par chiqitos, merci à lui !

  7. #7
    Membre confirmé

    Homme Profil pro
    Inscrit en
    août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : août 2006
    Messages : 317
    Points : 597
    Points
    597
    Par défaut
    Le livre de Bertrand Meyer est traduit en français pour les programmeurs qui ne sont pas à l'aise avec l'anglais.

    C'est nettement moins bien que l'original certes mais déjà que ce livre est très complet et les concepts parfois délicats, devoir décrypter le rend difficile à lire.

    Titre : Conception et programmation orientées objet
    ISBN : 978-2212122701

    Je rejoins l'avis d'au dessus, un livre à lire, à relire et à avoir dans sa bibliothèque pour le consulter très souvent.

    Les contrats ne remplacent pas les tests unitaires et inversement, ce sont 2 concepts complémentaires. Utiliser l'un ne signifie pas que l'on utilise pas l'autre, au contraire.

  8. #8
    Membre éprouvé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : septembre 2010
    Messages : 450
    Points : 1 071
    Points
    1 071
    Par défaut
    La définition de conditions booléennes dans des chaines de caractères, c'est vraiment pas beau.

    Citation Envoyé par Flaburgan Voir le message
    Ça existe en Ada depuis les années 70
    heure : integer (1..23);
    J'ai été voir des docs sur ADA, que je ne connaissais que de nom.

    Effectivement, on borne à la déclaration, c'est plus propre.

    Cela dit, rendons à César ce qui est à César: Un manque du Java est comblé grâce à ce projet.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

  9. #9
    Membre à l'essai
    Inscrit en
    juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : juillet 2009
    Messages : 14
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par kaymak Voir le message
    J'ai du mal à percevoir la place à lui donner entre
    - le typage fort
    L'exemple donné, n'est finalement qu'une définition de type déguisée, exprimée autrement.
    L'idée du typage fort est intéressante et c'est une perspective que j'aime bien, personnellement. On peut voir les contrats comme une extension dynamique (à l'exécution) du typage. Les contrats permettent potentiellement de spécifier n'importe quelle condition (avec les limitation de portée et de condition d'activation qui leur sont intrinsèques), potentiellement très difficile à vérifier statiquement. Cette difficulté relève en partie de défis théoriques mais en pratique surtout du fait que les spécifications sous forme de contrats sont rarement assez complètes pour permettre une analyse statique aboutie.

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 319
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 319
    Points : 20 852
    Points
    20 852
    Par défaut
    Citation Envoyé par Flaburgan Voir le message
    Ça existe en Ada depuis les années 70
    heure : integer (1..23);
    On n'a jamais dit que c'était un concept nouveau, juste que Google proposait une manière de le mettre en Java.

    Bon, et puis, les contrats ça va un tout petit peu plus loin que borner les paramètres d'entrée ou fortifier le typage, 'faut arrêter de se toucher, les gens.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2002
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Vous croyez qu'il est possible d'ajouter la contrainte value != 2.2250738585072012e-308 ?

  12. #12
    Membre averti
    Homme Profil pro
    Expert MDE
    Inscrit en
    janvier 2008
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : janvier 2008
    Messages : 182
    Points : 335
    Points
    335
    Par défaut
    C'est n'est pas vraiment de la programmation par contrat, mais de l'assertion.
    Il faut quand même écrire le code derrière...

  13. #13
    Membre éprouvé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : septembre 2010
    Messages : 450
    Points : 1 071
    Points
    1 071
    Par défaut
    Citation Envoyé par kaymak Voir le message
    J'ai du mal à percevoir la place à lui donner entre
    - le typage fort
    L'exemple donné, n'est finalement qu'une définition de type déguisée, exprimée autrement.
    - le découplage des métiers
    L'exemple donné est simpliste, mais au vu de ce qui est présenté, on pourrait imaginer mettre des règles relatives aux métiers. Mais pour autant, ce n'est pas son rôle. Ne serait ce que par le fait qu'aucune modalité de réponse n'est proposée.

    Pour autant ce n'est pas du test comme on peut l'avoir entendu jusqu'à présent, puisque on valide cette règle jit*, et non à postériori dans le scénario d'un cas de test.

    * D'après ce que j'ai compris ici :


    Bref, je trouve l'idée sympa au départ, et je suis sur qu'elle sera utile dans l'état actuelle des choses, mais il y à quand même quelque chose qui me chiffonne.

    a+


    Le typage fort n'est pas la réponse à tout, dans l'exemple donné avec les heures, tu ne peux pas déclarer un int qui reste dans [0;24[ en Java, du moins pas sans librairie/extension.

    Tu es donc obligé de te débrouiller avec les accesseurs, ou maintenant avec cofoja.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2007
    Messages : 45
    Points : 54
    Points
    54
    Par défaut
    Java : Google introduit la programmation par contrat
    pas du tout mais vraiment pas du tout

    Google à souvent tendance à reprendre des élements existants déjà... Ils ne connaissent donc pas JML ?

    Je me demande ce que cette extension va apporter de plus par rapport à JML qui existe depuis un petit bout de temps.

    http://fr.wikipedia.org/wiki/Java_Modeling_Language

  15. #15
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : janvier 2008
    Messages : 466
    Points : 559
    Points
    559
    Par défaut
    ça existe depuis longtemps en .net

    http://msdn.microsoft.com/en-us/devlabs/dd491992

    C'est même intégré dans VST 2010
    Viva la viva... en el chorizo de la corida de leon.... (cette phrase n'a aucun sens je sais )

  16. #16
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Inscrit en
    avril 2002
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : avril 2002
    Messages : 4 300
    Points : 12 981
    Points
    12 981
    Par défaut
    Citation Envoyé par Taka-kun Voir le message
    Google à souvent tendance à reprendre des élements existants déjà... Ils ne connaissent donc pas JML ?

    Je me demande ce que cette extension va apporter de plus par rapport à JML qui existe depuis un petit bout de temps.

    http://fr.wikipedia.org/wiki/Java_Modeling_Language
    Je ne connaissait pas JML mais d'après ton article, ça a l'air de reposer sur l'analyse des commentaires, je trouve l'approche des annotations choisies par Google plus logique.

  17. #17
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    décembre 2005
    Messages
    10 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2005
    Messages : 10 321
    Points : 18 477
    Points
    18 477
    Par défaut
    Citation Envoyé par YannPeniguel Voir le message
    Le typage fort n'est pas la réponse à tout, dans l'exemple donné avec les heures, tu ne peux pas déclarer un int qui reste dans [0;24[ en Java, du moins pas sans librairie/extension.

    Tu es donc obligé de te débrouiller avec les accesseurs, ou maintenant avec cofoja.


    et c'est bien cela le problème... en ne disposant d'un véritable typage fort, nombre de tests sont reportés à l'exécution (ce que nombre de développeurs Java reprochent aux langages plus dynamiques comme Python )
    alors il est clair que le message d'erreur sera bien plus explicite... mais ça revient aux assert insérés dans les codes C ou C++, et un jour on voit apparaître les static_assert pour tout ce qui est possible de faire dès la compilation (optimisations quand tu nous tiens )
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  18. #18
    Membre à l'essai
    Inscrit en
    juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : juillet 2009
    Messages : 14
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Taka-kun Voir le message
    Java : Google introduit la programmation par contrat
    pas du tout mais vraiment pas du tout

    Google à souvent tendance à reprendre des élements existants déjà... Ils ne connaissent donc pas JML ?

    Je me demande ce que cette extension va apporter de plus par rapport à JML qui existe depuis un petit bout de temps.

    http://fr.wikipedia.org/wiki/Java_Modeling_Language
    C'est malheureusement une critique qui revient souvent. D'une part, oui, on connait JML, mais cela ne correspondait pas à nos besoins, donc on a choisi de partir de Modern Jass. Il y a une bonne dizaine de frameworks de programmation par contrats en Java (voyez ma réponse sur Hacker News[0]), et on en a choisi un en particulier parce qu'il fallait bien faire un choix, et que c'était celui qui nous convenait le mieux.

    Quant aux différences JML vs Cofoja, du point de vue de l'utilisateur, j'ai répondu à la même question sur r/programming[1], il y a une semaine et je vais résumer ici : JML est plus complet, plus gros, fait beaucoup plus que des contrats, utilise sa propre toolchain, et a tendance à traîner le pied au niveau du support de nouvelles constructions dans le langage Java (du fait de la richesse des fonctionnalités qu'ils proposent, ajouter n'importe quelle construction au langage nécessite d'étendre le modèle conceptuel des spécifications JML de manière cohérente, ce qui n'est pas évident[2]).

    Le principal problème qui a fait que l'on a éliminé JML de nos options assez tôt est qu'il utilise sa propre toolchain, dont la version stable ne supporte pas Java 6, et ce n'était absolument pas envisageable de faire migrer des portions entières de code Google sous une boucle de compilation différente. Au-delà du défi technique que cela représente, ce serait beaucoup trop risqué en termes d'ingénierie et un tel projet n'aurait jamais vu le jour à Google. Cofoja, et son prédecesseur Modern Jass, s'intègrent aux outils standards de Java, via des APIs standards; la syntaxe n'est peut-être pas idéale (les chaînes de caractères dans les annotations) mais le framework est utilisable « immédiatement » de manière très peu intrusive dans n'importe quel projet Java (et même GWT en mode Java).

    Liens (en anglais) :
    [0] http://news.ycombinator.com/item?id=2183504
    [1] http://www.reddit.com/r/programming/...r_java/c1flbip
    [2]*http://citeseerx.ist.psu.edu/viewdoc...0.1.1.159.6215

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 448
    Points : 2 199
    Points
    2 199
    Par défaut
    Merci pour vos infos, et remarques et réponses : )

    @YannPeniguel, @lenhat, OK, je comprend tout à fait vos remarques.

    [/QUOTE]Bon, et puis, les contrats ça va un tout petit peu plus loin que borner les paramètres d'entrée ou fortifier le typage, 'faut arrêter de se toucher, les gens.[/QUOTE]
    Alala on eu aimé que tu ai autant entrain à nous expliquer ce que TOI tu sais de ces contrats mais pas nous autres indigent :!

  20. #20
    Membre éprouvé

    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    septembre 2010
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : septembre 2010
    Messages : 450
    Points : 1 071
    Points
    1 071
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    et c'est bien cela le problème... en ne disposant d'un véritable typage fort, nombre de tests sont reportés à l'exécution (ce que nombre de développeurs Java reprochent aux langages plus dynamiques comme Python )
    alors il est clair que le message d'erreur sera bien plus explicite... mais ça revient aux assert insérés dans les codes C ou C++, et un jour on voit apparaître les static_assert pour tout ce qui est possible de faire dès la compilation (optimisations quand tu nous tiens )
    Le mot clé assert existe en Java et fonctionne très bien!

    Mais son usage est peu répandu.
    Si vous moinsez, merci de répondre pour argumenter!
    Ma présentation

Discussions similaires

  1. Java : Google introduit la programmation par contrat
    Par Idelways dans le forum Actualités
    Réponses: 0
    Dernier message: 11/02/2011, 13h03
  2. Outil de Programmation par contrat pour Java?
    Par TabrisLeFol dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 26/10/2009, 08h15
  3. [Language]Programmation par contrat
    Par manube dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 11h16
  4. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 21h05
  5. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo