Anthony Patricio’s Blog

Comparer des pommes avec des oranges.

Posted in Actu / Anecdote by apatricio on mai 14, 2009

Comparer des pommes avec des oranges est-il si stupide que cela?

Cette phrase amplement utilisée pour signifier que deux sujets ne peuvent être comparés entre eux est-elle réellement pertinente? Pour ma part, les affirmations absolues n’ont pas leur place dans ce monde, tout est question de contexte. Il est ainsi intéressant de comparer des pommes avec des oranges dans différents contextes comme la nutrition ou le goût.

Il y a quelques semaines, j’ai vérifié et corrigé une application destinée à comparer des outils de persistance d’objets java. Il y avait trois produits: un ORM mystérieux couplé à une BDD relationnelle et 2 Bases Objet.

Cette expérience fût l’objet de longs débats plus sémantiques et méthodologiques que techniques entre l’étudiant (préparant son doctorat) et moi-même qui devais valider son code et ses mappings. Au delà des résultats des tests, ce qui m’intéressait était de permettre à l’étudiant de prendre du recul et si cela ressortait dans sa dissertation alors mon objectif serait atteint. Pour lui faire entendre raison il m’a fallu ruser et utiliser une autre comparaison, place aux engins motorisés.

S’il fallait comparer une moto, une formule 1 et un 4×4, beaucoup de questions me viendraient à l’esprit, et malheureusement l’étudiant en question a foncé tête baissée dans le code sans se les poser:

Qui pilote les engins?

  • une personne sans permis
  • une personne avec une expérience significative pour chacun des véhicules

L’expérience semble nécessaire, malheureusement l’étudiant n’avait pas de réelle expérience pratique et, oh mon dieu!, n’a fait que survoler les guides de référence. Résultats: des erreurs graves un peu partout. Après une première passe sur ces erreurs grossières, les performances étaient déjà 2 à 3 fois meilleures.

Où tester les véhicules ?

  • sur un terrain neutre, très difficile à définir ?
  • sur un circuit ?

Tout dépend de l’objectif du test et de l’utilisation attendue par les destinataires du test. Admettons dans notre cas un test sur piste pour tester la vitesse pure des engins, en ligne droite, courbe, blah blah. Ici, le modèle Java utilisé avait du sens, tous les types d’associations étaient présents, ainsi que l’héritage. Petite chose irritante cependant, au lieu de se pencher sur un listing des fonctionnalités de chaque outil, le test cible les performances dans des cas d’utilisation de type batch. Les connaisseurs comprendront de suite le soucis: on ne choisit pas ce type d’outil pour faire des insertions/extractions massives de données mais bien pour permettre de concevoir une application qui nécessite une modélisation orientée objet.

Autorisation de prendre des raccourcis ?

  • Seul le 4×4 est capable de couper à travers champ pour le test
  • Alors que la formule 1 n’y survivrait pas.

Dans ce cas il semble nécessaire d’expliquer que le 4×4 dispose d’un avantage certains, non négligeable sur ces concurrents.

Si tous les véhicules peuvent prendre le raccourcis, la question se pose aussi, tout dépend de l’exhaustivité et de la lisibilité souhaitées. Ainsi un des deux fournisseurs de base objet a essayé de forcer l’étudiant à configurer son architecture autour du mode « stockage in-memory ». Oui mais voilà, des BDD relationnelles in-memory existent aussi, permettant des performances virtuellement explosives. L’étudiant a fait preuve d’impartialité et n’a pas accepté cette requête.

Quels pneus utiliser ?

Certainement l’aspect pouvant impacter le plus les résultats. Utiliser des pneus en mousse pour la formule 1 invaliderait l’ensemble des tests. De nombreux points techniques relevant de ce domaine ont du être rectifiés dans le code. Dans le cas ORM + BDD relationnelle, ce n’est pas l’ORM qui est testé, c’est bien l’ensemble. Il semble donc intéressant de comparer les résultats avec 2 BDD relationnelles différentes.

