Net-Base Magazine

14.07.2026

Refactoriser le code hérité dans Delphi : réduire les risques, améliorer la maintenabilité, garantir l’exploitation

Les applications Delphi développées au fil du temps sont souvent critiques pour l’activité — mais chaque petite modification devient plus coûteuse. Cet article montre comment refactoriser le code legacy dans Delphi sans mettre en péril l’exploitation : avec un inventaire clair, des mesures priorisées, des tests, des données et...

14.07.2026

Du thème du magazine à la pratique des projets

Pages de services et techniques pertinentes pour l'article

Video-Botschaft

Refactoriser le code hérité dans Delphi : réduire les risques, améliorer la maintenabilité, garantir l’exploitation

Kurze Einordnung, warum kontrolliertes Refactoring bei geschäftskritischen Delphi-Systemen Betriebssicherheit und Änderungsfähigkeit verbessert, ohne einen riskanten Rewrite zu starten.

Video mit KI erstellt

Transkript anzeigen

Hallo. Kurz ein Thema, das im Betrieb schnell teuer wird.

Der Beitrag heißt: „Legacy-Code in Delphi refactoren: Risiken senken, Wartbarkeit erhöhen, Betrieb sichern“. Wenn jede kleine Änderung ein potenzieller Ausfall ist, werden Releases langsam, und niemand fasst das System gern an.

Legacy heißt hier nicht nur „alt“. Es heißt: schwer erklärbar, stark verknüpft, und dadurch riskant.

Refactoren bedeutet: umbauen, ohne das Verhalten zu ändern. Also kein Rewrite, sondern ein kontrollierter Umbau am fahrenden System.

Wichtig für Admins und IT-Leitung ist die Reihenfolge: erst Bestandsaufnahme. Was ist geschäftskritisch?

Wo hängen Datenbank, Schnittstellen und Jobs dran? Dann kleine, priorisierte Schritte, abgesichert durch Tests und sauberes Logging, damit Fehler auffallen, bevor Nutzer sie melden.

Wenn Sie dazu Fragen haben, schauen wir es gern gemeinsam an.

Quiconque exploite une application Delphi-critique pour l’entreprise connaît le dilemme : elle fonctionne de manière stable, couvre les processus clés et est profondément intégrée aux bases de données, aux interfaces et aux flux de travail. Parallèlement, l’effort de modification et le risque augmentent à chaque release, car au fil des années des compromis, des cas particuliers et des dépendances se sont accumulés. C’est précisément là que s’inscrit la refactorisation du Legacy-Code en Delphi : pas un projet de « Rewrite », mais une transformation contrôlée sur un système en production – avec des effets mesurables sur la maintenabilité, la sûreté des releases et l’exploitation.

En pratique, le refactoring échoue rarement à cause de Delphi lui‑même, mais faute de transparence : qu’est‑ce qui est critique fonctionnellement ? Où se trouvent les dettes techniques (c’est‑à‑dire des défauts structurels qui rendent les modifications ultérieures plus coûteuses) ? Quelles parties peuvent être modifiées pendant les fenêtres de maintenance et lesquelles non ? Et comment éviter que le « nettoyage » n’introduise de nouveaux bugs ou problèmes de performance en production ? Cet article décrit une approche pragmatique qui implique la direction IT et l’administration : de l’inventaire aux questions d’architecture et de données, jusqu’aux tests, au processus de release et aux questions de sécurité.

Que signifie vraiment « Legacy » dans les projets Delphi ?

Le terme « Legacy » est souvent assimilé à « ancien ». Dans le contexte d’entreprise, le legacy code désigne toutefois avant tout du code dont le risque de modification est élevé et dont le comportement n’est que partiellement explicable. Il peut s’agir d’une application VCL (Visual Component Library, interface de bureau classique Windows), mais aussi d’un service, d’un scheduler ou d’un système client‑serveur.

Les caractéristiques typiques du legacy dans les environnements Delphi sont :

  • Couplage fort : l’interface utilisateur (UI), l’accès aux données et la logique métier sont mêlés ; les modifications entraînent des effets de bord.
  • Règles implicites : la logique métier est enfermée dans des events, des variables globales ou des triggers de base de données, et non dans des modules clairement définis.
  • Accès aux données obsolètes : p. ex. BDE (Borland Database Engine) ou composants propriétaires ; absence de stratégies de pooling/timeout.
  • Gestion des erreurs non uniforme : les exceptions sont étouffées, les messages n’arrivent pas dans le logging central.
  • Fragilité des builds et des releases : dépendances, problèmes de chemins, réglages de compilateur divergents, retouches manuelles.
  • Absence de tests : le savoir est dans les têtes ou dans le « parcours de clics » des utilisateurs expérimentés.

