Qu'est-ce que le regression testing ?
Le regression testing relance les tests apres un changement pour detecter de nouveaux defauts. Types, usage CI/CD et regression de performance.
Qu'est-ce que le Regression Testing ?
Le regression testing est la pratique consistant a relancer les tests existants apres un changement pour confirmer que le code qui fonctionnait auparavant fonctionne toujours. Le nom vient du mot "regression", qui signifie un pas en arriere : une feature qui passait hier et echoue aujourd'hui. Chaque fois que vous corrigez un bug, ajoutez une feature, refactorisez un module, mettez a jour une dependance ou modifiez une configuration, vous risquez de casser quelque chose qui se comportait correctement. Le regression testing est le filet de securite qui attrape ces casses non intentionnelles avant qu'elles n'atteignent les utilisateurs.
Une regression test suite mature devient la memoire executable d'un produit. Chaque defaut livre laisse un test qui le reproduit, si bien que le meme bug ne peut jamais revenir en silence.
Pourquoi les regressions surviennent
Le logiciel est fortement interconnecte, et un changement est rarement aussi isole qu'il en a l'air. Les causes courantes sont :
- Code partage et effets de bord. Une fonction helper ou une colonne de base partagee est utilisee par plus de modules que prevu, donc une modification locale se propage.
- Corrections incompletes. Un fix resout le cas signale mais casse un edge case voisin ou reintroduit un ancien defaut.
- Refactoring. Restructurer sans changer le comportement est l'intention, mais des differences subtiles se glissent, surtout dans l'ordre, la gestion des null et les chemins d'erreur.
- Dependances et environnement. Mettre a jour une bibliotheque ou un runtime peut changer les defauts ou supprimer des API.
- Conflits de merge. Deux changements qui passent separement peuvent entrer en conflit une fois combines sur la branche main.
Ce que couvre le regression testing
Le regression testing n'est pas une technique unique mais un objectif. Tout test peut jouer un role de regression des lors qu'il protege un comportement deja verifie. Une suite couvre typiquement :
- Les parcours utilisateur centraux comme l'inscription, le login, le checkout et la recherche, qui ne doivent jamais casser.
- Les regles metier comme les prix, les taxes et les permissions, ou un changement silencieux coute de l'argent reel.
- Les reproductions de bugs qui figent chaque defaut deja corrige.
- Les integrations et API ou un changement de contrat casse des consommateurs externes.
- Le comportement non fonctionnel comme le temps de reponse et l'error rate sous charge, le domaine de la regression de performance.
Types de regression testing
Les verifications de regression tournent a chaque niveau de la pyramide de tests :
- Regression unit. Tests rapides et isoles d'une seule fonction. Ils forment la base car ils tournent en millisecondes et pointent l'unite exacte en echec.
- Regression integration. Verifie que modules, services et base cooperent toujours correctement apres un changement.
- Regression system et end to end. Pilote toute l'application, souvent via le navigateur, pour confirmer les parcours complets.
- Regression visuelle. Compare les screenshots pixel par pixel pour signaler les changements CSS ou layout non intentionnels.
- Regression de performance. Relance un load test contre un nouveau build et compare latency, throughput et error rate a une baseline.
Regression testing vs retesting
Ces termes sont souvent confondus, mais ils repondent a des questions differentes. Le retesting verifie qu'un bug precis est corrige en reexecutant le cas exact qui echouait. Le regression testing verifie que le fix n'a rien casse d'autre en reexecutant la suite environnante.
| Aspect | Regression Testing | Retesting |
|---|---|---|
| Declencheur | Tout changement, fix, refactor ou release | Un defaut tout juste corrige |
| Portee | Large, couvre les features deja fonctionnelles | Etroite, seulement le cas en echec |
| Objectif | Detecter des defauts nouveaux non intentionnels | Confirmer qu'un defaut connu est resolu |
| Automatisation | Presque toujours automatise et repete | Souvent manuel, une fois par fix |
Quand executer les regression tests
- A chaque pull request. Un changement ne merge pas tant que la suite ne passe pas.
- A chaque commit sur main. Attrape les problemes d'integration des changements concurrents.
- Apres les fixes et refactors. Les moments au plus fort risque de regression.
- Avant chaque release. Une passe complete contre le release candidate.
- Selon un planning. Les verifications couteuses comme le browser et la performance tournent la nuit.
Strategies de selection des tests
A mesure que le produit grandit, tout relancer a chaque changement devient lent. Trois strategies equilibrent couverture et vitesse :
- Retest all. Executer toute la suite. Le plus sur tant qu'elle reste rapide.
- Regression selective. N'executer que les tests du code change et de ses dependants, via coverage ou test impact analysis.
- Regression priorisee. Ordonner les tests pour que les plus risques tournent d'abord et donnent un feedback rapide.
Beaucoup d'equipes combinent : un sous ensemble selectif a chaque pull request et une passe complete la nuit et avant le release.
Manuel vs automatise
Le regression testing est repetitif par nature, ce qui en fait le meilleur candidat a l'automatisation dans tout le processus de test. Lancer des centaines de verifications a la main a chaque changement est lent et sujet aux erreurs, donc la regression automatisee est la norme pour les verifications fonctionnelles, d'integration, visuelles et de performance. La regression manuelle garde sa place pour le travail exploratoire et les features neuves sans automatisation stable. La regle : automatisez toute verification qui se repete et reservez l'attention humaine a ce qui exige un vrai jugement.
Regression suites en CI/CD
Le regression testing moderne vit dans le pipeline CI/CD. Lors d'un push, le pipeline construit l'application et lance la suite automatiquement ; un echec bloque le merge ou le deploy. Cela transforme la regression en un gate continu et inevitable. Pour rester efficace, la suite doit etre assez rapide pour que les developpeurs attendent, assez deterministe pour qu'un rouge signale un vrai probleme, et parallelisee pour que de grandes suites finissent en minutes.
Regression de performance
La regression fonctionnelle confirme des reponses correctes, mais ne dit rien sur la vitesse. Un changement peut laisser chaque test fonctionnel au vert tout en doublant le temps de reponse. La regression de performance comble cet ecart en relancant un load test contre chaque build et en le comparant a une baseline.
En pratique vous prenez le meme script que pour le load testing et vous le lancez a charge identique contre la baseline et le nouveau build. Des outils comme k6 permettent des thresholds tels que http_req_duration: ['p(95)<800'], si bien qu'un threshold viole fixe le code de sortie et CI attrape la regression automatiquement. Lancer la meme verification depuis plusieurs regions contre un vrai edge CDN, comme le fait LoadFocus, revele aussi les regressions dans les chemins geo distribues. Combinee a des moniteurs d'API planifies, la meme idee s'etend jusqu'en production.
Bonnes pratiques et defis
- Chaque bug devient un test. Le fix et un test qui reproduit le defaut atterrissent dans le meme changement.
- Combattez les tests flaky. Un test qui echoue au hasard entraine l'equipe a ignorer les echecs.
- Gardez la suite rapide. Parallelisez et utilisez des runs selectifs sur les pull requests.
- Elaguez le suite bloat. Supprimez les tests redondants et obsoletes.
- Incluez la performance. Ajoutez des assertions basees sur la charge dans CI.
Les principaux defis sont les suites lentes et flaky, le cout de maintenance et la tentation de sauter la regression sous la pression des delais, justement quand elle compte le plus.
FAQ sur le Regression Testing
Quel est l'objectif principal du regression testing ?
Confirmer que les changements recents n'ont pas casse une fonctionnalite existante qui marchait, et detecter les effets de bord non intentionnels des fixes, features et mises a jour avant qu'ils n'atteignent les utilisateurs.
Quelle est la difference entre regression testing et retesting ?
Le retesting reexecute le cas en echec pour confirmer un fix. Le regression testing reexecute la suite plus large pour confirmer que le fix n'a rien casse d'autre. Les bonnes equipes font les deux.
A quelle frequence les regression tests doivent-ils tourner ?
Idealement a chaque pull request et chaque commit sur main via un pipeline CI/CD, plus une passe complete avant chaque release. Les verifications couteuses sont souvent planifiees la nuit.
Le regression testing peut-il etre entierement automatise ?
La regression fonctionnelle, d'integration, visuelle et de performance est presque toujours automatisee. La regression manuelle reste utile pour les verifications exploratoires et les features neuves sans couverture automatisee stable.
Qu'est-ce que la regression de performance ?
Elle relance un load test contre chaque nouveau build et compare latency, throughput et error rate a une baseline. Si la performance se degrade au dela d'un seuil, le build echoue.
Pourquoi les regression tests deviennent-ils flaky, et pourquoi est-ce important ?
L'instabilite vient surtout des suppositions de timing, des donnees de test partagees et des services externes instables. C'est important car un test qui echoue au hasard erode la confiance dans toute la suite.
Termes associés
Outils LoadFocus connexes
Mettez ce concept en pratique avec LoadFocus, la plateforme même qui propulse tout ce que vous venez de lire.