Épilogue: après différentes corrections et optimisations de bon sens (pas de triche genre cache de second niveau expressément tunné pour les cas d’utilisation), tous les tests (une 15ene) tournent entre 4 fois et 40 (oui 40!!!) fois plus vite.

Conclusion: même si la solution ORM/BDD relationnelle s’en sort une fois de plus grandie, je persiste à penser que, comme la quasi totalité des comparatifs axés uniquement sur la performance, ce test est un nième benchmark peu utile. Posez-vous toujours et en priorité la question de votre contexte d’applications d’entreprise. Pensez d’abord fonctionnalités, pérennité et réputation des produits. Si un produit est réputé et massivement utilisé, c’est déjà un gage de sécurité.

Publicités

3 Réponses

Subscribe to comments with RSS.

  1. Yoko said, on juillet 22, 2011 at 9:38

    Par rapport à ta conclusion, personnellement j’intègre cette problématique dans une plus vaste qui est la maintenabilité du logiciel. Pour que du code soit maintenable, il faut que les technologies employées :
    – que les technologies utilisées soient pérennes
    – que l’on ai les compétences sur place ou qu’il soit facile de trouver quelqu’un les ayant
    – que le code résultat soit simple dans la mesure du possible (cela permet de changer de technologie plus facilement « au cas où »)

    Pour moi hibernate respecte ces 3 conditions sans problème en entreprise c’est souvent plus important que les performances.

    De ce que j’ai compris, l’étudiant dont tu parle effectuait un benchmark d’hibernate. Je pense que ce n’est pas quelque chose de mauvais. Même si ce n’est pas le critère majeur pour passer à un ORM, l’étude de leur performance n’est pas une mauvaise chose en soit et peut être bloquant pour certains projets.

    • apatricio said, on juillet 22, 2011 at 1:14

      Bonjour Yoko,
      je ne peux que rejoindre ton avis si ce n’est sur un point: la ‘simplicité’.
      Il est des problématiques qui ne peuvent être implémentées ou résolues simplement. Tout domaines à son seuil de complexité en dessous duquel il est très dangereux d’essayer de descendre. Combien de fois j’ai rencontré des générateurs de code dont le but étaient soit disant de cacher les complexité au développeur lambda en générant les fichiers de configs ou autre. Au final, la compétences sur ces points se perd alors que beaucoup d’enjeux s’y jouent.
      Je pense qu’il faut être franc, certaines problématiques (et donc certains frameworks et outils permettant de traiter ces problématiques) ne peuvent être laissées entre les mains du premier venus. Parfois l’expérience, l’expertise et le recul sont nécessaires tant les dommages collatéraux peuvent être importants.
      Pour ce qui est de la pérennité, c’est un point critique. On investit (ou on devrait en tout cas) investir en l’humain via ces compétences, cela coute cher et il faut que ces compétences aient une durée de vie conséquente. Il en va de même pour la maintenabilité d’une appli. Si une appli exploite le framework maison vieux de 5 ans d’une SSII, il ne faut pas s’étonner du coût de sa maintenance, ré acquérir chaque fois la compétence sur un ovni obsolète que personne ne connait plus, ça coute cher.
      En cela les standards (de fait ou concrètement normalisés) SONT indispensables.

      • yoko said, on juillet 30, 2011 at 10:19

        Tu as tout à fait raison. J’aurais du parler de technologies qui ne soit pas excessivement complexe. Pour hibernate par exemple, j’ai beaucoup apprécié la méthode saveOrUpdate() qui remplace avantageusement l’écriture de 3 requêtes SQL.

        Un ORM sans forcément que ce soit une simplification permet de ne pas avoir 2 univers à gérer (d’un coté le SQL et de l’autre l’objet), mais au contraire de ne réfléchire qu’en terme d’objet (même s’il faut aussi réfléchir à la manière dont sont persistées les données).


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :