![]() | |||
Joel on Software Joël à propos de logiciel
| |||
|
D'autres articles de "Joel on Software" en Français D'autres articles de "Joel on Software" en Anglais |
Par Joël Spolsky Traduit par Laurent Prud'hon Vérifié par Trinh Vinh-An 27 janvier 2001 En 1982, ma famille a été livrée du tout premier IBM PC en Israël. En fait, nous sommes descendus au magasin et nous avons attendu jusqu'à ce que notre PC soit livré du port. D'une manière ou d'une autre, j'ai convaincu mon père de prendre la version complète, avec deux lecteurs de disquettes, 128 Ko de mémoire, et à la fois une imprimante matricielle (pour des brouillons rapides) et une imprimante Brother qualité courrier Daisy Wheel, qui fait exactement le même bruit qu'une mitrailleuse quand elle fonctionne, mais en plus fort. Ceci étant, "tout le monde" savait que le BASIC est un langage pour enfants qui vous oblige à écrire du code spaghetti et qui transforme votre cerveau en camembert. Alors nous avons déboursé 600 dollars pour IBM Pascal, qui était fourni sur trois disquettes. La première passe du compilateur était sur la première disquette, la seconde passe sur la seconde disquette, et l'éditeur de liens sur la troisième disquette. J'ai écrit un simple programme "Hello, world" et je l'ai compilé. Temps total écoulé : 8 minutes. Hmm. C'est long. J'ai écrit un script batch pour automatiser le processus et le raccourcir à 7 minutes et demie. Mieux. Mais lorsque j'ai essayé d'écrire des programmes plus longs comme mon extraordinaire version d'Othello qui me bat toujours, j'ai passé le plus clair de mon temps à attendre la fin des compilations. "Ouais", m'a dit un programmeur professionnel, "nous avions installé une planche à abdominaux dans le bureau, et nous faisions des abdos pendant les compilations. Après quelques mois de programmation, j'avais des abdos en béton." Un jour, un programme non identifié appelé Compas Pascal est apparu du Danemark, que Philippe Kahn a acheté et a renommé Borland Turbo Pascal. Turbo Pascal était vraiment stupéfiant, puisqu'il faisait à peu près la même chose qu'IBM Pascal, à part qu'il tournait dans environ 33 Ko de mémoire en comptant l'éditeur de texte. Ce n'était pas peu surprenant. Le fait que vous pouviez compiler un petit programme en moins d'une seconde était encore plus surprenant. C'est comme si une société dont vous n'aviez jamais entendu parler introduisait un clone de la Buick LeSabre pouvant rouler à 1 000 000 km/h et faire le tour du monde avec si peu de carburant qu'une fourmi pourrait le boire sans être malade. Brusquement, je suis devenu beaucoup plus productif. C'est alors que j'ai appris le concept de la boucle LEI. LEI signifie " Lire, Evaluer, Imprimer " et décrit ce qu'un interpréteur LISP fait toute sa vie : il "lit" vos instructions, les évalue, et imprime le résultat. Un exemple de boucle LEI est montré ci-dessous : j'ai saisi quelque chose, l'interpréteur LISP le lit, l'évalue, et imprime le résultat.
À une échelle un peu plus grande, lorsque vous écrivez votre code, vous êtes dans une version macroscopique de la boucle LEI appelée boucle Editer-Compiler-Tester. Vous éditez votre code, le compilez, le testez, et voyez s'il fonctionne bien. Une observation cruciale ici est que vous devez parcourir la boucle encore et encore pour écrire un programme, et il en découle que plus la boucle Editer-Compiler- Tester est rapide, plus vous serez productif, jusqu'à une limite naturelle de compilation instantanée. C'est la raison formelle, science-de-l'-information-nelle pour laquelle les programmeurs veulent du matériel vraiment rapide et les développeurs de compilateurs vont faire tout ce qu'ils peuvent pour avoir des boucles Edition-Compilation-Test super rapides. Visual Basic y parvient en réalisant l'analyse lexicale et syntaxique de chaque ligne en même temps que vous la tapez de manière que la compilation finale puisse être super-rapide. Visual C++ y parvient en proposant des compilations incrémentales, des headers précompilés, et une édition de liens incrémentale. Mais aussitôt que vous commencez à travailler dans une équipe plus grande avec de multiples développeurs et testeurs, vous rencontrez à nouveau le même cycle en plus grand (c'est fractal, mon pote !). Un testeur trouve un bug dans le code et le signale. Le programmeur corrige le bug : combien de temps est nécessaire avant que le testeur obtienne une version corrigée du code ? Dans certaines sociétés de développement, le cycle Signaler-Corriger-Retester peut prendre une ou deux semaines, ce qui signifie que l'ensemble de la société fonctionne de manière improductive. Pour conserver un fonctionnement harmonieux de l'ensemble du processus de développement, vous devez vous concentrer sur l'obtention d'un cycle Signaler-Corriger-Retester resserré. Une bonne façon de le faire est à l'aide de générations quotidiennes de l'application. Une génération quotidienne est une génération automatique, quotidienne et complète de l'ensemble de l'arborescence du code source. Automatique -parce que vous configurez le code pour qu'il soit compilé à heure fixe tous les jours, en utilisant des jobs cron (sous UNIX), le service de planification (sous Windows). Quotidienne -ou encore plus fréquente. Il est tentant de générer des versions en continu, mais vous ne pouvez probablement pas le faire, à cause de problèmes de gestion du code source dont je vais parler dans une minute. Complète - il y a des chances pour que votre code ait plusieurs versions. Des versions en plusieurs langues, plusieurs systèmes d'exploitation, une version haut de gamme/bas de gamme. La génération quotidienne doit les générer toutes. Elle doit générer chaque fichier à partir de rien, en ne s'appuyant pas sur les capacités de régénération incrémentale des compilateurs qui peuvent être imparfaites. Voici quelques-uns des nombreux avantages des générations quotidiennes :
Voici comment les mettre en pratique. Vous avez besoin d'un serveur de génération quotidienne, qui sera probablement l'ordinateur le plus puissant sur lequel vous pourrez mettre la main. Écrivez un script qui réalise un check-out de l'ensemble du code source depuis le référentiel (vous utilisez un système de gestion de versions, n'est-ce pas ?) et ensuite génère en partant de rien chaque version du code que vous livrez. Si vous avez un installateur ou un programme de configuration, générez-les aussi. Tout ce que vous livrez à des clients devrait être produit par le processus de génération quotidienne. Placez chaque génération dans son propre répertoire, dont le nom commence par la date. Exécutez votre script à l'heure fixée chaque jour.
Pour plus d'informations :
Cet article est paru en version originale anglaise sous le titre Daily Builds Are Your Friend | ||
![]() Joël Spolsky est le fondateur de Fog Creek Software, une petite société éditrice de logiciel située à New York. Il est diplômé de l'Université de Yale et a travaillé comme programmeur et manager chez Microsoft, Viacom et Juno. | |||
Le contenu de ces pages représentent l'opinion d'une personne.
Contenu protégé par le copyright ©1999-2005 par Joël Spolsky. Tous droits réservés.