🏠
      • Audit Technique — GRDF.SAT-PRE & SAT-HAB

        adservio-logo Analyse d'Impact de la Séparation SIAS/TICC
        DRAFT | version 6 | 2025-11-15

         


        Adservio Experience


        Analyse d'Impact de la Séparation SIAS/TICC

        Client : GRDF
        Périmètre : Applications SAT-PRE (Supervision) et SAT-HAB (Habilitations)
        Objectif : Évaluation de faisabilité de la séparation SIAS/TICC et recommandations stratégiques
        Date : 2025-11-15
        Version : 6.0 Préparé par : Olivier Vitrac, PhD, HDR | Adservio Innovation Lab | Adservio
        Relecteur : XXXX
        Validateur : XXXX

         


        Sommaire

        Audit Technique — GRDF.SAT-PRE & SAT-HABAnalyse d'Impact de la Séparation SIAS/TICC Sommaire1 | Vue Générale1.1 | Contexte et Objectif1.2 | Résultats Clés — Couplage SIAS/TICC1.2.1 | Approche Méthodologique en Deux Temps1.2.2 | Résultats Consolidés1.3 | Insight Stratégique Clé — Réunion GRDF du 6 novembre 20251.4 | Résultats Structurants1.4.1 | Synthèse Consolidée (Analyse Systématique + Enrichie)1.4.1.1 | Modules Transverses et Classes Critiques1.4.1.2 | Classes Partagées (47 classes critiques)1.4.1.3 | God Classes (14 classes critiques)1.4.1.4 | Modules Transverses (60 packages)1.5 | Vulnérabilités et Risques Critiques1.6 | Options Stratégiques1.7 | Recommandation Stratégique1.8 | Roadmap Proposée — Synthèse1.9 | Prochaines Étapes2 | Méthodologie d'Audit2.1 | Périmètre de l'Analyse2.1.1 | Applications et Artefacts Audités2.1.2 | Définition des Classes et Nomenclature2.1.2.1 | Méthodes de Comptage2.1.2.2 | Justification des Écarts2.1.2.3 | Classes Exclues de l'Analyse Systématique2.1.2.4 | Recommandation pour les Livrables2.1.2.5 | Convention de Notation dans ce Document2.1.3 | Outils et Chaîne d’Analyse2.1.4 | Analyse du Couplage Java2.1.5 | Analyse des Processus BPM (services)2.1.6 | Limites et Perspectives de l’Analyse Globale2.1.7 | Utilisation de l'Ingénierie Augmentée2.1.7.1 | Domaines d'Application2.1.7.2 | Impact Quantifié2.1.7.3 | Principes et Limitations2.1.7.4 | Conformité aux Standards2.2 | Cadre Théorique2.2.1 | Métriques de Couplage2.2.2 | Références bibliographiques2.3 | Conventions de DocumentationNiveaux de Confiance 3 | 2. Architecture Actuelle — État des Lieux3.1 | Vue d'Ensemble3.1.1 | Diagramme de Déploiement Actuel3.1.2 | Stack Technologique Actuelle3.2 | Modules et Dépendances3.2.1 | Structure des Modules Maven — SAT-PRE3.2.2 | Structure des Modules Maven — SAT-HAB3.2.3 | Dépendances Externes Critiques3.3 | Architecture Logique Actuelle3.3.1 | Pattern Architectural ObservéAntipatterns Détectés3.4 | Analyse des Processus BPM et Séparation des Services Workflow3.4.1 | Périmètre de l’Analyse BPM3.4.2 | Inventaire des Processus et Architecture d’Intégration3.4.2.1 | Inventaire des Processus BPM3.4.2.2 | Architecture BPM — Vue Synthétique3.4.3 | Méthodologie d’Analyse BPM (Synthèse des 5 Étapes)3.4.4 | Résultats Clés sur les Services Workflow1) Discrimination SIAS/TICC minimale2) Coefficient de partage élevé3) Pattern architectural « sélection de configuration »4) Matrice d’Assignation (Synthèse)3.4.5 | Impact sur l’Effort de Migration3.4.6 | Limites et Périmètre Non Couvert3.4.7 | Recommandations3.4.7.1 | Pour les services workflow (BPM)3.4.7.2 | Pour la séparation complète SIAS/TICC3.5 | Propagation des Assignations par Graphe de Dépendances3.5.1 | Objectif et Principe3.5.2 | Méthode de Propagation3.5.2.1 | Étape 1 — Construction des matrices3.5.2.2 | Étape 2 — Propagation directe (X↔Y)3.5.2.3 | Étape 3 — Propagation transitive (Y↔Y)3.5.2.4 | Étape 4 — Détection du code mort3.5.2.5 | Étape 5 — Heuristiques de dernier recours3.5.3 | Résultats Globaux3.5.3.1 | Répartition des 904 classes3.5.3.2 | Couverture et gain par rapport au fingerprinting initial3.5.4 | Validation sur Cas de Test3.5.5 | Interprétation Structurale3.5.5.1 | Partage élevé3.5.5.2 | Spécifique application3.5.5.3 | Code mort3.5.5.4 | Unknown résiduels3.5.6 | Recommandations Opérationnelles3.5.6.1 | Actions prioritaires3.5.6.2 | Stratégies de séparation3.5.7 | Métriques de Performance et Traçabilité3.5.8 | Limites et Pistes d’Amélioration3.5.9 | Message de Synthèse 4 | Analyse du Modèle de DonnéesModèle Logique Inféré4.1.1 | Entités Principales Identifiées4.1.2 | Questions Clés sur le Modèle de Données (Bloquantes)🔴 Q1.1 — Discriminant SIAS/TICC dans la Table INCIDENT🔴 Q1.2 — Tables Partagées SIAS/TICC🔴 Q1.3 — Volumétrie des Données4.1.3 | Procédures Stockées Oracle 5 | Analyse de Couplage SIAS/TICC — Résultats Détaillés5.1 | Synthèse des Métriques5.2 | Répartition des Classes par Domaine5.2.1 | Progression par Méthode — Analyse Systématique5.2.2 | Analyse Enrichie par Expertise Métier5.2.3 | Synthèse des Analyses5.2.4 | Distribution des 904 Classes (Analyse Enrichie)5.3 | Top 20 des Classes Partagées (SIAS+TICC)5.4 | God Classes — Analyse Détaillée5.4.1 | Top 3 God Classes Critiques5.4.1.1 | EcSatPreWkf001Controller — 71 dépendances5.4.1.2 | EcSatPreWkf002Controller — 52 dépendances5.4.1.3 | TraitementMasseServiceImpl — 44 dépendances5.4.2 | Effort Total de Refactoring des 14 God Classes5.5 | Modules Transverses — Candidats pour Librairie CommuneTop 10 Modules Transverses par Nombre de Classes5.6 | Constats et Recommandations5.6.1 | Détail des Priorités5.6.2 | Effort de migration5.7 | Matrice de Complexité et Faisabilité par Module5.7.1 | Méthodologie d'Évaluation5.7.2 | Matrice de Complexité par Module5.7.3 | Modules Critiques Identifiés5.7.4 | Synthèse des Efforts par Phase5.7.5 | Matrice de Décision — Séparation vs. Mutualisation 6 | Qualité du Code — Métriques et Recommandations6.1 | Complexité Cyclomatique6.1.1 | Résultats SAT-PRE6.1.2 | Résultats SAT-HAB6.2 | Vulnérabilité SQL Injection6.2.1 | Exemples de Code Vulnérable (Extrait Fictif)6.3 | Documentation (Javadoc)6.3.1 | Couverture Javadoc Actuelle6.3.1 | Tests Unitaires et Intégration 7 | Architecture Cible — Option B (Greenfield)7.1 | Principes Directeurs7.1.1 | Architecture Hexagonale (Ports & Adapters)7.1.1.1 | Domain-Driven Design (DDD)7.2 | Stack Technologique Cible7.3 | Diagramme de Déploiement Cible8 | Dépendances et Intégrations8.1 | Dépendances Maven AnalyséesMéthodologieRésultats SAT-PRE (app-pre-main)Top 10 Dépendances ClésGraphe de Dépendances (schéma simplifié)8.2 | Interfaces ExternesSystèmes appelants SAT-PRE/HABContrats d'Interface — Exemple SPQR → SAT-PRE⚠️ Problèmes Identifiés8.3 | Flux JMS AnalysésTop 5 Listeners CritiquesProposition Mapping JMS → KafkaAvantages Kafka8.4 | Stratégie de Remplacement du BPM Software AG8.4.1 | Contexte et EnjeuxSituation actuelle :Contraintes GRDF :Impact sur séparation SIAS/TICC :8.4.2 | Analyse de l'Existant BPMArtefacts identifiés :Workflows critiques (sample de 30+ processus) :Volumétrie et statistiques :Points d'attention détectés :8.4.3 | Solutions Open-Source ÉvaluéesRecommandation : Camunda 8 (prioritaire) ou Flowable (alternative)8.4.4 | Stratégie de MigrationPhase 1 : POC et Validation Technique (2 mois — M1 → M3)Phase 2 : Migration Progressive (6-9 mois — M3 → M12)Phase 3 : Décommissionnement Software AG (1-2 mois — M12 → M13)8.4.5 | Risques et Mitigation8.4.6 | Intégration dans la Roadmap Globale8.4.7 | Estimation Effort et Coûts8.4.8 | Synthèse des Dépendances Critiques 9 | Documentation et Connaissance Métier9.1 | État de la Documentation TechniqueAudit Exhaustif (via scripts audit_tool.py)Exemple de Javadoc Manquante (God Class)Recommandations Documentation9.2 | Connaissance Métier — Risques IdentifiésBus Factor AnalysisActions Urgentes 10 | Tests et Qualité10.1 | Couverture de Tests — État Actuel⚠️ Absence de Données EmpiriquesExemples de Tests ExistantsMétrique Qualité Estimée10.1.1 | Stratégie Tests — Option B (Greenfield)Test Pyramid (approche moderne)Outils et Frameworks CiblesBDD (Behavior-Driven Development) — RecommandéImplémentation avec CucumberCouverture Cible Option B 11 | Synthèse des Recommandations Stratégiques11.1 | Rappel du Contexte Décisionnel11.2 | Décision Recommandée : Option A+ (Refactoring Guidé par les Métriques)11.2.1 | Principes11.2.2 | Bénéfices attendus11.3 | Feuille de Route Recommandée11.4 | Positionnement d’Adservio11.5 | Matrice de Conformité aux Standards GRDF11.5.1 | Conformité Technique — Application Blanche Jaune (ABJ)11.5.2 | Conformité Méthodologique11.5.3 | Conformité Sécurité et Conformité Réglementaire11.5.4 | Conformité Qualité Logicielle (ISO 25010)11.5.5 | Conformité Processus IT (COBIT 2019)11.5.6 | Synthèse Globale de Conformité11.6 | Décision attendue de GRDF 12 | Roadmap Détaillée — Option A+ (Refactoring Guidé)12.1 | Vue d'Ensemble12.2 | Phase 0 : Diagnostic et POC BPM (M0 → M3)12.3 | Phase 1 : Migration Infrastructure (M3 → M12)12.4 | Phase 2 : Nettoyage Préparatoire (M12 → M12.5)12.5 | Phase 3 : Séparation SIAS/TICC (M12.5 → M24.5)12.6 | Phase 4 : Tests et Mise en Production (M24.5 → M30)Détail Campagne Tests de Performance12.7 | Diagramme de Gantt12.8 | Jalons Critiques et Dépendances12.9 | Équipe Requise et Charges Estimées12.10 | Livrables de Référence12.10.1 | Indicateurs de Performance et Suivi Qualité12.10.2 | Synthèse — Vision Stratégique 13 | Analyse de Risques — Option A+ (Refactoring Guidé) 13.1 | Cadre Contractuel et Objectif13.2 | Matrice de Risques Consolidée13.3 | Top 3 Risques Prioritaires (R01, R02, R04)13.4 | Plan de Mitigation13.5 | Gouvernance du Risque13.6 | Synthèse et Décision 14 | Questions Restantes et Préalables Décisionnels14.1 | Rôle de cette section dans le cadre contractuel14.2 | Consolidation des Questions Clés (v4)14.2.1 | Q1–Q15 — Modèle de Données & Discriminant SIAS/TICC (P0)14.2.2 | Q2–Q10 — Workflows BPM (Software AG) & Orchestrations (P0)14.2.3 | Q3–Q8 — Module HAB (Habilitations) & Sécurité (P1 mais critique)14.2.4 | Q4–Q6 — Interfaces Externes (SPQR, SSOL, STIC, etc.) (P1)14.2.5 | Q5–Q8 — Stratégie de Séparation & Gouvernance (P0)14.3 | Actions Préalables Recommandées14.4 | Gantt des Préalables Décisionnels14.5 | Message de Synthèse Annexe A · Étude Migration PostgreSQL (Synthèse)A.1 | Faisabilité TechniqueA.2 | TCO 5 Ans (Comparaison Oracle vs PostgreSQL)A.3 Roadmap Migration (Intégrée à Option B)Annexe B · Métriques Complètes SAT-PRE & SAT-HABB.1 | SAT-PRE (app-pre-main)B.2 | SAT-HAB (app-hab)Annexe C · Diagrammes CompletsC.1 | Architecture Actuelle (Détaillée)C.2 | Diagramme Couplage SIAS/TICC (Extrait Top 20)C.3 | Roadmap Phases (Gantt — Voir Section 12.1) Annexe D · Références et StandardsD.1 | Cadres MéthodologiquesD.2 | Standards TechniquesD.3 | Bibliographie AcadémiqueD.4 | Références CVE SécuritéD.5 | Référentiel GRDF — Utilisation ABJ (Software Factory)D.5.1 | ContexteD.5.2 | Objectif d’ABJD.5.3 | Processus Général d’Intégration (Workflow ABJ)D.5.4 | Contraintes Techniques ClésD.5.5 | Responsabilités et GouvernanceD.5.6 | Positionnement dans le Présent AuditD.5.7 | Synthèse et Alignement avec la Roadmap v4D.5.8 | Conclusion Annexe E · GlossaireAnnexe F · Index des Artefacts et PreuvesF.1 | Scripts d'Analyse CréésF.2 | Bases de Données JSON GénéréesF.3 | Rapports et DiagrammesF.4 | Preuves Techniques (Code Extraits) FIN DU RAPPORT V6 · AUDIT TECHNIQUE SAT-PRE & SAT-HAB📞 Contacts Clés💬 Résumé Exécutif (1 phrase)⚡ Actions Immédiates RecommandéesP0 — Urgent (Phase 0)P1 — Court terme (Phase 1)P2 — Moyen terme (Phase 2-3)📊 Statistiques du Rapport

         


        1 | Vue Générale

        (Analyse d'Impact de la Séparation SIAS/TICC – Audit Technique SAT-PRE & SAT-HAB)


        1.1 | Contexte et Objectif

        GRDF a mandaté Adservio pour évaluer la faisabilité technique de la séparation des périmètres SIAS et TICC au sein du système SAT (PRES, HAB, BPM), en prévision du remplacement progressif des technologies obsolètes (Oracle, WebLogic, Software AG BPM). L’étude vise à objectiver trois enjeux majeurs :

        1. mesurer le degré réel de couplage entre SIAS et TICC,

        2. identifier les modules mutualisés et leur nature (structurelle vs technique),

        3. fournir des scénarios de transformation réalistes conformes au cahier contractuel (ETUDE IMPACT – V3).

         

        L’analyse SonarQube fournie au démarrage de l’étude montre une forte hétérogénéité de maturité logicielle entre les sous-systèmes : SAT.PRE et SAT.HAB échouent à tous les critères de la Quality Gate. Les indicateurs sont typiques de code ancien, peu couvert par les tests et présentant un couplage interne élevé (forte duplication, métriques de fiabilité et de sécurité dégradées) :

        application / systèmeSAT.PRESAT.HABSAT.BPM
        Quality Gate Status❌ Failed (6 conditions)❌ Failed (6 conditions)✅ Passed
        New Issues887360
        Accepted Issues000
        Coverage (new code ≥ 80 %)0 % (14 k LTC*)0 % (64 LTC*)0 % (4 LTC*)
        Coverage (global ≥ 70 %)< 70 % (failed)< 70 % (failed)OK
        Duplication (new code ≤ 3 %)12.28 % (> target)0 % (new)0 %
        Duplication (global ≤ 5 %)12.28 % (> target)> 5 % (failed)OK
        Reliability RatingE (< B target)D (< B target)A
        Security RatingE (< A target)E (< A target)A
        Maintainability RatingBD (< A target)A
        Security Hotspots0 (non revus)0 (non revus)0 (rev.)

        * LTC = Lines to cover (par rapport à la ligne de base)

        Sources : rapports SonarQube « SAT.PRE – main », « SAT.HAB – main » et « SAT.BPM – main », SonarQube Server v2025.1.1.104738

         

        Les résultats montrent une dette technique concentrée sur SAT.PRE et SAT.HAB, tandis que SAT.BPM n’est pas un code source en soi mais un orchestrateur.

        • Dans la perspective de séparation SIAS/TICC, BPM peut être considéré comme une couche neutre mais fortement dépendante des services exposés par PRE/HAB.

        • La qualité logicielle insuffisante des modules Java (PRE/HAB) représente donc le principal risque pour la stabilité des orchestrations BPM après découplage.


         

        1.2 | Résultats Clés — Couplage SIAS/TICC

        La documentation insuffisante du code (<30% des classes sont documentées) n'a pas permis une assignation directe des classes à l'application SIAS ou TICC. Une méthodologie hybride inédite combinant analyse systématique automatisée et enrichissement par expertise métier a été mise en œuvre.

        1.2.1 | Approche Méthodologique en Deux Temps

        1. Analyse systématique par AST (Abstract Syntax Tree)

        2. Analyse enrichie par expertise métier

        1.2.2 | Résultats Consolidés

        Excellente nouvelle : le socle SAT présente une architecture naturellement séparable. ⚠️ Point d'attention : le code mort et les quelques UNKNOWN doivent être traités avant toute migration.

        Bilan et interprétation de l'analyse statique des couplages

        L'analyse hybride de 952 classes Java (904 à impact métier) a révélé une densité de couplage SIAS/TICC de 0.36%, soit :

        (1)Densité=Dépendances détectéesDépendances possibles=1883952×9510.36%

        ➡️ Le projet se situe dans la zone verte : la séparation technique est viable.

        < 1% = couplage faible1–5% = couplage modéré> 5% = couplage élevé
        séparation techniquement faisablenécessite refactoring ⚠️séparation difficile 🔴

        Note méthodologique : Le périmètre d'analyse comprend 952 classes (approche systématique) dont 904 à impact métier identifié (approche enrichie). Les 48 classes supplémentaires sont des classes techniques (interfaces, DTOs, abstracts, exceptions, configuration) dont l'impact sur la séparation SIAS/TICC est limité mais qui doivent être traçées pour assurer la complétude architecturale.


        1.3 | Insight Stratégique Clé — Réunion GRDF du 6 novembre 2025

        Les résultats v3-v6 renversent l’hypothèse prudente des versions antérieures (v1/v2) qui préconisaient un redéveloppement intégral par manque de lisibilité du code. La propagation par graphe de dépendances a révélé un niveau de séparation quasi total : la solution greenfield n’est plus une nécessité technique, mais une option stratégique à comparer objectivement à un refactoring guidé par les métriques.


        1.4 | Résultats Structurants

        1.4.1 | Synthèse Consolidée (Analyse Systématique + Enrichie)

        CatégorieAnalyse SystématiqueAnalyse EnrichieRecommandation v5Commentaire
        SHARED591 (62,1%)479 (52,9%)≈ 530 classesNoyau commun (entités, services, utilitaires) — Vote pondéré 60/40
        SIAS116 (12,2%)66 (7,3%)≈ 110 classesControllers, PIL spécifiques — Analyse systématique prioritaire si confiance > 0,85
        TICC24 (2,5%)83 (9,2%)83 classesControllers, feedback, télé-incidents — Analyse BPM prioritaire
        DEAD_CODE198 (20,8%)250 (27,7%)250 classesCode non atteint — Approche conservative (à supprimer)
        UNKNOWN23 (2,4%)27 (3,0%)< 10 classesClasses techniques — Objectif après enrichissement final

        Note : Les chiffres en gras représentent les valeurs recommandées pour la planification de la migration, issues d'une consolidation validée des deux approches méthodologiques.

        1.4.1.1 | Modules Transverses et Classes Critiques

        Les 60 packages transverses (common, util, transverse, mapper, dto, config) et les 14 God Classes ont été cartographiés et peuvent être convertis en bibliothèque commune ou refactorés à part.

         

        1.4.1.2 | Classes Partagées (47 classes critiques)

        Les 47 classes partagées (6.5%) ont été identifiées comme contenant simultanément des références SIAS et TICC. Exemples :

        ClasseDépendancesDomaine DétectéStratégie Recommandée
        EcSatPreWkf001Controller71SIAS+TICC🔴 Refactoring prioritaire (God Class)
        EcSatPreWkf002Controller52SIAS+TICC🔴 Refactoring prioritaire (God Class)
        TraitementMasseServiceImpl44SIAS+TICC🔴 Refactoring prioritaire (God Class)
        IncidentService28SIAS+TICC🟡 Extraction librairie commune ou duplication
        TraitementAutomatique22SIAS+TICC🟡 Extraction librairie commune

        1.4.1.3 | God Classes (14 classes critiques)

        14 classes présentent plus de 20 dépendances (seuil critique selon les bonnes pratiques) :

        1.4.1.4 | Modules Transverses (60 packages)

        60 packages transverses identifiés (common, util, transverse, mapper, dto, config) avec :


        1.5 | Vulnérabilités et Risques Critiques

        IDCriticitéDescriptionImpactClasses Affectées
        R1🔴 HAUTESQL Injection — Concaténation de chaînes SQL sans PreparedStatementSécurité + Migration PostgreSQL difficile56 classes (45 PRE, 11 HAB)
        R2🔴 HAUTEGod Classes — Violation SRP, complexité > 20 dépendancesMaintenabilité, séparation complexe14 classes (10 PRE, 4 HAB)
        R3🟠 MOYENNEStack Legacy EOL — WebLogic 12c, Hibernate 4.x/5.x, Liquibase 3.xObsolescence, CVEs non patchéesToute l'application
        R4🟠 MOYENNEDocumentation < 30% — Javadoc absente ou incomplèteTransfert de connaissance fragile70% des classes
        R5🟡 FAIBLETests absents/incomplets — Couverture inconnue (JaCoCo non configuré)Risque de régression post-refactoringModules métier critiques

        1.6 | Options Stratégiques

        OptionDescriptionAvantagesInconvénients
        A – Refactoring & SéparationDécouplage par configuration et packaging (2 binaries + librairie commune)Rapide, faible risque, réutilisation du code métierMaintien d’une partie de la dette existante
        B – GreenfieldRéécriture progressive sur socle ABJ moderneQualité et pérennité maximalesCoût initial plus élevé

        La version v3 plaide pour l’Option A re-valorisée (Refactoring guidé), avec des pochettes de Greenfield sur les zones critiques (sécurité, habilitations, BPM).


        1.7 | Recommandation Stratégique

        Scénario recommandé : 🟢 Refactoring et Séparation progressive (Option A) → Conserver l'architecture existante et l'isoler par configuration. → Créer un module core-shared mutualisé (~530 classes). → Extraction TICC (83 classes) puis SIAS (~110 classes). → Réécrire seulement les segments obsolètes ou vulnérables. → Migrer vers ABJ / PostgreSQL / Camunda BPM (open-source) sur socle unifié. Décommissionner Software AG BPM avant expiration licence (mi-2026).


        1.8 | Roadmap Proposée — Synthèse

        PhaseDurée estiméeObjectifEffort (mois-personne)
        0 – Diagnostic & POC BPM3 moisAudit complet + POC Camunda (2-3 workflows)6
        1 – Migration Infrastructure9 moisWebLogic→Tomcat, Oracle→PostgreSQL, JMS→Kafka, BPM open-source18
        2 – Nettoyage préparatoire2 sem.Suppression code mort (250 classes) + classification UNKNOWN (<10)1
        3 – Séparation SIAS/TICC12 moisExtraction TICC (83), SIAS (~110), refactoring SHARED (~530)24
        4 – Tests & Production6 moisCampagne tests performance + déploiement progressif12
        Total30 moisSéparation complète + modernisation stack60

        Points critiques :

        (Voir §14 pour GANTT détaillé avec jalons et dépendances)


        1.9 | Prochaines Étapes

         


        2 | Méthodologie d'Audit

        2.1 | Périmètre de l'Analyse

        2.1.1 | Applications et Artefacts Audités

        Domaine / ApplicationRôle principalTechnologies et formatsVolume global estiméModules / Artefacts
        SAT-PRESupervision d’incidents et exécution des workflows métierJava 8 (JEE 7, JSF 2.x, EJB 3.x), XML BPM (webMethods 9.x)~70 000 LOC Java + 2 600 lignes XML BPM28 modules Maven + 3 processus BPM
        SAT-HABGestion des habilitations et SSOJava 8 (JEE 7, JSF 2.x)~18 000 LOC Java7 modules Maven

        Total analysé : ~88 000 lignes de code Java (952 classes production, 904 à impact métier) et 2 561 lignes XML BPM décrivant 39 étapes de workflow et 24 invocations de services.

        L'analyse a donc porté sur :

        Ces deux couches — code exécutable et modèles de processus — ont été examinées conjointement afin de relier la structure logicielle à la logique métier.

        2.1.2 | Définition des Classes et Nomenclature

        2.1.2.1 | Méthodes de Comptage

        L'audit utilise deux approches complémentaires pour le comptage et la classification des classes Java :

        ApprochePérimètreClasses IdentifiéesMéthode
        Analyse systématique (AST)Code de production complet952 classesExtraction syntaxique exhaustive via Abstract Syntax Tree (javalang)
        Analyse enrichie (BPM + Métier)Code à impact fonctionnel904 classesAnalyse des workflows BPM (BPMN 2.0) + classification experte
        Ground truth (référence)Toutes classes production959 classesComptage regex sur fichiers source (validation)
        2.1.2.2 | Justification des Écarts

        Analyse systématique (952 classes) :

        Analyse enrichie (904 classes) :

        Validation croisée :

        2.1.2.3 | Classes Exclues de l'Analyse Systématique

        7 classes générées (impact négligeable : 0,7% du périmètre) :

        1. com.grdf.poc.sat.pre.domaine.inc.builder.IncidentBuilderBase — classe base générée

        2. com.grdf.poc.sat.pre.domaine.inc.builder.IncidentRegroupementIncidentBuilder — inner class générée

        3. com.grdf.poc.sat.pre.domaine.par.builder.TypeIncidentBuilderBase — classe base générée

        4. com.grdf.poc.sat.pre.transverse.inc.recherche.dto.builder.RechercheIncidentDtoBuilderBase — classe base générée

        5. com.grdf.poc.sat.pre.transverse.inc.recherche.dto.builder.RechercheTacheDtoBuilderBase — classe base générée

        6. com.grdf.poc.sat.pre.transverse.wkf.dto.builder.TacheDetailProcedureDtoBuilderBase — classe base générée

        7. com.grdf.poc.sat.pre.transverse.spre29.Compteur — inner helper class dans DonneesPceSpre29Dto.java

        Justification : Code généré automatiquement (Fluent Builders Generator), non maintenu manuellement, impact architectural négligeable sur la séparation SIAS/TICC.

        2.1.2.4 | Recommandation pour les Livrables

        Chiffre préférentiel : 952 classes (analyse systématique)

        Rationale :

        Chiffre complémentaire : 904 classes (analyse enrichie)

        Usage :

        2.1.2.5 | Convention de Notation dans ce Document

        Dans la suite du rapport :

        Exemple :

        L'analyse a porté sur 952 classes (904 à impact métier) réparties en 5 catégories...

        2.1.3 | Outils et Chaîne d’Analyse

        Outil / ScriptVersionObjectif principalType d’entréeSortie produite
        coupling_analyzer.pyCustom (430 lignes)Analyse AST Java ; détection des couplages SIAS/TICC.javaJSON + Markdown
        visualize_coupling.pyCustom (250 lignes)Génération de graphes Mermaid/DOT/CSV.jsonDiagrammes de dépendances
        javalang0.13.0Parsing AST Java.javaArbres syntaxiques
        Maven / jdeps3.8 + / JDK 8 +Analyse des dépendances externes et bytecodePOM + .classArbres dependency:tree, graphes .dot
        lizard1.17 +Calcul de complexité cyclomatique.javaFichier CSV
        bpm_parse.pyCustom (320 lignes)Extraction et cartographie des invocations BPM → Java.process (XML)JSON + rapports texte

        Les outils Java et BPM ont été conçus pour fonctionner sur des sources de nature différente :
        l’analyse AST s’applique à des objets syntaxiques exécutables, tandis que le parsing BPM exploite des modèles XML déclaratifs.
        Leur combinaison fournit une vision à la fois structurelle et fonctionnelle du système.

        2.1.4 | Analyse du Couplage Java

        Étapes principales :

        1. Parsing AST de 1 075 fichiers .java via javalang. Extraction : imports, déclarations, méthodes, annotations.

        2. Détection de domaine (SIAS/TICC/partagé) par recherche de motifs dans les identifiants et littéraux.

          • noms de fichiers (*Sias*.java, *Ticc*.java)

          • packages (com.grdf.sias.*, com.grdf.ticc.*)

          • identifiants de classes et méthodes (getSiasIncident(), sendTiccCommand())

          • littéraux texte ("SIAS", "TICC", "supervision", "telecommande")

          • logique conditionnelle (if (acteur.equals("SIAS")))

          • règle de clasement

            SIAS-seulTICC-onlyPartagéNon-classé
            ≥ 1 indice SIAS et 0 indice TICC≥ 1 indice TICC et 0 indice SIAS≥ 1 indice SIAS et ≥ 1 indice TICCaucun indice
        3. Construction du graphe de dépendances (952 nœuds [904 à impact métier], 5 834 arêtes).

        4. Calcul de métriques :

          • Densité =5834/(952×951)0,64%

          • Détection de God Classes (> 20 dépendances sortantes)

          • Identification des modules transverses (common, util, transverse, etc.)

        Confiance : > 97 % (analyse systématique par AST + propagation par graphe).

        2.1.5 | Analyse des Processus BPM (services)

        Objectif : relier les modèles BPM (XML) aux services Java qu’ils orchestrent afin d’identifier les points d’entrée métier et leur appartenance SIAS/TICC.

        Méthode en 5 étapes (synthèse) :

        1. Cartographie BPM → Java

          • Parsing XML des 3 fichiers .process

          • 24 invocations de services tracées vers TraitementBpmService → services domaine

        2. Extraction de signatures et détection de discriminations de type

          • Analyse de ProcedureServiceImpl.java et TacheServiceImpl.java

          • 2 conditions de type (TICC/SIAS) détectées sur 9 méthodes

          • exemple de TacheServiceImpl.java:275:

        3. Validation par analyse de couplage

          • Vérification que les classes liées aux workflows ne dépendent pas de modules spécifiques SIAS/TICC

        4. Validation par graphe d’appels

          • Construction des chaînes d’appels des 9 méthodes BPM

          • Aucune discrimination supplémentaire détectée

        5. Partition formelle par analyse d’accessibilité

          • Définition des ensembles RP,RQ (SIAS, TICC) et calcul du coefficient de partage σ=88,9%

        Les coefficient de partage est défini par:

        (2)σ=|PQA|+|PQB|N

        avec |PQX|le nombre de total méthodes du module X accessibles depuis SIAS (P) ou depuis TICC (Q) et N le nombre total de méthodes.

        Résultat : assignation 100 % confiance (9 méthodes, 2 classes). Le workflow n’est pas limitant pour la migration.

        AvantagesLimites
        Ciblage précis des points métier critiques
        alidation formelle multi-niveaux
        méthode reproductible pour autres composants
        Périmètre restreint (0,3 % des classes)
        Lecture de code manuelle aux étapes 2 et 4
        Hypothèse : les processus BPM représentent les entrées métier principales

         

        2.1.6 | Limites et Perspectives de l’Analyse Globale

        L’audit combine deux volets complémentaires :

        Les limites ont été réévaluées pour tenir compte de cette dualité :

        DomaineLimite principaleImpact sur les résultatsMitigation / Extension prévue
        Java (AST)Résolution partielle des imports et couplages dynamiquesCertain couplage non visible (reflection, injection)Enrichir le classpath Maven et instrumenter le bytecode
        Java + Data FluxAbsence d’analyse des flux de données (base Oracle, requêtes)Risque de couplage non métier non détectéReverse-engineering BDD + analyse SQL
        BPM (XML)Analyse limitée à 3 processus principauxCouverture partielle des flux opérationnelsÉtendre au référentiel complet BPMN 2.0
        Interopérabilité Java ↔ BPMAlignement incomplet entre définitions de services et implémentationsRisque de décalage modèle / codeValidation sémantique automatisée (BPM → Java ↔ BDD)
        Méthodes manuellesRevue de code limitée à certaines classes critiquesPotentiel d’erreur humaineAutomatisation progressive du traçage BPM-Java

        Synthèse : l'analyse v4-v6 apporte une vision structurelle et fonctionnelle cohérente, tout en mettant en évidence les zones à traiter pour atteindre une couverture totale du code et des processus.

         

        2.1.7 | Utilisation de l'Ingénierie Augmentée

        Cette analyse a bénéficié de l'ingénierie augmentée (LLM-assisted engineering) pour accélérer et systématiser certaines phases de l'audit, tout en conservant une validation humaine sur les décisions critiques.

        2.1.7.1 | Domaines d'Application

        Phase d'AnalyseTâcheOutil/MéthodeGainValidation Humaine
        Extraction ASTParsing de 1,137 fichiers Javajavalang + traitement parallèle (16 cœurs)~2 sec vs plusieurs heures manuellementSpot-check sur échantillon (5%)
        Classification initialePattern matching sur 952 classesRegex + heuristiques19,7% → 70% couverture automatiqueValidation manuelle des cas ambigus
        Propagation par grapheAssignation par voisinage (itératif)Algorithme de label propagation70% → 97% couvertureVérification des seuils (0,6 neighbor threshold)
        Génération de visualisations27 graphiques (12 partitionnement + 15 qualité AST)matplotlib + seaborn (300 DPI)Automatique (~2 sec)Sélection des graphiques pertinents
        Validation croiséeComparaison 952 vs 904 assignationsComparaison systématique des FQNExhaustiveRésolution des 48 écarts par matrice de décision
        DocumentationGénération de rapports traçablesTemplates + evidence chainsRéduction 50% temps rédactionReview et adaptation éditoriale

        2.1.7.2 | Impact Quantifié

        Réduction du délai d'audit :

        Amélioration de la couverture :

        Traçabilité :

        2.1.7.3 | Principes et Limitations

        Principes appliqués :

        1. Human-in-the-loop : Validation humaine obligatoire sur décisions à fort impact métier

        2. Transparence : Tous les algorithmes et heuristiques documentés et auditables

        3. Reproductibilité : Configuration versionnée (YAML), scripts open-source

        4. Validation croisée : Comparaison systématique avec analyse enrichie (BPM + expertise)

        Limitations assumées :

         

        2.1.7.4 | Conformité aux Standards

        L'utilisation de l'ingénierie augmentée est conforme aux standards d'audit IT :

        StandardConformitéJustification
        ISO 31000 (Gestion des risques)Traçabilité totale des décisions automatisées + validation humaine
        COBIT 2019 (Audit SI)Alignement stratégique préservé, processus documentés
        TOGAF 9.2 (Architecture)Vues AS-IS/TO-BE générées avec intervention d'architecte
        SonarQube / OWASP (Qualité code)Analyse statique complémentaire, pas de remplacement

        Position d'Adservio : L'ingénierie augmentée est un accélérateur d'audit, pas un substitut à l'expertise humaine. Elle permet de systématiser les tâches répétitives (parsing, extraction, visualisation) pour concentrer l'effort humain sur les décisions à fort impact métier et la validation stratégique.

         


        2.2 | Cadre Théorique

        2.2.1 | Métriques de Couplage

        Couplage afférent (Ca) et efférent (Ce) :

        Densité de couplage global :

        (3)D=|E||V|×(|V|1)

        avec V = ensemble des classes, E = ensemble des dépendances.

        Règles empiriques (Martin, 2002) :

        2.2.2 | Références bibliographiques

        L’articulation Java/BPM s’inscrit dans le cadre de la modularité (Parnas, 1972), de la responsabilité unique (Martin, 2002) et du bounded context (Evans, 2003), garantissant une lecture cohérente des flux métier et de leur implémentation logicielle.

         


         

        2.3 | Conventions de Documentation

        Niveaux de Confiance

        Les assignations de classes sont documentées avec un niveau de confiance :

        NiveauMéthodeDescription
        100%Preuve formelleAnalyse BPM 5 étapes, validation croisée
        85-95%Extension graphe d'appelsTraçage automatisé depuis points d'entrée
        70-85%Validation manuelleRevue de code, compréhension sémantique
        60-70%Heuristique + spot-checkPatterns nommage, validation échantillon
        <60%Heuristique purePatterns nommage uniquement

        Exemple :


        3 | 2. Architecture Actuelle — État des Lieux

        3.1 | Vue d'Ensemble

        3.1.1 | Diagramme de Déploiement Actuel

        Systèmes Externes

        Middleware JMS

        Moteur BPM

        Base de Données

        Applications JEE Déployées

        Serveurs d'Application — WebLogic 12c Cluster

        DMZ — Zone Démilitarisée

        Utilisateurs Finaux

        HTTPS:443

        HTTPS:443

        HTTPS:90 HAB

        JDBC

        JDBC

        SOAP/REST

        JMS

        Callback

        SOAP

        SOAP

        SOAP

        Opérateurs SIAS

        Techniciens TICC

        Gestionnaires HAB

        Load Balancer F5

        WebLogic Node 1
        Port 7001

        WebLogic Node 2
        Port 7001

        WebLogic Node 3
        Port 7001

        SAT-PRE.ear
        ~70K LOC, 618 classes

        SAT-HAB.ear
        ~18K LOC, 100 classes

        Oracle 19c RAC
        2 noeuds

        Software AG
        30+ processus BPMN

        WebLogic JMS
        40+ listeners

        SPQR
        Planification

        SSOL
        Logistique

        STIC
        Comptage

        3.1.2 | Stack Technologique Actuelle

        CoucheTechnologieVersionStatutCommentaire
        Serveur d'applicationsOracle WebLogic12c (12.2.1.x)⚠️ EOL 2023Migration vers Tomcat/Wildfly recommandée
        Framework JEEJava EE7⚠️ LegacyMigration vers Jakarta EE 10+ ou Spring Boot
        PrésentationJSF (MyFaces/Mojarra)2.x⚠️ LegacyRemplacer par Angular/React/Vue.js
        EJBEJB3.x⚠️ LegacyRemplacer par Spring beans
        ORMHibernate4.x ou 5.x (version exacte inconnue)⚠️ Risque CVEUpgrade vers Hibernate 6.x
        Base de donnéesOracle Database19c RAC✅ SupportéCoût licence élevé → PostgreSQL recommandé
        Migration DBLiquibase3.x🔴 EOLUpgrade vers Liquibase 4.x obligatoire
        BPMSoftware AG webMethods9.0.0 (3 processus, 2 561 LOC XML)⚠️ Vendor lock-inCamunda Platform 8 recommandé
        MessagingWebLogic JMS12c⚠️ PropriétaireMigration vers Kafka recommandée
        BuildMaven3.x✅ OK
        JDKOracle JDK8⚠️ EOL gratuitMigration vers OpenJDK 17 LTS ou 21 LTS

         


         

        3.2 | Modules et Dépendances

        3.2.1 | Structure des Modules Maven — SAT-PRE

        SAT-PRE — 28 Modules

        sat-pre-ear
        Packaging

        sat-pre-web
        JSF, Controllers

        sat-pre-services
        Services Métier

        sat-pre-dao
        Accès Données

        sat-pre-bpm
        Workflows

        sat-pre-domain
        Entités JPA

        sat-pre-common
        Utilitaires

        sat-pre-integration
        API Externes

        3.2.2 | Structure des Modules Maven — SAT-HAB

        SAT-HAB — 7 Modules

        sat-hab-ear
        Packaging

        sat-hab-web
        JSF, SSO

        sat-hab-services
        Gestion Habilitations

        sat-hab-dao
        Accès Données

        sat-hab-domain
        Entités JPA

        sat-hab-common
        Utilitaires

        sat-hab-ldap
        Annuaire

        3.2.3 | Dépendances Externes Critiques

        DépendanceVersion DétectéeDernière VersionÉcartRisque CVE
        Hibernate4.x/5.x (incertain)6.4.xMajeur⚠️ Moyen
        Liquibase3.x4.25.xMajeur🔴 Élevé (EOL)
        Apache Commons Collections3.2.14.4Mineur⚠️ CVE-2015-6420 (désérialisation)
        Log4jVersion inconnue2.22.xIncertain🔴 Critique si < 2.17 (Log4Shell)
        JacksonVersion inconnue2.16.xIncertain⚠️ Potentiel
        Spring FrameworkNon détecté (EJB pur)6.1.xN/A

        Recommandation : Exécuter mvn dependency:tree + scan OWASP Dependency-Check pour audit CVE complet.

         


         

        3.3 | Architecture Logique Actuelle

        3.3.1 | Pattern Architectural Observé

        Architecture en couches (Layered Architecture) :

        Couche Intégration

        Couche Données

        Couche Persistence

        Couche Métier

        Couche Présentation

        JSF Managed Beans
        XHTML Facelets

        Controllers EJB
        EcSatPreWkf001Controller, etc.

        Services EJB
        IncidentService, TraitementService

        Workflows BPM
        Software AG

        DAOs
        IncidentDAO, TacheDAO

        Entités JPA
        @Entity Incident, Tache

        Oracle 19c
        Tables, Procédures Stockées

        JMS Listeners
        40+ Message-Driven Beans

        Clients SOAP
        SPQR, SSOL, STIC

        Observations :

         

        Antipatterns Détectés

        AntipatternDescriptionImpactClasses Affectées
        God ClassClasses avec > 20 dépendances violant SRPMaintenabilité, testabilité14 classes (2.1%)
        Anemic Domain ModelEntités JPA sans logique métier (getters/setters uniquement)Logique dispersée dans Services~80% des entités
        Transaction ScriptLogique métier dans Services procéduraux (pas d'objets du domaine riches)Duplication de code, difficulté à évoluerServices métier
        Magic StringsConstantes métier en String literals (ex: "SIAS", "TICC")Erreurs typo, refactoring difficile~30% du code
        SQL ConcatenationRequêtes SQL construites par concaténation de chaînesInjection SQL, migration PostgreSQL difficile56 classes (7.7%)

         


         

        3.4 | Analyse des Processus BPM et Séparation des Services Workflow

        3.4.1 | Périmètre de l’Analyse BPM

        L’analyse met en évidence la présence de 3 processus BPM Software AG webMethods au format propriétaire .process (XML) dans grdf/app-bpm-main/, couvrant 100 % des workflows identifiés.

        Périmètre effectivement analysé :

        Cette analyse BPM complète et précise s’applique à un sous-ensemble ciblé de la base de code (~0,3 % des classes) mais à 100 % des workflows BPM. Elle s’inscrit en complément de l’analyse de couplage Java décrite en 1.1.3.

         

        3.4.2 | Inventaire des Processus et Architecture d’Intégration

        3.4.2.1 | Inventaire des Processus BPM

        ProcessusTypeÉtapes
        (complexité)
        Invocations servicesQueue JMS
        POC_SAT_PRE_ProcedureManuelleWorkflow manuel10
        (CC=3)
        6…_ProcedureManuelle_SUBQUEUE
        POC_SAT_PRE_ProcedureTeleOpSIASTeleOp SIAS automatique13
        (CC=3)
        8…_ProcedureTeleOpSIAS_SUBQUEUE
        POC_SAT_PRE_ProcedureTeleOpTICCTeleOp TICC auto + retour16
        (CC=3)
        10…_ProcedureTeleOpTICC_SUBQUEUE
        TOTAL39243

        Complexité cyclomatique (CC) moyenne : 3 (workflows simples et bien structurés).

        3.4.2.2 | Architecture BPM — Vue Synthétique

        JMS WebLogic

        Services Java SAT-PRE

        Moteur BPM Software AG

        DemandeCreationProcedureDto

        DemandeCreationProcedureDto

        DemandeCreationProcedureDto

        Application incidents

        Procédure Manuelle

        Procédure TeleOp SIAS

        Procédure TeleOp TICC

        ProcedureServiceImpl

        TacheServiceImpl

        Queue Procédure Manuelle

        Queue TeleOp SIAS

        Queue TeleOp TICC

        Base Oracle

        Points clefs d’intégration :

        1. Entrées via 3 queues JMS dédiées.

        2. Orchestration dans Software AG BPM, utilisant des services déclaratifs.

        3. Exécution métier dans ProcedureServiceImpl et TacheServiceImpl.

        4. Persistance dans Oracle via services/repositories standards.

        5. Corrélation par identifiants métier (ex. identifiantCorrelation).

        Les workflows BPM matérialisent ainsi des scénarios métier SIAS/TICC mais délèguent l’essentiel de la logique à des services Java largement partagés.

         

        3.4.3 | Méthodologie d’Analyse BPM (Synthèse des 5 Étapes)

        L’analyse BPM suit le même principe scientifique que l’analyse Java : traçabilité exhaustive, preuve par construction, absence de redondance.

        1. Cartographie BPM → Java

          • Parsing des fichiers .process.

          • Extraction systématique des 24 invocations de services.

          • Mappage vers TraitementBpmService puis ProcedureServiceImpl / TacheServiceImpl.

        2. Extraction des signatures et discriminations de type

          • Lecture complète des méthodes ciblées.

          • Recherche de conditions SIAS/TICC.

          • 2 vérifications de type trouvées sur 9 méthodes, toutes deux triviales (sélection de constantes de code tâche).

        3. Validation par couplage

          • Confrontation avec sat-pre-combined_coupling.json.

          • Vérification de l’absence de dépendances cachées SIAS/TICC spécifiques.

        4. Validation par graphe d’appels

          • Construction du graphe d’appels des 9 méthodes.

          • Vérification de la méthode interne creerTache : 100 % générique.

        5. Partition formelle

          • Définition des ensembles d’accessibilité SIAS/TICC.

          • Calcul des partitions (exclusif/partagé) et du coefficient de partage.

          • Résultat : 88,9 % des méthodes de services workflow sont partagées, 1 méthode TICC-exclusive.

        Cette chaîne établit une preuve formelle sur le périmètre BPM, cohérente avec les métriques de couplage du §1.2.

         

        3.4.4 | Résultats Clés sur les Services Workflow

        1) Discrimination SIAS/TICC minimale

        2) Coefficient de partage élevé

        3) Pattern architectural « sélection de configuration »

        Le code suit un schéma régulier :

        Conséquence : la séparation des services workflow est structurellement simple : il suffit d’isoler ou de paramétrer les points de sélection, sans réécrire la logique métier.

        4) Matrice d’Assignation (Synthèse)

        ClasseMéthodeStatut BPMDécision proposée
        ProcedureServiceImplMéthodes procédures (4)PartagéesConserver en commun
        TacheServiceImpl3 méthodes partagéesPartagéesConserver en commun
        TacheServiceImpl2 méthodes avec vérif. typeÀ scinder ou paramétrerExtraire / configurer
        TacheServiceImplcreerTacheAttenteFeedBackTICC seulAffecter à app TICC

        Confiance : 100 % sur ce périmètre (preuve par code et par graphes).

         

        3.4.5 | Impact sur l’Effort de Migration

        Point crucial : ces chiffres ne concernent que les services workflow BPM, soit 0,3 % des classes, et ne doivent pas être généralisés à toute l’application.

         

        3.4.6 | Limites et Périmètre Non Couvert

        L’analyse BPM fournit une vision exhaustive sur les workflows mais partielle sur le code global.

        Non couverts à ce stade :

        Ces composants ont fait l’objet d’une pré-classification heuristique (couplage, nommage), mais nécessitent une validation manuelle ou automatisée pour une matrice d’assignation complète.

        Effort indicatif pour une couverture complète : 8–10 jours pour valider les 136 classes pré-classifiées et classifier les 590 restantes.

         

        3.4.7 | Recommandations

        3.4.7.1 | Pour les services workflow (BPM)

        1. S’appuyer sur les résultats actuels (confiance 100 %) pour :

          • Extraire la méthode TICC-exclusive.

          • Paramétrer ou scinder les deux méthodes avec discrimination triviale.

        2. Privilégier une approche pilotée par configuration (Option B) afin :

          • de conserver un code unique partagé,

          • de spécialiser les comportements via application.yml par application (SIAS/TICC),

          • de limiter l’effort de refactoring.

        Ces actions suffisent pour sécuriser la migration ou la séparation des services workflow.

        3.4.7.2 | Pour la séparation complète SIAS/TICC

        Cette stratégie graduelle permet :

         


         

        3.5 | Propagation des Assignations par Graphe de Dépendances

        3.5.1 | Objectif et Principe

        Compléter l’assignation des classes non classifiées à partir :

        Principe formel (propagation) :

        Pour une classe non assignée Yj et l’ensemble des classes assignées Xi connectées (appels entrants/sortants) :

         

        3.5.2 | Méthode de Propagation

        3.5.2.1 | Étape 1 — Construction des matrices

        ÉlémentValeur
        Classes assignées initialement (X)131
        Classes non assignées (Y)768
        Total analysé dans les matrices899*

        *5 classes hors périmètre graphe (incomplètes ou isolées), sans impact sur les résultats globaux (904).

        MatriceDéfinitionDimensionsNb dépendancesDensité
        MforwardXiYj131 × 7681 7901,7 %
        MbackwardYjXi768 × 131900,09 %

        Artefact : assignments_v2_matrices.npz

        3.5.2.2 | Étape 2 — Propagation directe (X↔Y)

        Règle appliquée à chaque Yj à partir des voisins Xi :

        Résultat Phase 1Nombre de classesCommentaire
        Classes Y assignées443 (57,7 % de Y)Par voisins X cohérents
        SIAS20Mono-voisin SIAS
        TICC39Mono-voisin TICC
        SHARED384Voisins mixtes ou usage partagé

        3.5.2.3 | Étape 3 — Propagation transitive (Y↔Y)

        Propagation entre classes Y déjà assignées jusqu’à convergence.

        ItérationNouvelles classes assignées
        1+36
        2+4
        30 (convergence)

        Résultat Phase 2 :

        CatégorieNombre
        Total Y assignées483 (62,9 % de Y)
        SIAS21
        TICC39
        SHARED423

        3.5.2.4 | Étape 4 — Détection du code mort

        Points d’entrée pris en compte (34) : contrôleurs REST, jobs schedulés, listeners JMS. Algorithme : parcours en largeur (BFS) depuis ces points d’entrée.

        RésultatNombrePourcentage (904)
        Classes non atteignables → DEAD_CODE25027,7 %

        3.5.2.5 | Étape 5 — Heuristiques de dernier recours

        Application ciblée sur les classes restantes (UNKNOWN) :

        Règle heuristiqueAssignation par défaut
        .transverse.*SHARED
        .repository.*SHARED
        .domaine.*SHARED

        Effet :

        ÉtatNombre de classes
        Classes UNKNOWN avant heuristiques35
        Classes assignées par heuristiques8
        UNKNOWN finales27 (3,0 %)

         

        3.5.3 | Résultats Globaux

        3.5.3.1 | Répartition des 904 classes

        (À représenter sous forme de diagramme circulaire ou barres empilées dans le rapport final.)

        CatégorieNombre%
        SHARED47852,9 %
        DEAD_CODE25027,7 %
        TICC-only839,2 %
        SIAS-only667,3 %
        UNKNOWN273,0 %
        TOTAL904100 %

        3.5.3.2 | Couverture et gain par rapport au fingerprinting initial

        MéthodeClasses assignéesNon assignées (incl. UNKNOWN + mort)Couverture brute*
        Fingerprinting initial136 (18,7 %)590 (81,3 %)18,7 %
        Propagation par graphe627 (69,4 %)277 (30,6 %)69,4 %
        Amélioration+491-313+50,7 points

        *Couverture incluant code mort, mais distingué dans la répartition ci-dessus.

         

        3.5.4 | Validation sur Cas de Test

        CasAttenduRésultat propagationConfiance autoCommentaire
        IncidentRepositorySHAREDSHARED ✅~40 %Conforme à l’analyse manuelle (16 min)
        SystemeTypeProcedureEnumSHAREDSHARED ✅~95 %Enum centrale SIAS/TICC, cohérence validée

        Ces validations indiquent que la méthode est fiable sur les composants structurants, avec un niveau de confiance adapté au caractère automatique.

         

        3.5.5 | Interprétation Structurale

        3.5.5.1 | Partage élevé

        Type de composantTendance observée
        Repositories~100 % SHARED
        Entités~100 % SHARED
        DTOs~95 % SHARED
        Services métier~70 % SHARED

        Conclusion : l’architecture est naturellement compatible avec une séparation par configuration plutôt que par duplication de code.

        3.5.5.2 | Spécifique application

        CatégorieSIAS-onlyTICC-onlyCommentaire
        Total classes spécifiques66 (7,3 %)83 (9,2 %)16,5 % du code
        Types dominantsControllers UI, PIL, services feedbackControllers TICC, tâches/feedbackLocalisés et isolables

        3.5.5.3 | Code mort

        IndicateurValeur
        Classes DEAD_CODE250 (27,7 %)
        ImpactHors trajectoires d’exécution ; candidats à suppression/archivage
        Effet sur migrationRéduction possible du périmètre actif de 904 → 654 classes

        3.5.5.4 | Unknown résiduels

        IndicateurValeur
        Classes UNKNOWN27 (3,0 %)
        ProfilUtilitaires isolés, interfaces génériques
        Action recommandéeRevue ciblée (2–3 h)

         

        3.5.6 | Recommandations Opérationnelles

        3.5.6.1 | Actions prioritaires

        PrioritéActionEffort estiméObjectif
        P0Valider & exclure le code mort~1 jFiger un périmètre actif réduit
        P0Revue manuelle des 27 UNKNOWN2–3 hAtteindre ~99,7 % de couverture
        P1Échantillon de validation (≈50 classes)~1 jMesurer précision (cible ≥ 85–90 %)

        3.5.6.2 | Stratégies de séparation

        Option A — Séparation physique (modules dédiés)

        Module cibleContenu principal
        sat-sias-app/66 classes SIAS-only
        sat-ticc-app/83 classes TICC-only
        sat-common-workflow/478 classes SHARED

        Effort estimé : 4–5 jours (mouvements de classes + tests).

        Option B — Séparation logique par configuration (recommandée)

        BinaireContenuSpécificité
        app-sias.jarSIAS + SHAREDPiloté par application-sias.yml
        app-ticc.jarTICC + SHAREDPiloté par application-ticc.yml

        Effort estimé : ≈2,5 jours (profils Spring + tests). Moins intrusif, réversible, aligné avec le degré élevé de code partagé.

         

        3.5.7 | Métriques de Performance et Traçabilité

        MesureValeur
        Fichiers Java analysés1 075
        Classes prises en compte904
        Temps de traitement~45 s
        Environnement12 cœurs, exécution parallèle
        Gain vs analyse manuelle≈ 157 h → 45 s (facteur > 10³)

        Artefacts :

        FichierContenu
        assignments_v2.jsonAssignation détaillée + scores de confiance
        assignments_v2_matrices.npzMatrices de dépendances X/Y
        propagate_assignments.pyImplémentation reproductible de l’algorithme

         

        3.5.8 | Limites et Pistes d’Amélioration

        LimiteConséquenceAmélioration possible
        Confiance automatique < 100 %Besoin d’échantillonnage de validationRevue ciblée, seuils ajustés
        Tests peu exploitésPerte d’information sur usages réelsIntégrer tests dans X/Y
        Détection des entry points par patternsRisque d’oubli marginalAutomatiser via annotations / conventions
        Graphe basé sur code statiqueCouplages dynamiques non vusÉtendre à l’analyse bytecode / logs runtime

         

        3.5.9 | Message de Synthèse

        La propagation sur graphe confirme une architecture majoritairement partagée :

        • 52,9 % du code commun,

        • 16,5 % spécifique SIAS/TICC,

        • 27,7 % de code mort à exclure,

        • 3,0 % seulement à revoir manuellement.

        En pratique, une séparation par configuration est réalisable en quelques jours avec un risque maîtrisé, une lisibilité accrue et un périmètre de refactoring fortement réduit.


        4 | Analyse du Modèle de Données

        Modèle Logique Inféré

        Note : En l'absence d'accès au schéma Oracle complet, le modèle ci-dessous a été inféré à partir :

        4.1.1 | Entités Principales Identifiées

        génère

        déclenche

        concerne

        traité par

        clôturée par

        installé sur

        possède

        a

        INCIDENT

        BIGINT

        id

        PK

        VARCHAR(50)

        numero_incident

        UK

        VARCHAR(10)

        type_incident

        SIAS ou TICC ?

        VARCHAR(20)

        statut

        TIMESTAMP

        date_creation

        VARCHAR(100)

        acteur_responsable

        SIAS ou TICC ?

        BIGINT

        equipement_id

        FK

        TEXT

        description

        TACHE

        BIGINT

        id

        PK

        BIGINT

        incident_id

        FK

        VARCHAR(50)

        libelle

        VARCHAR(20)

        statut

        TIMESTAMP

        date_echeance

        VARCHAR(100)

        acteur_assigne

        ALARME

        EQUIPEMENT

        BIGINT

        id

        PK

        VARCHAR(50)

        reference_equipement

        UK

        VARCHAR(50)

        type_equipement

        VARCHAR(100)

        localisation

        BIGINT

        site_id

        FK

        ACTEUR

        BIGINT

        id

        PK

        VARCHAR(100)

        nom_acteur

        UK

        VARCHAR(50)

        domaine

        SIAS, TICC, ou les deux ?

        VARCHAR(100)

        email

        MOTIF_TRAITEMENT

        SITE

        HABILITATION

        BIGINT

        id

        PK

        BIGINT

        acteur_id

        FK

        BIGINT

        profil_id

        FK

        DATE

        date_debut

        DATE

        date_fin

        PROFIL


        4.1.2 | Questions Clés sur le Modèle de Données (Bloquantes)

        🔴 Q1.1 — Discriminant SIAS/TICC dans la Table INCIDENT

        Question : Quel champ permet de distinguer un incident SIAS d'un incident TICC dans la table INCIDENT ?

        Hypothèses :

        Impact : Sans ce discriminant, impossible de :

        Action requise : Fournir le DDL complet de la table INCIDENT ou un export DESC INCIDENT.

         

        🔴 Q1.2 — Tables Partagées SIAS/TICC

        Question : Quelles tables de la base Oracle sont exclusivement SIAS, exclusivement TICC, ou partagées ?

        Hypothèses :

        Impact : Détermine la stratégie de séparation de la base de données :

        Action requise : Fournir la liste complète des tables avec annotation SIAS/TICC/Commun.

         

        🔴 Q1.3 — Volumétrie des Données

        Question : Quelle est la volumétrie actuelle et la répartition SIAS/TICC ?

        Données requises :

        Impact : Dimensionnement de la migration de données, estimation durée de synchronisation, stratégie de backfill.

         


        4.1.3 | Procédures Stockées Oracle

        Question : Existe-t-il des procédures stockées PL/SQL dans la base Oracle ?

        Impact : Les procédures stockées :

        Action requise : Fournir le script d'extraction :

         


        5 | Analyse de Couplage SIAS/TICC — Résultats Détaillés

        5.1 | Synthèse des Métriques

        MétriqueValeurInterprétation
        Classes analysées952 (904 à impact métier)Périmètre SAT-PRE complet
        Fichiers Java analysés1,075Includes, tests, resources
        Dépendances tracées5,834Imports + invocations de méthodes
        Densité de couplage globale0.64%Très faible (seuil < 1%)
        Classes SIAS uniquement116 (66 à impact métier)✅ Facilement séparables
        Classes TICC uniquement24 (83 à impact métier)⚠️ Modules spécifiques feedback/télé-incidents
        Classes partagées (SIAS+TICC)591 (479 à impact métier)🟡 Noyau commun (entités, services, utilitaires)
        Classes non classifiées23 (27 à impact métier)🟡 Validation manuelle requise → objectif < 10
        God Classes (> 20 dépendances)14 (1.5%)🔴 Refactoring prioritaire
        Modules transverses+60 packagesCandidats pour librairie commune

         


         

        5.2 | Répartition des Classes par Domaine

        5.2.1 | Progression par Méthode — Analyse Systématique

        PhaseClasses AnalyséesCouvertureConfianceMéthode
        Détection initiale (AST)136 (14.3%)14.3%85-95%Pattern matching sur FQN, packages, code
        Analyse BPM9 méthodes100% (BPM)100%Parsing XML + traçage vers services Java
        Propagation par graphe627 (65.9%)80.2%75-95%Label propagation itérative
        Détection code mort+198 (20.8%)97.6% total100%Analyse d'accessibilité depuis entrypoints

        Amélioration globale (analyse systématique): 14.3% → 97.6% couverture (952 classes)


        5.2.2 | Analyse Enrichie par Expertise Métier

        En complément de l'analyse systématique par AST, une analyse enrichie a été conduite sur 904 classes à impact métier identifié :

        Source d'EnrichissementClasses ImpactéesMéthode
        Workflows BPM (BPMN 2.0)30+ processus analysésParsing XML + traçage vers controllers/services
        Classification experte904 classesValidation par Product Owners SIAS/TICC
        Code mort conservateur+250 classesApproche conservative (tout code non atteint = DEAD_CODE)

        Résultats de l'analyse enrichie :


        5.2.3 | Synthèse des Analyses

        CatégorieAnalyse SystématiqueAnalyse EnrichieRecommandation v5Stratégie
        SHARED591 (62.1%)479 (52.9%)≈ 530 classesVote pondéré 60/40
        SIAS116 (12.2%)66 (7.3%)≈ 110 classesAnalyse systématique si confiance > 0.85
        TICC24 (2.5%)83 (9.2%)83 classesAnalyse enrichie prioritaire (BPM)
        DEAD_CODE198 (20.8%)250 (27.7%)250 classesApproche conservative
        UNKNOWN23 (2.4%)27 (3.0%)< 10 classesObjectif après enrichissement final

        Justification :


        5.2.4 | Distribution des 904 Classes (Analyse Enrichie)

        54%28%15%3%Origine des assignations (904 classes)Assignées par propagation / heuristiques – 491 (54,3%) [491]Identifiées comme code mort – 250 (27,7%) [250]Assignées initialement (fingerprinting / BPM / manuel) – 136 (15,0%) [136]Restent à qualifier (UNKNOWN) – 27 (3,0%) [27]
        Pareto — Répartition des 904 classes par catégorieSHAREDDEAD_CODETICC-onlySIAS-onlyUNKNOWN500450400350300250200150100500Nombre de classes

         

        Interprétation :

         


         

        5.3 | Top 20 des Classes Partagées (SIAS+TICC)

        RangClasseDépendancesPackageRecommandation
        1EcSatPreWkf001Controller71com.grdf.satpre.web.controller🔴 Refactoring prioritaire (God Class)
        2EcSatPreWkf002Controller52com.grdf.satpre.web.controller🔴 Refactoring prioritaire (God Class)
        3TraitementMasseServiceImpl44com.grdf.satpre.service🔴 Refactoring prioritaire (God Class)
        4IncidentServiceImpl28com.grdf.satpre.service🟡 Extraction librairie commune
        5TraitementAutomatiqueService22com.grdf.satpre.service🟡 Extraction librairie commune
        6MotifTraitementDAO18com.grdf.satpre.dao🟡 Duplication ou extraction
        7IncidentDAO16com.grdf.satpre.dao🟡 Duplication ou extraction
        8Incident (entité JPA)14com.grdf.satpre.domain🟡 Duplication ou extraction
        9TacheService13com.grdf.satpre.service🟡 Extraction librairie commune
        10AlarmeService12com.grdf.satpre.service🟢 Probablement SIAS uniquement (vérifier)
        11CommandeDistanceService12com.grdf.satpre.service🟢 Probablement TICC uniquement (vérifier)
        12EquipementService11com.grdf.satpre.service🟡 Extraction librairie commune
        13NotificationService10com.grdf.satpre.service🟡 Extraction librairie commune
        14RapportService9com.grdf.satpre.service🟡 Extraction librairie commune
        15ValidationUtils8com.grdf.satpre.common.util🟢 Extraction librairie commune (utils)
        16DateUtils7com.grdf.satpre.common.util🟢 Extraction librairie commune (utils)
        17MapperUtils7com.grdf.satpre.common.mapper🟢 Extraction librairie commune (utils)
        18ConstantesMetier6com.grdf.satpre.common.constants🟢 Extraction librairie commune (constants)
        19ExceptionHandler6com.grdf.satpre.common.exception🟢 Extraction librairie commune (framework)
        20LoggingInterceptor5com.grdf.satpre.common.interceptor🟢 Extraction librairie commune (framework)

         


         

        5.4 | God Classes — Analyse Détaillée

        Définition : Classes avec > 20 dépendances sortantes (Ce > 20), violant le principe de responsabilité unique (SRP).

        5.4.1 | Top 3 God Classes Critiques

        5.4.1.1 | EcSatPreWkf001Controller — 71 dépendances

        Package : com.grdf.satpre.web.controller Rôle : Controller principal pour workflow BPM n°1 Problème : Orchestre 71 dépendances (services, DAOs, entités, utils)

        Dépendances détectées (extrait) :

        Impact :

        Recommandation : Refactoring en 5–8 controllers spécialisés :

        Effort estimé : 8–12 j/h (2 semaines à 1 développeur)

         


        5.4.1.2 | EcSatPreWkf002Controller — 52 dépendances

        Package : com.grdf.satpre.web.controller Rôle : Controller principal pour workflow BPM n°2 Problème : Similaire à EcSatPreWkf001Controller (antipattern répété)

        Recommandation : Refactoring en 4–6 controllers spécialisés Effort estimé : 6–9 j/h

         


        5.4.1.3 | TraitementMasseServiceImpl — 44 dépendances

        Package : com.grdf.satpre.service Rôle : Service de traitement en masse (batch processing) Problème : Service "couteau suisse" orchestrant trop de responsabilités

        Recommandation : Refactoring en architecture pipeline :

        Effort estimé : 6–9 j/h

         


        5.4.2 | Effort Total de Refactoring des 14 God Classes

        God ClassDépendancesEffort (j/h)
        EcSatPreWkf001Controller718–12
        EcSatPreWkf002Controller526–9
        TraitementMasseServiceImpl446–9
        11 autres God Classes (20–35 dépendances)1.5 × 11 = 16.5
        TOTAL~37–47 j/h

        Note : Ce refactoring est obligatoire pour l'Option A (Refactoring), mais évité par l'Option B (Greenfield).

         


         

        5.5 | Modules Transverses — Candidats pour Librairie Commune

        60 packages transverses identifiés avec pattern common, util, transverse, mapper, dto, config.

        Top 10 Modules Transverses par Nombre de Classes

        PackageNb ClassesRôleRecommandation
        com.grdf.satpre.common.util28Utilitaires (dates, strings, validation)🟢 Extraction librairie commune
        com.grdf.satpre.common.mapper18Mappers DTO ↔ Entités🟢 Extraction librairie commune
        com.grdf.satpre.common.dto22Data Transfer Objects🟡 Duplication (ou extraction si stables)
        com.grdf.satpre.common.constants12Constantes métier🟢 Extraction librairie commune
        com.grdf.satpre.common.exception8Gestion des exceptions🟢 Extraction librairie commune
        com.grdf.satpre.common.interceptor5Intercepteurs (logging, sécurité)🟢 Extraction librairie commune
        com.grdf.satpre.common.config7Configuration (Spring/JEE)🟡 Duplication (spécifique à l'app)
        com.grdf.satpre.transverse.security6Sécurité (authentification, autorisation)🟡 Extraction ou duplication (selon HAB)
        com.grdf.satpre.transverse.audit4Audit trail🟢 Extraction librairie commune
        com.grdf.satpre.transverse.notification5Notifications (email, SMS)🟢 Extraction librairie commune

        Effort d'extraction en librairie commune : 15–20 j/h Bénéfice : Zéro duplication, maintenance centralisée, réutilisable par SIAS + TICC + futures apps.

         

        Voici une version synthétique et tabulaire de ta section 4.6 Constats et recommandations, conforme à la logique du rapport (constat → implication → action / effort / impact). Les puces sont remplacées par des tableaux homogènes et lisibles pour une lecture exécutive.

         


         

        5.6 | Constats et Recommandations

        ThèmeConstatsImplications / ActionsEffort / Impact
        Architecture naturellement séparable52-62% du code est SHARED (≈ 530 classes)– Repositories : 100 %– Entités : 100 %– Services : 70 %Séparation par configuration Spring, non par code ; maintenir une base unique avec deux profils de déploiement2–3 jours(vs. 40–60 jours estimés initialement)
        Code spécifique minimal17.4% du code est spécifique :– SIAS : ≈ 110 classes (Controllers + PIL spécifiques)– TICC : 83 classes (Controllers + Feedback + télé-incidents)Migration simple, faible duplication ; affecter modules sias et ticcFaible effort, migration contrôlée
        Code mort significatif27.7% du code (250 classes) non atteignable depuis les points d'entréeNettoyer avant migration : validation d'un échantillon, archivage (dead-code), suppression du mainRéduction du périmètre actif 904 → 654 classes (-27.7 %)
        Classes résiduelles< 10 classes UNKNOWN après enrichissement finalArbitrage manuel simple (≈ 3 heures), couverture > 99%Effort minimal, risque nul
        Priorités généralesL'analyse hybride confirme la faisabilité d'une séparation logiquePriorités : (1) Nettoyage code mort (2) Séparation Spring (3) Migration BPM (4) Revue < 10 UNKNOWNEffort global : 2–4 jours, risque faible

         

        5.6.1 | Détail des Priorités

        PrioritéObjectif / ApprocheActions principalesEffort estiméImpact attendu
        P1 — Nettoyage du code mortSupprimer 250 classes inactives1️⃣ Valider 20 classes 2️⃣ Archiver (dead-code) 3️⃣ Supprimer du main1 jourPérimètre réduit à 654 classes
        P2 — Séparation par configuration SpringUn codebase unique, deux profils (sias, ticc)Configurer YAML :application-sias.yml, application-ticc.ymlTester puis déployer (app-sias.jar, app-ticc.jar)2–3 joursMigration rapide, architecture réversible
        P3 — Migration BPMRefactorer 2 méthodes type check (section 2.3)Injecter codes via configuration, valider par tests4 heuresConfiance 100 % sur le périmètre BPM
        P4 — Revue manuelle < 10 UNKNOWNAtteindre couverture > 99 %Examiner classes utilitaires et interfaces génériques≈ 3 heuresCouverture de > 99 % du code

         

        5.6.2 | Effort de migration

        ComposantMéthodeEffortConfiance
        BPM workflowsAnalyse 5 étapes4 heures100%
        ConfigurationProfiles Spring2-3 jours95%
        Code mortNettoyage1 jour100%
        Total3-4 jours95%

         


         

        5.7 | Matrice de Complexité et Faisabilité par Module

        Objectif : Quantifier la complexité de séparation de chaque module fonctionnel et évaluer la faisabilité technique.

        5.7.1 | Méthodologie d'Évaluation

        Critères de complexité (score 1-5) :

        CritèrePoidsDescription
        Couplage SIAS/TICC30%Nombre de classes partagées / Total classes du module
        Dépendances externes25%Nombre d'intégrations (SPQR, SSOL, STIC, GED, etc.)
        Complexité cyclomatique20%Moyenne des métriques de complexité (lizard)
        Couverture tests15%Pourcentage de tests unitaires existants
        Documentation10%Présence de Javadoc et documentation métier

        Score de faisabilité : Faisabilité = 6 - Complexité (1 = très difficile, 5 = très facile)


        5.7.2 | Matrice de Complexité par Module

        Module FonctionnelClasses TotalesClasses SHAREDClasses SIASClasses TICCCouplage (%)ComplexitéFaisabilitéEffort (j/h)Risque
        Controllers (Web)455221811%⭐⭐⭐⭐ (4/5)✅ Élevée (2/5)15-20🟡 Faible
        Services Métier180125352069%⭐⭐⭐ (3/5)🟡 Moyenne (3/5)40-50🟠 Moyen
        Repositories (DAO)858500100%⭐ (1/5)✅ Très élevée (5/5)5-8🟢 Nul
        Entités (Domain)12012000100%⭐ (1/5)✅ Très élevée (5/5)3-5🟢 Nul
        DTOs / Mappers957512879%⭐⭐ (2/5)✅ Élevée (4/5)10-15🟡 Faible
        Utilitaires (Common)606000100%⭐ (1/5)✅ Très élevée (5/5)2-3🟢 Nul
        Configuration25155560%⭐⭐ (2/5)✅ Élevée (4/5)3-5🟡 Faible
        Sécurité / Auth181800100%⭐⭐ (2/5)✅ Élevée (4/5)5-8🟡 Faible
        Intégrations Externes35208757%⭐⭐⭐⭐ (4/5)🟡 Moyenne (2/5)20-30🟠 Moyen
        BPM / Workflows42306671%⭐⭐⭐⭐⭐ (5/5)🔴 Faible (1/5)40-50🔴 Élevé
        Exceptions / Logging222200100%⭐ (1/5)✅ Très élevée (5/5)1-2🟢 Nul
        Batch / Schedulers28205371%⭐⭐⭐ (3/5)🟡 Moyenne (3/5)10-15🟠 Moyen
        Tests (unitaires/intég)130065650%⭐⭐ (2/5)✅ Élevée (4/5)20-25🟡 Faible
        Total / Moyenne88559515813267%⭐⭐⭐ (2.7/5)🟡 Moyenne (3.3/5)175-235🟠 Moyen

        Note : Total classes = 885 (hors code mort 250 classes). Les 952 classes incluent le code mort qui sera supprimé en Phase 2.

         


        5.7.3 | Modules Critiques Identifiés

        🔴 Priorité 1 — Complexité Élevée (Score 4-5/5)

        ModuleProblème PrincipalStratégie RecommandéeEffort (j/h)
        BPM / Workflows• Couplage fort SIAS/TICC
        • Logique métier embarquée
        • Dépendance Software AG (EOL mi-2026)
        🔄 Migration BPM complète (Camunda 8)
        → Refactorisation BPMN 2.0
        → Séparation workflows SIAS/TICC
        40-50
        Intégrations Externes• Appels SOAP/REST multiples (SPQR, SSOL, STIC)
        • Pas de versioning API
        • Timeout non configurés
        🔧 Refactoring couche intégration
        → Circuit breakers (Resilience4j)
        → Clients REST unifiés
        → Gestion timeout/retry
        20-30

         

        🟡 Priorité 2 — Complexité Moyenne (Score 3/5)

        ModuleProblème PrincipalStratégie RecommandéeEffort (j/h)
        Services Métier• 69% de code partagé (125/180 classes)
        • God Classes (14 classes > 20 dépendances)
        • Faible couverture tests
        🔧 Refactoring progressif
        → Extraction librairie core-shared
        → Refactoring God Classes (SRP)
        → Ajout tests unitaires (> 70%)
        40-50
        Batch / Schedulers• Traitement masse (71% code partagé)
        • Dépendance JMS (à remplacer Kafka)
        🔄 Migration JMS → Kafka
        → Refactoring Producers/Consumers
        → Ajout tests d'intégration
        10-15

         

        ✅ Priorité 3 — Faible Complexité (Score 1-2/5)

        Modules directement extractibles en librairie commune sans refactoring majeur :

         


         

        5.7.4 | Synthèse des Efforts par Phase

        PhaseModules ConcernésEffort Total (j/h)DuréeDépendances
        Phase 0 : POC BPMBPM / Workflows (POC 2-3 workflows)152 mois-
        Phase 1 : InfraIntégrations, BPM, Batch (migration tech)70-809 moisPOC validé
        Phase 2 : CleanupTous modules (suppression code mort)52 semInfra migrée
        Phase 3 : SéparationServices, Controllers, Config, Tests100-13512 moisCode nettoyé
        Phase 4 : Tests/ProdTous modules (validation E2E)606 moisSéparation complète
        Total-250-29530 mois-

        Écart avec estimation S14 : L'estimation S14 (60 mois-personne) inclut également :


         

        5.7.5 | Matrice de Décision — Séparation vs. Mutualisation

        Pour chaque module partagé (SHARED), décider entre séparation (duplication) ou mutualisation (librairie commune).

        Module% SHAREDStabilitéStratégie RecommandéeJustification
        Repositories100%⭐⭐⭐⭐⭐ (Stable)🔗 Mutualisation (core-shared.jar)Pas de divergence métier SIAS/TICC, modèle stable
        Entités100%⭐⭐⭐⭐⭐ (Stable)🔗 Mutualisation (core-shared.jar)Schéma DB commun, évolutions rares
        Services Métier69%⭐⭐⭐ (Évolutif)🔗 Mutualisation + 🔀 Extraction spécifique125 classes → core-shared, 55 classes → SIAS/TICC
        Utilitaires100%⭐⭐⭐⭐⭐ (Stable)🔗 Mutualisation (core-shared.jar)Fonctions génériques (dates, strings, validation)
        Configuration60%⭐⭐ (Spécifique)🔀 Duplication (Spring Profiles)Configuration applicative divergente SIAS/TICC
        Intégrations57%⭐⭐⭐ (Évolutif)🔗 Mutualisation + 🔀 Facades spécifiquesClients REST communs, logique métier séparée
        BPM Delegates71%⭐⭐ (Spécifique)🔀 Séparation complèteWorkflows SIAS ≠ TICC après migration Camunda

        Légende :

        Ratio cible : 70% mutualisation (≈ 530 classes) / 30% duplication (≈ 193 classes SIAS+TICC)

         


        6 | Qualité du Code — Métriques et Recommandations

        6.1 | Complexité Cyclomatique

        Définition : Métrique de McCabe mesurant le nombre de chemins d'exécution indépendants dans une fonction.

        (4)Complexité=EN+2P

        E = arêtes, N = noeuds, P = composantes connexes du graphe de flot de contrôle.

        Seuils de criticité :

         

        6.1.1 | Résultats SAT-PRE

        MétriqueValeurInterprétation
        Complexité moyenne13.7⚠️ Légèrement au-dessus du seuil (10)
        Complexité médiane8.2✅ OK
        Méthodes > 2089 (2.1% des méthodes)🔴 Refactoring nécessaire
        Méthodes > 5012 (0.3% des méthodes)🔴 Critique
        Méthode la plus complexeTraitementMasseServiceImpl.traiterLot() (CC = 87)🔴🔴 Critique

         

        6.1.2 | Résultats SAT-HAB

        MétriqueValeurInterprétation
        Complexité moyenne10.6✅ OK (sous le seuil)
        Complexité médiane7.1✅ OK
        Méthodes > 2030 (1.2% des méthodes)⚠️ Modéré
        Méthodes > 503 (0.1% des méthodes)🔴 Critique
        Méthode la plus complexeHabilitationServiceImpl.synchroniserLDAP() (CC = 64)🔴🔴 Critique

        Recommandation : Refactoriser les 101 méthodes avec CC > 20 (89 PRE + 12 HAB). Effort estimé : 0.5 j/h par méthode complexe → ~50 j/h total.

         


         

        6.2 | Vulnérabilité SQL Injection

        Problème détecté : 56 classes (45 SAT-PRE, 11 SAT-HAB) utilisent la concaténation de chaînes SQL au lieu de PreparedStatement ou requêtes JPA Criteria.

        6.2.1 | Exemples de Code Vulnérable (Extrait Fictif)

        ❌ Code vulnérable :

        Impact :

        ✅ Code corrigé (PreparedStatement) :

        ✅ Code corrigé (JPA Criteria API) :

        Effort de correction : 0.5 j/h par classe → ~28 j/h total (56 classes).

         


         

        6.3 | Documentation (Javadoc)

        6.3.1 | Couverture Javadoc Actuelle

        ScopeCouvertureCibleÉcart
        APIs publiques (classes)~30%≥ 70%-40 pts
        Méthodes publiques~25%≥ 70%-45 pts
        Méthodes privées~5%≥ 30%-25 pts
        package-info.java0% (absents)100%-100 pts
        ADRs (Architecture Decision Records)0 détectés≥ 10-10 docs

        Observations :

        Recommandation : Adopter "progressive doc debt repayment" :

        1. Nouvelle règle : Toute méthode publique nouvelle ou modifiée doit avoir Javadoc complète

        2. Campagne de rattrapage : Documenter les 20% de classes les plus critiques (God Classes, Services métier)

        3. package-info.java : Créer 1 fichier par package avec description du rôle

        Effort estimé : 25–35 j/h pour documenter les 30% de classes critiques.

        6.3.1 | Tests Unitaires et Intégration

        Observation : Couverture de tests non mesurée (JaCoCo non configuré dans les POMs Maven détectés).

        Action requise : Exécuter :

        Hypothèse : Couverture estimée < 40% (typique pour applications legacy sans TDD).

        Cible recommandée :

        Effort estimé (pour atteindre 70%) : 40–60 j/h (écriture tests + refactoring pour testabilité).

         


         

        7 | Architecture Cible — Option B (Greenfield)

        7.1 | Principes Directeurs

        7.1.1 | Architecture Hexagonale (Ports & Adapters)

        Principe : Isoler le domaine métier (cœur) des infrastructures (bases de données, APIs, UI) via des ports (interfaces) et adapters (implémentations).

        Application SIAS — Architecture Hexagonale

        Monde Extérieur

        Adapters Secondaires — Driven

        Domaine Métier — Cœur SIAS

        Adapters Primaires — Driving

        HTTP REST

        GraphQL

        Events

        implémentés par

        publiés par

        utilisent

        Interface Utilisateur
        Angular/React

        APIs Externes
        SPQR, SSOL, STIC

        Base de Données
        PostgreSQL

        Kafka Topics

        REST Controllers
        Spring @RestController

        GraphQL Resolvers

        Event Listeners
        Kafka Consumers

        Entités
        Incident, Tâche, Alarme

        Services Métier
        IncidentService, TâcheService

        Ports Repository
        Interfaces Java

        Événements Domaine
        IncidentCreated, AlarmeFired

        JPA Repositories
        Spring Data JPA

        Kafka Producers
        Event Publishing

        REST Clients
        Feign/RestTemplate

        Avantages :

         

        7.1.1.1 | Domain-Driven Design (DDD)

        Principe : Organiser le code selon les Bounded Contexts (contextes délimités) métier.

        Bounded Contexts identifiés :

        Bounded ContextResponsabilitéEntités ClésEvents
        SIAS — SupervisionGestion incidents, alarmes, supervisionIncident, Alarme, TâcheIncidentCreated, AlarmeFired, TâcheAssigned
        TICC — TélécommandeCommandes à distance, télémesureCommandeDistance, Télémesure, ÉquipementCommandeExecuted, TélémesureReceived
        HAB — HabilitationsGestion droits, profils, SSOUtilisateur, Profil, HabilitationUtilisateurCreated, HabilitationGranted
        Référentiel — CommunSites, équipements, acteursSite, Équipement, ActeurÉquipementInstalled, ActeurUpdated

        Structure Package Recommandée (exemple SIAS) :

         


         

        7.2 | Stack Technologique Cible

        Référentiel DSI – Utilisation de la Software Factory ABJ

        Conformément au référentiel DSI GRDF “Utilisation ABJ – Software Factory”, l’ensemble des builds séparés (SIAS, TICC, core-shared) devront être intégrés dans la chaîne ABJ pour assurer la conformité aux standards d’intégration, sécurité et déploiement.

        CoucheTechnologieVersionJustification
        FrameworkSpring Boot3.3.xStandard Java moderne, écosystème riche
        JDKOpenJDK (Eclipse Temurin)21 LTSSupport long-terme jusqu'en 2029, performances améliorées
        PrésentationAngular ou React18.x / 18.xSPA moderne, séparation frontend/backend
        APIREST (Spring Web) + GraphQL (Spring GraphQL)Flexibilité clients (mobile, web, intégrations)
        Base de donnéesPostgreSQL16.xOpen source, performances, JSON support, TCO faible
        ORMHibernate (via Spring Data JPA)6.4.xStandard JPA, génération SQL optimisé
        Migration DBLiquibase4.25.xVersioning schéma, rollback, support PostgreSQL
        MessagingApache Kafka3.6.x (Confluent Platform 7.6)Event streaming, haute performance, écosystème
        BPM (optionnel)Camunda Platform 88.4.xBPMN 2.0, cloud-native, Zeebe engine
        SécuritéSpring Security + OAuth2/OIDC6.2.xStandard, intégration Keycloak
        IAMKeycloak23.xSSO, gestion utilisateurs, fédération LDAP/AD
        ObservabilitéELK Stack (Elasticsearch, Logstash, Kibana) + Prometheus + GrafanaLogs centralisés, métriques, dashboards
        ConteneurisationDocker + KubernetesDéploiement cloud-native, scaling horizontal
        CI/CDGitLab CI ou GitHub Actions + ArgoCDAutomatisation build/test/deploy, GitOps
        TestsJUnit 5 + Mockito + Testcontainers5.10.x / 5.x / 1.19.xTDD, tests d'intégration avec BDD réelle

         


         

        7.3 | Diagramme de Déploiement Cible

        Observabilité

        Event Streaming — Kafka

        Bases de Données — PostgreSQL 16

        Kubernetes Namespace: hab-prod

        Kubernetes Namespace: ticc-prod

        Kubernetes Namespace: sias-prod

        Ingress — API Gateway

        Utilisateurs

        HTTPS

        HTTPS

        HTTPS

        OAuth2/OIDC

        OAuth2/OIDC

        JDBC

        JDBC

        JDBC

        Produce/Consume

        Produce/Consume

        logs

        logs

        logs

        metrics

        metrics

        metrics

        Opérateurs SIAS

        Techniciens TICC

        Gestionnaires HAB

        Spring Cloud Gateway
        ou Kong API Gateway

        SIAS API
        Spring Boot
        3 replicas

        SIAS UI
        Angular/React
        2 replicas

        TICC API
        Spring Boot
        3 replicas

        TICC UI
        Angular/React
        2 replicas

        HAB API
        Spring Boot
        2 replicas

        Keycloak
        SSO/IAM
        2 replicas

        PostgreSQL
        SIAS DB

        PostgreSQL
        TICC DB

        PostgreSQL
        HAB DB

        Kafka Cluster
        3 brokers

        Schema Registry
        Confluent

        ELK Stack
        Logs centralisés

        Prometheus
        Métriques

        Grafana
        Dashboards

        Caractéristiques :

         


        8 | Dépendances et Intégrations

        8.1 | Dépendances Maven Analysées

        Méthodologie

        Résultats SAT-PRE (app-pre-main)

        MétriqueValeurInterprétation
        Dépendances directes35Volume standard pour application JEE
        Dépendances transitives142Arbre profond → risque conflits
        Duplications détectées28 versions en conflit⚠️ Ex: Hibernate 4.3.x vs 5.2.x
        CVEs critiques3 (Liquibase 3.6.x, Commons-IO < 2.7)🔴 Mise à jour urgente
        Dépendances inutilisées12Nettoyage recommandé

        Top 10 Dépendances Clés

         

        Graphe de Dépendances (schéma simplifié)

        Intégration

        Couche Présentation

        Couche Persistance

        app-pre-main

        Hibernate 4.x/5.x

        Oracle JDBC 19c

        Liquibase 3.6.x 🔴

        JSF 2.2 Mojarra

        Primefaces 6.2

        Jackson 2.9.x

        WebLogic EJB Client

        WebLogic JMS

        Apache POI 3.17

        Commons-FileUpload 1.3.2

         


         

        8.2 | Interfaces Externes

         

        Systèmes appelants SAT-PRE/HAB

        SystèmeTypeProtocoleUsageFréquencePropriétaire
        SPQRSystème de PlanificationSOAP/XMLCréation incidents SIASTemps réelGRDF SI Planification
        SSOLSystème de SollicitationREST/JSONEnvoi alertes TICCTemps réelGRDF SI Clientèle
        STICSystème de TélécommandeJMS ActiveMQCommandes TICC< 10 msGRDF SI Télécommande
        Référentiel CompteurMaster DataSOAPValidation matricule compteurBatch nuitGRDF SI Référentiel
        GED (Gestion Électronique Documents)ArchivageWebDAVStockage PV interventionAsynchroneGRDF SI Archivage
        Active Directory GRDFAnnuaire LDAPLDAP/389Authentification HABChaque loginGRDF IT

         

        Contrats d'Interface — Exemple SPQR → SAT-PRE

         

        ⚠️ Problèmes Identifiés

        1. WSDL non documentés → 3 interfaces (SPQR, Référentiel Compteur, GED) sans contrat OpenAPI/WSDL accessible

        2. WS-Security legacy → utilisation de certificats X.509 avec expiration manuelle (risque coupure service)

        3. Pas de versioning d'API → modifications SPQR cassent SAT-PRE sans notification

        4. Timeout non configurés → appels SSOL bloquants (observés jusqu'à 45s) → cascade failures

        Recommandations Migration

        Interface ActuelleCible Option B (Greenfield)Justification
        SOAP/WS-SecurityREST + OAuth2 + JWTStandard moderne, meilleure traçabilité
        JMS ActiveMQApache KafkaScalabilité, replay, persistence
        LDAP directOAuth2/OIDC via KeycloakSSO unifié, MFA, révocation tokens
        WebDAVS3-compatible (MinIO)Cloud-ready, versioning, lifecycle

         


         

        8.3 | Flux JMS Analysés

        40+ Listeners JMS Identifiés (via Grep -i "@MessageDriven")

         

        Top 5 Listeners Critiques

         

        Proposition Mapping JMS → Kafka

        Queue/Topic JMS ActuelKafka Topic CiblePartitionnementRétention
        jms/queue/IncidentCreationsias.incidents.createdPar codePostal (5 chiffres)30 jours
        jms/queue/TelecommandeOrdersticc.telecommande.ordersPar compteurId7 jours
        jms/topic/AlarmesSIASsias.alarmes.firedPar priorite (P1/P2/P3)90 jours
        jms/queue/BatchTraitementMassesias.batch.tasksPar batchId180 jours

         

        Avantages Kafka

         


         

        8.4 | Stratégie de Remplacement du BPM Software AG

        8.4.1 | Contexte et Enjeux

        Situation actuelle :

        Contraintes GRDF :

        Impact sur séparation SIAS/TICC :


        8.4.2 | Analyse de l'Existant BPM

        Artefacts identifiés :

         

        Workflows critiques (sample de 30+ processus) :

        1. Gestion des incidents (création, affectation, traitement, clôture)

        2. Gestion des tâches (affectation, traitement en masse, validation)

        3. Feedback TICC (télé-incidents, commandes à distance)

        4. Intégration avec services SAT-PRE/HAB (habilitations, référentiels)

        5. Traitement automatique (alarmes, supervision, escalade)

         

        Volumétrie et statistiques :

        MétriqueValeurSource
        Processus métier30+Analyse *.process XML
        Services Java appelés15-20Parsing XML invocations
        Intégration JMS40+ listenersÀ remplacer par Kafka
        Complexité moyenneModérée (5-15 étapes/processus)Inspection manuelle
        Dépendances externesSPQR, SSOL, STIC, GEDVoir §7.2

         

        Points d'attention détectés :

        1. Workflows non documentés — Aucune documentation BPMN 2.0 formelle

        2. Logique métier embarquée — Certains workflows contiennent du code Java inline (difficile à migrer)

        3. Couplage fort avec WebLogic — Utilisation de JNDI, EJB, JMS spécifique WebLogic

        4. Pas de tests automatisés — Aucun test unitaire ou d'intégration sur les workflows


         

        8.4.3 | Solutions Open-Source Évaluées

        SolutionVersionAvantagesInconvénientsMaturitéRecommandation
        Camunda 88.6+ (2024)• Standard BPMN 2.0
        • Large communauté (500K+ users)
        • Support enterprise disponible
        • Intégration native Spring Boot
        • Cloud-ready (Zeebe engine)
        • Monitoring avancé (Operate, Optimize)
        • Migration workflows non triviale
        • Formation équipe requise
        • Changement de paradigme (Zeebe vs. classique)
        ⭐⭐⭐⭐⭐✅ Prioritaire
        Flowable7.x (2024)• Fork Activiti (éprouvé)
        • API REST complète
        • UI intuitive (Flowable UI)
        • Compatible BPMN 2.0
        • Support Spring Boot
        • Communauté plus petite
        • Moins de plugins tiers
        • Documentation moins fournie
        ⭐⭐⭐⭐🟡 Alternative
        jBPM8.x (Red Hat)• Intégration Red Hat / JBoss
        • Support Drools (rules engine)
        • Compatible BPMN 2.0
        • Courbe d'apprentissage élevée
        • Moins utilisé en France
        • Stack Red Hat imposée
        ⭐⭐⭐❌ Non recommandé
        Apache Airflow2.x• Excellent pour orchestration batch
        • Python-friendly
        • DAG visual
        • Pas conçu pour BPMN pur
        • Overkill pour workflows simples
        • Inadapté pour workflows métier
        ⭐⭐⭐❌ Non recommandé

        Recommandation : Camunda 8 (prioritaire) ou Flowable (alternative)

        Justification :


         

        8.4.4 | Stratégie de Migration

        Phase 1 : POC et Validation Technique (2 mois — M1 → M3)

        Objectifs :

        Livrables :

        Workflows POC sélectionnés :

        Workflow POCComplexitéRaison Sélection
        1. Création IncidentFaible (5 étapes)Workflow critique SIAS, volumétrie élevée (100+ incidents/jour)
        2. Affectation TâcheMoyenne (10 étapes)Logique métier complexe (règles affectation, escalade)
        3. Feedback TICCFaible (6 étapes)Intégration externe STIC, test de résilience

        Tests de performance POC :

        TestMétrique CibleBaseline Software AGCritère Acceptation
        Latency P50< 200 ms150 ms≤ +50 ms
        Latency P95< 500 ms400 ms≤ +100 ms
        Throughput> 50 workflow/s60 workflow/s≥ -15%
        Stabilité 24hAucune dégradationStableAucune fuite mémoire

        Décision Go/No-Go :

         


        Phase 2 : Migration Progressive (6-9 mois — M3 → M12)

        Approche : Migration workflow par workflow avec validation métier systématique

        Priorisation des workflows :

        PrioritéWorkflowsCritèresEffort Estimé
        P1 — Critique8 workflows (création incident, affectation tâche, feedback TICC, alarmes)• Volumétrie élevée
        • Criticité métier forte
        • Faible complexité
        3 mois
        P2 — Important12 workflows (traitement masse, supervision, escalade)• Volumétrie moyenne
        • Complexité modérée
        4 mois
        P3 — Standard10+ workflows (reporting, archivage, batch)• Volumétrie faible
        • Faible criticité
        2 mois

        Processus de migration par workflow :

        1. Analyse du workflow existant (0.5 jour)

          • Parsing XML Software AG

          • Identification des services Java appelés

          • Cartographie des dépendances externes (SPQR, SSOL, STIC)

        2. Modélisation BPMN 2.0 (1 jour)

          • Création du diagramme BPMN dans Camunda Modeler

          • Définition des service tasks, user tasks, gateways

          • Configuration des variables de processus

        3. Implémentation des service tasks (2-3 jours)

          • Création des delegates Java (Camunda) ou listeners (Flowable)

          • Intégration avec services SAT-PRE existants

          • Gestion des erreurs et retry logic

        4. Tests fonctionnels (1 jour)

          • Tests unitaires (Camunda Test Framework)

          • Tests d'intégration avec services réels

          • Validation métier par Product Owners

        5. Déploiement et monitoring (0.5 jour)

          • Déploiement sur environnement de test

          • Configuration monitoring (Camunda Operate)

          • Validation performance (vs. baseline)

        Effort total estimé : 18-24 mois-personne (incluant POC, migration, tests, formation)

         


        Phase 3 : Décommissionnement Software AG (1-2 mois — M12 → M13)

        Objectifs :

        Livrables :

        Critères de succès :

         


         

        8.4.5 | Risques et Mitigation

        RisqueProbabilitéImpactStratégie de Mitigation
        R1 : Dépassement deadline licence (mi-2026)🟠 Moyenne🔴 Critique• Priorisation stricte (P1 first)
        • Phase 0 POC rapide (2 mois)
        • Equipe dédiée BPM (1 expert Camunda)
        R2 : Performance insuffisante🟡 Faible🟠 Moyen• POC avec benchmark rigoureux
        • Tests de charge systématiques
        • Plan B : Optimisation Camunda (clustering)
        R3 : Complexité migration workflows🟠 Moyenne🟠 Moyen• Approche progressive (workflow par workflow)
        • Formation équipe (2 jours Camunda)
        • Support Camunda Enterprise (option)
        R4 : Résilience métier (résistance au changement)🟡 Faible🟡 Faible• Validation Product Owners systématique
        • Démonstrations régulières (sprints 2 sem)
        • Documentation claire (BPMN 2.0 visuel)
        R5 : Disponibilité compétences Camunda🟠 Moyenne🟠 Moyen• Formation équipe (certification Camunda)
        • Accompagnement Adservio (expert BPM)
        • Documentation interne (playbooks)

        ⚠️ Contrainte impérative : La migration BPM doit être achevée avant mi-2026 (expiration licence Software AG). Cela place la Phase 1 (Migration Infrastructure) sur le chemin critique de la roadmap globale (voir §11).

         


         

        8.4.6 | Intégration dans la Roadmap Globale

        La migration BPM doit être synchronisée avec les autres chantiers de modernisation :

         

        Dépendances techniques :

        ChantierDépendance BPMJustification
        Migration WebLogic → Tomcat⬆️ BloquantCamunda nécessite un serveur d'applications (Tomcat 9.x sur ABJ)
        Remplacement JMS → Kafka⬆️ BloquantLes workflows BPM publient/consomment des messages Kafka
        Séparation SIAS/TICC⬇️ Dépend de BPMLes workflows refactorisés doivent appeler les services séparés
        Migration Oracle → PostgreSQL↔️ IndépendantCamunda supporte PostgreSQL nativement (pas de blocage)

         

        Séquençage recommandé :

        2026-01-012026-04-012026-07-012026-10-012027-01-012027-04-012027-07-012027-10-01POC BPM Camunda 8 Migration workflows P1 Migration WebLogic → Tomcat Migration workflows P2+P3 Remplacement JMS → Kafka Séparation SIAS/TICC BPMInfrastructureSéparationSynchronisation Migration BPM avec Roadmap Globale

        Points de synchronisation critiques :

        1. M3 (Avr 2026) : POC BPM validé → Démarrage migration WebLogic en parallèle

        2. M9 (Oct 2026) : WebLogic + JMS migrés → Déploiement workflows Camunda sur Tomcat/Kafka

        3. M12 (Jan 2027) : Tous workflows BPM migrés → Début séparation SIAS/TICC

        4. M24 (Jan 2028) : Séparation complète → Workflows refactorisés pour services séparés

         


         

        8.4.7 | Estimation Effort et Coûts

        ActivitéDuréeEffort (mois-personne)Profils Requis
        Phase 1 : POC BPM2 mois3• Expert BPM (Camunda)
        • Architecte applicatif
        • Développeur Java/Spring
        Phase 2 : Migration workflows9 mois12• Expert BPM (Camunda) — 6 MP
        • Développeur Java/Spring (x2) — 6 MP
        Phase 3 : Décommissionnement1 mois1• Expert BPM
        • Expert infrastructure DSI
        Formation équipes2 mois2• Formateur certifié Camunda
        • Référent BPM interne
        Total12 mois18 MP-

        Coûts estimés :

        PosteCoût UnitaireQuantitéTotal (k€)
        Expert BPM Camunda (TJM 800€)800 €/j120 j96 k€
        Développeur Java/Spring (TJM 600€)600 €/j120 j72 k€
        Formation Camunda (2j x 5 pers)1 200 €/pers5 pers6 k€
        Licence Camunda Enterprise (optionnel)30 k€/an1 an30 k€
        Total--174-204 k€

        Note : Licence Camunda Enterprise optionnelle (Community Edition suffisante pour POC et production standard). Prévoir budget pour support commercial si nécessaire (SLA, hotfixes, consulting).

         


         

        8.4.8 | Synthèse des Dépendances Critiques

        Résumé consolidé des dépendances techniques à migrer/remplacer :

        Composant ActuelCible Option A+Effort EstiméRisquePriorité
        Software AG BPMCamunda 818 MP (12 mois)🔴 CritiqueP0 (deadline mi-2026)
        WebLogic 12cTomcat 9.x (ABJ)8 MP (6 mois)🟠 MoyenP1
        Oracle DB 19cPostgreSQL 14+6 MP (6 mois)🟠 MoyenP1
        JMS ActiveMQApache Kafka4 MP (4 mois)🟡 FaibleP2
        SOAP/WS-SecurityREST + OAuth22 MP (3 mois)🟡 FaibleP3

        Chemin critique : Software AG BPM → WebLogic → JMS → Séparation SIAS/TICC

         


        9 | Documentation et Connaissance Métier

        9.1 | État de la Documentation Technique

        Audit Exhaustif (via scripts audit_tool.py)

        ArtefactAttenduObservéCouvertureCommentaire
        package-info.java35 (1 par module)✗ Aucun0%🔴 Critique — aucune doc package
        Javadoc classes726 classes232 documentées32%⚠️ Insuffisant (cible : 80%)
        Javadoc méthodes publiques~4 800 méthodes~1 200 documentées25%🔴 Très insuffisant
        ADR (Architecture Decision Records)≥10 décisions majeures✗ Aucun0%Perte de contexte architectural
        Diagrammes C44 niveaux (Context, Container, Component, Code)✗ Aucun0%Difficulté onboarding
        User Stories / Acceptance Criteria~200 US estimées✗ Non accessibles?Stockées dans Jira ?
        Documentation BPM30+ workflows⚠️ Fichiers BPMN non fournis?Bloquant pour analyse

         

        Exemple de Javadoc Manquante (God Class)

         

        Recommandations Documentation

        1. Court terme (0–3 mois)

          • ✅ Créer package-info.java pour 35 modules (effort : 7 j/h)

          • ✅ Documenter 14 God Classes (méthodes publiques uniquement) — effort : 10 j/h

          • ✅ Générer diagrammes C4 niveau 1–2 (Context + Container) — effort : 3 j/h

        2. Moyen terme (3–6 mois) — si Option A (Refactoring) retenue

          • Documenter toutes APIs publiques (cible 80% couverture) — effort : 25 j/h

          • Créer 15 ADRs pour décisions architecturales passées — effort : 5 j/h

          • Reverse engineering User Stories depuis code + interviews PO — effort : 15 j/h

        3. Option B (Greenfield) — Documentation Native

          • Documentation First : Javadoc obligatoire pour tout nouveau code (Checkstyle enforced)

          • ADRs systématiques : toute décision architecture documentée (template Markdown)

          • Living Documentation : génération automatique doc depuis tests BDD (Cucumber)

         


         

        9.2 | Connaissance Métier — Risques Identifiés

        Bus Factor Analysis

        Domaine MétierExpert(s) Clé(s)Bus FactorRisqueMitigation
        Modèle de données SIAS1 architecte (nom non communiqué)1🔴 CritiqueEvent Storming + doc
        Workflows BPM (30+ processus)2 développeurs BPM2🔴 ÉlevéReverse engineering
        Intégrations SPQR/SSOL1 tech lead1🔴 CritiqueDocumentation contrats
        Logique métier TICC3 développeurs3⚠️ MoyenPair programming
        Migration PostgreSQL0 (connaissance externe)0⚠️ MoyenFormation + POC

        Actions Urgentes

        1. Event Storming SIAS (2 semaines) — capturer processus métier complets

          • Participants : PO SIAS, architecte, 3 développeurs seniors

          • Livrable : 200+ User Stories, diagramme événements métier

        2. Knowledge Transfer Sessions (1 mois)

          • 10 sessions × 2h avec experts techniques

          • Enregistrement vidéo + transcription

          • Création documentation "How-To" (Confluence)

        3. Pair Programming Systématique (continu)

          • Rotation développeurs juniors ↔ seniors

          • Code review obligatoire (≥2 reviewers par PR)

         


        10 | Tests et Qualité

        10.1 | Couverture de Tests — État Actuel

        ⚠️ Absence de Données Empiriques

        Type de TestFichiers DétectésEstimation CouvertureCommentaire
        Tests unitaires JUnit142 fichiers *Test.java~30–40%Principalement utilitaires/DTO
        Tests d'intégration18 fichiers *IT.java~10%Quelques tests DAO/Service
        Tests Selenium/UI✗ Aucun0%Aucun test end-to-end détecté
        Tests API (REST Assured)✗ Aucun0%Aucun test contrat d'API
        Tests BPM✗ Aucun0%3 processus Software AG détectés, non testés
        Tests de charge (JMeter)✗ Aucun0%Performance non testée

         

        Exemples de Tests Existants

         

        Métrique Qualité Estimée

         


         

        10.1.1 | Stratégie Tests — Option B (Greenfield)

        Test Pyramid (approche moderne)

         

        Outils et Frameworks Cibles

        NiveauFrameworkUsageExemple
        UnitaireJUnit 5 + MockitoTester logique métier isoléeIncidentServiceTest
        IntégrationSpring Boot Test + TestContainersTester avec vraie DB (PostgreSQL dockerisé)IncidentRepositoryIT
        APIREST Assured + WireMockTester contrats REST + mocker services externesIncidentApiContractTest
        End-to-EndCypress (recommandé) ou SeleniumTester parcours utilisateur completsCreateIncidentE2ETest
        ChargeGatling (Scala DSL)Tester scalabilité (1000 req/s cible)IncidentLoadTest
        MutationPitestVérifier qualité assertions testsDétection tests "vides"
        ContratPact (Consumer-Driven)Vérifier contrats API SPQR/SSOLSPQRContractTest

         

        BDD (Behavior-Driven Development) — Recommandé

         

        Implémentation avec Cucumber

         

        Couverture Cible Option B

        Phase MVPCouverture UnitaireCouverture IntégrationE2ECible Globale
        Phase 1 (4–5 mois)75%60%5 scénarios critiques70%
        Phase 2 (3–4 mois)80%70%15 scénarios75%
        Phase 3 (3–4 mois)85%75%30 scénarios80%

         


        11 | Synthèse des Recommandations Stratégiques


        11.1 | Rappel du Contexte Décisionnel

        Le rapport v2 reposait sur un échantillon partiel (≈ 33 % du code assigné) et avait conclu à une préférence pour le Greenfield par prudence. L’analyse v3, fondée sur 904 classes et un algorithme de propagation de dépendances, invalide cette hypothèse :

        97 % du code est désormais catégorisé et faiblement couplé.

        Le niveau de séparation logique atteint fait du socle SAT un candidat idéal pour un refactoring progressif et maîtrisé, avec un ROI supérieur au greenfield pur sur 5 ans.


        11.2 | Décision Recommandée : Option A+ (Refactoring Guidé par les Métriques)

        11.2.1 | Principes

        1. Conserver le socle technique actuel en le dissociant par configuration.

        2. Extraire un module core-shared pour centraliser les composants communs.

        3. Mettre en place deux artefacts dédiés (app-sias, app-ticc).

        4. Isoler et supprimer le code mort avant toute migration.

        5. Réécrire sélectivement les composants BPM et habilitations.

        11.2.2 | Bénéfices attendus

        AxeGain clé
        Coût-35 % vs Greenfield sur 5 ans (TCO)
        RisqueRéduction > 60 % grâce au détourage objectivé
        Planning-4 à -6 mois sur la phase build
        CapitalisationPréservation du patrimoine fonctionnel et tests existants

        11.3 | Feuille de Route Recommandée

        PhaseObjectifLivrables principaux
        1 – Assainissement du codeSuppression code mort + classification finaleInventaire v4, matrice de couplage validée
        2 – Séparation logiqueDeux profils Spring, feature flagsBuild CI/CD binaire double
        3 – Extraction noyau communCore-shared maven moduleLibrairie documentée et réutilisable
        4 – Modernisation technoPostgreSQL, BPMN JavaStack ABJ complète
        5 – Refonte cibléeSécurité / Habilitations / ExpositionNouveaux modules métier
        6 – Qualification et StabilisationTests / CI/CD / sécuritéCertificat de séparation livré

        11.4 | Positionnement d’Adservio

        Adservio recommande de capitaliser sur ce retour d’expérience pour industrialiser la démarche sous forme de “kit de séparabilité logicielle” :

        Ce socle sera réutilisable pour tout audit de découpage applicatif (fusion, carve-out, refonte multi-tenant).


        11.5 | Matrice de Conformité aux Standards GRDF

        Objectif : Vérifier que la solution proposée (Option A+ — Refactoring Guidé) est conforme aux standards techniques et méthodologiques de GRDF.

        11.5.1 | Conformité Technique — Application Blanche Jaune (ABJ)

        Composant CibleStandard ABJConformitéCommentaire
        Serveur d'applicationsTomcat 9.x✅ ConformeMigration WebLogic → Tomcat (Phase 1)
        Base de donnéesPostgreSQL 14+✅ ConformeMigration Oracle → PostgreSQL (Phase 1)
        MessagingApache Kafka✅ ConformeRemplacement JMS → Kafka (Phase 1)
        BPMOpen-source (Camunda/Flowable)✅ ConformeMigration Software AG → Camunda 8 (Phase 1)
        FrontendAngular 18+ ou React 18+⚠️ PartielJSF 2.2 actuel → Migration recommandée (hors scope initial)
        CI/CDJenkins + GitLab + Nexus✅ ConformeCompatible avec pipelines existants
        ConteneurisationDocker (sans Kubernetes)✅ ConformeDéploiement standard Tomcat sur VM
        MonitoringPrometheus + Grafana✅ ConformeIntégration monitoring ABJ
        LoggingELK Stack (Elasticsearch, Logstash, Kibana)✅ ConformeCompatible avec infrastructure existante
        API ManagementADA (API Gateway GRDF)✅ ConformeExposition REST via ADA

        Taux de conformité ABJ : 90% (9/10 composants conformes)

        Point d'attention : Migration frontend JSF → Angular/React recommandée mais non critique pour la séparation SIAS/TICC (peut être différée en Phase 5).

         


        11.5.2 | Conformité Méthodologique

        MéthodologieApplication dans l'ÉtudeConformitéRéférence
        TOGAF 9.2Cadrage architectural AS-IS/TO-BE, analyse des vues✅ Conforme§2 Architecture Actuelle, §6 Architecture Cible
        SonarQube Rules / OWASPAnalyse statique du code, dette technique, vulnérabilités✅ Conforme§5 Qualité du Code, §8 Vulnérabilités
        ISO 25010Évaluation maintenabilité, fiabilité, portabilité✅ Conforme§8 Métriques Qualité
        Domain-Driven Design (DDD)Bounded Contexts pour séparation SIAS/TICC✅ Conforme§6.1.2 DDD, §9 Architecture Cible
        Architecture HexagonalePorts & Adapters pour découplage✅ Conforme§6.1.1 Hexagonale
        Enterprise Integration PatternsDesign remplacement JMS par Kafka✅ Conforme§7.3 Flux JMS, §10 Dépendances
        Méthode ETL / FlywayStratégie migration Oracle → PostgreSQL✅ ConformeAnnexe A Migration PostgreSQL
        ISO 31000Matrice de risques, plans de mitigation✅ Conforme§12 Analyse de Risques
        COBIT 2019Évaluation des processus IT, alignement stratégique✅ Conforme§1 Méthodologie, §10 Recommandations
        BPMN 2.0Modélisation des 30+ workflows Software AG✅ Conforme§2.3 BPM, §7.4 Remplacement BPM
        DORA MetricsRecommandations CI/CD et automatisation⚠️ Partiel§14 Roadmap (KPIs à définir en Phase 1)
        ITIL v4 / ITSM / SREProcessus de transition, gestion des changements, observabilité✅ Conforme§14 Roadmap, §11.10 Livrables

        Taux de conformité méthodologique : 92% (11/12 méthodologies conformes)

        Point d'attention : DORA Metrics (MTTR, Deployment Frequency, Lead Time, Change Failure Rate) doivent être définis et mesurés en Phase 1 (POC BPM).


         

        11.5.3 | Conformité Sécurité et Conformité Réglementaire

        ExigenceStandardConformitéMesure de Conformité
        AuthentificationSSO LDAP / OAuth2✅ ConformeIntégration Keycloak (OIDC) en Phase 1
        AutorisationRBAC (Role-Based Access Control)✅ ConformeModule HAB maintenu, séparation SIAS/TICC préservée
        Chiffrement données au reposAES-256✅ ConformePostgreSQL TDE (Transparent Data Encryption)
        Chiffrement données en transitTLS 1.3✅ ConformeConfiguration Tomcat + ADA
        Audit trailTraçabilité des actions utilisateurs✅ ConformeModule audit existant conservé
        RGPDDroit à l'oubli, portabilité données✅ ConformePas de données personnelles sensibles (compteurs, incidents)
        Gestion des secretsHashiCorp Vault ou équivalent⚠️ PartielRecommandé en Phase 1 (actuellement : fichiers properties)
        Analyse vulnérabilitésSonarQube + Snyk + OWASP Dependency Check✅ ConformeCI/CD intégré (hebdomadaire)
        PatchingCVE critiques < 7 jours🔴 Non conforme3 CVE critiques détectés (Liquibase, Commons-IO) — À corriger Phase 0
        Séparation des environnementsDEV / UAT / PROD isolés✅ ConformeABJ standard (3 environnements)

        Taux de conformité sécurité : 80% (8/10 exigences conformes)

        Actions correctives prioritaires :

        1. P0 : Corriger 3 CVE critiques (Liquibase 3.6.x → 4.27+, Commons-IO < 2.7 → 2.15+)

        2. P1 : Implémenter gestion centralisée des secrets (Vault ou AWS Secrets Manager)

        3. P2 : Définir processus de patching automatisé (< 7 jours pour CVE critiques)


         

        11.5.4 | Conformité Qualité Logicielle (ISO 25010)

        CaractéristiqueCritère ISO 25010ObjectifÉtat ActuelÉtat Cible (v5)Conformité
        MaintenabilitéModularitéScore B⚠️ C (SAT-PRE), D (SAT-HAB)A🔄 En cours (refactoring)
         Documentation≥ 70%❌ 30% Javadoc≥ 70%🔄 En cours (Phase 3)
         TestabilitéCouverture ≥ 70%❌ 0% tests unitaires≥ 70%🔄 En cours (Phase 3-4)
        FiabilitéMaturitéRating A-B❌ E (PRE), D (HAB)A-B🔄 En cours (correction bugs)
         Tolérance aux pannesCircuit breakers❌ Absents✅ Resilience4j✅ Phase 1
        PerformanceTemps de réponseP95 < 500 ms⚠️ Non mesuré✅ Baseline + monitoring✅ Phase 4
         Efficacité ressourcesCPU < 70%, RAM < 80%⚠️ Non mesuré✅ Monitoring continu✅ Phase 1
        SécuritéConfidentialitéChiffrement TLS 1.3⚠️ TLS 1.2✅ TLS 1.3✅ Phase 1
         IntégritéValidation inputs⚠️ Partielle✅ Bean Validation✅ Phase 3
         Non-répudiationAudit trail✅ Présent✅ Maintenu✅ Conforme
        PortabilitéAdaptabilitéMulti-DB support❌ Oracle only✅ PostgreSQL✅ Phase 1
         InstallabilitéDocker images❌ Absent✅ Docker Compose✅ Phase 1

        Taux de conformité ISO 25010 : 60% actuel → 95% cible (fin Phase 4)

        Plan d'amélioration :


         

        11.5.5 | Conformité Processus IT (COBIT 2019)

        Processus COBITDomaineConformitéCommentaire
        APO01 — Gérer le cadre de gestion ITGouvernance✅ ConformeAlignement stratégie GRDF (séparation SIAS/TICC)
        APO02 — Gérer la stratégieStratégie✅ ConformeOption A+ validée avec ROI objectivé
        APO03 — Gérer l'architecture d'entrepriseArchitecture✅ ConformeTOGAF 9.2, DDD, Architecture Hexagonale
        APO09 — Gérer les accords de serviceSLA⚠️ PartielSLA à définir en Phase 1 (disponibilité, performance)
        BAI01 — Gérer les programmes et projetsDelivery✅ ConformeGANTT 30 mois, jalons, KPIs (§14)
        BAI02 — Gérer les exigencesExigences✅ ConformeCahier des charges respecté (contrat v3)
        BAI03 — Gérer les solutionsDéveloppement✅ ConformeCI/CD Jenkins, GitLab, Nexus, SonarQube
        BAI06 — Gérer les changementsChange Mgmt✅ ConformeRoadmap progressive, validation jalons
        DSS01 — Gérer les opérationsExploitation⚠️ PartielDocumentation exploitation à finaliser (Phase 4)
        DSS02 — Gérer les demandes et incidentsSupport✅ ConformeModule incident SAT-PRE conservé
        DSS05 — Gérer la sécuritéSécurité⚠️ Partiel3 CVE critiques à corriger (Phase 0)
        DSS06 — Gérer les contrôles des processus métierContrôles✅ ConformeBPM workflows, audit trail
        MEA01 — Surveiller, évaluer et apprécier les performancesMonitoring⚠️ PartielDORA Metrics à implémenter (Phase 1)

        Taux de conformité COBIT 2019 : 77% (10/13 processus conformes)

        Actions correctives :


         

        11.5.6 | Synthèse Globale de Conformité

        DomaineTaux de ConformitéStatutCommentaire
        Technique (ABJ)90%✅ Conforme1 composant hors scope (frontend JSF)
        Méthodologique92%✅ ConformeDORA Metrics à définir
        Sécurité80%⚠️ Partiel3 CVE critiques + gestion secrets
        Qualité (ISO 25010)60% → 95%🔄 En coursAmélioration progressive (Phases 0-4)
        Processus IT (COBIT)77%⚠️ PartielSLA, DORA Metrics, doc exploitation
        Global80%⚠️ Partiel✅ Conforme avec plan d'amélioration

        Décision : La solution Option A+ est conforme aux standards GRDF avec un plan d'amélioration continue sur les 30 mois de la roadmap.

        Validations requises :

        1. ✅ Validation technique DSI (stack ABJ)

        2. ⚠️ Validation sécurité (correction CVE critiques en Phase 0)

        3. ⚠️ Validation qualité (plan d'amélioration ISO 25010 accepté)

        4. ✅ Validation méthodologique (TOGAF, DDD, COBIT conformes)

         


         

        11.6 | Décision attendue de GRDF

        DécisionDélai cibleResponsable
        Validation du scénario Option A+Semaine 46GRDF – Direction SI
        Validation matrice de conformitéSemaine 46GRDF – Architecture + Sécurité
        Lancement phase 0Semaine 47Adservio / GRDF conjoint
        Kick-off séparationJanvier 2026Adservio Lab + équipe SAT

         


        12 | Roadmap Détaillée — Option A+ (Refactoring Guidé)


        12.1 | Vue d'Ensemble

        Durée totale : 30 mois (janvier 2026 → juillet 2028) Effort total : 60 mois-personne Approche : Migration progressive par phases avec jalons de validation

        PhaseDuréeEffort (mois-personne)DépendancesJalons Critiques
        Phase 0 : Diagnostic et POC BPM3 mois6-M0: Kickoff, M1: POC validé
        Phase 1 : Migration Infrastructure9 mois18Phase 0M2: Infrastructure modernisée
        Phase 2 : Nettoyage Préparatoire2 sem1Phase 1M3: Code mort supprimé
        Phase 3 : Séparation SIAS/TICC12 mois24Phase 2M4: Séparation complète
        Phase 4 : Tests et Production6 mois12Phase 3M5: Mise en production
        Total30 mois60--

         

        12.2 | Phase 0 : Diagnostic et POC BPM (M0 → M3)

        Objectif : Valider la faisabilité technique et sélectionner la solution BPM open-source

        TâcheDuréeEffort (MP)LivrablesResponsable
        Kickoff meetingJ0 (milestone)-• Plan de projet validé
        • Équipe constituée
        • Environnements provisionnés
        GRDF + Adservio
        Audit technique complet1 mois2• Rapport v6 (ce document)
        • Matrice de classes
        • Graphes de dépendances
        Adservio
        POC BPM open-source (Camunda 8)2 mois3• 2-3 workflows migrés
        • Benchmark performance
        • Recommandation technique
        Adservio + GRDF
        Identification leviers optimisation1 mois1• Matrice d'optimisation
        • Quick wins identifiés
        • Plan d'action prioritaire
        Adservio

        Milestone M0 : Kickoff meeting (J0) Milestone M1 : POC BPM validé + Go/No-Go migration (M0 + 3 mois)

        Critères de succès M1 :


         

        12.3 | Phase 1 : Migration Infrastructure (M3 → M12)

        Objectif : Moderniser la stack technique (WebLogic → Tomcat, Oracle → PostgreSQL, JMS → Kafka, Software AG → Camunda)

        Deadline critique : Expiration licence Software AG (mi-2026) — Phase 1 est sur le chemin critique

        TâcheDuréeEffort (MP)DépendancesLivrables
        Migration WebLogic → Tomcat (ABJ)6 mois8POC validé• Application Tomcat 9.x
        • Tests de non-régression
        • Documentation migration
        Migration Oracle → PostgreSQL6 mois6Étude faisabilité (Annexe A)• Schéma PostgreSQL 14+
        • Scripts ETL Flyway
        • Tests d'intégrité données
        Remplacement JMS → Kafka4 mois4WebLogic migré• Topics Kafka configurés
        • Producers/Consumers refactorés
        • Tests d'intégration
        Migration BPM (30+ workflows)9 mois12POC BPM, Tomcat migré• Workflows Camunda BPMN 2.0
        • Intégration services SAT-PRE
        • Tests fonctionnels complets
        Interfaçage avec OCTA2 mois2WebLogic migré• API REST OCTA intégrée
        • Documentation interface
        • Tests d'intégration

        Milestone M2 : Infrastructure modernisée (M0 + 12 mois)

        Critères de succès M2 :


         

        12.4 | Phase 2 : Nettoyage Préparatoire (M12 → M12.5)

        Objectif : Nettoyer le code mort avant la séparation SIAS/TICC

        TâcheDuréeEffort (MP)DépendancesLivrables
        Validation échantillon code mort3 jours0.15Traçabilité complèteListe validée 250 classes
        Archivage code mort2 jours0.10ValidationBranche Git archive/dead-code
        Suppression du main3 jours0.15Archivage• Code nettoyé
        • Tests validés
        • Commit tracé
        Classification finale UNKNOWN (<10)1 sem0.50Enrichissement métierCouverture > 99%

        Milestone M3 : Code mort supprimé (M0 + 12.5 mois)

        Critères de succès M3 :


         

        12.5 | Phase 3 : Séparation SIAS/TICC (M12.5 → M24.5)

        Objectif : Séparer les applications SIAS et TICC avec noyau commun partagé

        TâcheDuréeEffort (MP)DépendancesLivrables
        Création module core-shared2 mois3Code nettoyé• Librairie Maven core-shared.jar
        • Documentation Javadoc
        • Tests unitaires
        Refactoring God Classes (14 classes)3 mois5Noyau commun créé• Classes refactorisées
        • Respect SRP
        • Tests unitaires
        Extraction TICC (83 classes)4 mois6BPM migré, noyau commun• Module app-ticc
        • Configuration Spring
        • Tests fonctionnels
        Extraction SIAS (≈110 classes)4 mois6TICC extrait• Module app-sias
        • Configuration Spring
        • Tests fonctionnels
        Configuration Spring Profiles1 mois2Extractions complètesapplication-sias.yml
        application-ticc.yml
        • Builds séparés
        Tests d'intégration SIAS/TICC2 mois4Séparation complète• Tests end-to-end
        • Scénarios métier validés
        • Rapport de tests

        Milestone M4 : Séparation complète SIAS/TICC (M0 + 24.5 mois)

        Critères de succès M4 :


         

        12.6 | Phase 4 : Tests et Mise en Production (M24.5 → M30)

        Objectif : Valider la performance, former les équipes, déployer en production

        TâcheDuréeEffort (MP)DépendancesLivrables
        Campagne tests de performance2 mois4Séparation complèteVoir détail ci-dessous
        Formation équipes de maintenance2 mois2Tests validés• Supports de formation
        • Sessions hands-on
        • Documentation opérationnelle
        Déploiement progressif (blue/green)3 mois4Formation complète• Déploiement SIAS en production
        • Déploiement TICC en production
        • Monitoring opérationnel
        Transfert de connaissance1 mois2Déploiement validé• Documentation complète
        • Atelier de passation
        • Support post-prod (3 mois)

        Milestone M5 : Mise en production (M0 + 30 mois)

        Critères de succès M5 :

         

        Détail Campagne Tests de Performance

        Objectif : Valider la performance et la stabilité des applications séparées

        TestDuréeEffort (MP)Métriques CiblesCritères d'Acceptation
        Baseline framework existant2 sem1• Temps de réponse P50/P95/P99
        • Throughput (req/s)
        • Utilisation CPU/RAM
        Référence pour comparaison
        Tests framework développé4 sem2• Temps de réponse P50/P95/P99
        • Throughput (req/s)
        • Utilisation CPU/RAM
        Performance ≥ baseline ± 10%
        Tests d'endurance (24h+)2 sem0.5• Stabilité mémoire (pas de fuite)
        • Stabilité performance
        • Logs d'erreurs
        Aucune dégradation > 5% sur 72h
        Tests aux limites (breaking point)2 sem0.5• Charge maximale supportée
        • Dégradation gracieuse
        • Temps de récupération
        Breaking point > 2x charge nominale

        Outils :

         


         

        12.7 | Diagramme de Gantt

        2026-04-012026-07-012026-10-012027-01-012027-04-012027-07-012027-10-012028-01-012028-04-012028-07-012028-10-012029-01-01Kickoff meeting Audit technique (v5) POC BPM open-source (Camunda 8) Identification leviers optim. POC validé + Go/No-Go Migration WebLogic → Tomcat Migration Oracle → PostgreSQL Remplacement JMS → Kafka Migration BPM (30+ workflows) Interfaçage OCTA Infrastructure modernisée Validation code mort (250) Suppression code mort Classification UNKNOWN (<10) Code nettoyé Création module core-shared Refactoring God Classes (14) Extraction TICC (83 classes) Extraction SIAS (110 classes) Configuration Spring Profiles Tests intégration SIAS/TICC Séparation complète Campagne tests performance Formation équipes Déploiement progressif Transfert connaissance Mise en production Phase 0: Diagnostic & POCPhase 1: InfrastructurePhase 2: NettoyagePhase 3: SéparationPhase 4: Tests & ProdRoadmap Migration SAT-PRE/HAB — Séparation SIAS/TICC (v5)

        Légende :

         


         

        12.8 | Jalons Critiques et Dépendances

        JalonDate CibleDépendancesCritères de SuccèsRisques
        M0 : Kickoff15 jan 2026-Équipe constituée, environnements OKRetard provisionnement
        M1 : POC validé15 avr 2026Audit + POC BPMPOC fonctionnel, benchmark OKPerformance insuffisante
        M2 : Infra modernisée15 jan 2027⚠️ Expiration Software AG mi-2026Stack ABJ complète, BPM migréDépassement deadline licence
        M3 : Code nettoyé1 fév 2027Infra modernisée250 classes supprimées, <10 UNKNOWNRégression fonctionnelle
        M4 : Séparation1 jan 2028Code nettoyé3 artefacts séparés, tests OKCouplage résiduel élevé
        M5 : Production15 juil 2028Séparation + testsDéploiement validé, équipes forméesRésistance au changement

        ⚠️ Chemin critique : Phase 0 → Phase 1 (BPM) → Phase 3 (Séparation) → Phase 4 (Production) ⚠️ Contrainte impérative : Migration BPM complète avant mi-2026 (expiration licence Software AG)


         

        12.9 | Équipe Requise et Charges Estimées

        RôleActeurCharge (j/h)PériodeResponsabilités Clés
        Chef de projet techniqueAdservio30M0–M30Pilotage, reporting GRDF, coordination DSI
        Architecte applicatifAdservio40M0–M27Design séparation, migration DB, BPM, CI/CD
        Développeur senior Java/Spring (x2)Adservio90M3–M27Refactoring, extraction modules, tests
        Expert BPM (Camunda)Adservio25M1–M12POC, migration workflows, formation
        Expert DevOps (CI/CD, ABJ)Adservio30M6–M30Pipelines, industrialisation, déploiement
        Expert sécurité & conformitéAdservio15M18–M30Revue vulnérabilités, validation finale
        Référent fonctionnel SIASGRDF20M0–M24Validation métier, cas d'usage, recette
        Référent fonctionnel TICCGRDF20M0–M24Validation métier, cas d'usage, recette
        AMOA (Assistant MOA)GRDF15M0–M24Arbitrage, validation technique/métier
        Expert infrastructure DSIGRDF20M3–M30Validation ABJ, déploiement, exploitation

        Charge totale estimée :

        Note : Les charges incluent les phases de POC, migration, tests, et support post-production (3 mois).


         

        12.10 | Livrables de Référence

        PhaseLivrable PrincipalFormatValidationEmplacement
        0Rapport audit v6 + Matrice classesPDF + Excel + JSONGRDFCe document
        0POC BPM + BenchmarkCode + RapportGRDF DSIRepository Git poc-bpm
        1Stack ABJ complète (Tomcat + PostgreSQL + Kafka + Camunda)Docker Compose + DocGRDF DSIRepository Git stack-abj
        2Code nettoyé (654 classes actives)Code + TestsAdservioBranch main
        33 artefacts séparés (app-sias.jar, app-ticc.jar, core-shared.jar)JAR + JavadocGRDFNexus ABJ
        4Rapport tests performancePDF + MétriquesGRDFConfluence
        4Documentation exploitationMarkdown + ConfluenceGRDFConfluence ABJ
        4Certification séparation (audit final)PDFGRDF + Audit interneRapport final

         

        12.10.1 | Indicateurs de Performance et Suivi Qualité

        KPIObjectifMéthode de SuiviFréquenceResponsable
        Taux de réutilisation du code≥ 70 %Analyse graphe dépendancesMensuelArchitecte
        Nb. classes mortes supprimées250SonarQube + Git commitsPhase 2Dev senior
        Couplage résiduel SIAS/TICC< 0.3 %Re-analyse statique v5.1Phase 3Architecte
        Couverture tests unitaires≥ 70 %JaCoCoHebdomadaireDev senior
        Disponibilité CI/CD≥ 99 %Jenkins/GitLab metricsContinuDevOps
        Conformité sécurité0 CVE critiqueSonarQube + SnykHebdomadaireExpert sécurité
        Performance (P95 latency)≤ baseline + 10%Tests de chargePhase 4Architecte
        Avancement vs. planifié± 10 %Gantt + Burndown chartHebdomadaireChef de projet

         


         

        12.10.2 | Synthèse — Vision Stratégique

        Le scénario Option A+ (Refactoring Guidé) optimise le ratio coût / risque / capitalisation :

        CritèreValeurComparaison Greenfield
        Durée totale30 mois36-48 mois
        Coût total60 mois-homme90-120 mois-homme
        Réduction coût-~35% d'économie
        Risque projetMoyen (diminution 60% vs. v1)Élevé (refonte complète)
        Capital logiciel préservé> 70 % du code métier0% (réécriture totale)
        Temps de mise en productionM30M36-M48 (+6-18 mois)
        Pérennité technologique✅ Stack ABJ standardisée✅ Stack moderne
        Réversibilité✅ Élevée (Spring Profiles)❌ Faible (greenfield)

        ✅ Avantages clés :

        1. Coût maîtrisé : 35% moins cher que greenfield

        2. Risque réduit : Code métier préservé (70%), tests de non-régression

        3. Délai court : 30 mois vs. 36-48 mois

        4. Capital préservé : Connaissance métier et code validé conservés

        ⚠️ Points d'attention :

        1. Expiration licence Software AG (mi-2026) : Contrainte impérative sur Phase 1

        2. God Classes : Refactoring obligatoire (14 classes, ~5 mois effort)

        3. Performance BPM : Validation obligatoire en Phase 0 (POC)

        4. Formation équipes : Compétences Camunda requises

         

        Conclusion stratégique :

        Le découplage SIAS/TICC peut être réalisé sans refonte intégrale, tout en modernisant la stack technique (ABJ). Le plan v6 garantit un retour sur investissement mesurable dès 2027 et offre à GRDF une base mutualisable, sécurisée, et évolutive pour ses développements futurs.

        La densité de couplage exceptionnellement faible (0.64%) valide la faisabilité technique. L'approche hybride (analyse systématique + enrichissement métier) assure une traçabilité complète (97% de couverture).

         


        13 | Analyse de Risques — Option A+ (Refactoring Guidé)

        13.1 | Cadre Contractuel et Objectif

        Conformément à la proposition contractuelle ETUDE IMPACT – SIAS et TICC V3 (section Phase 4 – Restitution et décision), cette section vise à :

        1. Identifier les risques techniques, organisationnels et documentaires susceptibles d’affecter la trajectoire de séparation.

        2. Évaluer leur criticité selon les trois axes : Probabilité (P), Impact (I), Détectabilité (D).

        3. Proposer des plans de mitigation et de contingence, intégrés à la roadmap (section 11).

         

        Les risques sont classés selon la matrice DSI GRDF (P×I) avec quatre niveaux : 🟢 Faible (1–4) | 🟡 Modéré (5–8) | 🟠 Élevé (9–12) | 🔴 Critique (>12).


         

        13.2 | Matrice de Risques Consolidée

        IDRisqueTypePIScoreNiveauPlan de mitigation
        R01Capture fonctionnelle incomplète lors de la phase 0Organisationnel3412🔴 CritiqueAteliers croisés SIAS/TICC dès Semaine 47, checklist de validation GRDF
        R02Résidus de code mort non isolés avant séparationTechnique339🟠 ÉlevéDouble scan SonarQube + graphe de dépendances v4.1, commit bloquant
        R03Indisponibilité ponctuelle des experts métierOrganisationnel248🟡 ModéréPlanification GRDF consolidée, relais secondaire désigné
        R04Régression fonctionnelle lors du refactoring BPMTechnique2510🟠 ÉlevéTests automatisés (JUnit), sandbox ABJ avant fusion
        R05Corruption ou perte de données pendant migration PostgreSQLTechnique155🟡 ModéréMigration pilote avec jeu de données anonymisé, rollback planifié
        R06Non-conformité sécurité (CVE non patchée)Sécurité236🟡 ModéréIntégration scanner SAST + OWASP ZAP pipeline CI/CD
        R07Sous-estimation de la charge de tests finauxPlanning326🟡 ModéréItération test intégrée à chaque sprint, tableau de charge mis à jour
        R08Mauvaise traçabilité documentaire (preuves manquantes)Gouvernance224🟢 FaibleCentralisation sous GitLab CI et auto-indexation Markdown/JSON

         

        13.3 | Top 3 Risques Prioritaires (R01, R02, R04)

        RisqueDescription détailléeImpact attenduPlan de contingence
        R01 — Capture fonctionnelle incomplèteCertaines règles métier SIAS/TICC pourraient rester implicites (absence de documentation, dépendance à la mémoire des experts).Dérive de 3–4 sem. sur la phase 0 ou design incomplet.Mise en place d’un Event Storming systématique, archivage Markdown/Notion, traçabilité exigée par GRDF.
        R02 — Code mort résiduelLe code inutilisé pourrait subsister et perturber les builds séparés.Fausses dépendances, build cassé, pollution du graphe.Blocage des commits “non classifiés”, scan hebdomadaire automatisé.
        R04 — Régression BPMRefonte des processus Software AG vers Java BPMN : risque de divergence de comportement.Régression fonctionnelle dans workflows critiques.Sandbox indépendante ABJ, tests JUnit par scénario, validation croisée GRDF.

         

        13.4 | Plan de Mitigation

        Toutes les durées sont exprimées en semaines, cohérentes avec la Roadmap v4 — section 11.

        2025-12-012026-01-012026-02-012026-03-012026-04-012026-05-012026-06-01Ateliers croises SIAS TICC Scan initial SonarQube Propagation graphe dependances v41 Validation checklist capture Commit bloquant sur code non classe Sandbox ABJ BPMN setup Tests JUnit refonte Validation croisee GRDF Risque R01 - Capture fonctionnelleRisque R02 - Code mortRisque R04 - Refonte BPMPlan de mitigation des risques SIAS/TICC — Option A+

         

        13.5 | Gouvernance du Risque

        ActivitéResponsableFréquenceOutil de suiviSortie attendue
        Comité risques techniqueAdservio (architecte) + GRDF DSIBimensuelTableau de bord JIRA / ExcelMise à jour score et actions
        Audit de conformitéGRDF SécuritéTrimestrielRapport interne DSIListe CVE et mesures
        Revue documentaireAdservio / GRDFMensuelGitLab + PDF synthèsePV qualité v4
        Validation plan d’actionsGRDFÀ chaque jalon (M0–M3)PV de comitéClôture du risque

        Voir Annexe D.5 — GRDF DSI – Utilisation ABJ – Software Factory – Confluence (document interne, 2025).


         

        13.6 | Synthèse et Décision

        Recommandation Adservio : Valider le plan de mitigation v4 en Comité DSI. Instituer une revue bimensuelle des risques conjointe GRDF/Adservio. Maintenir les tableaux de bord synchronisés avec la CI/CD pour garantir la traçabilité des preuves (exigence contractuelle, phase 4).

         


        14 | Questions Restantes et Préalables Décisionnels

        14.1 | Rôle de cette section dans le cadre contractuel

        Conformément à l’étude d’impact contractuelle, cette section formalise les questions structurantes à trancher par GRDF avant de :

        1. Geler le scénario cible (Option A+ ou variante),

        2. Engager les phases de séparation, modernisation et migration,

        3. Lancer les travaux d’urbanisation et de gouvernance SIAS/TICC associés.

        Les questions sont consolidées par blocs thématiques, avec une priorité opérationnelle (P0, P1) et un lien explicite avec la roadmap (section 11) et les risques (section 12).

         


         

        14.2 | Consolidation des Questions Clés (v4)

        14.2.1 | Q1–Q15 — Modèle de Données & Discriminant SIAS/TICC (P0)

        Enjeu : garantir une séparation robuste au niveau données, condition non négociable pour toute trajectoire (A+ ou Greenfield).

        Questions à trancher rapidement (exemples structurants, non exhaustifs) :

        1. Q1.1 — Confirm(er) l’existence ou non d’un discriminant SIAS/TICC explicite dans la table INCIDENT (ou tables associées).

        2. Q1.2 — Valider la liste des tables réellement partagées entre SIAS et TICC et préciser les règles de cohabitation.

        3. Q1.3 — Documenter la volumétrie actuelle et les projections (5 ans) pour anticiper les impacts de duplication/séparation.

        4. Q1.4 — Clarifier les règles d’historisation, d’archivage et d’accès différenciés SIAS/TICC.

        5. Q1.5–Q1.15 — Finaliser la cartographie des clés fonctionnelles, contraintes d’intégrité, vues, index et accès batch.

        Préalable décisionnel : sans réponse stabilisée à Q1.x, la séparation technique resterait fragile. Niveau : P0 (obligatoire avant verrouillage M0/M1).


        14.2.2 | Q2–Q10 — Workflows BPM (Software AG) & Orchestrations (P0)

        Enjeu : s’assurer que les processus transverses peuvent être :

        Questions clés :

        1. Q2.1 — Inventaire validé des 30+ processus BPM impliquant SIAS/TICC.

        2. Q2.2 — Identification des processus mutualisables vs spécifiques.

        3. Q2.3 — Décision sur la cible technologique (BPMN Java / orchestrateur interne / autre standard DSI).

        4. Q2.4–Q2.10 — Règles d’erreur, de reprise, de supervision et d’auditabilité attendues.

        Préalable décisionnel : nécessaire pour calibrer Phase 3–4 (modernisation, refonte ciblée). Niveau : P0.


        14.2.3 | Q3–Q8 — Module HAB (Habilitations) & Sécurité (P1 mais critique)

        Enjeu : cohérence entre séparation SIAS/TICC, habilitations, rôles, traces de sécurité.

        1. Q3.1 — Confirmation du modèle cible de rôles & permissions par périmètre.

        2. Q3.2 — Gestion des comptes communs, profils multi-rôles, sous-traitants.

        3. Q3.3–Q3.8 — Alignement avec référentiel d’identité GRDF, traçabilité, exigences RSSI.

        Niveau : P1 (à finaliser avant M2, mais cadrage dès M0).


        14.2.4 | Q4–Q6 — Interfaces Externes (SPQR, SSOL, STIC, etc.) (P1)

        Enjeu : éviter la reconstitution de couplages cachés via les flux externes.

        1. Q4.1 — Liste exhaustive des interfaces exposant ou consommant des données SIAS/TICC.

        2. Q4.2 — Découpage ou duplication des flux si nécessaire (SIAS-only, TICC-only, partagé).

        3. Q4.3–Q4.6 — Mode de supervision et SLA après séparation.

        Niveau : P1, mais à aligner avec les phases 1–2.


        14.2.5 | Q5–Q8 — Stratégie de Séparation & Gouvernance (P0)

        Ces questions portent sur la décision formelle attendue dans le contrat :

        1. Q5.1 — Validation officielle du scénario Option A+ comme trajectoire de référence.

        2. Q5.2 — Règles de gouvernance sur les modules core-shared (propriété, maintien, évolutions).

        3. Q5.3 — Décision sur le rythme de mise en production (big bang, progressive, canary).

        4. Q5.4–Q5.8 — Modalités de suivi (comités, KPI, documentation, auditabilité).

        Niveau : P0 — ces points conditionnent l’engagement ferme sur la roadmap.

         


         

        14.3 | Actions Préalables Recommandées

        Les questions ci-dessus ne sont pas des “zones d’ombre optionnelles” mais des pré-requis de gouvernance et d’urbanisation, compatibles avec la lettre de mission de l’étude d’impact.

        Adservio recommande les actions suivantes :

        1. Atelier “Données & Discriminant SIAS/TICC” (P0)

          • Participants : équipes SI métiers, DBA, architectes GRDF, Adservio.

          • Objectif : clore Q1.1–Q1.5.

        2. Atelier “BPM & Processus Transverses” (P0)

          • Objectif : stabiliser le statut de chaque processus (mutualisé vs spécifique).

        3. Atelier “Gouvernance Option A+” (P0)

          • Objectif : valider officiellement la trajectoire recommandée, les responsabilités et les règles sur core-shared.

        4. Atelier “Sécurité & Habilitations” (P1)

          • Objectif : aligner HAB, logs, traçabilité, conformité.

           


         

        14.4 | Gantt des Préalables Décisionnels

        Ce Gantt aligne les actions critiques avec la roadmap (section 11). Syntaxe Mermaid corrigée (nom sans “:”, virgules correctes, after avec virgule) :

        2025-11-172025-11-192025-11-212025-11-232025-11-252025-11-272025-11-292025-12-012025-12-032025-12-052025-12-072025-12-092025-12-112025-12-132025-12-152025-12-172025-12-192025-12-212025-12-23Atelier donnees discriminant Atelier BPM cartographie Atelier gouvernance core shared Validation schema et tables partagees Atelier securite habilitations Validation scenario Option A+ Decision mutualisation ou duplication BPM Donnees et discriminant SIAS TICCBPM et processus transversesGouvernance Option A+Securite et habilitationsQuestions prealables et ateliers de decision SIAS TICC

        Ces ateliers et validations sont intégrés dans la Phase 0 / début Phase 1, sans dérive majeure de planning.

         


         

        14.5 | Message de Synthèse

        1. Les analyses techniques v3 permettent de lever la plupart des incertitudes : le socle logiciel est séparable, mesuré, maîtrisable.

        2. Les questions restantes sont ciblées, de nature :

          • fonctionnelle (discriminant, workflows),

          • d’urbanisation (interfaces externes),

          • de gouvernance (choix formel de l’option, rôle du noyau commun).

        3. Aucune ne remet en cause la faisabilité de l’Option A+ ; elles conditionnent simplement :

          • la solidité juridique et opérationnelle de la séparation,

          • la qualité documentaire et la traçabilité attendues contractuellement.

         

        Engagement Adservio : accompagner GRDF dans la clôture de ces questions sous forme d’ateliers outillés, en continuité directe avec la présente étude d’impact et dans le respect strict du périmètre contractuel.

         


        Annexe A · Étude Migration PostgreSQL (Synthèse)

        A.1 | Faisabilité Technique

        Compatibilité Oracle 19c → PostgreSQL 16

        Feature OracleÉquivalent PostgreSQLEffort Migration
        PL/SQL procédures stockéesPL/pgSQL⚠️ Moyen (syntaxe différente)
        SequencesSERIAL / GENERATED ALWAYS AS IDENTITY✅ Trivial
        TriggersPL/pgSQL triggers⚠️ Moyen (syntaxe proche)
        Indexes B-TreeB-Tree natif✅ Identique
        Materialized ViewsNatif PostgreSQL✅ Identique
        PartitioningDeclarative Partitioning (PG 10+)✅ Meilleur que Oracle
        Hints SQL (/*+ INDEX */)⚠️ Non supportéAlternative : indexes automatiques
        CONNECT BY (requêtes hiérarchiques)WITH RECURSIVE⚠️ Réécriture requêtes

        Outils de Migration

        1. Ora2Pg (recommandé) — open source Perl

          • ✅ Extraction schéma + données + procédures stockées

          • ✅ Génération scripts SQL PostgreSQL

          • ⚠️ Nécessite validation manuelle (10–15% code PL/SQL)

        2. AWS SCT (Schema Conversion Tool)

          • ✅ Gratuit, analyse automatique compatibilité

          • ⚠️ Nécessite compte AWS (pas d'obligation déploiement)

        3. Debezium CDC (Change Data Capture)

          • ✅ Réplication temps réel Oracle → PostgreSQL pendant coexistence

          • ✅ Kafka Connect source Oracle + sink PostgreSQL


         

        A.2 | TCO 5 Ans (Comparaison Oracle vs PostgreSQL)

        Poste de CoûtOracle 19cPostgreSQL 16Économies
        Licences DB€180K (Processor license × 2 sockets)€0 (open source)€180K
        Support éditeur€90K (20% licences × 5 ans)€45K (support EnterpriseDB optionnel)€45K
        Infrastructure (serveurs, stockage)€120K€90K (moins de RAM requis)€30K
        DBA / Ops (5 ans)€160K (0.5 ETP × 5 ans)€135K (courbe apprentissage)€25K
        Migration initiale€0€50K (Ora2Pg + validation)-€50K
        TOTAL 5 ANS€550K€320K€230K (42%)

        Note : économies conservatrices (hypothèse support PostgreSQL payant). Si autogéré : économies jusqu'à €320K (58%).


         

        A.3 Roadmap Migration (Intégrée à Option B)

         


        Annexe B · Métriques Complètes SAT-PRE & SAT-HAB

        B.1 | SAT-PRE (app-pre-main)

        MétriqueValeurBenchmark IndustrieÉcart
        LOC Total70 42150K–100K (application JEE standard)✅ Normal
        Classes Java618400–800✅ Normal
        Packages8960–120✅ Normal
        Méthodes4 7823K–6K✅ Normal
        Complexité Cyclomatique Moyenne13.7< 10 (recommandé)⚠️ Élevé
        Méthodes complexité > 2087< 5% (cible)🔴 1.8% (critique)
        God Classes (> 20 dépendances)140 (cible)🔴 Critique
        Classes avec SQL concat450 (cible)🔴 Critique
        Javadoc coverage32%80% (cible)🔴 Très insuffisant
        Test coverage (estimé)30%80% (cible)🔴 Très insuffisant

        Top 10 Classes Par LOC

        1. EcSatPreWkf001Controller — 487 LOC (God Class)

        2. TraitementMasseServiceImpl — 412 LOC (God Class)

        3. IncidentDaoImpl — 398 LOC

        4. EcSatPreWkf002Controller — 376 LOC (God Class)

        5. RapportGeneratorServiceImpl — 354 LOC

        6. ValidationMetierServiceImpl — 332 LOC

        7. NotificationServiceImpl — 318 LOC

        8. SynchronisationBatchJob — 305 LOC

        9. CompteurReferentielClient — 289 LOC

        10. AlarmProcessorServiceImpl — 276 LOC

         


         

        B.2 | SAT-HAB (app-hab)

        MétriqueValeurBenchmarkÉcart
        LOC Total18 23410K–30K✅ Normal (app plus petite)
        Classes Java10080–150✅ Normal
        Packages1210–20✅ Normal
        Complexité Cyclomatique Moyenne10.6< 10⚠️ Acceptable
        God Classes (> 20 dépendances)20⚠️ Moyen
        Classes avec SQL concat110🔴 Critique

        Top 3 Classes Par LOC

        1. HabilitationManagerImpl — 289 LOC (God Class)

        2. LdapSyncService — 245 LOC

        3. RoleValidatorService — 198 LOC

         


        Annexe C · Diagrammes Complets

        C.1 | Architecture Actuelle (Détaillée)

        (Voir Section 3.2 pour diagramme complet avec 35+ nœuds)


        C.2 | Diagramme Couplage SIAS/TICC (Extrait Top 20)

        Classes Non Classifiées — 590 classes

        Classes Partagées — 47 classes

        Classes TICC Uniquement — 44 classes

        Classes SIAS Uniquement — 45 classes

        SupervisionController

        IncidentSIASService

        AlarmeSIASProcessor

        TelecommandeController

        TICCOrderService

        RelayCommandProcessor

        IncidentMapper

        CompteurValidator

        DateUtils

        AdresseFormatter

        GenericDAO

        AbstractController

        HibernateUtil


        C.3 | Roadmap Phases (Gantt — Voir Section 12.1)

         


        Annexe D · Références et Standards

         

        D.1 | Cadres Méthodologiques

        1. TOGAF 9.2 (The Open Group Architecture Framework)

          • Phase A (Architecture Vision) → Event Storming

          • Phase B (Business Architecture) → User Stories BDD

          • Phase C (Information Systems) → Hexagonal Architecture

          • Phase D (Technology Architecture) → Kubernetes + PostgreSQL

        2. Domain-Driven Design (DDD) — Eric Evans, 2003

          • Bounded Contexts : SIAS, TICC, HAB, Référentiel

          • Aggregates : Incident (root), Tâche, Alarme

          • Value Objects : Adresse, Matricule Compteur

        3. Hexagonal Architecture — Alistair Cockburn, 2005

          • Ports (interfaces) : IncidentRepository, NotificationService

          • Adapters : PostgreSQLIncidentRepository, KafkaNotificationService

        4. C4 Model — Simon Brown

          • Niveau 1 (Context) : Systèmes externes (SPQR, SSOL, STIC)

          • Niveau 2 (Container) : SIAS API, SIAS UI, PostgreSQL, Kafka

          • Niveau 3 (Component) : IncidentService, TâcheService, AlarmService

          • Niveau 4 (Code) : diagrammes classes UML


        D.2 | Standards Techniques

        DomaineStandardVersionUsage
        REST APIOpenAPI Specification3.1Documentation contrats API
        AuthenticationOAuth2 RFC 6749 + OIDC2.0 / 1.0Keycloak
        MessagingCloudEvents1.0Format événements Kafka
        Database SchemaLiquibase4.27+Versioning schéma PostgreSQL
        LoggingElastic Common Schema (ECS)8.xLogs structurés JSON
        MetricsOpenMetrics (Prometheus)1.0Exposition métriques
        TracingOpenTelemetry1.0Tracing distribué
        ContainerOCI (Open Container Initiative)1.0Images Docker
        OrchestrationKubernetes1.29+Déploiement production

        D.3 | Bibliographie Académique

        1. Kruchten, P., Nord, R., Ozdimir, I. (2012). Technical Debt: From Metaphor to Theory. IEEE Software 29(6).

        2. Parnas, D. L. (1972). On the Criteria to Be Used in Decomposing Systems into Modules. CACM 15(12).

        3. McCabe, T. J. (1976). A Complexity Measure. IEEE Trans. Software Engineering SE-2(4).

        4. Martin, R. C. (2003). Agile Software Development: Principles, Patterns, and Practices. Prentice Hall.

        5. Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley.

        6. Vernon, V. (2013). Implementing Domain-Driven Design. Addison-Wesley.

        7. Richardson, C. (2018). Microservices Patterns. Manning Publications.

        8. Newman, S. (2021). Building Microservices (2nd ed.). O'Reilly Media.


        D.4 | Références CVE Sécurité

        CVEComposantSévéritéDescriptionMitigation
        CVE-2021-44228Log4j 1.x/2.x🔴 CritiqueLog4Shell — RCE via JNDIUpgrade Logback 1.5.x
        CVE-2021-32682Liquibase 3.6.x🔴 ÉlevéXXE injectionUpgrade 4.27+
        CVE-2019-12415Apache POI 3.x⚠️ MoyenXXEUpgrade 5.3+
        CVE-2019-14540Jackson 2.9.x⚠️ MoyenDeserializationUpgrade 2.17+
        CVE-2016-1000031Commons-FileUpload 1.3.2🔴 CritiqueArbitrary code executionUpgrade 1.5+

        D.5 | Référentiel GRDF — Utilisation ABJ (Software Factory)

        D.5.1 | Contexte

        Le document « Utilisation de ABJ – Software Factory – Confluence » décrit le cadre d’utilisation du moteur de build Java ABJ (Application Build Java) au sein de la Software Factory GRDF. Ce référentiel interne précise les bonnes pratiques, responsabilités, et règles de conformité à respecter pour tout projet Java intégré dans le SI GRDF.

        Il constitue une référence obligatoire pour les projets SAT, SIAS et TICC après séparation, et complète les standards de la DSI (sécurité, intégration continue, packaging, documentation, et déploiement).


        D.5.2 | Objectif d’ABJ

        ObjectifDescription
        IndustrialisationFournir un cadre standardisé de compilation, packaging et déploiement des applications Java.
        ConformitéGarantir l’alignement avec les règles DSI (sécurité, signatures, dépendances approuvées).
        TraçabilitéCentraliser les builds, versions et logs dans la Software Factory GRDF.
        InteropérabilitéAssurer la compatibilité avec les pipelines CI/CD internes (Jenkins, SonarQube, Nexus).
        AuditabilitéFaciliter les contrôles DSI via l’automatisation des tests et l’archivage des artefacts.

        D.5.3 | Processus Général d’Intégration (Workflow ABJ)

        Commit code source
        GitLab GRDF

        Déclenchement ABJ

        Compilation Maven
        + Vérifications Qualité

        Analyse SonarQube
        + Vérif dépendances autorisées

        Packaging automatisé
        app-*.jar + signatures

        Publication Nexus
        Software Factory GRDF

        Déploiement environnement
        de recette ou production

        Résumé du flux :

        1. Le code source est commité sur GitLab.

        2. ABJ déclenche la chaîne d’intégration continue (build + tests).

        3. Les dépendances sont validées selon la whitelist DSI.

        4. Les artefacts (.jar, .pom, .doc) sont signés et publiés dans Nexus.

        5. Le déploiement automatisé est ensuite opéré par la Software Factory (environnement de recette ou production).


        D.5.4 | Contraintes Techniques Clés

        DomaineRègle ABJImplication pour le projet SIAS/TICC
        Structure MavenModules conformes à groupId/artifactId normalisésChaque sous-module (SIAS, TICC, core-shared) doit être packagé indépendamment.
        VersioningSchéma X.Y.Z obligatoire, sans suffixe non approuvéCohérence à maintenir entre builds SIAS/TICC.
        DépendancesInterdiction des repos non approuvésToutes les libs doivent provenir du Nexus GRDF.
        QualitéAnalyse SonarQube obligatoireZéro blocant (Bugs/Codesmells critiques).
        DocumentationJavadoc minimale, changelog par buildLivraison systématique avec le jar.
        SécuritéScan CVE intégré avant publicationVérification automatique des dépendances tierces.

        D.5.5 | Responsabilités et Gouvernance

        ActeurRôleLivrables
        Développeurs / Architectes applicatifsGarantir la conformité du code aux règles ABJCode Maven conforme, tests automatisés
        Software Factory GRDFExploiter la chaîne CI/CD et auditer les buildsLogs, rapports SonarQube, artefacts Nexus
        DSI GRDFSuperviser la cohérence des environnements et des référentielsPolitique de version, whitelists, référentiels de sécurité

        D.5.6 | Positionnement dans le Présent Audit

        Dans le cadre du projet Séparation SIAS/TICC, ABJ est l’outil d’intégration officiel pour :


        D.5.7 | Synthèse et Alignement avec la Roadmap v4

        Phase de la Roadmap (Section 11)Exigence ABJ correspondanteLivrable attendu
        Phase 1 – Séparation logiqueValidation de deux builds distincts dans ABJapp-sias.jar, app-ticc.jar
        Phase 2 – Extraction du noyau communEnregistrement de core-shared.jar dans NexusLibrairie mutualisée signée
        Phase 3 – Migration technologiqueReconfiguration CI/CD ABJ pour PostgreSQLPipeline ABJ v2
        Phase 5 – Qualification finaleVérification automatique CVE et SonarCertificat de conformité ABJ

        D.5.8 | Conclusion

        Le référentiel ABJ – Software Factory GRDF n’est pas un simple outil de build : il constitue le socle de conformité logicielle et de gouvernance CI/CD imposé à toutes les applications Java du SI GRDF.

        L’Option A+ (refactoring guidé) retenue par Adservio s’y aligne naturellement : elle permet de réintégrer sans rupture les builds séparés SIAS/TICC dans cette chaîne tout en respectant les standards de qualité, sécurité et traçabilité attendus par la DSI.

         


        Annexe E · Glossaire

        TermeDéfinitionÉquivalent Français
        ASTAbstract Syntax Tree — représentation arbre du code sourceArbre de syntaxe abstraite
        BDDBehavior-Driven Development — tests écrits en langage naturel (Gherkin)Développement piloté par le comportement
        Bus FactorNombre de personnes clés dont l'absence bloque le projetFacteur autobus
        CDCChange Data Capture — réplication temps réel base de donnéesCapture de données modifiées
        CI/CDContinuous Integration / Continuous DeploymentIntégration/déploiement continus
        Coupling DensityMétrique : dépendances réelles / dépendances possiblesDensité de couplage
        CVECommon Vulnerabilities and Exposures — référence vulnérabilitésRéférence vulnérabilité
        DDDDomain-Driven Design — approche architecture centrée domaines métierConception pilotée par le domaine
        DTOData Transfer Object — objet simple transport donnéesObjet de transfert de données
        E2EEnd-to-End — tests complets parcours utilisateurTests de bout en bout
        EJBEnterprise JavaBeans — composants JEE (legacy)
        Event StormingWorkshop collaboratif capture processus métier par événementsAtelier événements métier
        FQNFully Qualified Name — nom complet classe Java (package + nom)Nom pleinement qualifié
        God ClassAntipattern : classe avec trop de responsabilités (> 20 dépendances)Classe Dieu
        GreenfieldDéveloppement nouveau système from scratchDéveloppement nouveau
        Hexagonal ArchitectureArchitecture Ports & Adapters (Alistair Cockburn)Architecture hexagonale
        JMSJava Message Service — API messaging JEE
        JPAJava Persistence API — ORM standard Java
        LiquibaseOutil versioning schéma base de données
        LOCLines of Code — lignes de codeLignes de code
        MVPMinimum Viable Product — version minimale fonctionnelleProduit minimum viable
        OAuth2Open Authorization 2.0 — standard authentification/autorisation
        OIDCOpenID Connect — couche identité au-dessus OAuth2
        ORMObject-Relational Mapping — mapping objet ↔ base relationnelleMapping objet-relationnel
        POCProof of Concept — prototype validation faisabilitéPreuve de concept
        SBOMSoftware Bill of Materials — inventaire dépendances logiciellesListe matériaux logiciels
        SLAService Level Agreement — engagement qualité serviceAccord niveau de service
        SOAPSimple Object Access Protocol — protocole web services XML
        Strangler PatternMigration progressive remplacement système legacyMotif étrangleur
        TCOTotal Cost of Ownership — coût total possessionCoût total possession
        TDDTest-Driven Development — écrire tests avant codeDéveloppement piloté par tests
        XXEXML External Entity — vulnérabilité injection XMLEntité externe XML

         


        Annexe F · Index des Artefacts et Preuves

        F.1 | Scripts d'Analyse Créés

        ScriptLocalisationLignesFonction
        discover_codebases.pypython/java_audit/320Détection projets Maven/Gradle
        audit_tool.pypython/java_audit/580Analyse AST, métriques, flags
        query_tool.pypython/java_audit/240Requêtes JSON databases
        coupling_analyzer.pypython/java_audit/430Analyse couplage SIAS/TICC
        visualize_coupling.pypython/java_audit/250Génération Mermaid/DOT
        1_discover.shpython/java_audit/scripts/80Pipeline découverte
        2_analyze_all.shpython/java_audit/scripts/120Pipeline analyse complète
        4_maven_analysis.shpython/java_audit/scripts/180Analyse Maven + dépendances
        5_coupling_analysis.shpython/java_audit/scripts/150Pipeline couplage

        Total : ~2 350 lignes de code Python/Bash créées pour cet audit


        F.2 | Bases de Données JSON Générées

        FichierTailleDescription
        output/sat-pre_database.json3.2 MBMétriques complètes SAT-PRE (618 classes)
        output/sat-hab_database.json0.8 MBMétriques SAT-HAB (100 classes)
        output/coupling/sat-pre-combined_coupling.json1.5 MBGraphe couplage 726 classes
        output/maven/*/deps.json0.4 MBArbres dépendances Maven
        output/maven/*/depgraph.json0.6 MBGraphes modules Maven

        Total : ~6.5 MB de données structurées


        F.3 | Rapports et Diagrammes

        DocumentLocalisationPagesStatut
        Rapport Audit v1 (English)reports/GRDF_SAT_PRE_HAB_Technical_Audit_Report.md55✅ Complet
        Rapport Audit v2 (Français)reports/GRDF_SAT_PRE_HAB_Technical_Audit_Report_v2.md120CE DOCUMENT
        Pitch Présentationv2/01_pitch_presentation.md10✅ Complet
        53 Questions Clésv2/02_questions_cles_modele_donnees_flux.md18✅ Complet
        Rapport Réalignév2/03_rapport_audit_SIAS_realigne.md40✅ Complet
        Cartographie Couplagesv2/04_cartographie_couplages_SIAS_TICC.md15✅ Complet
        Outils Analysev2/05_outils_analyse_statique_crees.md12✅ Complet
        Diagramme Couplagev2/diagrams/sat-pre-coupling.md✅ Mermaid
        Diagramme Statsv2/diagrams/sat-pre-stats.md✅ Mermaid

        F.4 | Preuves Techniques (Code Extraits)

        EvidenceLocalisationDescription
        God Class #1app-pre-main/src/.../EcSatPreWkf001Controller.java:1-48771 dépendances, 487 LOC
        SQL Injection #1app-pre-main/src/.../IncidentDaoImpl.java:124-135String concatenation JPQL
        JMS Listener #1app-pre-main/src/.../IncidentCreationListener.java:45-78Queue jms/queue/IncidentCreation
        Javadoc Manquanteapp-pre-main/src/.../TraitementMasseServiceImpl.java:89-92Méthode publique sans doc

         


         

        FIN DU RAPPORT V6 · AUDIT TECHNIQUE SAT-PRE & SAT-HAB

         

        📞 Contacts Clés

        Document confidentiel — Propriété GRDF © 2025 Adservio Innovation Lab Olivier Vitrac, PhD, HDR | Head of Innovation Lab Email: olivier.vitrac@adservio.com Date: 2025-11-16 Version: 6.0

         


        💬 Résumé Exécutif (1 phrase)

        L'analyse de 726 classes et 1 883 dépendances révèle un couplage SIAS/TICC de 0.36% (excellent), mais 590 classes non classifiables (81.3%) rendent le refactoring risqué → Option B Greenfield recommandée (14–18 mois, 200K€ TCO, 8/10 score) pour séparation SIAS/TICC avec architecture moderne (Hexagonal, DDD, Spring Boot 3.3, PostgreSQL 16, Kafka, Kubernetes).

         


        ⚡ Actions Immédiates Recommandées

        P0 — Urgent (Phase 0)

        P1 — Court terme (Phase 1)

        P2 — Moyen terme (Phase 2-3)

         


        📊 Statistiques du Rapport