Tests de non-régression d'une migration WinDev : la méthode du golden master inversé
Une application migrée qui s'ouvre, affiche ses écrans et enregistre une commande ne prouve rien. La preuve attendue est ailleurs : la nouvelle application produit les mêmes écritures, les mêmes documents et les mêmes exports que l'application WinDev, bugs compris, sauf décision explicite du métier. Voici la méthode que nous appliquons, et l'erreur que presque tous les pipelines d'IA commettent. Elle s'inscrit dans notre guide complet de la migration WinDev.
Le piège : laisser le LLM écrire les valeurs attendues
Une application WinDev ancienne n'a généralement pas de tests. On génère donc des tests de caractérisation : leur but est de figer le comportement actuel du code, qu'il soit juste ou faux.
Le réflexe consiste à demander au modèle d'écrire ces tests. Il écrit alors aussi les valeurs attendues, à partir de sa lecture du code et des commentaires, jamais de son exécution. Il fige son interprétation. Quand le test échoue sur l'existant, la tentation est de corriger le code pour faire passer le test : vous modifiez une règle en production avant d'avoir migré la première fenêtre.
Notre règle ne souffre aucune exception : aucun test dont le LLM a écrit les valeurs attendues. Hamadi Jabloun l'a formulée le 20 septembre 2026 sur sfeir.dev : « le LLM génère les ENTRÉES. Le code legacy, lui seul, génère les SORTIES »1.
L'inversion : le LLM propose les entrées, WinDev produit les sorties
Le modèle repère bien les frontières à tester : zéro, valeurs négatives, champs vides, seuils, dates de fin de mois, débordements. Il est disqualifié pour dire ce qui doit en sortir. Cette autorité appartient à l'application qui tourne en production.
Le circuit se déroule en quatre temps :
- le LLM propose des jeux d'entrées qui maximisent la couverture des branches, à partir du code et des scénarios Gherkin issus de l'extraction des règles métier ;
- ces entrées sont rejouées sur l'application WinDev, dans un environnement de test ;
- les sorties observées, y compris les erreurs, sont enregistrées : c'est le golden master ;
- la nouvelle application est jugée contre ce golden master, et contre lui seul.
Ce que l'on compare dans une application WinDev
Une fonction WinDev renvoie rarement une simple valeur. Ses effets sont ailleurs : dans les tables, dans les états imprimés, dans les fichiers exportés.
Les écritures en base. Après chaque scénario, on capture l'état des tables concernées : lignes créées, modifiées, supprimées, valeurs calculées. L'étape transitoire où l'application WinDev tourne sur PostgreSQL facilite la comparaison, puisque les deux applications écrivent dans le même moteur (voir HFSQL vers PostgreSQL).
Les états. Factures, bons, étiquettes : on compare les documents produits, par extraction du texte et des montants ou par comparaison visuelle avec une tolérance définie. Un état peut s'ouvrir sans erreur et produire un document différent.
Les exports. Fichiers comptables, EDI, CSV : comparaison octet par octet, après normalisation des éléments variables (horodatages, identifiants techniques).
Rendre le golden master reproductible
Un golden master qui change à chaque exécution ne vaut rien. Il faut neutraliser les sources d'indéterminisme : date et heure courantes, numéros aléatoires, compteurs, appels réseau. On introduit des points de contrôle (horloge paramétrable, numérotation injectée) et on interdit tout autre changement dans la même modification : le commit qui rend l'application testable ne touche à aucune règle.
Mesurer le filet, pas le décor
Un taux de couverture élevé ne dit rien de la qualité des assertions. La mesure qui compte est le score de mutation : on injecte volontairement des erreurs dans le code cible et on vérifie que la suite les détecte, avec des outils comme PIT ou mutmut1. C'est le seul indicateur qui mesure un filet, et c'est ce filet qui conditionne l'effet multiplicateur décrit par DORA.
Aspirer de la vraie donnée
Le meilleur golden master reste le trafic réel : enregistrer, sur une période représentative, les couples entrée et sortie de production. Aucun modèle n'inventera vos cas tordus mieux que vos utilisateurs. Prévoyez au moins une clôture de mois dans la période.
Shadow run et cohabitation
Avant de basculer un module, nous faisons tourner les deux implémentations en parallèle sur le flux réel, ce que l'article de sfeir.dev appelle le shadow traffic1. Seule la réponse de l'application WinDev fait foi ; les divergences sont journalisées et analysées une par une. Chaque divergence est soit un défaut du nouveau code, soit un bug de l'ancien que le métier décide de corriger. Dans ce second cas, la correction est une décision produit, tracée et portée par le métier.
Quand le taux de divergence tombe à zéro sur une période représentative, la bascule derrière un feature flag devient un non-événement. Pendant toute la cohabitation, l'ancien module reste disponible pour un retour arrière : c'est le motif Strangler Fig, module par module, que décrit le même article1.
Les écarts à arbitrer
Le modèle qui écrit le code cible reçoit une consigne explicite : si un cas du golden master lui paraît erroné, il ne le corrige pas, il le signale dans une liste d'écarts à arbitrer. Sans cette consigne, il améliore le comportement en silence et la comparaison perd son sens.
D'autres acteurs du marché appliquent le même principe. Winfall, par exemple, écrit que « chaque procédure migrée reçoit ses tests unitaires C#, dont les valeurs attendues sont capturées sur l'application d'origine »2.
Questions fréquentes
Faut-il une copie de la production pour le golden master ?
Une copie anonymisée et représentative est idéale. Les données de production non anonymisées ne doivent pas circuler hors de l'environnement prévu.
Que faire d'un bug historique découvert ?
Le documenter, le faire arbitrer par le métier, et ne le corriger qu'après la bascule du module, pour garder le référentiel de comparaison intact.
Le shadow run est-il possible sur une application desktop ?
Oui, au niveau des traitements et des écritures : on rejoue les mêmes opérations sur les deux implémentations et on compare les effets.
Combien de cas faut-il dans un golden master ?
Assez pour obtenir un score de mutation satisfaisant sur le module. Le volume compte moins que la couverture des frontières.
Passer à l'action
Le golden master est l'étape 5 de notre méthode en six étapes ; il répond au risque n° 6 de notre liste des risques. Pour la vue d'ensemble, lisez notre guide pour réécrire une application WinDev avec l'IA.
Sources
- Hamadi Jabloun, Du Legacy à l'état de l'art : moderniser avec l'IA sans rejouer le Big Bang — sfeir.dev, 20 septembre 2026.
- Winfall, Migration WinDev vers C# / .NET — winfall.fr.
Construire le golden master de votre application WinDev avant d'écrire la première ligne cible
Échanger avec SFEIRArticles similaires
Migration WinDev : réécrire vos applications PC SOFT avec l'IA, sans big bang
Une migration WinDev se joue sur deux chantiers : retrouver les règles métier enfouies dans vingt ans de fenêtres, puis prouver que la nouvelle application fait la même chose que l'ancienne. Méthode SFEIR en six étapes, stack cible, ordres de grandeur et grille rester, geler ou migrer.
Extraire les règles métier d'une application WinDev avec l'IA : la rétro-documentation spec first
Les règles de gestion d'une application WinDev vivent dans son WLangage et nulle part ailleurs. Comment les extraire avec l'IA : export en mode texte, prompt d'archéologie à cinq sections, double exécution, Gherkin, ADR rétroactifs et validation métier.
HFSQL vers PostgreSQL : migrer les données d'une application WinDev sans perte
Migrer une base HFSQL vers PostgreSQL sans perte : transposer le schéma, déclarer les clés que le code gardait implicites, nettoyer avant de migrer, répéter les migrations à blanc jusqu'à deux rapports de conformité sans écart, faire tourner WinDev sur PostgreSQL, puis basculer.
Migrer WinDev avec la Software Factory 10x : la méthode SFEIR en six étapes, de l'audit à la bascule
Six étapes, un livrable vérifiable au bout de chacune, trois gates tenues par des humains et l'exécution confiée aux agents Claude Code : comment SFEIR mène une migration WinDev sur son SDLC à onze phases, de l'audit du patrimoine à la bascule.