Important : le legacy code n’est pas automatiquement « mauvais ». Il résulte souvent de contraintes de temps, de cycles technologiques et de décisions pragmatiques. Le refactoring devient alors un investissement dans la maîtrisabilité – du point de vue de l’exploitation, de la sécurité, de la conformité et de la vitesse de changement.

Refactoring vs. Rewrite : ce qui change pour l’exploitation et le risque

Un Rewrite (réécriture complète) promet un départ propre, mais entraîne souvent de longues phases en parallèle, de nouvelles classes de bugs et des risques de migration élevés. Le refactoring, en revanche, vise une amélioration incrémentale tout en conservant la capacité de livraison continue. Pour l’exploitation IT et les métiers, c’est souvent la différence déterminante : le système reste productif et les améliorations sont livrées en lots maîtrisables.

Délimitation pratique :

  • Refactoring : on améliore la structure, le comportement externe doit rester inchangé. Focus : maintenabilité, testabilité, stabilité, marges de performance.
  • Restructuration/modernisation : modifications comportementales ciblées supplémentaires, p. ex. nouvelles interfaces, nouvelle base de données, nouveaux objectifs de plateforme.
  • Réécriture : nouvelle base de code, généralement nouvelle UI/architecture ; nécessite la migration des données, des processus, des interfaces — souvent « Big Bang » ou longue phase de transition.

Pour les décideurs, ce point est central : le refactoring n’est pas une fin en soi, mais un levier pour réduire les risques de changement. Cela a une pertinence opérationnelle directe lorsque l’application affecte des processus 24/7, des opérations proches de la production ou des portails orientés client.

Refactoriser le code hérité dans Delphi : commencer par un état des lieux fiable

La première étape n’est pas un outil, mais une vision partagée des risques et des objectifs. Sans cette vision, le refactoring tombe rapidement dans un « on range un peu ici » — et c’est précisément difficile à justifier en exploitation.

1) Évaluer la criticité et la réalité opérationnelle

Recensez les parties réellement critiques pour l’activité : clôture quotidienne, interfaces vers ERP/DMS/CRM, collecte de données de production, facturation, gestion des droits. Complétez par des paramètres d’exploitation : fenêtres de maintenance, possibilités de rollback, supervision, volume de données, exigences de latence.

Questions utiles :

  • Quelles fonctions doivent continuer de fonctionner en cas de pannes partielles (capacité de dégradation) ?
  • Où se situent les « Single Points of Failure » (p. ex. un ordonnanceur central) ?
  • Quelles données sont sensibles au regard des régulations ou de la protection des données ?
  • Quelles intégrations sont les plus sujettes aux incidents (import de fichiers, TCP/IP, SOAP/REST, Messaging) ?

2) Rendre la dette technique visible — pas seulement le style de code

Dans les projets Delphi, la dette technique est souvent architecturale : états globaux, dépendances cycliques entre unités, accès aux données difficiles à tester, ou événements UI servant d’« orchestration ». Les métriques (p. ex. complexité, taille des unités, graphe de dépendances) aident, mais ne sont utiles que si elles sont traduites en mesures concrètes.

Un schéma opérationnel pratique est une analyse en 2×2 :

  • Fréquemment modifié & risqué : priorité maximale pour la refactorisation.
  • Fréquemment modifié & peu risqué : améliorer les processus/tests, mesures structurelles mineures.
  • Rarement modifié & risqué : stabilisation/sécurisation (tests, logging), pas nécessairement « embellir ».
  • Rarement modifié & peu risqué : laisser délibérément en l’état.

3) Inventorier les dépendances : données, interfaces, environnement d’exécution

Pour l’administration et les responsables de projet, il est essentiel de repérer ce qui dépend du code : backends de base de données, ODBC/OLE DB, partages de fichiers, chaînes d’impression et de génération de PDF, COM/ActiveX, automatisation Office, Windows-services, tâches planifiées, certificats, configurations de proxy.

C’est souvent à ce niveau que naissent des coûts indirects de refactoring : une modification « mineure » peut imposer une nouvelle logique d’installation, de nouveaux droits ou de nouvelles règles de pare-feu. Ces effets secondaires doivent être documentés tôt dans une cartographie technique.

Zones problématiques typiques dans le legacy Delphi et comment les traiter de manière ciblée

Le refactoring devient maîtrisable s’il cible des motifs récurrents. Les domaines suivants sont, en pratique, souvent les principaux facteurs de risque et de coût.

Forms monolithiques : lorsque l’UI maintient le système

De nombreuses applications VCL se sont historiquement développées de manière « form-driven » : le formulaire charge les données, vérifie les règles, écrit en retour, déclenche des rapports et met à jour d’autres écrans. Cela fonctionne – jusqu’à ce que plusieurs équipes ou plusieurs années d’historique de modifications s’y ajoutent.

Une approche éprouvée en exploitation consiste à alléger progressivement l’interface utilisateur :

  • Introduire des services proches des cas d’utilisation : opérations métier exposées sous forme de méthodes clairement nommées plutôt que de chaînes d’événements.
  • Encapsuler l’accès aux données : requêtes/transactions dans des couches d’accès aux données, pas dans les événements de l’UI.
  • Utiliser des DTOs/modèles (objets de données simples) pour séparer l’état du formulaire et l’état de la base de données.

L’objectif n’est pas la « pureté des patterns », mais une meilleure testabilité et moins d’effets de bord : une modification de la validation ou des calculs ne doit pas compromettre la chaîne complète d’interactions de l’UI.

Moderniser l’accès aux données : remplacer BDE, utiliser FireDAC de façon cohérente

Si BDE ou des composants de données hétérogènes sont encore utilisés, le refactoring est souvent en même temps une modernisation du risque opérationnel. BDE n’est pas seulement ancien, il est souvent difficile à exploiter : pilotes, configuration, dépendances 32 bits et absence de mécanismes de sécurité modernes.

BDE-remplacement avec connexion native (la bibliothèque d’accès aux données moderne de Delphi) est, dans de nombreux scénarios, une norme utile si elle est déployée de manière cohérente : paramètres de connexion unifiés, limites de transaction claires, timeouts, pooling et gestion propre des exceptions. Mesures de refactoring typiques dans ce domaine :

  • Unifier la gestion des connexions : factory/fournisseur central au lieu de « chaque formulaire a sa connexion ».
  • Rendre les transactions explicites : Begin/Commit/Rollback comme partie du cas d’utilisation, pas cachés dans l’UI.
  • Utiliser systématiquement des requêtes paramétrées pour réduire les risques d’injection SQL et les problèmes liés aux caractères spéciaux.
  • Définir timeouts et tentatives de reprise (retries), afin qu’un blocage réseau ne conduise pas à des écrans « gelés ».

Pour l’exploitation IT, il est important que les nouvelles stratégies de connexion soient alignées avec l’exploitation de la base de données (p. ex. connexions maximales, tailles de pool, gestion des deadlocks, fenêtres de maintenance pour les modifications de schéma).

Dépendances de Units et « états globaux » comme cause principale des effets de bord

Delphi-Units avec de larges sections d’interface, de nombreuses entrées Uses et des singletons globaux sont des accélérateurs typiques des effets de bord. Une petite modification dans une Unit entraîne des reconstructions en cascade ou casse des séquences d’initialisation cachées.

Mesures pragmatiques qui ont fait leurs preuves dans les projets legacy :

  • Définir les directions de dépendance : p. ex. UI → Application Services → Domain/Logik → Data Access → Infrastruktur.
  • Centraliser l’initialisation : séquence de démarrage claire au lieu de Unit-Initialization comme pilotage caché.
  • Réduire les variables globales : conserver l’état dans des objets, clarifier durée de vie et ownership.

Cela contribue à la stabilité : si le démarrage est déterministe, les incidents après des mises à jour ou des modifications de configuration sont plus faciles à maîtriser.

Threading et synchronisation : stabilité avant « optimisation des performances »

De nombreuses applications legacy deviennent au fil du temps concurrentes : imports en arrière-plan, polling, communication avec des appareils, traitement parallèle. Sans règles claires, apparaissent des deadlocks, des blocages de l’UI ou des race conditions (conflits d’accès dus à des exécutions simultanées).

Pour l’exploitation et le support, c’est un problème, car cela génère souvent des erreurs « non reproductibles ». Le refactoring devrait ici viser des standards :

  • Responsabilité claire pour les Threads/Tasks et arrêt défini (pour éviter que les mises à jour/arrêts ne restent bloqués).
  • Journalisation par worker avec ID de corrélation, afin de pouvoir reconstituer les enchaînements.
  • Minimiser la synchronisation et encapsuler strictement les accès UI (règle du thread UI).

Si vous souhaitez approfondir, il est pertinent d’insérer un lien interne vers un article sur des modèles robustes avec TThread et Synchronize, car ce sujet constitue souvent le goulot d’étranglement de la stabilité lors du refactoring de systèmes hérités.

Objectif d’architecture : Layering comme outil, pas comme dogme

Une vision cible praticable pour de nombreuses solutions Delphi existantes est une structure claire en couches (souvent comprise comme « trois couches ») : présentation (UI), logique applicative (Use Cases/Services) et accès aux données (Repositories/DAO). L’angle opérationnel est crucial : le layering facilite les tests, les mises à jour et l’extraction ultérieure d’interfaces.

Avantages concrets pour l’entreprise :

  • Ajouter des interfaces (p. ex. API REST), sans devoir dupliquer la logique UI.
  • Modernisation partielle : un changement de base de données ou une migration BDE-Ablosung mit nativer Anbindung peut être concentré dans une seule couche.
  • Maintenance : les erreurs peuvent être circonscrites plus rapidement, car les responsabilités dans le code sont plus nettes.

Une vision cible réaliste tient compte du fait que les systèmes hérités sont rarement « purs ». L’essentiel est que la direction soit correcte et que les nouveaux changements n’affaiblissent pas à nouveau la structure.

Stratégie de tests pour le refactoring Delphi : comment geler le comportement avant de reconstruire

Refactorer sans tests est un risque dans des systèmes critiques pour l’activité. En parallèle, une automatisation complète des tests n’est souvent pas réaliste à court terme. L’idée centrale est donc : tester de manière ciblée là où le risque et la pression de changement sont élevés.

Golden Master et régression : pratique pour les systèmes hérités

Un « Golden Master » est une référence du comportement actuel : les entrées et les sorties attendues sont consignées pour détecter les écarts après modification. Cela convient aux rapports, calculs, exports, pipelines d’import ou réponses d’API.

Important pour l’exploitation : les tests Golden Master réduisent le risque que des effets secondaires n’apparaissent qu’après le déploiement — et ils facilitent les décisions de hotfix, car l’écart est mesurable concrètement.

Tests d’intégration autour de la base de données et des interfaces

Beaucoup d’erreurs n’apparaissent pas dans la logique métier pure, mais aux frontières systèmes : transactions, encodage (p. ex. Unicode), horodatages, séparateur décimal, droits, perturbations réseau. Les tests d’intégration devraient au minimum couvrir les points suivants :

  • Comportement des transactions en cas d’erreur (rollback, mises à jour partielles, verrous).
  • Encodage lors des import/exports (CSV, XML, JSON), en particulier pour les caractères spéciaux.
  • Profils de performance pour des volumes de données typiques, afin de détecter des dégradations progressives.

Les cas de test manuels restent nécessaires – mais structurés

Là où l’automatisation fait défaut (pour l’instant), des plans de test manuels structurés et liés aux releases aident. Du point de vue de l’administration, il est pertinent que les cas de test incluent aussi des aspects opérationnels : chemin d’installation/mise à jour, droits, configuration, logging/monitoring, impression/PDF, chemins réseau.

Données et migration : le refactoring se décide souvent en fonction du schéma

Dans les systèmes Delphi les structures de base de données se sont développées sur plusieurs années. Le refactoring entre souvent en conflit avec des tables « historiques », des champs dupliqués ou des colonnes surchargées fonctionnellement. Le point critique : les modifications de schéma impactent l’exploitation, le backup/restore, la réplication, le reporting et les interfaces.

Rendre les modifications de schéma planifiables

Une approche éprouvée consiste en des migrations de base de données clairement versionnées : chaque modification du schéma est documentée comme une étape reproductible, y compris la stratégie de rollback. Même si les migrations sont initialement exécutées manuellement, la discipline est essentielle : pas de « on modifie rapidement en production ».

