À retenir
- Une régression touche une fonctionnalité qui marchait déjà auparavant.
- Elle est provoquée par un changement récent (correction ou ajout).
- Elle est souvent due à des dépendances cachées entre les parties du code.
Une régression est l'apparition d'un nouveau bug dans une partie d'un logiciel qui fonctionnait très bien jusque-là, à la suite d'une modification ou d'une mise à jour. C'est l'équivalent de réparer une fuite d'eau dans la cuisine et de s'apercevoir que cela a coupé l'électricité dans le salon.
Étymologie
Issu du latin regressio (« retour en arrière »). En informatique, le terme illustre un recul de la qualité ou de la fiabilité d'un programme qui perd ses acquis suite à une évolution technique.
Exemples d'usage
- Une mise à jour de sécurité qui rend soudainement impossible l'envoi de formulaires de contact.
- Le changement du design d'un bouton qui fait crash l'application sur certains téléphones.
- Une correction de bug sur le panier d'achat qui casse accidentellement le système de paiement.
Cas d'usage
Ce concept intervient principalement lors du développement logiciel et de la maintenance. On l'utilise pour justifier le besoin de tests approfondis avant de livrer une nouvelle version d'une application.
Bonnes pratiques
La méthode la plus efficace pour lutter contre ce phénomène est de pratiquer des tests de non-régression (TNR). Il s'agit d'automatiser des tests qui vérifient systématiquement toutes les fonctions existantes dès qu'une seule ligne de code est modifiée.
Synonymes
Antonymes
Conseil
Lorsque vous débutez, ne faites jamais l'erreur de croire qu'une « petite » modification ne nécessite pas de vérification globale. Un programme est un château de cartes : toucher à une base peut faire vaciller le sommet.
Questions fréquentes
Quelle est la différence entre un bug et une régression ?
Un bug est un défaut général. Une régression est spécifiquement un bug qui réapparaît ou qui est créé dans une fonction qui était déjà validée.
Comment éviter les régressions ?
En utilisant des tests automatisés (unitaires et d'intégration) et en effectuant des revues de code rigoureuses.