BodySplash.fr

Aller au contenu | Aller au menu | Aller à la recherche

lundi 2 novembre 2009

Les deux écoles de TDD

Je ne sais pas pourquoi ces derniers temps, j'entend pas mal de retours comme quoi le refactoring serait ralenti par les tests unitaires. L'explication derrière cette affirmation douteuse est qu'il faut bien souvent modifier les tests en même temps que le code de production.

J'ai tendance à croire que cette idée bizarre est née d'une des deux écoles de TDD. Ces deux approches ont été bien décrites par Martin Fowler dans son article sur les mocks et les stubs.

Je vais me permettre de le paraphraser ici :

  • L'approche classique essaye d'utiliser le plus possible de vrais objets, et un "double" s'il est difficile ou gênant d'utiliser l'implémentation réelle (par exemple, l'envoie d'un mail)
  • L'approche par Mock va utiliser dans tous les cas des doubles de test pour tout objet ayant un comportement intéressant.

Pour qualifier ces deux méthodes, Mister Fabien parle de tests Boîte Noire et de tests Boîte Blanche.

Appliquer systématiquement une approche par mock implique une chose : on teste plus la chorégraphie de notre objet que ses résultats. Nous allons vérifier que tel méthode de tel mock a été appelé avec tel paramètre, et que si nous retournons tel valeur, alors notre objet va se comporter de telle manière. Ce faisant, nous liions inexorablement notre test avec l'implémentation sous-jacente, rendant par la même plus douloureux le refactoring, car il nous faudra effectivement changer les tests en même temps que le code de production. L'écriture des tests peut être fastidieux en plus, vu la quantité d'éléments à doubler (constat fait par exemple lors du JUG Bordelais sur le sujet

Dans une approche classique, comme nous testons la plupart du temps le comportement extérieur, nous nous moquons éperdument de l'implémentation, pour vu que le résultat soit bon, et nous passons également moins de temps à écrire nos doubles.

lundi 6 avril 2009

Scrum, c'est xp sans le côté geek

Je vais simplement ici vous conseiller de regarder la vidéo qui suit, (et merci à Fabien pour le lien). Le titre est provocateur, mais finalement assez vrai. Bref, je vous laisse en compagnie d'un des papas de l'agilité. Cliquez ici, si si.

jeudi 12 février 2009

Comment juger un développeur?

La question est classique, mais le débat est revenu plusieurs fois ces dernières semaines ou moi au d'autres collègues avons du faire passer quelques entretiens. C'est une question bien entendu très ouverte, donc je vous laisse vous défouler dans les commentaires :)

Très personnellement, je ne pense pas que l'on puisse juger quelqu'un à la somme de ses connaissances. Mieux vaut une tête bien faite qu'une tête bien pleine comme disait l'autre. Donc, contrairement à ce qu'on pourrait penser, même si par curiosité je vais demander, je ne vais pas attendre de quelqu'un qu'il sache tout de l'agilité, des principes SOLID, de DDD etc. etc. Je vais sans doute me moquer encore plus des connaissances encore plus techniques comme les détails d'mplémentation de tomcat ou ses différents connecteurs. Mais alors qu'est-ce qui importe? Ce qui importe, c'est que tous les éléments que je viens de citer peuvent s'apprendre. C'est donc mon premier grand point: savoir et vouloir apprendre.

Ensuite, à mon sens ce qui fait le plus la qualité d'un développeur c'est la qualité de son code. Oh la belle phrase. Qu'est-ce que ça veut dire? Essentiellement pour moi qu'il est maintenable. Comment rend on le code maintenable? Essentiellement en lui donnant du sens. Ca a peut être l'air tout con comme ça, mais j'ai très personnellement le sentiment qu'en France le code est très mal vue, et que globalement la grande majorité des formations que nous recevons sont à base de "le code c'est le mal, mais plus tard vous serez chef de projet et vous en ferez plus". A partir de là pourquoi dépenser des efforts dans quelque chose qui est apparemment par définition imbitable et chiant?

Mais je digresse, pour résumer en deux principes, voilà finalement ce que je recherche:

  • amélioration continue
  • donner du sens au code

Ce qui me plaît dans ces deux principes, c'est qu'ils permettent de juger tant les débutants que les vieux routiers. Une fois que ces deux qualités sont identifiées, il suffit d'estimer "l'avancement" sur le chemin. Par exemple, donner du sens au code commence par bien nommer ses variables, et continue (bien) plus tard par DDD.

vendredi 30 janvier 2009

Scrum vs XP le retour

