Tout d'abord, un point rapide : oui je sais, je n'ai pas encore mis en ligne la partie 2 de mon précédent article. Il est en cours d'écriture, considérez celui-ci comme un intermède.
Bon revenons à notre problème. Hadrien souhaite avoir une différence forte entre la numérotation des ajouts de fonctionnalités et les corrections de bugs. Alors qu'auparavant, il utilisait un nombre à deux chiffres pour représenter les deux, il semble s'orienter maintenant vers une séparation plus forte par un point. C'est à dire que pour désigner la 5e version avec la 4e correction, il passe de 1.54 à 1.5.4.
C'est une décision qui semble être suivi par de nombreux logiciels et je me sens concerné car c'est le choix de numérotation que j'ai adopté dans ChuWiki, aujourd'hui en version 1.3.1.
Mais voilà, il se trouve que depuis quelques temps, je suis en train de remettre en cause cette numérotation. Mon problème vient du premier chiffre de version : 1. Comment se chiffre a-t-il été choisi ? Initialement bien-sûr, lorsque le logiciel a été rendu publique pour la 1re fois en 1.0. (Je n'approuve vraiment pas les projets qui osent rendre publique une version 0.X, 1.0 signifie qu'il s'agit de la 1re version où le logiciel fait ce qu'il est censé faire initialement. Mais c'est un autre sujet que je pourrais développer une autre fois.)
Donc je viens de rendre publique une 1.0 dont je suis très fier. Elle ne fait pas grand chose mais elle le fait (non pas forcément bien non plus mais tant pis). Si c'est vraiment une 1.0, il y a des chances que je commence par effectuer des corrections. Ouis mais voilà, en plus de ces corrections, j'ajoute aussi quelques fonctionnalités mineures. Et hop, rapidement une 1.1 se présente. Pourquoi 1.1 ? Et bien je n'ai vraiment pas fait suffisament de modifications pour oser sortir une 2.0. J'augmente donc la version « mineure » pour signifier qu'il s'agit toujours de la version 1 mais avec quelques corrections.
La spirale démarre alors. Je vais finalement ajouter petit à petit (oui j'ai pas le temps !) des fonctionnalités et à chaque fois augmenter le numéro « mineure » de version. Aujourd'hui, ChuWiki est en version 1.3. Mais voilà, récemment je fais une petite correction sur le thème de la 1.3. Oh je n'ai pas modifié tant que ça la version, rien ne justifie une 1.4. Suivant la même réflexion qu'Hadrien, je crée une 1.3.1.
Tout cela semblerait très logique si je ne commençait pas à me poser des questions stupides comme : mais finalement, qu'est-ce qui justifierait un passage en 2.0 ? Hadrien mentionne une « évolution suffisamment significative ». Soit. Qu'est-ce qu'une évolution significative ? La nouvelle version guérit le cancer ? Ah non rien à voir... Ah mais oui ! Elle a été en partie réécrite ! Oui d'accord... Mais à quel point ? Parce que finalement, c'est ce que l'on fait tous les jours quand on fait évoluer une application que d'en réécrire des parties. Elles sont juste plus ou moins grandes.
« Où est-ce qu'il veut en venir ? », te demandes-tu, ô fidèle lecteur.
Lorsqu'on écrit un logiciel, il est normal qu'on le fasse évoluer, qu'on lui ajoute des fonctionnalités, qu'on change son architecture, qu'on corrige des bugs. Mais le plus important est finalement ce qu'on va livrer à notre utilisateur. Et dans le monde du logiciel, il n'y a que deux notions, soit vous avez modifié le logiciel, soit vous l'avez corrigé. Bingo, il n'y a que deux versions à maintenir ! La majeure : représentant le niveau de fonctionnalité et la mineure : représentant les corrections.
En se basant sur ce principe, ChuWiki n'est pas en version 1.3.1 mais en version... 3.1 ! Et oui, vous ne le saviez pas mais ChuWiki 3 est sorti ! C'est finalement bien plus compréhensible pour l'utilisateur. Et puis je n'ai pas à me poser toutes ces questions existencielles quand je me demande de quoi serait composé un « ChuWiki 2.0 ». J'assume enfin qu'il n'y aura jamais de version 2.0, celle qui guérit le cancer et éradique la famine dans le monde. L'évolution de mon logiciel n'est déterminé que par les ajouts que j'y fait et son histoire suit son cours.
Ce choix peut paraitre exagéré, mais il s'agit finalement d'assumer l'évolution de son logiciel. En effet, la version 3 de mon ChuWiki est maintenant bien loin de la version 1. Plus de fonctionnalités, pas vraiment compatibles, ses versions sont finalement plus justifiées que je ne le pensais initialement.
D'autres que moi ont fait ce constat. Vous avez sans aucun doute déjà entendu parler de l'histoire de cette petite plateforme appellée Java qui a évolué en version 1.0, 1.1, 1.2 (ou Java 2 comme certains « osaient » l'appeller), 1.3, 1.4 et finalement 5 puis 6. Java 6. Sun a enfin compris que les modifications apportées à son logiciel justifiaient largement un changement de version majeure. Et surtout que ce n'était pas la peine de courir derrière ce rêve qu'était Java 2.0. Je suis sûr qu'aujourd'hui, Java 6 est allé bien au-delà, pas forcément dans la même direction mais finalement dans une direction plus logique et plus tournée vers l'utilisateur.
Assumez vos versions ! Ne courrez pas après un rêve qui ne réalisera jamais ! À mort le 2.0 ! Vive le 3 (4, 5, 6) !
1 De Groumphy -
Hello,
Article extrémement intéressant... J'ai sortis il y a quelques temps un "petit précis" de la numérotation logicielle (ou Version Numbering ou Sheme Numbering ??)...
J'en ai tiré des conclusions différentes que toi : a) les versions de développement (inférieure à 1) peuvent être distribuée, déjà cela participe énormément au déplantage de l'application qui est opérationnelle ; b) dans la continuité, cela permet aussi de développer des idées etc. Si le code source est ouvert cela permet évidement un travail collaboratif important ; c) dans la question des mises à jour, je dirais que la v1.0 est la version stable initiale (sur ce nous sommes entièrement d'accord) ; mais j'oriente mes scripts, mes développements, mes applications d'une manière différentes :
- vX.Y.Z.type : X représente la version majeure, Y la version mineure, Z la version de mise à jour et 'type' est la diffusion. - identiquement à ce que tu prônes : X.Y sont similaire... Les mises à jours mineure incrémente Z (il se situe sur 3 chiffres) ; et enfin type (Alpha, beta, RC) est facultatif.
Certe c'est plus complexe mais tout aussi faisable.
J'en viens donc au fait que chacun peut adopter une numérotation selon ses envies... Je me suis basé principalement sur le monde du logiciel libre pour en sortir cela...
J'espère t'avoir donné des autres idées et j'attend avec plaisir de te lire ;
Groumphy
2 De Vincent -
Merci de ta contribution Groumphy.
Tu sembles avoir adopter un format X.Y.Z que justement j'ai abandonné comme je l'explique dans le billet, tout simplement car je me trouvais toujours dans l'impossibilité morale d'incrémenter X. J'ai donc décidé de revenir à un modèle plus simple X.Y.
Pour ce qui est de l'ajout d'un suffixe comme RC, alpha ou béta, je suis complètement d'accord avec toi et c'est aussi une pratique que j'utilise. Je ne l'ai pas mentionné dans mon article simplement car ses versions sont souvent internes ou destinées à des utilisateurs avertis. Merci d'en avoir parlé.
3 De Florian -
Dans le cadre de Chuwiki, je suis plutot d'accord avec ta numerotation. Je pense par contre que la numerotation X.Y.Z est utile pour les frameworks, libraries, et plateformes, ou tout autre truc qui n'est pas en bout de chaine, mais sur lequel d'autres logiciels se basent. Dans ces cas, tu changes le X en cas de rupture de compatibilité avec les version précedentes.
Dans ce même cas, les version 0.Y.Z peuvent etre raisonables. Tu indiques comme ca que ton API n'est pas stable.
Sinon, je ne suis pas fan des versions n.99 pour dire que c'est une version n+1 pas completement prette. Je suis d'accord avec toi, et je préfere n-alpha, beta ou RC. Dans ce cas, alpha veut dire "ca marche pas bien, mais si vous voulez jouer avec...". beta veut dire "On approche de la version finale, mais il reste probablement quelques bugs". RC veut dire "sauf si on trouve des problèmes majeurs, c'est ce que je vais bientot publier en tant que version finale".
Après, tous les logiciels n'ont pas besoin de la meme précision dans le numero de version et dans le suffixe. Pour Chuwiki, X.Y, c'est probablement ce qu'il faut. Pour Firefox, une numerotation en X.Y.Z, dans la quelle on ne garantie pas que les plugins restent compatibles quand on change X, et avec des -alpha, -beta, -rc pour permettre a plein de monde de tester et d'anticiper sur les evolutions, ca se justifie. Pour une suite bureautique, tu peux changer X soit aussi vis a vis de la compatibilité des plugins, soit quand tu fait des changements (incompatibles) dans le format de documents.
4 De Groumphy -
Je tiens à continuer la discussion, avec le fait suivant :
- les logiciels Mozilla ont le plus souvent une numérotation non pas en X.Y.Z mais bien en W.X.Y.Z et Z représente une version de maintenance... Et à cela on rajoute encore le type...
Cela devient complèxe mais comme souligné les logiciels ne doivent pas posséder une numérotation unique... Mais il s'agit bien du type de logiciel.
Ainsi Firefox est d'un autre calibre que ZazouMiniWebServer ou que ChuWiki etc. donc la numérotation change ou est adaptée...
(avis personnel je précise !)
5 De Groumphy -
(Oublis dans la note précédente, j'ai retrouvé l'ancien billet : http://users.skynet.be/digital-nation/blog/archives/2005/08/entry_89.htm ... :) )
6 De temps -
Et les Beta alors ! Sans les bugs c'est moins drole.
7 De rambit -
super cool de voir comment les autres pensent et appliquent cela... par chez nous, x et y on trouve ca déjà compliqué ! merci
8 De émotionchassepeche -
Moi ou je travaille ils changent les infos dans les documents toujours dans la même version... un moment donné les documents s'échangent par courriel pis on sait pu laquelle est la dernière...
9 De ToietMoiEtc -
Ouff pas facile à suivre avec toutes ces version xyz / -alpha, -beta / versions n.99 Ya pas un standard "Universel"?
10 De stars -
peu importe comment on s'y prend, l'important, c'est que tout le monde de l'équipe s'entendent sur une facon de faire non ? le border pogne souvent lorsqu'il y a des nouveaux dans l'équipe et que la façon de faire n'est pas documenté pis que on prend pas le temps d'expliquer aux ti-nouveaux comment faire.