Journal Tests unitaires et faineantise

Posté par  (site web personnel) .
Étiquettes :
2
22
fév.
2005
Un lecteur de linuxfr a dit "je ne fais pas de tests unitaires parce que je suis faineant". Cette remarque m'a profondement interpelle.

Donc laissez-moi vous raconter une parabole: l'autre jour, je rangeais les courses dans le frigidaire en discutant avec un pote, informaticien et faineant (pleonasme ?), comme moi. Il me voit enlever l'emballage en carton du paquet de 16 yaourts avant de les mettre au frigo.
- tu enleves l'emballage ?
- oui
- mais c'est beaucoup de travail. Je croyais que tu etais un faineant comme moi ?
- oui, mais vois-tu, j'ai decouvert que c'est beaucoup plus de travail de prendre un yaourt si on n'a pas enleve l'emballage avant. Et il y a 16 yaourts a prendre. Il est plus economique d'enlever l'emballage des le debut.

Le faineant amateur va simplement mettre les yaourts au frigo, mais le vrai faineant va enlever l'emballage car il sait que celui-ci le fatiguera plus tard.

Apres cette parabole hautement philosophique, j'en reviens a mon sujet: si je fais des tests unitaires, c'est justement parce que je suis faineant. C'est beaucoup moins fatiguant d'ecrire un test unitaire puis de le valider avec du code, que d'ecrire du code en songeant a toutes les facons dont il sera utilise et en essayant de garantir que ca marchera a tous les coups. En plus, quand on n'a pas de suite de test unitaire, on est souvent oblige de lancer l'application et de faire quelques manip a la main. C'est super fatiguant.

Quand j'aurai un bug, je pourrai me permettre d'etre faineant: je le rajouterai a ma suite de test unitaire, je pourrai facilement faire la modif du code pour le corriger puisque j'aurai deja ma suite de test unitaire pour valider les autres fonctionnalites.

Voila, tout ca pour dire que le vrai faineant, c'est celui qui fait des tests unitaires.