Il y a quelque temps déjà, j'avais écrit un billet concercnant Scrum Vs XP. Peut-être l'avez vous lu, peut-être pas, mais l'essence de ce que je disais alors entre autre, était que je me méfiais de Scrum car il passait sous silence toutes les techniques d'ingénierie en se concentrant sur la gestion de projet. C'était un danger pour moi, car il me semblait, et me semble toujours, qu'il est impossible de réussir un projet agile sans les pratiques d'ingénierie qui vont bien. Comment travailler en itération si à chaque passage on ne fait que grossir la dette technique n'est-ce pas?

Je vous reparle de tout ça car il se trouve que Martin Fowler en parle aujourd'hui . Alors oui je vous link ça car vous vous en doutez, je suis fier d'avoir obtenu les mêmes concluions que Fowler :) Ceci dit, je vous le fait passer également car j'aime bien montrer que je ne parlais pas dans le vent, et que le phénomène que j'avais anticipé existe réellement. Fowler est plus dans le consensus que moi, et ne démonte pas Scrum. Mais personnellement, je maintiens ce que je disais: pourquoi choisir Scrum quand XP est complet et n'induit pas le risque d'oublier ou le planning ou l'ingénierie?

jeudi 29 janvier 2009

Moins d'idées reçus

Je vais ici faire bêtement de le résumé d'un résumé, mais allez jeter un coup d'oeil ici

Voilà? C'est fait? Bien. J'aime l'idée de casser le vieil adage qui consiste à croire qu'un bon travailleur/développeur/tout ce que vous voulez/ est bon parce qu'il reste jusqu'à pas d'heure, et/ou qu'il est capable de gérer plein de tâches en même temps:

If you switch attention from a primary task to a secondary one—from a program you're writing to an email that's just come in—the time it takes to complete the program increases by an average of 25%. Imagine the impact when many people now check email 50, 75, 100 times a day.

Je n'ai pas forcément grand chose à ajouter. C'est juste dans ma grande série du moment changeons le monde

lundi 12 janvier 2009

Intéressant

Sur le blog de Denis Dollfus, on peut trouver un petit test visant à mesurer le niveau d'agilité au sein de votre organisation.

Nous sommes d'accord pour dire que ce test n'est pas exhaustif, mais bon, c'est un commencement. Nous l'avons fait pour juger le niveau d'agilité du Projet, et nous avons obtenu... 100% ingénierie, 100% management.

Ça a tout de même quelque chose de rassurant de voir que nous sommes apparemment sur la bonne voie.

mercredi 31 décembre 2008

Changements

Voilà presque un an que nous travaillons sur "Le Projet", mais je n'en ai pas parlé depuis avril. Je vais corriger le tir en tentant un bilan de l'année.

Lire la suite...

vendredi 19 décembre 2008

Amazon EC2

J'imagine que vous en avez entendu parler, c'est le grand buzz ces derniers temps, j'ai nommé donc le "Elastic cloud computing" d'amazon, ou Amazon EC2 pour les intimes. Je suivais l'histoire de loin, sans trop m'y intéresser, mais il se trouve que depuis 2 semaines, je suis amené à "jouer" avec, et je dois dire que je suis vraiment vraiment vraiment impressionné par ce que je découvre. Je pense même pouvoir dire que la plate-forme EC2 est enfin le premier outil agile dans le milieu de la production.

La base

Alors pourquoi une telle déclaration fracassante? Laissez-moi vous introduire aux concepts d'EC2 si vous ne les connaissez pas encore. Je ne vais pas essayer d'expliquer le buzz word qu'est devenu cloud computing, et je vais juste dire que le but d'EC2 est de pouvoir sans friction instancier des serveurs à la volée. Une tâche qui auparavant était incroyablement pénible se voit ici réduit à une banale opération de routine ne prenant que quelques minutes. Oui en un instant il est possible d'avoir un serveur booté et opérationnel. Bien entendu, pour réussir cet exploit, le service s'appuie sur de la virtualisation, et si mes informations sont bonnes il utilise VirtualBox.

Alors Comment ça s'attaque?

Par défaut, pour jouer avec le service, Amazon livre un ensemble d'outils en ligne de commande qui permettent donc de faire toutes les opérations (recherche d'images, création d'images, instanciation, sécurité, assignation d'adresse, fermeture des serveurs etc etc). Il faut avouer que ce n'est pas forcément très sexy, et l'utilisation intensive de clefs ssh plus le fait que les ids générés par Amazon ne sont pas très "users friendly" n'améliorent pas vraiment la chose. Ceci dit, étant donné que pour fonctionner, ces outils appellent juste une api publique exposée via WebService, il n'a pas fallu longtemps pour que quelqu'un ne nous sorte quelque chose de plus fun : ElasticFox. Et alors là les enfants, on rentre vraiment dans une nouvelle dimension. Instancier un serveur se fait en deux clicks. Tout n'est pas encore possible par cet outil, mais pour 90% des tâches, il fait bien le boulot.