Pour assurer la sécurité des mises en production, définissez :

  • Besoin d’interruption : migration en ligne possible ou fenêtre de maintenance nécessaire ?
  • Stratégie de repli : compatibilité des données en cas de retour en arrière, sauvegardes avant la migration, plan de redémarrage.
  • Phase de compatibilité : l’application peut pendant une période transitoire fonctionner avec l’ancien et le nouveau schéma (p. ex. colonnes supplémentaires, vues).

Ne pas sous-estimer la qualité des données et le nettoyage

Un refactoring révèle souvent des problèmes de données qui « flottaient » auparavant : valeurs invalides, incohérences, clés étrangères manquantes. Il est important ici de décider sur le plan fonctionnel ce qui est correct. Techniquement, l’application devrait dorénavant valider plus strictement et journaliser les erreurs de façon traçable, plutôt que de les corriger silencieusement.

Adapter des interfaces sans déstabiliser le système hérité

De nombreuses entreprises refactorisent les bases Delphi parce que de nouvelles exigences imposent des intégrations : portails, BI, processus mobiles, connexions partenaires. L’erreur la plus fréquente est d’alimenter les interfaces directement depuis la logique UI ou « quelque part dans le code ». Il est préférable de positionner les interfaces sur une couche de services consolidée, qui est créée dès le refactoring.

Lorsqu’une API REST (Representational State Transfer, API Web courante via HTTP/JSON) est ajoutée, les points suivants sont particulièrement importants du point de vue opérationnel et sécurité :

  • AuthN/AuthZ : séparer clairement authentification et autorisation ; p. ex. tokens, SAML 2.0 dans le cadre d’un SSO d’entreprise, modèles de rôles clairs.
  • Limites de débit (rate limits) et timeouts : pour empêcher les appelants externes de bloquer le backend.
  • Gestion des versions : définir des versions d’API pour ne pas casser les clients à chaque modification.
  • Observability : logs structurés, IDs de corrélation, métriques (taux d’erreur, latences).

Un lien interne vers un article approfondi sur l’ajout d’une API REST pour logiciel existant s’articulerait bien ici, car les interfaces dans les projets de modernisation sont rarement un « Add-on », mais constituent un produit d’exploitation à part entière.

Sécurité et conformité : le refactoring comme opportunité de combler des lacunes de sécurité

Legacy signifie souvent que les hypothèses de sécurité sont plus anciennes que le paysage de menaces actuel. Lors du refactoring, vous devriez au minimum vérifier si le système doit être mis à niveau aux niveaux suivants :

  • Identifiants et secrets : ne pas stocker de mots de passe dans des fichiers INI ou dans le code ; stockage sécurisé et rotation.
  • Chiffrement des transports : TLS pour les interfaces, gestion propre des certificats.
  • Principe du moindre privilège : utilisateurs de base de données et permissions sur les fichiers réduits au minimum ; rôles séparés pour lecture/écriture/administration.
  • Auditabilité : modifications traçables des données critiques (Qui ? Quoi ? Quand ?), sans transformer les données de journalisation en problème de protection des données.

Pour la direction informatique, il s’agit d’un bénéfice métier central : le Refactoring ne réduit pas seulement les coûts de maintenance, il peut aussi diminuer les risques de sécurité et d’audit lorsqu’il est mis en œuvre de manière structurée.

Processus de release et d’exploitation : sans une pipeline propre, le Refactoring devient coûteux

Beaucoup de Delphi-projets legacy souffrent moins du code que du processus : les builds diffèrent selon les postes de travail, les releases sont manuelles, les erreurs ne peuvent pas être retraçées de manière fiable. Le Refactoring devrait donc toujours aussi stabiliser le processus de livraison.

Reproductibilité des builds et gestion de configuration

Du point de vue de l’administration et des audits, il est important qu’un release soit reproductible : mêmes sources, mêmes versions de compilateur/bibliothèque, mêmes dépendances. Cela inclut des configurations clairement séparées pour développement, test et production (p. ex. points de terminaison de base de données, niveau de logging, Feature-Flags).

Logging, monitoring et capacité de support

« Il s’est passé quelque chose » ne suffit pas en exploitation. Le Refactoring est une bonne occasion d’introduire une journalisation uniforme : entrées de log structurées, codes d’erreur univoques, contexte (utilisateur, locataire, commande, interface) et séparation claire entre erreurs techniques et validations métier.

Pour les processus proches du 24/7, sont en outre pertinents :

  • Contrôles d’état (p. ex. connexion à la base de données, congestion de la file, consommation de mémoire),
  • Alerte selon le niveau de gravité,
  • Runbooks pour le redémarrage et les incidents typiques.

