S1 · Service
Reprendre une application .NET que plus personne n’ose toucher
Elle tourne, elle est indispensable, et chaque modification fait peur. Je reprends l’existant, je le documente, je le migre vers .NET 10 et je le remets en état, sans arrêter le service.
- Livrables
- Audit
- Migration vers .NET 10
- Refactorisation progressive
- Tests
- Documentation
Les situations que je reprends
Une application métier a rarement un problème unique. Elle a une histoire : plusieurs développeurs, des urgences, des raccourcis devenus permanents. Les situations qui arrivent le plus souvent sur mon bureau se ressemblent.
Le développeur est parti
Il connaissait tout, il n’a rien écrit, et depuis son départ personne n’ose déployer. Les premières semaines consistent à reconstruire ce qu’il avait dans la tête : environnements, accès, dépendances, procédure de mise en production. Puis à sécuriser, avant de corriger quoi que ce soit.
Le framework n’est plus supporté
.NET Framework 4.x, .NET Core 3.1, .NET 6, et bientôt .NET 8 et 9 : Microsoft arrête le support de ses versions selon un calendrier public. Une application sur une version arrêtée ne reçoit plus de correctif de sécurité, et les bibliothèques qu’elle utilise cessent une à une d’être mises à jour. La migration vers .NET 10, la version supportée jusqu’en 2028, se fait par étapes et sans interruption quand elle est préparée.
Chaque livraison casse quelque chose
Aucun test automatisé, des modules qui se connaissent trop bien, et une équipe qui a fini par ne plus toucher qu’aux écrans. Le remède n’est pas de tout réécrire : c’est de poser un filet de tests autour des parties qui comptent, puis de découper, module par module, en gardant le système en ligne entre chaque étape.
Plus personne ne comprend le code
Des règles métier enfouies dans des procédures stockées, des noms de variables d’une autre époque, une base de données que tout le monde contourne. Je lis, je documente, je pose des questions au métier, et je remets les règles là où on peut les relire : dans le code, nommées, testées.
Comment je reprends sans arrêter le service
- Audit en cinq jours. Ce qui tourne, où, comment ça se déploie, ce qui dépend de quoi, ce qui est risqué. Le livrable est un document écrit, avec des priorités et des ordres de grandeur. Vous pouvez le donner à quelqu’un d’autre : il ne vous engage à rien.
- Filet de tests avant tout changement. Sur les parcours qui font tourner votre activité : facturation, import, calcul métier. Pas de couverture à 100 %, une couverture de ce qui coûte cher quand ça casse.
- Migration progressive plutôt que réécriture. L’ancien et le nouveau cohabitent, le trafic bascule morceau par morceau. Sur une application ASP.NET, les adaptateurs fournis par Microsoft permettent de partager la session entre les deux pendant la transition. Vos utilisateurs ne voient rien.
- Documentation et transfert. Chaque décision est écrite au moment où elle est prise. À la fin, votre équipe ou votre prochain prestataire sait où tout se trouve.
Migration .NET Framework vers .NET 10 : ce qui change vraiment
La plupart du code C# passe sans modification. Ce qui demande du travail, ce sont les couches qui n’ont pas d’équivalent direct : les pages WebForms, les services WCF, certaines dépendances Windows, Entity Framework 6. Chacune a une voie de sortie connue, et aucune n’oblige à repartir de zéro.
- WebForms : pas de portage automatique. Migration écran par écran vers Razor Pages ou Blazor, en commençant par les moins utilisés, pendant que l’ancien site continue de servir le reste.
- WCF : selon l’usage, CoreWCF pour garder les contrats existants, ou gRPC et REST quand les clients peuvent évoluer.
- Entity Framework 6 : passage à EF Core avec une attention particulière aux requêtes qui reposaient sur des comportements implicites.
- Bibliothèques Windows : le pack de compatibilité couvre la majorité des cas ; le reste se remplace ou s’isole.
L’outil d’assistance à la migration de Microsoft fait l’inventaire et une partie du travail mécanique. Il ne décide pas de l’ordre, ne pose pas les tests et ne connaît pas votre métier. C’est là que se joue la différence entre une migration qui dure trois mois et une qui n’en finit pas.
Ce que je ne fais pas
Réécrire de zéro « parce que ce serait plus propre ». C’est la proposition qu’on vous fera le plus souvent, et c’est presque toujours la plus mauvaise : plus chère, plus longue, et le nouveau système hérite des mêmes ambiguïtés métier que l’ancien, dans un langage plus récent. Je la recommande uniquement quand le code existant ne peut plus être ni testé ni compris à un coût raisonnable, et je l’écris noir sur blanc dans l’audit quand c’est le cas.
Maintenance après la reprise
Une fois l’application remise en état, la question devient : qui la fait vivre ? Je propose une maintenance à la journée ou au forfait mensuel, avec un délai de réponse écrit, pour les corrections, les petites évolutions et les montées de version. Sans engagement de durée : le jour où votre équipe peut reprendre, elle reprend.
Questions fréquentes
- Mon application est en .NET Framework 4.x. Est-ce urgent ?
- Le Framework 4.8 reste supporté avec Windows, mais plus rien n’y est développé : les bibliothèques modernes ne le ciblent plus, les développeurs qui le connaissent se raréfient, et chaque nouvelle fonctionnalité coûte plus cher que sur .NET 10. Ce n’est pas une panne, c’est un coût qui monte chaque année. L’audit dit s’il faut migrer maintenant ou dans deux ans.
- Nous sommes sur .NET 6, 8 ou 9. Faut-il s’inquiéter ?
- .NET 6 n’est plus supporté depuis novembre 2024. .NET 8 et .NET 9 perdent leur support le 10 novembre 2026, le même jour. La cible est .NET 10, supporté jusqu’en novembre 2028. Une montée de version entre ces versions récentes est en général courte, quelques jours ; c’est le moment de la faire, pas après la première faille non corrigée.
- Le développeur précédent n’a laissé aucune documentation. Vous pouvez quand même reprendre ?
- Oui, c’est le cas le plus fréquent. La première semaine sert à cartographier : ce qui tourne, où, avec quels accès, quelles dépendances, quels points d’entrée. Cette carte devient la première documentation. Rien n’est modifié avant qu’elle existe.
- Est-ce que vous allez me dire qu’il faut tout refaire ?
- Presque jamais. Une réécriture complète est la solution la plus chère, la plus longue et la plus risquée, et elle reproduit souvent les mêmes bugs dans un langage plus récent. Je la recommande dans un seul cas : quand le code existant ne peut plus être testé ni compris à un coût raisonnable. Sinon, on reprend et on modernise par étapes.
- Travaillez-vous à distance ?
- Oui, avec des entreprises de toute la France. Sur site en Nouvelle-Aquitaine quand le projet le demande, ponctuellement ailleurs.
- Je n’ai pas de cahier des charges. C’est un problème ?
- Non. La première étape d’une mission consiste précisément à comprendre le besoin et à l’écrire. Décrivez le problème avec vos mots, le reste est mon travail.
- Qui possède le code ?
- Vous. Le code, la documentation et les accès vous sont remis au fil de la mission, pas à la fin. Vous pouvez confier la suite à quelqu’un d’autre à tout moment.
- Comment facturez-vous ?
- Au forfait quand le périmètre est clair, à la journée quand il ne l’est pas encore. Dans les deux cas, un devis écrit avant de commencer, et pas de surprise après.