Agile nous disons-donc

Alors pourquoi est-ce que je dis que c'est un outil agile? Parce qu'il automatise une tâche jusqu'à alors fastidieuse et la transforme en une opération d'une telle banalité qu'elle se fait oublier. De plus, la politique de facturation du "Pay Per Use" est également un concept lié à l'agilité (on ne paie que ce qu'on consomme). L'outil essaye de s'adapter juste à nos besoins, et ne nous fait payer que ce que nous avons consommé. Dans le genre 0 gaspillage, c'est pas mal.

Limites

Cependant, tout n'est pas merveilleux. Niveau tarification, il faut bien se rendre compte que même si on paie en fonction de notre consommation, il existe un seuil à parti duquel il est plus intéressant de louer un "vrai" serveur. C'est un excellent outil pour absorber des besoins ponctuels sans perdre un rein, mais pour des besoins "fixes", les solutions standards restent moins cher. Si on a besoin pour des questions de redondance d'avoir deux serveurs physiquement différents, Amazon ne peut pas le garantir, on peut très bien avoir instancier deux serveurs sur la même machine sans le savoir.

Enfin, quand Richard Stallman dit quelque chose, j'ai tendance à être plus méfiant :)

vendredi 14 novembre 2008

Correction

En me relisant quelques jours plus tard, je me rend compte que mon précédent billet n'était pas particulièrement clair.

Je vais reprendre, si vous le voulez bien (et même si vous ne voulez pas d'ailleurs). L'idée d'origine du billet était de définir de manière générale ce qu'était un outil agile, en partant de la remarque que j'avais glané comme quoi maven serait anti-agile. Cette remarque m'avait un peu choqué, tant l'adoption de maven a réduit les frictions sur notre projet. Où se situait donc la différence entre ces deux avis? Dans notre cas, nous rencontrions des soucis de compilation, de déploiement et de gestion de dépendances. La convention de projet de maven, sa gestion native des cycles de vie et ses entrepôts nous ont permis de résoudre tous nos problèmes et simplifier grandement notre environnement. Dans le deuxième cas, le peu que j'ai pu juger est essentillement que l'équipe a voulu changer radicalement le comportement de base de maven. Je veux bien croire qu'il est difficile à configurer, mais dans ce cas je me suis demandé s'il était l'outil vraiment adapaté s'il demandait tant d'efforts à manipuler.

Ma conclusion, un peu classique comme je le disais, qu'un outil ne peut pas vraiment être jugé de manière générale comme étant agile. Tout dépend du contexte et des problèmes que l'on tente de résoudre. De plus, le mauvais choix d'un outil peut être un énorme générateur de gaspillage.

dimanche 9 novembre 2008

Outil agile

Au détour d'une conversation, un collègue nous a dit qu'il trouvait que Maven n'était pas un outil agile. Je dois avouer que je suis de plus en plus en grand suppprter de maven donc, forcément j'ai été choqué.

La raison évoquée était que quand on veut changer le comportement de base de maven, on rencontre beaucoup trop de résistance. Que ce besoin soit légitime ou pas, le fait est qu'effectivement maven était un frein dans ce cas. Mais l'agilité n'est pas une question d'outil. L'agilité est une question de s'améliorer et de réduires les résistences. Il n'y a pas d'outil magique, de balle d'argent, qui va permettre d'être agile du jour au lendemain. Dans notre cas, Maven a réduit la friction du processus de compilation et de déploiement, tout en nous permettant de gérer de manière plus saine nos dépendances. En gros, ça a été un franc succès, mais seulement je pense car nous avions expérimenté les limites d'Ant. Le grand intérêt de Maven, c'est justement ses conventions qui permettent de s'abstraire de beaucoup de la verbosité d'ant, pour ne parler que de la compilation. Enfin, il ne faut jamais oublier que tenter de tordre un outil ou d'essayer de l'utiliser dans une optique qui n'était pas la sienne n'est jamais une bonne idée.

Cette conclusion est assez conventionnelle, et on peut la lire finalement dans n'importe quel bon article sur l'agilité, mais il est, je trouve, toujours intéressant d'arriver par soit même aux mêmes conclusions.

mardi 30 septembre 2008

Le plus simple qui fonctionne

Laissez moi vous raconter aujourd'hui une petite anecdote qui, je trouve, cadre bien avec la recherche de simplicité du moment.

Il y a quelques années de cela, alors que je commençais à peine ma carrière de développeur, s'est posé alors un moi un problème normalement simple: je voulais que ma machine à café s'allume toute seule le matin pour me servir le divin breuvage dés le réveil. Je me met à réfléchir au problème, et je pense tout de suite à un minuteur ou une horloge intégrée à la machine. Je fais quelque recherche, et je tombe sur des modèles assez luxueux intégrant cette fonction. Bien entendu, ces machines faisaient beaucoup plus que je n'attendais, mais bon, je commençais à gagner ma vie, je me suis dit que tant pis, j'étais prêt à dépenser plus d'argent.

Le temps passe un peu, et un jour que je passe chez mes parents, je ne sais pas pourquoi, je soumet le problème à mon père. Il me tend alors tout simplement un programmateur journalier.

J'imagine que vous avez saisi le sens de l'anecdote, mais moi à l'époque, je suis resté scotché devant la "beauté" de cette réponse: simple, pas cher, et correspondant exactement à ce que je demandais. Je me sers encore de cette histoire régulièrement dans mon travail pour me rappeler l'essence ce que je cherche à faire: rester au plus simple.

samedi 20 septembre 2008

Question d'équilibre

J'aimerai aborder le sujet de scrum vs XP ici.

Je me bats contre cette vieille légende qui veut que Scrum couvre la gestion de projet, et XP le développement. Alors oui, Scrum ne couvre que la gestion de projet, mais XP couvre tout. Oui, oui, oui et encore oui, XP parle de gestion de projet, la preuve en image ou

Scrum je trouve, favorise cette vieille séparation développement/gestion tout en ignorant royalement l'importance de la mise en place de bonnes pratiques. Il se trouve qu'actuellement, je n'ai effectivement pas croisé d'environnement ou Scrum avait était mis en place seul, sans les pratiques issues d'XP pour le développement. Mais dans un futur pas si lointain que ça, quand l'agilité aura été reprise et vendue par des commerciaux ne voyant là qu'une offre de plus, je crains fort que l'importance de cet équilibre ne passe à la trappe. C'est pour cette même raison que le débat existe sur la certification Scrum.

XP est un tout cohérent, convaincu de la nécessité de ne rien délaisser: ni la gestion, ni le développement. De fait, XP me paraît plus agile que ne l'est Scrum. Dans le contexte ou il est encore difficile de vendre l'agilité, certains disent donc que mieux vaut vendre Scrum, la méthode fait moins peur. L'agilité était avant tout un changement radical de la manière d'envisager notre métier, et un ensemble de valeurs fortes, continuer à nourrir les fausses croyances me semble préjudiciable.

Ce que j'ai pu modestement observer jusque là, c'est qu'une adoption complète d' XP donne d'excellents résultats à tous les niveaux: qualité du projet, humeur et efficacité de l'équipe, sérénité globale etc etc; Une adoption par compromis ne donne qu'un sentiment mitigé chez tous les acteurs du projet, qui se demandent alors ou est ce fameux gain tant promis par l'agilité, car la différence n'est du coup, pas vraiment bluffante. La puissance d'XP est dans la synergie de TOUTE ses pratiques.

Pour conclure, ce qui m'attriste le plus dans cette histoire, c'est que nous devrions normalement nous concentrer à essayer de nous améliorer, plutôt que de juger de qui est le plus agile. Cependant, il me semble que ce grand virage vers l'agilité ne peut être entrepris par quelqu'un que s'il a toutes les cartes en main.

mercredi 30 avril 2008

Spring

Ah voilà quelques temps que je n'avais pas parlé du projet n'est-ce pas? Et bien il est temps de corriger cette erreur avec un petit billet rapide.

Lire la suite...

mardi 12 février 2008

Symposium DNG - Domain Driven Design

Bon, me voilà devant un billet bien difficile à écrire. Critiquer une conférence de Sami Jaber est un exercice périlleux, mais bon, je suis fou je tente ma chance.

Lire la suite...

mercredi 6 février 2008

TDD

Au détour d'un coin de web, je suis tombé sur un article intéressant de Patrick Smacchia

Lire la suite...

mardi 22 janvier 2008

Restons simple

Une pratique fondamentale d'xp est de garder le design simple.

Lire la suite...