Faire un test à la fois vous met sur la bonne voie (Libres conseils 15/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : lamessen, Sky, Kalupa, ga3lig, Wxcafe, goofy, Astalaseven, Slystone, okram, KoSLycoris, peupleLa, Julius22

La Voie des tests conduit à la Lumière

Jonathan “Duke” Leto

Jonathan Leto, dit « Le Duc » est un développeur de logiciel, un mathématicien dont les travaux sont publiés, un ninja de Git et un passionné de cyclisme qui vit à Portland, en Oregon. C’est l’un des développeurs principaux de la machine virtuelle Parrot et le fondateur de Leto Labs LLC.

Lorsque j’ai commencé à m’impliquer dans le logiciel libre et open source, je n’avais aucune idée de ce que pouvaient être les tests ni de leur importance. J’avais travaillé sur des projets personnels de programmation auparavant, mais la première fois que j’ai réellement travaillé sur un projet collaboratif (c’est-à-dire en faisant un peu de commit) c’était pour Yacas, acronyme de Yet Another Computer Algebra System, (NdT : encore un autre logiciel de calcul algébrique similaire à Mathematica).

À ce stade de mon parcours, les tests ne venaient qu’après coup. Mon méta-algorithme général était : bidouiller du code > voir si ça fonctionne> écrire (éventuellement) un test simple pour démontrer que ça fonctionne. Un test difficile à écrire n’était généralement jamais écrit.

C’est le premier pas sur la voie qui mène à la Lumière grâce aux tests. Vous savez que les tests sont probablement une bonne idée, mais vous n’en avez pas vu clairement les bénéfices, alors vous vous contentez de les écrire de temps en temps.

Si je pouvais ouvrir un trou de souris dans l’espace-temps et donner à mon moi plus jeune un conseil plein de sagesse sur les tests, ce serait :

« Certains tests sont plus importants, sur le long terme, que le code qu’ils testent. »

Il y a sans doute quelques personnes qui pensent en ce moment même que je mets mon casque de protection psychique (NdT : il s’agit d’un chapeau pour se protéger contre la manipulation à distance du cerveau) quand je m’assois pour écrire du code. Comment les tests pourraient-ils être plus importants que le code qu’ils testent ? Les tests sont la preuve que votre code marche réellement ; ils vous montrent le chemin vers l’écriture d’un code propre et vous apportent aussi la souplesse qui vous permettra de modifier le code tout en sachant que les fonctionnalités seront toujours là. En effet, plus votre code source grossit, plus vos tests sont importants, car ils vous permettent de changer une partie dudit code en sachant que le reste fonctionnera.

Une autre raison essentielle qui justifie l’écriture de tests est la possibilité de spécifier que quelque chose est un souhait explicite et non une conséquence imprévue ou un oubli. Si vous avez un cahier des charges, vous pouvez utiliser des tests pour vérifier qu’il est respecté, ce qui est très important, voire indispensable dans certaines industries. Un test, c’est comme quand on raconte une histoire : l’histoire de votre conception du code et de la façon dont il devrait fonctionner. Soit le code change et évolue, soit il mute en code infectieux (1).

Très souvent, vous écrirez des tests une première fois pour ensuite remettre totalement en cause votre réalisation voire la réécrire à partir de zéro. Les tests survivent souvent au code pour lesquels ils ont été conçus à l’origine. Par exemple, un jeu de tests peut être utilisé quel que soit le nombre de fois où votre code est transformé. Les tests sont en fait l’examen de passage qui vous permettra de jeter une ancienne réalisation et de dire « cette nouvelle version a une bien meilleure structure et passe notre jeu de tests ». J’ai vu cela se produire bien des fois dans les communautés Perl et Parrot, où vous pouvez souvent me voir traîner. Les tests vous permettent de changer les choses rapidement et de savoir si quelque chose est cassé. Ils sont comme des propulseurs pour les développeurs.

Les charpentiers ont un adage qui dit quelque chose comme ça :

« Mesurer deux fois, couper une fois. »

Le code serait la coupe, le test serait la mesure.

La méthode de développement basée sur les tests fait économiser beaucoup de temps, parce qu’au lieu de vous prendre la tête à bricoler le code sans but défini, les tests précisent votre objectif.

Les tests sont aussi un très bon retour d’expérience. Chaque fois que vous faites une nouvelle passe de test, vous savez que votre code s’améliore et qu’il a une fonctionnalité de plus ou un bogue de moins.

Il est facile de se dire « je veux ajouter 50 fonctionnalités » et de passer toute la journée à bricoler le code tout en jonglant en permanence entre différents travaux. La plupart du temps, peu de choses aboutiront. La méthode de développement basée sur les tests aide à se concentrer sur la réussite d’un seul test à la fois.

Si votre code échoue devant ne serait-ce qu’un seul test, vous avez pour mission de le faire réussir. Votre cerveau se concentre alors sur quelque chose de très spécifique, et dans la plupart des cas cela produit de meilleurs résultats que passer constamment d’une tâche à une autre.

La plupart des informations relatives au développement basé sur les tests sont très spécifiques à un langage ou à une situation, mais ce n’est pas une obligation. Voilà comment aborder l’ajout d’une nouvelle fonctionnalité ou la correction d’un bogue dans n’importe quel langage :

  1. Écrivez un test qui fait échouer votre code, mais qui, selon vous, sera passé quand la fonctionnalité sera implémentée ou que le bogue sera corrigé. Mode expert : pendant l’écriture du test, pensez à l’exécuter de temps en temps, même s’il n’est pas encore fini, et tentez de deviner le message d’erreur effectif que le test renverra. À force d’écrire des tests et de les faire tourner, cela devient plus facile ;
  2. Bidouillez le code ;
  3. Exécutez le test. S’il marche, passez au point 4, sinon retournez au point 2 ;
  4. C’est fini ! Dansez le sirtaki.

Cette méthode fonctionne pour n’importe quel type de test et n’importe quel langage. Si vous ne deviez retenir qu’une seule chose de ce texte, souvenez-vous des étapes ci-dessus.

Voici maintenant quelques directives plus générales de conduite de tests qui vous serviront bien et fonctionneront dans n’importe quelle situation :

  1. Comprendre la différence entre ce qu’on teste et ce qu’on utilise comme un outil pour tester autre chose ;
  2. Les tests sont fragiles. Vous pouvez toujours écrire un test qui contrôle la validité d’un message d’erreur. Mais que se passera-t-il si le message d’erreur change ? Que se passera-t-il quand quelqu’un traduira votre code en catalan ? Que se passera-t-il lorsque quelqu’un exécutera votre code sur un système d’exploitation dont vous n’avez jamais entendu parler ? Plus votre test est résistant, plus il aura de valeur.

Pensez à cela quand vous écrivez des tests. Vous voulez qu’ils soient résistants, c’est-à-dire que les tests, dans la plupart des cas, ne devraient avoir à changer que quand les fonctionnalités changent. Si vous devez modifier vos tests régulièrement, sans que les fonctionnalités aient changé, c’est que vous faites une erreur quelque part.

testing-comicmatics

Types de tests

Bien des personnes sont perdues quand on leur parle de tests d’intégration, tests unitaires, tests d’acceptation et autres tests à toutes les sauces. Il ne faut pas trop se soucier de ces termes. Plus vous écrirez de tests, mieux vous en distinguerez les nuances et les différences entre les tests deviendront plus apparentes. Tout le monde n’a pas la même définition de ce que sont les tests, mais c’est utile d’avoir des termes pour décrire les types de tests.

Tests unitaires contre tests d’intégration

Les tests unitaires et les tests d’intégration couvrent un large spectre. Les tests unitaires testent de petits segments de code et les tests d’intégration vérifient comment ces segments se combinent. Il revient à l’auteur du test de décider ce que comprend une unité, mais c’est le plus souvent au niveau d’une fonction ou d’une méthode, même si certains langages appellent ces choses différemment.

Pour rendre cela un peu plus concret, nous établirons une analogie sommaire en utilisant des fonctions. Imaginez que f(x) et g(x) soient deux fonctions qui représentent deux unités de code. Pour l’aspect concret, supposons qu’elles représentent deux fonctions spécifiques du code de base de votre projet libre et open source.

Un test d’intégration affirme quelque chose comme la composition de la fonction, par exemple f(g(a)) = b. Un test d’intégration consiste à tester la façon dont plusieurs choses s’intègrent ou travaillent ensemble, plutôt que la façon dont chaque partie fonctionne individuellement. Si l’algèbre n’est pas votre truc, une autre façon de comprendre est de considérer que les tests unitaires ne testent qu’une partie de la machine à la fois, tandis que les tests d’intégration s’assurent que la plupart des parties fonctionnent à l’unisson. Un bel exemple de test d’intégration est le test de conduite d’une voiture. Vous ne vérifiez pas la pression atmosphérique, ni ne mesurez le voltage des bougies d’allumage. Vous vous assurez que le véhicule fonctionne globalement.

La plupart du temps, il est préférable d’avoir les deux. Je commence souvent avec les tests unitaires puis j’ajoute les tests d’intégration au besoin puisqu’on a besoin d’éliminer d’abord les bogues les plus basiques, puis de trouver les bogues plus subtils issus d’un emboitement imparfait des morceaux, à l’opposé de pièces qui ne fonctionnent pas individuellement. Beaucoup de gens écrivent d’abord des tests d’intégration puis se plongent dans les tests unitaires. Le plus important n’est pas de savoir lequel vous écrirez en premier, mais d’écrire les deux types de tests.

Vers la Lumière

La méthode de développement basée sur les tests est un chemin, pas un aboutissement. Sachez apprécier le voyage et assurez-vous de faire une pause pour respirer les fleurs si vous êtes égaré. 

(1) Équivalent approché du terme bitrot qui en argot de codeur désigne ce fait quasi-universel : si un bout de code ne change pas mais que tout repose sur lui, il « pourrit ». Il y a alors habituellement très peu de chances pour qu’il fonctionne tant qu’aucune modification ne sera apportée pour l’adapter à de nouveaux logiciels ou nouveaux matériels.

Comic strip réalisé avec le Face-O-Matic de Nina Paley et Margot Burns

Copyheart ? 2011 by Margo Burns and Nina Paley. Copying is an act of love. Please copy!




Liberté pour les utilisateurs, pas pour les logiciels, par Benjamin Mako Hill

Un article fort intéressant de Benjamin Mako Hill (que nous traduisons souvent) qui apporte un éclairage nouveau à la différence importante entre « logiciel libre » et « open source ».

C’est bien la question de la liberté des utilisateurs qui est fondamentale ici. À mesure que la technologie avance et que de plus en plus de domaines expérimentent « le Libre », elle rejoint tout simplement la liberté des citoyens…

Remarque : C’est d’ailleurs pourquoi nous regrettons « l’abus d’open source » dans les premiers États Généraux de l’Open Source qui se déroulent actuellement à Paris (cf ce tweet ironique).

David Shankbone - CC by

Liberté pour les utilisateurs, pas pour les logiciels

Freedom for Users, Not for Software

Benjamin Mako Hill – 23 octobre 2011 – Blog personnel
(Traduction : Munto, VifArgent, aKa, KarmaSama, Lycoris, aaron, PeupleLa, bruno + anonymous)

En 1985, Richard Stallman a fondé le mouvement du Logiciel Libre en publiant un manifeste qui proposait aux utilisateurs d’ordinateurs de le rejoindre pour défendre, développer et diffuser des logiciels qui garantissent aux utilisateurs certaines libertés. Stallman a publié la « Définition du Logiciel Libre » (Free Software Definition ou FSD) qui énumère les droits fondamentaux des utilisateurs concernant les logiciels.

  • La liberté d’exécuter le programme, pour n’importe quel usage ;
  • la liberté d’étudier le fonctionnement du programme et de l’adapter à ses besoins ;
  • la liberté d’en redistribuer des copies pour aider les autres ;
  • la liberté d’améliorer le programme et de rendre publiques les améliorations, afin que la communauté entière puisse en bénéficier.

Stallman est informaticien. Il avait compris que la manière dont les programmeurs concevaient les logiciels pouvait influer sur les possibilités des utilisateurs à interagir avec eux. Par exemple, des programmeurs pourraient concevoir des systèmes qui espionnent les utilisateurs, vont à leur encontre ou créent des dépendances. Dans la mesure où les ordinateurs occupent une place de plus en plus importante dans la communication des usagers, et dans leur vie toute entière, leur expérience est de plus en plus sous le contrôle de la technologie, et par conséquent de ceux qui la maîtrisent. Si le logiciel est libre, les utilisateurs peuvent désactiver les fonctionnalités cachées ou abusives et travailler ensemble à l’amélioration et au contrôle de leurs technologies. Pour Stallman, le logiciel libre est essentiel à une société libre.

Hélas, beaucoup de personnes qui entendent « logiciels libres » (NdT : free software en anglais) pensent que le mot libre (free) veut dire qu’il peut être distribué gratuitement – une confusion bien naturelle puisque les logiciels libres peuvent être, et sont le plus souvent, partagés sans permission expresse ni paiement. Dans des tentatives concertées pour démêler cette confusion, le slogan « free as in free speech not as in free beer » (free comme dans la liberté de parole et non comme une bière gratuite), et la référence à la distinction que l’on fait en français entre libre et gratuit, sont devenus des clichés dans la communauté du logiciel libre. Une biographie de Stallman est d’ailleurs intitulée « Free as in Freedom » (NdT : Libre comme dans Liberté, biographie traduite et publiée par Framasoft dans sa collection Framabook).

À la fin des années 90, un groupe de passionnés de logiciels libres a suggéré un nouveau terme : « open source ». À l’instar de Stallman, ce groupe était agacé par l’ambiguïté autour du mot « free ». Cependant, la principale préoccupation du groupe open source était l’utilité du logiciel libre pour les entreprises.

Plutôt que de mettre en avant la « liberté », qui pouvait, selon eux, rebuter des entreprises commerciales, les promoteurs de l’open source décrivaient les bénéfices techniques que l’« ouverture » du développement de logiciels libres pourrait apporter, grâce à la collaboration de nombreux utilisateurs mis en réseau. Ces appels ont trouvé un écho au sein des entreprises high-tech à la fin du millénaire au moment où le système d’exploitation libre GNU/Linux gagnait en popularité et où le serveur web Apache dominait un marché bondé de concurrents propriétaires. Le concept « open source » prit un nouvel élan en 1998 quand Netscape rendit public le code source de son navigateur web Navigator.

Malgré des différences rhétoriques et philosophiques, les logiciels libres et les logiciels open source font référence aux mêmes programmes, aux mêmes communautés, aux mêmes licences et aux mêmes pratiques. La définition de l‘open source est presque une copie conforme des directives du logiciel libre publiées par la communauté Debian qui sont elles-mêmes une tentative de redéfinir la déclaration de Stallman sur la Définition du Logiciel Libre. Stallman a décrit cette distinction entre « logiciel libre » et « logiciel open source » comme étant le contraire d’un schisme. Dans un schisme, deux groupes religieux auront des cultes séparés, souvent à cause de désaccords mineurs sur des points de liturgie ou de doctrine. Dans le logiciel libre et l‘open source, les deux groupes se sont articulés autour de philosophies, de principes politiques et de motivations qui sont fondamentalement différentes. Et pourtant les deux parties continuent de travailler en étroite collaboration au sein des mêmes organisations.

Les conversations autour du libre et du gratuit dans les communautés du logiciel libre et de l‘open source ont occulté un second niveau d’ambiguïté dans le terme « logiciel libre », bien moins discuté : le terme a conduit à croire qu’il fallait interpréter les quatre libertés comme des déclarations sur les qualités que les programmes eux-mêmes devraient posséder. Stallman se fiche du logiciel libre en tant que tel, ce qui lui importe c’est la liberté des utilisateurs. Les slogans « free as in freedom » et « free speech not free beer » n’aident en rien à résoudre ce second type d’ambiguïté, et créent même de la confusion. « Free as in freedom » ne dit rien sur ce qui devrait être libre, tandis que « free speech not free beer », reproduit un problème similaire : les défenseurs de la liberté de parole ne défendent pas tant la liberté d’expression en tant que telle que la liberté des individus dans leur parole. Quand pour l’essentiel le discours des promoteurs du logiciel libre insiste sur les caractéristiques des programmes, certains en viennent à considérer la liberté de l’utilisateur comme un problème de second ordre – c’est tout simplement ce qui se produit lorsque le logiciel est libre.

Quand le logiciel est libre, mais pas les utilisateurs

La liberté de l’utilisateur ne découle pas toujours de la liberté du logiciel. En effet, le logiciel libre a pris de l’importance dans les domaines économique et politique : cela a suscité l’intérêt de certaines personnes qui souhaitaient en récolter les bénéfices tout en maintenant l’action et l’indépendance des utilisateurs dans des limites.

Google, Facebook, et autres titans de l’économie du Web ont bâti leur entreprise sur les logiciels libres. En les utilisant ils n’agissent pas seulement en passagers clandestins, dans de nombreux cas ces firmes partagent gratuitement, au minimum, une partie du code qui fait fonctionner leurs services et investissent des ressources conséquentes dans la création ou l’amélioration de ce code. Chaque utilisateur d’un réseau basé sur des logiciels libres peut posséder une copie du logiciel qui respecte les quatre libertés de la FSD. Mais à moins que ces utilisateurs n’exécutent le service web eux-mêmes- ce qui peut s’avérer techniquement ou économiquement infaisable – ils restent sous la coupe des firmes qui, elles, font bel et bien fonctionner leurs copies. Le « Logiciel en tant que Service » (Software as a Service, ou SaaS) – ou logiciel fourni via « le cloud » – est à priori entièrement compatible avec le principe d’un logiciel libre. Toutefois, du fait que les utilisateurs du service ne peuvent pas changer le logiciel ou l’utiliser comme ils le souhaitent sans l’autorisation et la surveillance de leur fournisseur de service, les utilisateurs de SaaS sont au moins aussi dépendants et vulnérables qu’ils le seraient si le code était fermé.

Chrome OS de Google est une tentative pour construire un système d’exploitation qui pousse les utilisateurs à être constamment en ligne et à utiliser des services comme Google Docs pour réaliser la plupart de leurs tâches informatiques. Quand Google a annoncé Chrome OS, nombreux étaient ceux qui ont applaudi dans la communauté du logiciel libre ; Chrome OS est en effet basé sur GNU/Linux, il s’agit presque entièrement de logiciel libre, et il avait l’appui de Google. Mais le but réel de Chrome OS est de changer l’endroit où les utilisateurs réalisent leurs tâches informatiques, en remplaçant les applications que l’utilisateur aurait fait tourner sur sa machine par des SaaS sur Internet. Chaque fois qu’on remplace un logiciel libre du bureau par un SaaS, on passe d’une situation où l’utilisateur avait le contrôle sur ses logiciels à une situation où il n’a pratiquement plus aucun contrôle. Par exemple, l’utilisation que fait Google des logiciels libre dans les services SaaS lui permet de surveiller tous les usages et d’ajouter ou retirer des fonctionnalités selon son bon vouloir. Ainsi, en se concentrant sur la liberté des logiciels et non sur celle des utilisateurs, bien des partisans du logiciel libre n’ont pas su anticiper cette inquiétante dynamique.

TiVo – le pionnier des magnétoscopes numériques – présentait un défi différent. Son système se basait sur GNU/Linux et, conformément à la licence « copyleft » sous laquelle sont distribués la plupart des logiciels libres, la société TiVo autorisait l’accès complet à son code source. Mais TiVo utilisait le chiffrage pour verrouiller son système afin qu’il ne s’exécute que sur des versions approuvées de Linux. Les utilisateurs de TiVo pouvaient étudier et modifier le logiciel TiVo, mais ils ne pouvaient pas utiliser ce logiciel modifié sur leur TiVo. Le logiciel était libre, les utilisateurs ne l’étaient pas.

Les SaaS, Chrome OS et la Tivoisation sont des sujets qui continuent de remuer le milieu des logiciels libres et open source et mettent à jour des lignes de fracture. Il n’est guère surprenant que les partisans de l‘open source ne voient aucun problème avec les SaaS, Chrome OS et la Tivoisation ; ils ne sont pas engagés dans la liberté des utilisateurs ou du logiciel. Toutefois chacun de ces exemples a été facteur de division, y compris parmi les personnes qui pensaient que le logiciel devrait être libre. La Fondation du Logiciel Libre (Free Software Foundation, FSF) a pris explicitement position contre chacun des sujets ci-dessus. Mais il a fallu du temps avant d’identifier chacune de ces menaces et ce fut laborieux de réussir à faire passer le message aux sympathisants. Aujourd’hui, il semble probable que Google et son modèle d’entreprise orienté service représentent une plus grande menace pour la liberté des futurs utilisateurs d’ordinateur que ne l’a été Microsoft. Mais comme Google se conforme scrupuleusement aux termes de la licence du logiciel libre et contribue aux projets de logiciels libres par une grande quantité de code et d’argent, les partisans du logiciel libre ont mis du temps à l’identifier comme une menace et à réagir.

Même la Free Software Foundation continue à se battre avec sa propre mission axée sur le logiciel. Stallman et la FSF ont travaillé ces dernières années pour déplacer du code non-libre qui s’exécute sur les périphériques internes des ordinateurs (par exemple, une carte wifi ou une carte graphique intégrée à l’intérieur d’un portable) depuis le disque dur principal de l’ordinateur vers les sous-processeurs eux-mêmes. L’idée derrière ces efforts est d’éliminer le code non-libre en le basculant vers les composants matériels. Mais les utilisateurs des logiciels sont-ils plus libres si les technologies propriétaires, qu’ils ne peuvent changer, existent dans leur ordinateur sous une forme plutôt qu’une autre ?

La clé pour répondre à cette question – et à d’autres -, c’est de rester concentré sur ce qui distingue libre et ouvert. Les promoteurs du logiciel libre doivent revenir à leur objectif premier : la liberté des personnes, et non celle des logiciels. L’apport fondamental de Stallman et du mouvement libre a été de relier les questions de la liberté et de l’autonomie personnelle à d’autres considérations, quoique ce lien ne soit pas évident pour beaucoup. La manière dont les utilisateurs resteront libres évoluera avec les changements de nature de la technologie. Et alors que certains adaptent les principes du logiciel libre à de nouveaux domaines, ils vont se retrouver confrontés à des problèmes de traduction comparables. Selon le soin que portera notre communauté à distinguer entre les différents mode d’ouverture et à mettre en évidence les questions de contrôle, de politique et de pouvoir, la philosophie du logiciel libre restera pertinente dans toutes ces discussions plus générales autour des nouveaux et différents biens communs – dans les logiciels et au delà.

Crédit photo : David Shankbone (Creative Commons By)




Remue-ménage dans le triage (Libres conseils 14/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : lamessen, Sky, Kalupa, ga3lig, goofy, Astalaseven, okram, KoS, Lycoris, 4nti7rust, peupleLa + Julius22

Penser/Classer

Andre Klapper

Dans la vraie vie, Andre Klapper est maître ès débogage. Pendant sa pause déjeuner ou sa sieste, il travaille à divers trucs sur GNOME (bugsquad, équipe de release, traduction, documentation, etc.), ou Maemo, étudie ou mange de la crème glacée.


Au tout début, je n’avais qu’une seule et unique question : comment imprimer seulement une partie du courriel que j’ai reçu dans Evolution, le client de messagerie GNOME ? J’ai donc demandé sur la liste de diffusion.

Ça faisait exactement un an que j’étais passé sous Linux, frustré de ne pouvoir faire fonctionner mon modem après avoir réinstallé un OS propriétaire plutôt populaire à l’époque.

La réponse à ma question fut : « impossible ». Des petits génies auraient parcouru le code, l’auraient compilé, l’auraient bidouillé pour qu’il se comporte comme voulu, puis auraient soumis un correctif joint au rapport de bogue. Bon. Comme vous l’aurez deviné, je n’étais pas un petit génie. Mes talents de programmeur sont plutôt limités, donc sur le moment je suis resté coincé sur une solution de contournement plutôt lourde pour mon impression. La réponse que j’avais reçue sur la liste de diffusion signalait également que cette fonctionnalité était prévue, et qu’on avait complété pour moi un rapport de bogue — sans préciser où, mais je m’en fichais, j’étais content d’apprendre qu’il était prévu de corriger mon problème prochainement.

Il se peut que je sois resté abonné à la liste de diffusion par simple paresse. Certains mentionnaient le rapporteur de bogues de temps en temps, souvent comme une réponse directe aux demandes de fonctionnalités, alors j’y ai finalement jeté un coup d’œil. Mais les rapporteurs de bogue, en particulier Bugzilla, sont d’étranges outils avec beaucoup d’options complexes. Un domaine que vous préférez normalement éviter à moins que vous ne soyez masochiste. Ils contiennent maints tickets décrivant des bogues ou des demandes de fonctionnalités émanant d’utilisateurs et de développeurs. Il semblait également que ces rapports aient été en partie utilisés pour planifier les priorités (appeler cela « gestion de projet » aurait été un euphémisme ; moins d’un quart des problèmes qui étaient planifiés pour être résolus ou implémentés dans une version spécifique étaient réellement corrigés au bout du compte).

Au-delà d’une vision intéressante sur les problèmes du logiciel et sur la popularité de certaines demandes, ce que j’ai découvert, c’est beaucoup de choses incohérentes et pas mal de bruit, comme des doublons ou des rapports de bogues manquant d’éléments pour pouvoir être traités correctement. J’ai eu envie de nettoyer un peu en « triant » les rapports de bogues disponibles. Je ne sais pas bien ce que cela vous dit sur mon état d’esprit — ajouter ici des mots-clés bidon pour une caractérisation aléatoire, comme organisé, persévérant et intelligent. C’est assez ironique quand on pense à mon père qui se plaignait toujours du bordel dans ma chambre. Donc à cette époque lointaine de modems commutés, j’avais pour habitude de rassembler mes questions et de les faire remonter sur IRC une fois par jour afin de mitrailler de questions le responsable des bogues d’Evolution, qui était toujours accueillant, patient et soucieux de partager son expérience. Si jamais à l’époque il y avait un guide de triage qui couvrait les savoirs de base pour la gestion des bogues et qui exposait les bonnes pratiques et les pièges les plus courants, je n’en avais pas entendu parler.

Le nombre de signalements baissa de 20% en quelques mois, bien que ce ne fût bien évidemment pas grâce à une unique personne qui faisait le tri des tickets. Il y avait manifestement du travail en attente, comme diminuer le nombre des tickets attribués aux développeurs pour qu’ils puissent mieux se concentrer, parler avec eux, définir les priorités, et répondre aux commentaires non-traités de certains utilisateurs. L’open source accueille toujours bien les contributions une fois que vous avez trouvé votre créneau.

Bien plus tard, j’ai pris conscience qu’il y avait de la documentation à consulter. Luis Villa, qui fut probablement le premier des experts en bogues, a écrit un essai titré « Pourquoi tout le monde à besoin d’un expert en bogue » et la majorité des équipes anti-bogues sur les projets open source ont publié au même moment des guides sur le triage qui ont aidé les débutants à s’impliquer dans la communauté. De nombreux développeurs ont débuté leur fantastique carrière dans l’open source en triant les bogues et ont ainsi acquis une première expérience de gestion de projet logiciel.

Il y a aussi de nos jours des outils qui peuvent vous épargner beaucoup de temps quand arrive l’abrutissant travail de triage. Du côté serveur, l’extension « stock answers » de GNOME fournit les commentaires courants et fréquemment usités afin de les ajouter aux tickets en un clic pendant que, du côté client, vous pouvez faire tourner votre propre script  GreaseMonkey ou l’extension Jetpack de Matej Cepl, appelée  « bugzilla-triage-scripts » [2].

Si vous êtes un musicien moyen ou médiocre mais que vous aimez tout de même la musique par-dessus tout, vous pouvez toujours y travailler en tant que journaliste. Le développement de logiciels possède également ce genre de niches qui peuvent vous donner satisfaction, au-delà de l’idée première d’écrire du code. Cela vous prendra un peu de temps pour les trouver, mais ça vaut la peine d’y consacrer vos efforts, votre expérience et vos  contacts. Avec un peu de chance et de talent, cela peut même vous permettre de gagner votre vie dans le domaine qui vous intéresse personnellement… et vous éviter de finir pisse-code.

[1] http://tieguy.org/talks-files/LCA-2005-paper-html/index.html

[2] https://fedorahosted.org/bugzilla-triage-scripts

Crédit photo : Doug DuCap Food and Travel (CC BY-NC-SA 2.0)




Tests contre Bogues : une guerre sans fin (Libres conseils 13/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : Floxy, ga3lig, goofy, Astalaseven, Slystone, okram, KoS, Lycoris, 4nti7rust, peupleLa, Luc Didry, + Julius22

Même en multipliant les regards, les bogues ne sautent pas aux yeux.

Ara Pulido

Ara Pulido est ingénieure d’essais pour Canonical, d’abord comme membre de l’équipe assurance qualité d’Ubuntu (QA team), et maintenant dans le cadre de l’équipe de certification du matériel. Même si elle a commencé sa carrière en tant que développeuse, elle a vite découvert que ce qu’elle aimait vraiment, c’était tester les logiciels. Elle est très intéressée par les nouvelles techniques d’analyse et tente d’utiliser son savoir-faire pour améliorer Ubuntu.

Les tests maison ne suffisent pas

Je me suis impliquée dans le logiciel libre dès le début de mes études à l’Université de Grenade. Là-bas, avec des amis, nous avons fondé un groupe local d’utilisateurs de Linux et organisé plusieurs actions pour promouvoir le logiciel libre. Mais, depuis que j’ai quitté l’université, et jusqu’à ce que je commence à travailler chez Canonical, ma carrière professionnelle s’est déroulée dans l’industrie du logiciel propriétaire, d’abord comme développeuse puis comme testeuse.

Lorsque l’on travaille au sein d’un projet de logiciel propriétaire, les ressources pour tester sont très limitées. Une petite équipe reprend le travail initié par les développeurs avec les tests unitaires, utilisant leur expérience pour trouver autant de bogues que possible afin de mettre à disposition de l’utilisateur final un produit aussi abouti que possible. Dans le monde du logiciel libre, en revanche, tout est différent.

Lors de mon embauche chez Canonical, hormis la réalisation de mon rêve d’avoir un travail rémunéré au sein d’un projet de logiciel libre, j’ai été émerveillée par les possibilités des activités de test dans le cadre d’un tel projet. Le développement du produit s’effectue de manière ouverte, et les utilisateurs ont accès au logiciel dès son commencement, ils le testent et font des rapports de bogues dès que c’est nécessaire. C’est un nouveau monde rempli de beaucoup de possibilités pour une personne passionnée par les tests. Je voulais en profiter au maximum.

Comme beaucoup de personnes, je pensais que les tests « maison », c’est-à-dire l’utilisation par soi-même du logiciel que l’on envisage de mettre à disposition, était l’activité de test la plus importante qu’on puisse mener dans le logiciel libre. Mais si, selon la formule de Raymond dans La cathédrale et le bazar « avec suffisamment d’observateurs, tous les bogues sautent aux yeux », alors comment se fait-il qu’avec ses millions d’utilisateurs Ubuntu comporte encore des bogues sérieux à chaque nouvelle version ?

La première chose dont je me suis aperçue quand j’ai commencé à travailler chez Canonical c’est que les activités de test organisées étaient rares ou inexistantes. Les seules sessions de test qui étaient d’une certaine façon organisées se présentaient sous la forme de messages électroniques envoyés à une liste de diffusion, manière de battre le rappel pour tester un paquetage dans la version de développement d’Ubuntu. Je ne pense pas que cela puisse être considéré comme une vraie procédure de test, mais simplement comme une autre forme de « test maison ». Cette sorte de test génère beaucoup de doublons, car un bogue facile à débusquer sera documenté par des centaines de personnes. Malheureusement le bogue potentiellement critique, vraiment difficile à trouver, a de bonnes chances de passer inaperçu en raison du bruit créé par les autres bogues, et ce même si quelqu’un l’a documenté.

En progrès

La situation s’améliore-t-elle ? Sommes-nous devenus plus efficaces pour les tests au sein des projets de développement libre ? Oui, j’en suis convaincue.

Pendant les derniers cycles de développement d’Ubuntu, nous avons commencé bon nombre de sessions de test. La gamme des objectifs pour ces sessions est large, elle comprend des domaines comme de nouvelles fonctionnalités de bureau, des tests de régression, des tests de pilotes X.org ou des tests de matériel d’ordinateur portable. Les résultats sont toujours suivis et ils s’avèrent vraiment utiles pour les développeurs, car ils leur permettent de savoir si les nouveautés fonctionnent correctement, au lieu de supposer qu’elles fonctionnent correctement à cause de l’absence de bogues.

En ce qui concerne les outils d’assistance aux tests, beaucoup d’améliorations ont été apportées :

  • Apport(1) a contribué à augmenter le niveau de détail des bogues signalés concernant Ubuntu : les rapports de plantage incluent toutes les informations de débogage et leurs doublons sont débusqués puis marqués comme tels ; les utilisateurs peuvent signaler des bogues sur base de symptômes, etc.
  • Le Launchpad(2), avec ses connexions en amont, a permis d’avoir une vue complète des bogues – sachant que les bogues qui se produisent dans Ubuntu se situent généralement dans les projets en amont, et permet aux développeurs de savoir si les bogues sont en cours de résolution.
  • Firefox, grâce à son programme et à son extension Test Pilot, mène des tests sans qu’on ait à quitter le navigateur(3). C’est, à mon sens, une bien meilleure façon de rallier des testeurs qu’une liste de diffusion ou un canal IRC.
  • L’équipe Assurance Qualité d’Ubuntu teste le bureau en mode automatique et rend compte des résultats toutes les semaines(4), ce qui permet aux développeurs de vérifier très rapidement qu’il n’y a pas eu de régression majeure pendant le développement.

Cependant, malgré l’amélioration des tests dans les projets de logiciel libre il reste encore beaucoup à faire.

Pour aller plus loin

Les tests nécessitent une grande expertise, mais sont encore considérés au sein de la communauté du le logiciel libre comme une tâche ne demandant pas beaucoup d’efforts. L’une des raisons pourrait être que la manière dont on les réalise est vraiment dépassée et ne rend pas compte de la complexité croissante du monde du logiciel libre durant la dernière décennie. Comment est-il possible que, malgré la quantité d’innovations amenées par les communautés du logiciel libre, les tests soient encore réalisés comme dans les années 80 ? Il faut nous rendre à l’évidence, les scénarios de tests sont ennuyeux et vite obsolètes. Comment faire grandir une communauté de testeurs supposée trouver des bogues avérés si sa tâche principale est de mettre à jour les scénarios de test ?

Mais comment améliorer la procédure de test ? Bien sûr, nous ne pouvons pas nous débarrasser des scénarios de test, mais nous devons changer la façon dont nous les créons et les mettons à jour. Nos testeurs et nos utilisateurs sont intelligents, alors pourquoi créer des scripts pas-à-pas ? Ils pourraient aisément être remplacés par une procédure de test automatique. Définissons plutôt une liste de tâches que l’on réalise avec l’application, et certaines caractéristiques qu’elle devrait posséder. Par exemple, « l’ordre des raccourcis dans le lanceur doit pouvoir être modifié », ou « le démarrage de LibreOffice est rapide ». Les testeurs trouveront un moyen de le faire, et créeront des scénarios de test en parallèle des leurs.

Mais ce n’est pas suffisant, nous avons besoin de meilleurs outils pour aider les testeurs à savoir ce qu’ils testent, où et comment. Pourquoi ne pas avoir des API (interfaces de programmation) qui permettent aux développeurs d’envoyer des messages aux testeurs à propos des nouvelles fonctionnalités ou des mises à jour qui doivent être testées ? Pourquoi pas une application qui nous indique quelle partie du système doit être testée ? en fonction des tests en cours ? Dans le cas d’Ubuntu, nous avons les informations dans le Launchpad (il nous faudrait aussi des données sur les tests, mais au moins nous avons des données sur les bogues). Si je veux démarrer une session de test d’un composant en particulier j’apprécierais vraiment de savoir quelles zones n’ont pas encore été testées ainsi qu’une liste des cinq bogues comptant le plus de doublons pour cette version en particulier afin d’éviter de les documenter une fois de plus. J’aimerais avoir toutes ces informations sans avoir à quitter le bureau que je suis en train de tester. C’est quelque chose que Firefox a initié avec Test Pilot, bien qu’actuellement l’équipe rassemble principalement les données sur l’activité du navigateur.

La communication entre l’amont et l’aval et vice-versa doit aussi être améliorée. Pendant le développement d’une distribution, un bon nombre des versions amont sont également en cours de développement, et ont déjà une liste des bogues connus. Si je suis un testeur de Firefox sous Ubuntu, j’aimerais avoir une liste des bogues connus aussitôt que le nouveau paquet est poussé dans le dépôt. Cela pourrait se faire à l’aide d’une syntaxe reconnue pour les notes de versions, syntaxe qui pourrait ensuite être facilement analysée. Les rapports de bogue seraient automatiquement remplis et reliés aux bogues amont. Encore une fois, le testeur devrait avoir facilement accès à ces informations, sans quitter son environnement de travail habituel.

Les tests, s’ils étaient réalisés de cette manière, permettraient au testeur de se concentrer sur les choses qui comptent vraiment et font de la procédure de test une activité qualifiée ; se concentrer sur les bogues cachés qui n’ont pas encore été découverts, sur les configurations et environnements spéciaux, sur la création de nouvelles manières de casser le logiciel. Et, in fine, s’amuser en testant.

Récapitulons

Pour ce que j’en ai vu ces trois dernières années, les tests ont beaucoup progressé au sein d’Ubuntu et des autres projets de logiciels libres dans lesquels je suis plus ou moins impliquée, mais ce n’est pas suffisant. Si nous voulons vraiment améliorer la qualité du logiciel libre, nous devons commencer à investir dans les tests et innover dans la manière de les conduire, de la même façon que nous investissons dans le développement. Nous ne pouvons pas tester le logiciel du XXIe siècle avec les techniques du XXe siècle. Nous devons réagir. Qu’il soit open source ne suffit plus à prouver qu’un logiciel libre est de bonne qualité. Le logiciel libre sera bon parce qu’il est open source et de la meilleure qualité que nous puissions offrir.

1 http://wiki.ubuntu.com/Apport

2 http://launchpad.net

3 http://testpilot.mozillalabs.com

4 http://reports.qa.ubuntu.com/reports/desktop-testing/natty




Si je me fais renverser par un camion… par Aaron Swartz (à 16 ans)

Au delà de l’émotion des circonstances, voici la traduction d’une note d’Aaron Swartz qui pose la question du devenir de nos données après notre mort.

Et pour ce qui concerne le code, le léguer à la FSF est une bonne idée 😉

Cet article est rangé dans le répertoire « 2002 » de son site. Il avait alors 16 ans !

Doc Searls - CC by

Si je me fais renverser par un camion…

If I get hit by a truck…

Aaron Swartz – 2002 – Site personnel
(Traduction : Moosh, lgodard, zozio nocture (aka brandelune), aKa, Sky)

Si je me fais renverser par un camion… lisez cette page.


Il y a une vieille blague chez les programmeurs sur qui va gérer le code si son auteur se fait renverser par un camion. Cette page est ici pour assurer que tout le monde sache quoi faire si, pour une raison donnée, je ne suis plus en mesure de conserver mes services Web en fonctionnement.

Je désigne Sean B. Palmer comme mon exécuteur testamentaire virtuel pour l’organisation de ces choses (et Sean, si tu effaces quoi que ce soit, je te hanterai de ma tombe !)

Je demande que le contenu de tous mes disques durs soit rendu public sur aaronsw.com.

Web.Resource.org Sean (ou la personne qu’il désignera) deviendra le nouveau webmaster. Continue de mettre à jour le site et la liste des miroirs, et garantis la persistance des URLs. (Ceci implique que rien de controversé ou d’illégal ne doive être ajouté, à part pour Cryptome.)

Code Source Le copyright pour mon code source sous GPL doit être transféré à la Free Software Foundation. Elle semble avoir une politique raisonnable concernant la mise à disposition du code.

Sites Web Merci de laisser les sites Web opérationnels quand c’est possible, sans modifier les contenus que j’ai écrit quand approprié. Des pages dédiées (par exemple sur aaronsw.com) pourront contenir une note sur ce qui m’est arrivé avec un lien vers des plus d’information. La page d’accueil sur aaronsw.com devra être modifiée avec un lien vers l’ancienne page.

Tombe Je voudrais reposer dans un endroit qui ne me tuera pas. Ce qui veut dire avoir un accès à de l’oxygène (bien qu’un accès direct serait probablement une mauvaise chose), et ne pas avoir à traverser 6 pieds de saleté.

Pour le reste, envoyez un e-mail à Sean. Je suis certain qu’il fera quelque chose de raisonnable.

Si quelque chose m’arrive, merci de mettre à jour le pied de page de cette note avec un lien. Envoyez également un e-mail aux listes concernées et mettez en place une réponse automatique pour mon adresse e-mail afin d’informer les personnes qui m’écrivent. N’hésitez pas à publier les choses que les gens disent à mon propos sur le site. Tout ceci est probablement évident, et je suis certain que vous vous en sortirez.

Oh, et au fait, vous me manquerez tous.

Crédit photo : Doc Searls (Creative Commons By)




Le Manifeste du hacker (1986) #pdftribute Aaron Swartz

Un certain nombre de textes tournent actuellement sur le Net suite au décès d’Aaron Swartz. Parmi eux on trouve « La Conscience d’un hacker » (ou « Le Manifeste du hacker ») datant de… 1986 et que d’aucuns trouvent particulièrement adapté aux circonstances. Et pour cause…

Nous vous le proposons traduit ci-dessous[1]. Il a été rédigé par Loyd Blankenship, (alias The Mentor) juste après son arrestation.

« Oui, je suis un criminel. Mon crime est celui de la curiosité. »

Remarque : Nous sommes en 1986 et c’est par le téléphone que passe le réseau. Un téléphone qui se retrouve alors bloqué par ces « sales gosses » pour la communication classique.

Elizabeth Brossa - CC by-nc-sa

La conscience d’un hacker

The Conscience of a Hacker

The Mentor – 8 janvier 1986 – Phrack.org
(Traduction : NeurAlien, Moosh, ga3lig, goofy, zozio nocture (aka brandelune), Slystone, KoS, aKa, Martin, lamessen, Sky)

Ce qui suit a été écrit peu de temps après mon arrestation…

Un autre s’est fait prendre aujourd’hui, c’est partout dans les journaux.
« Scandale : Un adolescent arrêté pour crime informatique », « Arrestation d’un hacker après le piratage d’une banque »…
Satanés gosses, tous les mêmes.

Mais vous, dans votre psychologie de costume trois pièces et votre conscience technologique des années 50, avez-vous un jour pensé à regarder le monde avec les yeux d’un hacker ?
Ne vous êtes-vous jamais demandé ce qui l’avait fait agir et quelles forces l’avaient animé ?
Je suis un hacker, entrez dans mon monde…
Mon monde, il commence avec l’école… Je suis plus éveillé que la plupart des autres enfants et les nullités qu’on nous enseigne m’ennuient…
Satanés gamins, ce sont tous les mêmes.

Je suis au collège ou au lycée. J’ai écouté les professeurs expliquer pour la quinzième fois comment réduire une fraction.
J’ai bien compris. « Non Mme Dubois, je n’ai pas montré mon travail. Je l’ai fait dans ma tête ».
Satané gosse. Il a certainement copié. Ce sont tous les mêmes.

J’ai fait une découverte aujourd’hui. J’ai trouvé un ordinateur.
Attends une minute, c’est cool. Ça fait ce que je veux. Si ça fait une erreur, c’est parce que je me suis planté.
Pas parce qu’il ne m’aime pas…
Ni parce qu’il se sent menacé par moi…
Ni parce qu’il pense que je suis un petit malin…
Ni parce qu’il n’aime pas enseigner et qu’il ne devrait pas être là…
Satané gosse. Tout ce qu’il fait c’est jouer. Ce sont tous les mêmes.

Et c’est alors que ça arrive. Une porte s’ouvre…
Les impulsions électroniques déferlent sur la ligne téléphonique comme l’héroïne dans les veines d’un drogué.
Pour trouver dans un Forum le refuge contre la stupidité quotidienne.
« C’est ça… C’est ici que je dois être…»
Ici, je connais tout le monde… Même si je n’ai jamais rencontré personne. Je ne leur ai jamais parlé, et je n’entendrai peut-être plus parler d’eux un jour… Je vous connais tous.
Satané gosse. Encore pendu au téléphone. Ce sont tous les mêmes.

A l’école, on nous a donné des pots de bébé alors qu’on avait les crocs pour un steak…
Les morceaux de viande que vous avez bien voulu nous tendre étaient pré-mâchés et sans goût.
On a été dominé par des sadiques ou ignoré par des apathiques.
Les seuls qui avaient des choses à nous apprendre trouvèrent en nous des élèves de bonne volonté, mais ceux-ci étaient comme des gouttes d’eau dans le désert.

C’est notre monde maintenant… Le monde de l’électron et des commutateurs, la beauté du baud. Nous utilisons un service déjà existant, sans payer ce qui pourrait être bon marché si ce n’était pas géré par des profiteurs avides, et c’est nous que vous appelez criminels.
Nous explorons… et vous nous appelez criminels.
Nous recherchons la connaissance… et vous nous appelez criminels.
Nous existons sans couleur de peau, sans nationalité, sans dogme religieux… et vous nous appelez criminels.
Vous construisez des bombes atomiques, vous financez les guerres, vous assassinez et trichez, vous manipulez et vous nous mentez en essayant de nous faire croire que c’est pour notre propre bien… et pourtant c’est nous qui sommes les criminels.

Oui, je suis un criminel. Mon crime est celui de la curiosité.
Mon crime est celui de juger les gens selon ce qu’ils pensent et disent, pas selon leur apparence.
Mon crime est d’être plus malin que vous, quelque chose que vous ne me pardonnerez jamais.

Je suis un hacker, et ceci est mon manifeste.
Vous pouvez arrêter un individu, mais vous ne pouvez pas tous nous arrêter…
Après tout, nous sommes tous les mêmes.

The Mentor

Crédit photo : Elizabeth Brossa (Creative Commons By-Nc-Sa)

Notes

[1] Il en existait une première traduction mais elle était « perfectible ».




Cent fois sur le métier remettez vos correctifs… (Libres conseils 12/42)

Chaque jeudi à 21h, rendez-vous sur le framapad de traduction, le travail collaboratif sera ensuite publié ici même.

Traduction Framalang : ga3lig, Fred, peupleLa, LAuX, Goofy, jcr83, purplepsycho, Jej, Jean-Noël AVILA, Julius22, kalupa, 4nti7rust, lamessen, okram + Cédric Corazza

Écrire des correctifs

Kai Blin

Kai Blin est un bio-informaticien qui mène des recherches sur les antibiotiques dans le cadre de ses activités quotidiennes, tant sur ordinateur qu’au labo. Il est très heureux de pouvoir diffuser le logiciel développé dans le cadre de ses activités professionnelles sous licence open source. Vivant dans la charmante ville de Tübingen, dans le sud de l’Allemagne, Kai passe une partie de ses soirées sur l’ordinateur, à programmer pour le projet Samba. Il consacre la majorité de son temps libre restant au théâtre, où il participe aussi bien à la performance scénique qu’à la construction d’accessoires et à la régie technique dans les coulisses.

Écrire des correctifs et les proposer est souvent la première interaction concrète que vous pouvez avoir avec un projet open source. C’est la première impression que vous donnez aux développeurs présents. Proposer de « bons » premiers correctifs, ou tout du moins jugés comme tels par le projet auquel vous contribuez, vous rendra la vie plus facile. Les règles précises d’écriture du correctif, de la façon de le soumettre au projet et tous les autres détails nécessaires vont sans doute varier selon les divers projets auxquels vous voulez contribuer. Mais j’ai trouvé quelques règles générales que l’on retrouve presque à chaque fois. Et c’est ce dont traite cet article.

Comment tout foirer

Le fil rouge de ce livre est « ce que j’aurais aimé savoir avant de commencer », aussi permettez-moi de commencer par l’histoire de mes premiers correctifs. J’ai été impliqué sérieusement dans l’écriture de code pour la première fois pendant le Google Summer of Code™ de 2005. Le projet Wine avait accepté que j’implémente un chiffrement NTLM basé sur des outils connexes à Samba. Wine est un projet à committer unique, ce qui signifie que seul le développeur principal, Alexandre Julliard, possède les autorisations de commit sur le dépôt principal. En 2005, Wine utilisait encore CVS comme système de gestion de versions. Quand le projet a démarré et que j’ai reçu le courriel me disant que j’étais accepté, j’ai contacté mon mentor sur IRC et me suis mis au travail.

J’alignais joyeusement les lignes de code et bientôt j’ai pu implémenter les premières fonctionnalités. J’ai produit un correctif et l’ai soumis à mon mentor pour qu’il fasse une relecture. Au temps du CVS, il fallait renseigner toutes les options de diff(1) manuellement, mais je m’étais particulièrement documenté sur la partie cvs diff -N -u > ntlm.patch. De cette façon, j’avais le fichier que je pouvais envoyer à mon mentor. En fait, c’est quelque chose que j’ai bien fait. Et c’est la première chose que vous devriez prendre en compte quand vous préparez un correctif. Le résultat classique de la commande diff est sans doute plus facile à lire pour un ordinateur, mais je n’ai jamais rencontré un humain préférant le résultat classique au résultat d’un diff unifié. Grâce à l’option -u , diff utilise les notations + + + et - - -

Par exemple, le diff qui suit est le résultat de la réécriture de « Hello, World! » en Python, version suédoise.

diff —git a/hello.py b/hello.py index 59dbef8..6334aa2 100644 --- a/hello.py +++ b/hello.py @@ -1,4 +1,4 @@ #!/usr/bin/env python # vim: set fileencoding=utf-8 -print "Hello, world!" +print "Halla, varlden!" 

La ligne qui commence par « - » est la ligne supprimée, celle qui commence par « + » est celle qui va être ajoutée. Les autres lignes permettent à l’outil de correction de faire son travail.

J’ai envoyé le diff unifié que je venais de créer à mon mentor qui m’en a fait une review(2) en me signalant beaucoup d’éléments à modifier. J’ai effectué les corrections et lui ai renvoyé un nouveau diff peu de temps après. Le cycle d’analyse du code a continué durant toute la durée du GSoC et mon correctif ne cessait de grossir. Quand la date de livraison est arrivée, je me suis retrouvé avec un correctif monstrueux dans lequel étaient inclus tous mes changements. Naturellement, j’ai eu beaucoup de mal à obtenir une review de mon correctif, sans parler de le faire accepter. Pour finir, Alexandre refusa de regarder plus avant le correctif tant que je ne l’aurais pas scindé. Les règles en usage chez Wine exigent que les correctifs soient de petites étapes logiques ajoutant une fonctionnalité. Chaque correctif doit faire quelque chose d’utile et pouvoir être compilé.

De fait, scinder un énorme correctif existant en différentes parties cohérentes individuellement et qui peuvent être compilées représente beaucoup de travail. C’était même d’autant plus de travail que je ne connaissais qu’une seule manière de le faire : écrire un petit correctif, créer le diff, le proposer à la validation, mettre à jour ma contribution locale et écrire alors le correctif suivant. Peu de temps après que j’ai commencé à envoyer mes premiers petits correctifs, Wine est entré dans une phase de gel des fonctionnalités d’un mois menant à la version 0.9.0 bêta. Je suis resté sur le correctif suivant pendant un mois avant de pouvoir continuer et j’ai finalement envoyé mon dernier correctif en novembre. Complètement frustré par cette expérience, j’ai décidé que je ne voulais plus jamais avoir à faire avec la communauté Wine.

Ma frustration perdura jusqu’à ce que des personnes qui utilisaient réellement mon code commencent à me poser des questions sur celui-ci en février 2006. Mon code était vraiment utile ! Ils voulaient également davantage de fonctionnalités. Quand Google annonça qu’il reconduirait le GSoC en 2006, mes projets pour l’été étaient clairs. Maintenant que Wine avait basculé de diff à git en décembre 2005, je savais que je ne serais pas ennuyé par des gels de fonctionnalités, puisque je pouvais finalement créer tous mes petits correctifs localement. La vie était belle.

Ce n’est que lorsque je suis tombé sur une interface de git (appelée porcelaine dans le langage git) qui émulait le comportement de Quilt que j’ai appris qu’il y avait des outils qui auraient pu rendre ma vie plus facile, même en 2005.

Comment NE PAS tout foirer

Maintenant que je vous ai raconté comment j’ai réussi à me planter avec l’envoi de correctifs, permettez-moi de poursuivre avec quelques conseils pour éviter les pièges.

Règles pour la soumission de correctifs

Mon premier conseil est de lire attentivement toutes les directives de soumission de correctifs que peut avoir le projet auquel vous voulez contribuer. Celles-ci, ainsi que les normes de style de codage, doivent être consultées avant même de commencer à coder.

Des diffs unifiés

Même si ce n’est pas explicitement indiqué dans les directives de soumission des correctifs, vous devez vraiment, vraiment envoyer le résultat d’un diff unifié. Je n’ai encore rencontré aucun projet qui préfère la sortie non unifiée du diff. Les diffs unifiés rendent la révision du correctif beaucoup plus facile. Ce n’est pas par hasard que les programmes de gestion de version modernes utilisent automatiquement ce format dans leurs commandes diff par défaut.

Utilisez un contrôle de version distribué

En ce qui concerne la gestion de versions moderne, vous devriez vraiment utiliser un système de gestion de versions distribué (DVCS) pour travailler localement sur le code. Git et Mercurial sont les choix les plus populaires de nos jours, quoique Bazaar puisse aussi très bien faire l’affaire. Même si le projet auquel vous voulez contribuer utilise toujours un système de gestion de version centralisé, être en mesure d’envoyer vos changements de manière itérative est une très bonne chose. Tous les outils de gestion de versions distribués mentionnés ci-dessus devraient être capables d’importer des changements depuis un SVN ou un CVS. Vous pourrez y aller et apprendre doucement Quilt mais, sérieusement, le futur passe par les systèmes de gestion de versions distribués.

De petits correctifs, pour faire une chose à la fois

Quand je dois examiner des correctifs, les plus ennuyeux à traiter sont ceux qui sont trop gros ou qui tentent de faire de nombreuses choses en même temps. Les correctifs qui ne font qu’une chose à la fois sont plus faciles à traiter. Au final, ils vous faciliteront la vie quand vous devrez déboguer les erreurs qu’auront manquées à la fois l’auteur et le vérificateur.

Suivez votre correctif

Après avoir proposé votre correctif, gardez un œil sur les canaux de communication du projet et sur votre correctif. Si vous n’avez eu aucun retour au bout d’une semaine, vous devriez poliment en demander un. En fonction de la façon dont le projet gère les propositions de correctif, celui-ci pourrait être noyé dans le bruit. N’espérez pas voir votre correctif retenu du premier coup. Il faut, en général, quelques essais pour s’habituer au style d’un nouveau projet. En tant que contributeur néophyte, personne ne vous en voudra pour ça, à condition d’avoir presque tout bon. Assurez-vous seulement de corriger ce que les développeurs vous ont indiqué et envoyez une seconde version du correctif.

Conclusion

Écrire de bons correctifs n’est pas difficile. Il y a deux ou trois choses à prendre en considération. Mais après en avoir écrit quelques-uns vous devriez être au point sur celles-ci. Un système moderne de contrôle de version (distribué) et le workflow (Ndt : flux de production) qui en résulte gèreront de fait la plupart des choses que j’ai mentionnées. Si vous n’avez qu’une chose à retenir, c’est ceci :

  • Utilisez un système de contrôle de version distribué pour gérer vos correctifs.
  • Écrivez vos correctifs en petites étapes indépendantes.
  • Suivez les normes de codage en vigueur.
  • Répondez rapidement aux commentaires sur vos correctifs.

Les quelques lignes directrices ci-dessus devraient vous aider à bien faire la plupart des choses, sinon toutes, quand vous soumettrez vos premiers correctifs. Bon codage.

(1) Un diff (abréviation de différence) est un fichier qui affiche le résultat d’une comparaison entre deux éléments (en général, des lignes de code). Pour en savoir plus : http://fr.wikipedia.org/wiki/Diff

(2) Review : révision minutieuse http://fr.wiktionary.org/wiki/review




Manifeste de la guérilla pour le libre accès, par Aaron Swartz #pdftribute

Il se passe quelque chose d’assez extraordinaire actuellement sur Internet suite à la tragique disparition d’Aaron Swartz : des centaines de professeurs et scientifiques du monde entier ont décidé de publier spontanément leurs travaux en Libre Accès !

Il faut dire que sa mort devient chaque jour plus controversée, les pressions judiciaires dont il était l’objet n’étant peut-être pas étrangères à son geste. Comme on peut le lire dans Wikipédia : « En juillet 2011, le militant américain pour la liberté de l’Internet Aaron Swartz fut inculpé pour avoir téléchargé et mis à disposition gratuitement un grand nombre d’articles depuis JSTOR. Il se suicide le 11 janvier 2013. En cas de condamnation, il encourait une peine d’emprisonnement pouvant atteindre 35 ans et une amende s’élevant jusqu’à 1 million de dollars. »

On peut suivre l’évolution du mouvement derrière le hashtag #pdftribute (pdf hommage) qui a déjà son site et son compte Twitter dédiés.

Dans la foulée nous avons décidé de traduire ensemble un autre article important d’Aaron Swartz (rédigé à 21 ans), en lien direct avec la motivation de tous ceux qui lui rendent ainsi un vibrant, concret et utile hommage : Guerilla Open Access Manifesto.

Ce manifeste s’achève sur cette interrogation : « Serez-vous des nôtres ? »

Remarque : L’émouvante photo ci-dessous représente Aaron Swartz a 14 ans en compagnie de Larry Lessig. On remarquera son bien joli tee-shirt 😉

Rich Gibson - CC by

Manifeste de la guérilla pour le libre accès

Guerilla Open Access Manifesto

Aaron Swartz – juillet 2008 – Internet Archive
(Traduction : Gatitac, albahtaar, Wikinade, M0tty, aKa, Jean-Fred, Goofy, Léna, greygjhart + anonymous)

L’information, c’est le pouvoir. Mais comme pour tout pouvoir, il y a ceux qui veulent le garder pour eux. Le patrimoine culturel et scientifique mondial, publié depuis plusieurs siècles dans les livres et les revues, est de plus en plus souvent numérisé puis verrouillé par une poignée d’entreprises privées. Vous voulez lire les articles présentant les plus célèbres résultats scientifiques ? Il vous faudra payer de grosses sommes à des éditeurs comme Reed Elsevier.

Et il y a ceux qui luttent pour que cela change. Le mouvement pour le libre accès s’est vaillamment battu pour s’assurer que les scientifiques ne mettent pas toutes leurs publications sous copyright et s’assurer plutôt que leurs travaux seront publiés sur Internet sous des conditions qui en permettent l’accès à tous. Mais, même dans le scénario le plus optimiste, la politique de libre accès ne concerne que les publications futures. Tout ce qui a été fait jusqu’à présent est perdu.

C’est trop cher payé. Contraindre les universitaires à débourser de l’argent pour lire le travail de leurs collègues ? Numériser des bibliothèques entières mais ne permettre qu’aux gens de chez Google de les lire ? Fournir des articles scientifiques aux chercheurs des plus grandes universités des pays riches, mais pas aux enfants des pays du Sud ? C’est scandaleux et inacceptable.

Nombreux sont ceux qui disent : « Je suis d’accord mais que peut-on y faire ? Les entreprises possèdent les droits de reproduction de ces documents, elles gagnent énormément d’argent en faisant payer l’accès, et c’est parfaitement légal, il n’y a rien que l’on puisse faire pour les en empêcher. » Mais si, on peut faire quelque chose, ce qu’on est déjà en train de faire : riposter.

Vous qui avez accès à ces ressources, étudiants, bibliothécaires, scientifiques, on vous a donné un privilège. Vous pouvez vous nourrir au banquet de la connaissance pendant que le reste du monde en est exclu. Mais vous n’êtes pas obligés — moralement, vous n’en avez même pas le droit — de conserver ce privilège pour vous seuls. Il est de votre devoir de le partager avec le monde. Et c’est ce que vous avez fait : en échangeant vos mots de passe avec vos collègues, en remplissant des formulaires de téléchargement pour vos amis.


Pendant ce temps, ceux qui ont été écartés de ce festin n’attendent pas sans rien faire. Vous vous êtes faufilés dans les brèches et avez escaladé les barrières, libérant l’information verrouillée par les éditeurs pour la partager avec vos amis.

Mais toutes ces actions se déroulent dans l’ombre, de façon souterraine. On les qualifie de « vol » ou bien de « piratage », comme si partager une abondance de connaissances était moralement équivalent à l’abordage d’un vaisseau et au meurtre de son équipage. Mais le partage n’est pas immoral, c’est un impératif moral. Seuls ceux qu’aveugle la cupidité refusent une copie à leurs amis.


Les grandes multinationales, bien sûr, sont aveuglées par la cupidité. Les lois qui les gouvernent l’exigent, leurs actionnaires se révolteraient à la moindre occasion. Et les politiciens qu’elles ont achetés les soutiennent en votant des lois qui leur donnent le pouvoir exclusif de décider qui est en droit de faire des copies.

La justice ne consiste pas à se soumettre à des lois injustes. Il est temps de sortir de l’ombre et, dans la grande tradition de la désobéissance civile, d’affirmer notre opposition à la confiscation criminelle de la culture publique.

Nous avons besoin de récolter l’information où qu’elle soit stockée, d’en faire des copies et de la partager avec le monde. Nous devons nous emparer du domaine public et l’ajouter aux archives. Nous devons acheter des bases de données secrètes et les mettre sur le Web. Nous devons télécharger des revues scientifiques et les poster sur des réseaux de partage de fichiers. Nous devons mener le combat de la guérilla pour le libre accès.

Lorsque nous serons assez nombreux de par le monde, nous n’enverrons pas seulement un puissant message d’opposition à la privatisation de la connaissance : nous ferons en sorte que cette privatisation appartienne au passé. Serez-vous des nôtres ?

Aaron Swartz

Crédit photo : Rich Gibson (Creative Commons By)