Une feuille de route pratique de Refactoring en 6 étapes

Pour éviter que le Refactoring ne s’enlise dans les opérations quotidiennes, un plan clair compatible avec les cycles de release aide. Une démarche éprouvée :

  1. Carte des risques et des changements à établir (modules, interfaces, données, exploitation).
  2. Mettre en place un filet de sécurité : standard de logging, premiers tests de régression / Golden-Master pour les parcours critiques.
  3. Tracer des lignes de séparation architecturale : couche service et encapsulation de l’accès aux données comme « nouvelle normalité » pour les changements.
  4. Refactoriser les hotspots : les modules qui sont souvent modifiés et provoquent des indisponibilités (utiliser la statistique d’erreurs et l’historique des changements).
  5. Consolider l’accès aux données : FireDAC/transactions/timeouts uniformiser, mesurer les performances, vérifier les deadlocks.
  6. Ouvrir des voies de modernisation : interfaces (REST), sujets plateforme (Unicode/64-Bit), modernisation progressive de l’UI, là où c’est pertinent.

L’essentiel est l’ordre : d’abord transparence et sécurisation, puis mesures structurelles, ensuite transformations majeures. Ainsi la solution reste livrable et stable en exploitation.

Quand le Refactoring ne suffit pas : signaux pour une modernisation plus importante

Il existe des situations où un simple Refactoring ne résout pas le goulot d’étranglement. Signaux typiques :

  • Impasses technologiques : pilotes de base de données plus supportés, composants non patchables, dépendances strictes en 32 bits.
  • L’architecture n’est plus adaptée : p. ex. l’application doit être exploitée comme un paysage de services, mais tout est centré sur l’interface utilisateur.
  • Mise à l’échelle et disponibilité : les exigences de multi-locataire, de haute disponibilité ou d’accès distant ne peuvent être satisfaites qu’avec des changements structurels.
  • Exigences de sécurité : authentification/SSO, audit, chiffrement ne peuvent être ajoutés a posteriori sans une refonte importante.

Même dans ce cas, le refactoring reste souvent une composante pertinente : il rétablit de l’ordre afin d’isoler des parties de manière ciblée, plutôt que de remplacer l’ensemble du système d’un seul tenant.

Conclusion : le refactoring comme responsabilité technique en exploitation courante

Refactorer le code hérité dans Delphi est avant tout une question de priorisation, de gestion des risques et de proximité opérationnelle. Si vous commencez par un inventaire fiable, sécurisez les points critiques, consolidez l’accès aux données et les lignes de séparation architecturale, et ciblez les tests ainsi que la journalisation sur les chemins critiques, ce qui n’était qu’un nettoyage devient un projet de modernisation pilotable. Le résultat n’est pas seulement un code plus lisible, mais un système qui se gère de manière plus fiable, se modifie en toute sécurité et s’intègre plus facilement.

Si vous souhaitez stabiliser ou moderniser de manière structurée votre solution existante Delphi, nous clarifions volontiers ensemble la situation initiale, les risques et une feuille de route réaliste pour le refactoring :

Dans un contexte métier, la Delphi modernisation et le Delphi refactoring jouent également un rôle important lorsque les intégrations, les flux de données et l’évolution doivent bien s’articuler.

Discuter d’un projet ou d’une initiative de modernisation avec Net-Base.

Étape suivante

Lorsque le sujet devient un projet réel, l'architecture, l'existant et l'exploitation doivent être examinés ensemble dès le départ.

Nous n'intervenons pas seulement sur des questions ponctuelles, mais aussi lorsque des fragments de code source, des problématiques liées aux systèmes legacy ou des concepts de portail doivent se transformer en un projet d'entreprise robuste.

  • L'état des lieux, l'état cible et les risques techniques sont évalués conjointement.
  • REST, l’accès aux données, les portails et le déploiement ne sont pas reportés à des phases ultérieures.
  • Vous identifiez tôt quelle voie est viable économiquement et opérationnellement.

Partager l'article

Partager directement cette publication

LinkedIn, X, XING, Facebook, WhatsApp et e‑mail sont immédiatement disponibles. Pour Instagram, nous préparons directement le lien et le court texte.

Courriel

Instagram s'ouvre dans un nouvel onglet. Le lien et le court texte sont préalablement copiés dans le presse-papiers.