Les tests unitaires, c'est bon, mangez-en !
  • # Rangement du frigo Howto

    Posté par  . Évalué à 5.

    Moi je scinde les pots de yaourts, s'ils viennent par huit, j'enleve l'emballage et je les shcuirz (je trouve pas de verbe plus approprié) comme ca :
    - ils se rangent plus facilement, certains arrivent à se faufiler dans les interstices ---> Gain de place
    - Quand j'en veux un je le prends sans avoir à mettre les deux mains ---> Gain d'energie

    Perte constatée aucune : lorsque je range les courses dans le frigo j'y met déja les deux mains

    En plus, pour le coup des emballages, c'est dommage de refroidir du carton.

    Désolé je suis resté sur la parabole. Promis quand je developperai je ferai des tests unitaires (d'abord je finis de diver into Python)
    • [^] # Microbes

      Posté par  . Évalué à 4.

      En plus, les emballages cartons c'est plein de bactéries !
      • [^] # Re: Microbes

        Posté par  . Évalué à 3.

        Tout à fait, c'est la raison pour laquelle on (ma copine de geek et moi) enlève systématiquement les emballages avant de mettre au frigo ...

        Sinon pour la fainéantise et les tests unitaires, je comprends bien, et j'aimerai bien me lancer là dedans, mais quand un employeur veut voir quelque chose d'utilisable tout de suite il est souvent difficile de lui expliquer qu'on a rien de montrable pour le moment parce qu'on a passé la journée à coder des tests unitaires qui feront gagner beaucoup de temps plus tard ...
        • [^] # Re: Microbes

          Posté par  (site web personnel) . Évalué à 4.

          Pour ton employeur, pense a ce qui va se passer une semaine plus tard:
          - quoi, ca ne marche toujours pas
          - ben c'est que il y a quelques bugs compliques que j'ai du mal a regler
          - mais je comprends pas, au bout d'un jour, ca marchait deja
          - oui, mais c'etait pas fini, il y avait encore du travail plus difficile a faire

          Alors que avec les tests unitaires, le depart est plus difficile, mais le finish est plus facile. Surotut quand au bout d'une semaine, il t'explique que tu n'as pas compris sa demande et qu'il faut tout changer. Avec tes tests unitaires, tu es zen.

          Tu vois, meme ton patron serait content.

          Sinon, pour mieux faire passer la pilule:
          - il faut viser en priorite les fonctionnalites les plus utiles
          - tu codes et tu testes en meme temps. Donc au bout d'une journee, tu as quand meme une partie du code qui est ecrite.
    • [^] # Re: Rangement du frigo Howto

      Posté par  . Évalué à 2.

      Je fais partie des gens qui rangent leurs yaourts dans le frigo la plupart du temps avec leur emballage. Je dois dire que je n'avais jamais réfléchi sérieusement à ce problème mais ce journal me fera peut-être changer de comportement.

      Mais même avec l'emballage, avec un peu plus d'efforts, j'arrive généralement à récupérer un yaourt du frigo avec une *et une seule* main. En effet, j'arrive à détacher le yaourt choisi du reste du paquet et également au cas où ils arrivent par deux de les séparer d'un mouvement souple du poignet tout en envoyant le second à sa place dans le frigo.

      De plus, le vrai fainéant que je suis sort du frigo tout ce dont il a besoin au début du repas pour économiser quelques trajets table-frigo (au moins... 1m !).

      Dans le même registre, il est possible pour le fainéant ultime de plier ses chaussettes de telle façon qu'elles soient déjà prêtes à accueillir le pied avec un effort minimal (en partie retroussées).

      Est-ce que quelqu'un connait d'autres procédures d'optimisation de la vie quotidienne ? ;)
      • [^] # Re: Rangement du frigo Howto

        Posté par  (site web personnel) . Évalué à 4.

        J'esperais plutot inspirer de l'inspiration cote test unitaires mais il semble que la faineantise soit beaucoup plus populaire :-)
      • [^] # Re: Rangement du frigo Howto

        Posté par  . Évalué à 3.

        (Désolé pour les test unitaires...)

        Je le connais le coup du 'une seule main' dans le frigo, une assiette chaude dans l'autre (oui c'est sur autant faire un voyage, pour prendre le beurre et le yaourt) seulement des fois le pot qu'on veut pas prendre accroché à celui qu'on veut, se casse ---> une heure de perdue à nettoyer le frigo et les denrées des etages du dessous*, l'angoisse....

        * Note : si vous avez un petit frigo, mieux vaut mettre les yaourts en bas il y a moins de chances que le haut des yaourts soit un peu gelé.
      • [^] # gcc -msse2 activites_quotidiennes.c && ./a.out

        Posté par  . Évalué à 6.

        Est-ce que quelqu'un connait d'autres procédures d'optimisation de la vie quotidienne ? ;)

        Que oui. L'homme étant monotâche par essence, toute occasion d'effectuer en même temps plusieurs choses, c'est quelques secondes de vie en plus, c'est une petite victoire sur la fatalité !

        Exemple: faire pipi en se brossant les dents.
        - time ( brossage && pipi ) : 1min + 30 s = 1min30
        - time ( parallel ( brossage, pipi ) ) : 1 min
        soit 30s de gagnées par jour !

        Mais l'exemple ultime, c'est: faire du vélo en écoutant de la musique pour se rendre à son lieu de travail. Là on fait en même temps:
        - une activité sportive
        - un trajet
        - loisir / détente / culture

        Ultime, je vous dis... (en plus quand il pleut on prend sa douche au même moment... et on touche au cosmique)
        • [^] # Re: gcc -msse2 activites_quotidiennes.c && ./a.out

          Posté par  . Évalué à 1.

          autant pour le premier exemple, c'est faisable, autant le deuxième, je le trouve dangereux (dans certaines villes du moins). On est déjà bien assez fragile en vélo, si en plus on entend pas tout ce qui se passe autour de soi, c'est l'accident assuré pour dans pas longtemps...

          quoiqu'il y a pire, le vélo sur la neige...
        • [^] # Re: gcc -msse2 activites_quotidiennes.c && ./a.out

          Posté par  . Évalué à 1.

          Exemple: faire pipi en se brossant les dents.
          - time ( brossage && pipi ) : 1min + 30 s = 1min30
          - time ( parallel ( brossage, pipi ) ) : 1 min
          soit 30s de gagnées par jour !


          Pour gagner un peu plus de temps, tu peux aussi te brosser les dents avec ton pipi. ;) Dans le temps on se faisait des bains de bouche à l'urine (http://www.bium.univ-paris5.fr/sfhad/vol5/art02/corps.htm(...)), l'urine espagnole ayant la propriété de blanchir les dents.
          Enfin je le ferais pas moi... ;)
      • [^] # Re: Rangement du frigo Howto

        Posté par  . Évalué à 1.

        Il est possible pour le fainéant ultime de plier ses chaussettes de telle façon qu'elles soient déjà prêtes à accueillir le pied avec un effort minimal (en partie retroussées).
        Est-ce que quelqu'un connait d'autres procédures d'optimisation de la vie quotidienne ? ;)

        Ne pas plier ses chaussettes, tout simplement.
        • [^] # Re: Rangement du frigo Howto

          Posté par  . Évalué à 1.

          Ça c'est ce que je fais, parce que je ne suis pas un vrai fainéant (cf le journal). ;) Mais il est pour certaines personnes plus difficile d'introduire ses pieds dans ses chaussettes, problème que cette méthode de pliage résoud.
  • # bof

    Posté par  (site web personnel) . Évalué à 4.

    De toute façon le fainéant n'ira pas au bout de son projet et aura la flemme de se lever jusqu'à son frigo. Alors tests unitaire ou pas...
    sur le fond je suis d'accord :)
    • [^] # Re: bof

      Posté par  . Évalué à 3.

      le fainéant geek, il commande ses pizzas chaudes par internet. Comme ça il peut éteindre son frigo et ne pas allumer son micro-onde grill. Ca lui fait un gain sur ses dépenses d'électricité ;)
  • # Un peu de philo, peut-être?

    Posté par  . Évalué à 4.

    Tu devrais lire...

    Epicure!

    Ce n'est pas si éloigné que ça de ta réflexion.

    Je te déconseille l'original, c'est indigeste, mais une traduction devrait passer.

    Tout ceci se resume en quelques mots:

    Préfère toujours un bien, mais:
    1) Ne choisis jamais un bien qui t'apportera un mal plus grand.
    2) Préfère un petit mal qui t'apporteras un bien plus grand!

    Ca a l'air simple, mais c'est passablement retors. Et ca occupe!


    Si tu fais le parallèle, le vrai fénéant est un type occupé! (à trouver un meilleur moyen pour ne rien faire.) QED!

    0. Assume good faith 1. Be kind to other people 2. Express yourself 4. Apply rule 0

  • # Faineant

    Posté par  (site web personnel) . Évalué à 3.

    En même tant il n'a peut être pas la même philosophie de la faineantise.
    Toi tu dois être dans le "j'en fais le moins possible" lui est plutôt "remets à après demain ce que tu peux remettre à demain".

    C'est complètement différent. Toi tu vis dans le présent et l'avenir, lui que dans le présent.
    • [^] # Re: Faineant

      Posté par  . Évalué à 0.

      Je lis :

      Le faineant amateur va simplement mettre les yaourts au frigo, mais le vrai faineant va enlever l'emballage car il sait que celui-ci le fatiguera plus tard.

      et je me dis:
      1) il remet à tout de suite ce qui l'emmerdera demain
      2) que s'il vit pour le présent, il songe aussi à l'avenir.

      0. Assume good faith 1. Be kind to other people 2. Express yourself 4. Apply rule 0

    • [^] # Re: Faineant

      Posté par  . Évalué à 3.


      "remets à après demain ce que tu peux remettre à demain".


      Ca s'appelle la procrastination :)
  • # assertions préconditions

    Posté par  . Évalué à 3.

    n'oublie pas les assertions de type precondition qui permettent de repérer tout de suite l'endroit où on appelle une fonction avec des paramètres invraisemblables
    • [^] # Re: assertions préconditions

      Posté par  (site web personnel) . Évalué à 2.

      Des assertions ne remplacent pas des tests unitaires. Ca ne fait que verifier que ton programme ne va pas dans des etats fantaisistes.

      Les tests unitaires te permettent de valider en permence que ton programme fait ce qu'il doit faire, correctement.
      • [^] # Re: assertions préconditions, postconditions

        Posté par  . Évalué à 2.

        je n'ai pas dit que l'un remplace l'autre.

        il faut les 2 !
        car un test unitaire ne peut pas toujours tester tous les parametres possibles (il peut y avoir trop de combinaisons) d'où la nécessité des postconditions, et un test unitaire ne t'indique pas où est effectué un appel avec des paramètres idiots, d'où l'intéret des préconditions

        si tu as de bonnes postconditions dans une fonction, alors tes tests unitaires peuvent se résumer à essayer le maximums de parametres en appelant cette fonction, l'essentiel du travail de test étant fait par la postcondition
        • [^] # Re: assertions préconditions, postconditions

          Posté par  (site web personnel) . Évalué à 2.

          Une assertion/precondition ca s'appelle un oracle qui permet de détecter une erreur, mais reste qu'il faut des tests unitaire pour éventuellement les déclencher.
          • [^] # Re: assertions préconditions, postconditions

            Posté par  . Évalué à 2.

            si tu as de bonnes postconditions dans une fonction, alors tes tests unitaires peuvent se résumer à essayer le maximums de parametres en appelant cette fonction, l'essentiel du travail de test étant fait par la postcondition
            On dit la même chose !
            • [^] # Re: assertions préconditions, postconditions

              Posté par  (site web personnel) . Évalué à 2.

              J'ai jamais dis le contraire, moi j'ai juste donner la définition courte avec termes appropriés :) Une synthèse de ton commentaire quoi :)
              • [^] # Re: assertions préconditions, postconditions

                Posté par  . Évalué à 2.

                Puisque tu aimes pinailler, je pense que tu confonds à tort Oracle, un terme de complexité des algos http://en.wikipedia.org/wiki/Oracle_machine(...)
                (décideur imaginaire instantané, et pas seulement pour les erreurs)

                avec postcondition, un terme de programmation par contrat
                http://fr.wikipedia.org/wiki/Programmation_par_contrat(...)
                (partie finale d'une fonction qui décide si le résultat est entaché d'erreur ou pas)

                mais je conviens que ces 2 termes ont un point commun (ils retournent tous les 2 un booléen), et qu'il est tentant d'utiliser le terme Oracle quand on fait des tests unitaires sur des fonctions pour lesquelles on a pas écrit de postcondition (ce qui n'est pas une bonne habitude, car on ne peut pas toujours tester toutes les exécutions possibles avec un test unitaire, et la plateforme d'utilisation n'est jamais exactement la même que la plateforme de développement)
  • # comparatifs

    Posté par  . Évalué à 2.

    J'ai un prof qui nous disait que les informaticiens sont un la honte de la production industriel ( j'entends par là : génie mécanique, génie électronique,.... ).

    En gros, les logiciels plantent, c'est pas grave donc on s'en souci moins que si c'est une machine de fabrication industrielle ou une voiture.

    Mais bon, c'est juste une réflexion qui m'avait interpellée (en même temps le prof utilise Win***)
    • [^] # Re: comparatifs

      Posté par  . Évalué à 5.

      J'ai un prof qui nous disait que les informaticiens sont un la honte de la production industriel ( j'entends par là : génie mécanique, génie électronique,.... ).

      Ben oui bien sur, il n'a jamais eu de voiture, frigo, radio, television, mixer en panne, jamais entendu parler de bâtiment qui s'écroule, jamais eu affaire avec ces saletés de fil rouge autour des portions de creme de gruyere, jamais pesté contre ces bancs publics sur lesquels on ne peut pas s'allonger, jamais eu le cul congelé par les bancs en acier de la SNCF un jour d'hiver, jamais failli perdre la vie à l'échangeur de la mort porte de Bercy...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.