vendredi 13 décembre 2013

"Semantic Versioning"?

Vous entendez peut être bien ce terme pour la première fois? C'est pourquoi une petite définition s'impose:
Le "Semantic versionning" est une convention pour nommer les versions d'une API (bundle Symfony2, plugin...) donnée. 

Le principe est simple: Prenons une version x.y.z (ex: version 1.0.0, version 1.1.0, version 1.1.1)
  • x => pour dire majeur: Ce nombre n'est incrémenté que si les modifications apportées causent l'incompatibilité de l'API.
  • y => pour dire mineur: Ce nombre n'est incrémenté que si on ajoute des fonctionnalités qui sont compatibles avec la version actuelle.
  • => pour dire patch: Ce nombre n'est incrémenté qu'après avoir fixé une anomalie.
Un exemple peut s'avérer plus efficace qu'une définition; Imaginons qu'un développeur décide de créer un bundle  Symfony2 qui permet de gérer les produits dans une boutique:
  1. Il commence par développer une fonctionnalité d'ajout d'un produit. Une fois terminée, la version de son bundle est 0.1.0 (Pour une API en mode développement, le x est toujours à 0)
  2. Une deuxième fonctionnalité terminée qui est l'affichage des produits avec pagination, alors la version du bundle est de 0.2.0
  3. Une troisième fonctionnalité qui est la suppression d'un produit est mise en place, alors la version du bundle devient 0.3.0
  4. Il retrouve une anomalie au niveau de la pagination lors de l'affichage des produits (les même produits sont affichés sur chaque page). Une fois corrigée, la version du bundle passe à 0.3.1.
  5. Une dernière fonctionnalité qui permet de trier les produits lors de l'affichage est ajoutée. Le bundle passe à la version 0.4.0
  6. Après plusieurs itérations de développement, le bundle est enfin stable et prêt à être divulgué au public, à ce moment, la version 1.0.0 entre en jeux
  7. D'autres nouvelles fonctionnalités sont ajoutées ( 1.1.0, 1.2.0, 1.3.0, etc..)
  8. Après quelques mois, le développeur trouve qu'il aurait pu faire mieux s'il a suit les bonnes pratiques de développement Symfony2, alors il est obligé d'introduire des changements radicaux dans son bundle. La version stable qui résultera de cette manœuvre est la version 2.0.0
NB: Il faut bien souligner qu'il n'y a pas de limite particulière pour les nombres utilisés au niveau du xy ou bien du z. La seule restriction c'est qu'ils doivent être supérieurs ou égales à 0.
Ce principe de "versionning" est applicable dans ce qu'on appelle les tags lorsqu'on travaille avec un système de gestion des versions (git, svn).

PS: Le Framework Symfony en lui même repose sur ce principe.

1 commentaires :