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

Débats sur le développement - Le Best Of Discussion :

Qu'est-ce qu'un code "propre" selon vous ?


Sujet :

Débats sur le développement - Le Best Of

  1. #161
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Pour le problème de el_slapper, j'aurais fait la même chose en C que white_tentacle...


    Code C : 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
    COURRIER-PRELEVEMENT = CHEQUE ;
    switch ( paiement )
    {
       case B :
            COURRIER-PRELEVEMENT = AGENT ;
            break ;
     
       case C :
            COURRIER-PRELEVEMENT = SIEGE ;
            break ;
     
      case A :
            if ( Tip_Autorise )
              {
                 COURRIER-PRELEVELEMENT = TIP
              }
            break ;
    }
    ou

    Code C : 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
    19
    20
    21
    switch ( paiement )
    {
       case B :
            COURRIER-PRELEVEMENT = AGENT ;
            break ;
     
       case C :
            COURRIER-PRELEVEMENT = SIEGE ;
            break ;
     
      case A :
            if ( Tip_Autorise )
              {
                 COURRIER-PRELEVELEMENT = TIP
                 break ;
              }
     
       default :
            COURRIER-PRELEVEMENT = CHEQUE ;
            break ;
    }

    1 seul test et une seule assignation...



    Citation Envoyé par Franck SORIANO Voir le message
    C'est vrai que sur une doc qui a un peu vécu, il arrive un moment où on ne sait plus si la doc est fiable (surtout si le code semble faire autre chose que la doc).

    J'ajouterais également, que malheureusement, c'est la même chose avec les commentaires dans le code. Dès que le code a un peu vécu, tu finis aussi par te demander si les commentaires sont encore fiables.
    eh oui.... malheureusement c'est la vie...



    Citation Envoyé par hegros Voir le message
    Tu te rends compte de ce que tu dis ? documenter un algo dans le code source c'est parfait pour un tutoriel ou un livre (pour apprendre)pour rendre plus dense, un éditeur de code n'est pas ce qu'il y a de mieux pour documenter.
    Non seulement je m'en rend compte, mais je le maintiens avec force


    Citation Envoyé par hegros Voir le message
    Aussi, j'ai écris des programmes où chaque caractère d'un commentaire compte comme un octet. Le programme n'est pas chargé en mémoire vive puisque c'est embarqué sur du matériel électronique et ma rom ne fait pas 9pétaoctets pour embarquer le commentaire de l'algorithme de wxy. Bref, cela ne me semble pas généralisable comme approche encore spécifique..

    tu racontes n'importe quoi...

    Pas un seul compilateur n'embarque les commentaires..

    Même pas les noms de variables... D'où l'extrême difficulté à décompiler (et surtout à en comprendre la sortie)...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  2. #162
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Jedai et Souviron > C'est vous qui ne connaissez pas c'est tout le domaine industriel vous êtes plus des tertiaires...


    En pascal sur du matériel Schneider TéléMécanique, chaque ligne de commentaire compte comme un octet et biensûr que oui que je vois à l'execution les commentaires en clair dans la mémoire

    Il suffit de vérifier avec delphi 6 pour se rende compte que c'est tout à fait la philosophie (1 ligne de commentaire = 1 compilation)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #163
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Il y a plein de cas où la signature et le nom de la fonction ne sont pas suffisants et où il est nécessaire de spécificer les entrées et le retour pour les cas d'erreurs

    Par exemple pour toutes les fonctions avec des bornes, la méthode substring(int inf, int sup) sur une chaîne de caractère qui retourne une sous-chaîne :
    - inf commence t'-il a 0 ou à 1 dans la chaine ?
    - sup est il inclus ou non inclus ?
    - une borne inf supérieur à une borne sup lêve t'il une exception, où est-ce que ça retourne null ou une chaîne vide ?

    Si le commentaire n'est pas présent, le nom de la fonction n'est clairement pas suffisant (pourtant le nom est bien choisi car ça fait ce que ça dit).
    Je ne répondrai à aucune question technique en privé

  4. #164
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par millie Voir le message
    - inf commence t'-il a 0 ou à 1 dans la chaine ?
    - sup est il inclus ou non inclus ?
    - une borne inf supérieur à une borne sup lêve t'il une exception, où est-ce que ça retourne null ou une chaîne vide ?
    C'est spécifique au langage en C c'est 0 en W-Langage c'est 1, bref cela n'a rien à faire comme un commentaire de code (cela ressemblerait à un commentaire du langage...)

    Quand au reste je ne trouve pas que apporte une plus-value.


    Si le commentaire n'est pas présent, le nom de la fonction n'est clairement pas suffisant (pourtant le nom est bien choisi car ça fait ce que ça dit).
    Avec le commentaire c'est surement pas plus clair !
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #165
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par hegros Voir le message
    C'est spécifique au langage en C c'est 0 en W-Langage c'est 1
    En fait, c'était un exemple Java (mais cela est valable pour n'importe quel langage).

    J'ai pris des String, cela pourrait être n'importe quel objet avec une possibilité d'extraire une sous partie avec des bornes.



    Avec le commentaire c'est surement pas plus clair !
    Pourtant, cela me semble clair :
    Code java : 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
    19
    20
    21
    22
    23
       /**
         * Returns a new string that is a substring of this string. The
         * substring begins at the specified <code>beginIndex</code> and
         * extends to the character at index <code>endIndex - 1</code>.
         * Thus the length of the substring is <code>endIndex-beginIndex</code>.
         * <p>
         * Examples:
         * <blockquote><pre>
         * "hamburger".substring(4, 8) returns "urge"
         * "smiles".substring(1, 5) returns "mile"
         * </pre></blockquote>
         *
         * @param      beginIndex   the beginning index, inclusive.
         * @param      endIndex     the ending index, exclusive.
         * @return     the specified substring.
         * @exception  IndexOutOfBoundsException  if the
         *             <code>beginIndex</code> is negative, or
         *             <code>endIndex</code> is larger than the length of
         *             this <code>String</code> object, or
         *             <code>beginIndex</code> is larger than
         *             <code>endIndex</code>.
         */
        public String substring(int beginIndex, int endIndex) { ... }

    Le fait que les bornes soient inclusives/exclusives est spécifiés. Les indices aussi. Les cas d'erreur aussi. Et 2 exemples sont données.
    Je ne répondrai à aucune question technique en privé

  6. #166
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Attends tu commentes plus que tu codes...

    Non franchement ce code est affreux ce n'est pas plus clair du tout

    Pour me répeter mais mise à part pour la génération automatique de code ou test tous tes commentaires, en arrivant sur ton projet, ne me serve foutrement à rien du tout.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #167
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par millie Voir le message
    Il y a plein de cas où la signature et le nom de la fonction ne sont pas suffisants et où il est nécessaire de spécificer les entrées et le retour pour les cas d'erreurs

    Par exemple pour toutes les fonctions avec des bornes, la méthode substring(int inf, int sup) sur une chaîne de caractère qui retourne une sous-chaîne :
    - inf commence t'-il a 0 ou à 1 dans la chaine ?
    - sup est il inclus ou non inclus ?
    - une borne inf supérieur à une borne sup lêve t'il une exception, où est-ce que ça retourne null ou une chaîne vide ?

    Si le commentaire n'est pas présent, le nom de la fonction n'est clairement pas suffisant (pourtant le nom est bien choisi car ça fait ce que ça dit).
    Ces "commentaires" sont une manière de matérialiser la programmation par contrat. Comme le langage ne gère pas réellement le respect du contrat (au niveau compilation/exécution) ces informations sont insérées sous forme de commentaire. A la charge du développeur de respecter le contrat lors de l'appel. D'ailleurs, en Java/C#/Doxygene, ces commentaires spécifiques sont formalisés par l'utilisation de Tags, afin d'être facilement exploitable.

    Pour moi c'est différent du "commentaire" libre qui doit expliquer ce que fait le code (ou comment il le fait).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #168
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ces "commentaires" sont une manière de matérialiser la programmation par contrat. Comme le langage ne gère pas réellement le respect du contrat (au niveau compilation/exécution) ces informations sont insérées sous forme de commentaire. A la charge du développeur de respecter le contrat lors de l'appel. D'ailleurs, en Java/C#/Doxygene, ces commentaires spécifiques sont formalisés par l'utilisation de Tags, afin d'être facilement exploitable.

    Pour moi c'est différent du "commentaire" libre qui doit expliquer ce que fait le code (ou comment il le fait).
    C'est que benwit appelait des commentaires publiques. Cela reste souvent plus simple à lire que des règles et des axiomes.
    Je préfère une API où les méthodes sont spécificés comme ça et sans commentaire privées, que non spécifié avec des commentaires privés (une méthode va plus souvent être utilisée qu'elle n'est maintenue)

    Après, je suis peut être seul à avoir cette avis...

    Citation Envoyé par hegros
    Attends tu commentes plus que tu codes...

    Non franchement ce code est affreux ce n'est pas plus clair du tout
    En même temps, je n'ai pas mis de code...
    J'ai juste écrit les spécifications de la fonction/méthode, dire que c'est inutile revient à dire qu'écrire des spécifications est inutile (ici on les met dans le code et ils peuvent être extrait automatiquement pour générer les documents de spécifications de l'API).

    Ce qui dans mon exemple donnera ça : http://java.sun.com/javase/6/docs/ap...ng(int,%20int))
    Je ne répondrai à aucune question technique en privé

  9. #169
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Ces "commentaires" sont une manière de matérialiser la programmation par contrat. Comme le langage ne gère pas réellement le respect du contrat (au niveau compilation/exécution) ces informations sont insérées sous forme de commentaire. A la charge du développeur de respecter le contrat lors de l'appel. D'ailleurs, en Java/C#/Doxygene, ces commentaires spécifiques sont formalisés par l'utilisation de Tags, afin d'être facilement exploitable.
    Oui, sauf qu'en l'occurrence, les préconditions sont exprimées dans la clause throw, ce qui est assez surprenant (au final, ça veut dire qu'on ne fait pas de la programmation par contrats, mais de la programmation défensive). Mais il y a ce qu'il faut savoir. Si le code que je récupère était toujours comme ça, je serais un homme heureux.

    Pour moi c'est différent du "commentaire" libre qui doit expliquer ce que fait le code (ou comment il le fait).
    C'est vrai que c'est différent, le contrat fait pratiquement partie de la signature de la fonction. Mais à choisir entre les deux, je préfère très largement n'avoir que le contrat. Au moins, je sais comment utiliser la fonction.

  10. #170
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Les méthodes Agiles ne conseillent pas de commenter le code, car elles ne sont jamais mise à jour ... Ce qu'elles conseillent par contre, c'est d'écrire des tests unitaires (en TDD on n'écrit pas de code, sans écrire un test unitaire par exemple), on fait régulièrement du refactoring ...
    Les tests unitaires étant mis à jour régulièrement, ils peuvent permettre une meilleure compréhension du code.
    Et le refactoring permet d'avoir un code plus propre.

    Y a plusieurs approche pour le développement, y a ceux qui voit en la documentation abondante une garantie pour avoir du code évolutif et maintenable et ceux qui croit qu'un code maintenable et évolutif est un code fortement testé et remanié ... Plus ça va et plus je me sens dans la seconde branche, celle du monde agile, car trop vue de doc quand elle existe, soit elle est obsolète, soit qui demande un temps énorme pour en sortir la petite info dont on a besoin.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  11. #171
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    La maintenance des commentaires et des spécifications sont effectivement un problème déjà souligné dans cette discussion.

    Ecrire des tests exhaustifs revient vaguement à écrire et vérifier les axiomes des méthodes.
    Il faudrait pouvoir coupler les axiomes et des générateurs d'objets pour pouvoir générer des tests automatiquement (mais cela reste peu adapté au déroulement de scénario)


    Le problème est que la lecture des tests et des axiomes peuvent être lourdingue (les tests peuvent donner des exemples intéressants par contre) et peu adapté à la livraison d'API à d'autres boites/services/public
    Je ne répondrai à aucune question technique en privé

  12. #172
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 060
    Points
    32 060
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    (.../...)

    C'est très lisible, et en plus, le compilateur est capable de me donner un warning ou une erreur si j'ai oublié un cas dans mon switch (très utile lorsqu'on rajoute un type de paiement).

    Cela dit, je viens de regarder rapidement ce que sont des "Niveaux 88", et effectivement, ma remarque initiale ne s'applique pas ici (par contre, le mécanisme même des niveaux 88 me semble plutôt contre intuitif).
    Effecitvement, les mécanismes sont assez différents. Le niveau 88 est très puissant(puisqu'il permet de faire se chevaucher des valeurs), mais il est assez délicat au premier abord(d'ou ta remarque sur le contre-intuitif), et il n'est pas sécurisé comme ton switch. Le jour ou on invente un nouveau mode de paiement, la compilation n'y verra que du feu - même si on a ajouté une nouvelle valeur.

    Maintenant, qu'est-ce qui est le plus propre? J'en sais rien. Personellement j'aime bien le fait de faire un EVALUATE/Select case(VB) sur un booléen, ça permet de faire une liste de conditions variées, dès qu'on a plus d'un critère d'aiguillage, sans rajouter de IF(dans mon cas, sur le paiement TIP). Ce qui n'est pas possible en Java(pour le peu que j'en connais, un "switch case true", eclipse n'aime pas). Ce qui oblige Souviron à rajouter un if dans son switch. Mais est-ce plus propre? Non, c'est juste que je préfère.



    Pour ce qui est de la démarche agile, à mon sens, C'est un choix à haut niveau. Moi modeste programmeur, je suis. Ici, chez mon client actuel, c'est diagramme en V, chiffrage sur 1000 jours et tout le toutim. L'idée même de démarche agile, donc, ne s'applique pas. Même si, sur un plan perso, je trouve ça surpuissant. Et je subodore que ça a aussi des failles(mais je manque d'expérience pour en parler).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  13. #173
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par millie Voir le message
    La maintenance des commentaires et des spécifications sont effectivement un problème déjà souligné dans cette discussion.

    Ecrire des tests exhaustifs revient vaguement à écrire et vérifier les axiomes des méthodes.
    Il faudrait pouvoir coupler les axiomes et des générateurs d'objets pour pouvoir générer des tests automatiquement (mais cela reste peu adapté au déroulement de scénario)
    Dans une approche MDA ?

    Il me semble (mais mes connaissances ne sont que sommaires à ce niveau) que le code générer est testé à partir des uses cases spécifié, qui sont eux fais automatiquement.

    PS : Je parlais de test unitaire !
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  14. #174
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par millie Voir le message

    En même temps, je n'ai pas mis de code...
    J'ai juste écrit les spécifications de la fonction/méthode, dire que c'est inutile revient à dire qu'écrire des spécifications est inutile (ici on les met dans le code et ils peuvent être extrait automatiquement pour générer les documents de spécifications de l'API).
    Ce qui est inutile c'est de mettre le commentaire dans le code cela ne revient pas à dire qu'écrire les spécifications est inutile (c'est toi qui le dis pas moi) c'est écrire les spécifications ailleurs dans un autre document.

    Le commentaire de ton code ne sera jamais plus à jour qu'un document tierce spécialisé dans les spécifications.

    En plus tu sais les difficultés de maintenance soit le commentaire dans le code n'est donc pas une solution satisfaisante.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  15. #175
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    PS : Je parlais de test unitaire !
    De même.


    Pour un exemple simple, si on prend les 2 axiomes suivants sur des ensembles immutables avec les fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //signature
    creerEnsembleVide() -> Ensemble
    taille(Ensemble) -> entier
    ajouterElement(Ensemble, Element) -> Ensemble
    retirerElement(Ensemble, Element) -> Ensemble
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //axiomes
    taille(creerEnsembleVide()) == 0
    Pour tous ensembles e, pour tout élément a, retirerElement(ajouterElement(e, a), a) == e
    Si on dispose de 2 générateurs :
    creerEnsembleAleatoire() -> Ensemble
    creerElementAleatoire() -> Element

    On pourrait générer les tests unitaires suivants automatiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //test axiome 1
    assertEquals(taille(creerEnsembleVide()), 0);
    
    //test axiome 2 (que l'on peut relancer un certain nombre de fois)
    Ensemble  e = creerEnsembleAleatoire();
    Element a = creerElementAleatoire();
    assertEquals(retirerElement(ajouterElement(e, a), a) , e )
    L'exemple est simple ici car ce sont des TAD immutables. Et on peut remarquer qu'il n'y a pas de déroulement de scénario, juste une génération de tests à partir des axiomes.
    Je ne répondrai à aucune question technique en privé

  16. #176
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    milie pour les tests c'est largement défendable cependant ce n'est plus pareil. Ce sont ne plus à mon sens des commentaires comme on le comprends dans le langage usuel des développeurs.

    Un commentaire c'est pour expliquer un code là c'est tout différent
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  17. #177
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Mon petit avis qui ne tiens que de mon expérience.

    En général, le code, même compliqué, même non commenté, même avec des noms de variables peu inspiré... reste relativement facile à lire (OK, il y a des bouts de codes de psychopathes particulièrement obscurs mais finalement j'en ai rencontré assez peu dans ma carrière).

    Par contre parfois, ce qui peut poser problème c'est l'envie (ou parfois l'obligation) de trop bien faire. La multiplication des niveaux d'abstraction, l'utilisation de classe proxy dans tous les coins, le découpage excessif des responsabilités... l'utilisation d'un tas de pattern (parfois à juste titre)
    Font que pour comprendre un bout de code de 10 lignes on finit par parcourir de multiples fichiers de code, à ne plus savoir ce qu'on manipule...

    L'enfer est pavé de bonne intention, et parfois pour des intentions louables (alors là, si on sépare le concept A du concept B... on pourra passer facilement de sybase à Oracle ou de Sun à AIX... proposer une interface pour smartphone, connecter l'appli à la machine à café... Un tas de perspectives qui ne seront probablement jamais étudiée sérieusement faute de budget ou parce qu'elles sont irréalistes .

    Bref, un code propre doit aussi (en plus de tout ce que vous avez pu définir précédemment) savoir conserver une conception et une architecture raisonnable.

    Là ou le bas blesse, c'est qu'un code propre doit en même temps savoir augmenter le niveau d'abstraction, la complexité de la conception, la complexité de l'architecture... quand c'est nécessaire.

    Aussi simple que possible, aussi compliqué que nécessaire. Le juste milieu n'est pas si facile à trouver.

  18. #178
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Les méthodes Agiles ne conseillent pas de commenter le code, car elles ne sont jamais mise à jour ... Ce qu'elles conseillent par contre, c'est d'écrire des tests unitaires (en TDD on n'écrit pas de code, sans écrire un test unitaire par exemple), on fait régulièrement du refactoring ...
    Les tests unitaires étant mis à jour régulièrement, ils peuvent permettre une meilleure compréhension du code.
    Et le refactoring permet d'avoir un code plus propre.

    Y a plusieurs approche pour le développement, y a ceux qui voit en la documentation abondante une garantie pour avoir du code évolutif et maintenable et ceux qui croit qu'un code maintenable et évolutif est un code fortement testé et remanié ... Plus ça va et plus je me sens dans la seconde branche, celle du monde agile, car trop vue de doc quand elle existe, soit elle est obsolète, soit qui demande un temps énorme pour en sortir la petite info
    dont on a besoin.
    personne ici n'a parlé (en tous cas pas dans ce sous-débat) de documentation externe...

    J'aimerais bien qu'on me cite un extrait d'une méthode logiciellle (qu'elle qu'elle soit), agile ou non, recommandant de ne pas mettre de commentaires dans son code.....



    Cela va de soi, c'est peut-être pour ça qu'ils l'ont oublié...



    Citation Envoyé par hegros Voir le message
    Le commentaire de ton code ne sera jamais plus à jour qu'un document tierce spécialisé dans les spécifications.

    En plus tu sais les difficultés de maintenance soit le commentaire dans le code n'est donc pas une solution satisfaisante.


    Parce que tu penses que la doc externe est plus à jour que la doc interne ????????????




    Dans 99.99999% des cas que j'ai vu, c'est le contraire...

    Et j'aime beaucoup le "document tierce"... et surtout sa fiabilité par rapport au code....


    J'aimerais beaucoup vous voir, toi ou rad_hass, dans 10 ou 15 ans, en train d'essayer de reprendre un de vos codes... (ou celui d'un autre)....

    Enfin bref, que cela soit ce que tu penses, soit, mais s'il te plaît ne vient pas précher pour les autres, alors qu'ici on est un forum de professionnels où il y a des débutants et des jeunes qui viennent puiser...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  19. #179
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mathbzh Voir le message
    ..L'enfer est pavé de bonne intention
    ...Aussi simple que possible, aussi compliqué que nécessaire. Le juste milieu n'est pas si facile à trouver.
    Abosulement..

    Bravo por ce résumé synthétique
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  20. #180
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 85
    Points : 113
    Points
    113
    Par défaut
    Je suis pleinement de l'avis de souviron34, mais ce n'est visiblement pas le cas de tout le monde.

    Si un administrateur passe par là, est-ce qu'il est possible de créer un sondage "Faut-il commenter son code?", ça pourrait être intéressant, je pense, non?

Discussions similaires

  1. Qu'est ce que cela veux dire un "code propre" selon-vous ?
    Par kagura dans le forum Général Conception Web
    Réponses: 45
    Dernier message: 09/02/2016, 14h22
  2. [Tableaux] Retour chariot pour un code HTML propre
    Par beastman007 dans le forum Langage
    Réponses: 10
    Dernier message: 09/03/2006, 17h43
  3. Code CSS propre
    Par keawee dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/10/2005, 21h59

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