Avez-vous déjà participé à un projet logiciel qui a dépassé le budget et tous les délais ? Évidemment, comme tout le monde d’ailleurs. Et si vous y avez échappé, cela veut dire que vous faites partie d’une licorne et votre cas m’intéresse.
Au début de ma carrière dans le développement logiciel, j’ai appris qu’il était important de travailler à rebours à partir des échéances. Si un projet devait être réalisé à une certaine date et que les tests prenaient un certain temps, nous choisissions une date limite en travaillant à rebours à partir de la date d’échéance imposée. Parfait, n’est-ce pas ?
Eh bien, pas tout à fait. Même si le fait de prévoir du temps pour les tests manuels réduisait la pression au cours des derniers jours des projets, il y avait encore trop de surprises.
Prévoir du temps pour les tests d’assurance qualité est une bonne chose en théorie, mais en pratique, la situation devient vite incontrôlable dès le premier bug ou défaut identifié.
Combien de temps faudra-t-il pour corriger le défaut ? Quel sera l’impact sur le calendrier ? De nouveaux bugs seront-ils introduits ? Comment faire en sorte que chaque correctif soit vérifié et que l’on ait le temps de réparer ce que l’on a endommagé lors de la correction initiale ?
En fin de compte, je n’ai jamais réussi à trouver le temps nécessaire à l’assurance qualité. Inévitablement, des correctifs étaient intégrés à la dernière minute ; j’ai donc appris à me garder du temps libre les semaines suivant les grands lancements afin de pouvoir trier tous les problèmes que nous avions manqués (ou introduits) dans notre course effrénée de fin de projet.
Le problème, en définitive, n’était pas le temps disponible pour les tests, mais plutôt le moment des tests. J’avais besoin de tester plus tôt et plus souvent. J’avais besoin de tests shift-left.
Si l’on représente le processus de développement logiciel comme une ligne de temps allant de la gauche vers la droite, on comprend tout de suite mieux le concept de « shift-left » (qui signifie « décalage vers la gauche » en français). Pour faire simple, il s’agit de tester à un stade plus précoce, d’impliquer les membres d’équipe (les testeurs, les développeurs et les parties prenantes) dans la stratégie de test, et d’intégrer les tests pour les fonctionnalités existantes et nouvelles plus souvent dans le cycle de développement.