🏠
  • 3. Analyse du Modèle de Données

    3.1 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 :

    3.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

    3.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.

    3.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 :


     


    4. Analyse de Couplage SIAS/TICC — Résultats Détaillés

    4.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

    4.2 Répartition des Classes par Domaine

    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)

    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 :

    Consolidation v5 — Approche Hybride

    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

    Rationale :

     

    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 :

     

    4.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)

     

    4.4 God Classes — Analyse Détaillée

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

    Top 3 God Classes Critiques

    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)

    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

    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

    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).

     

    4.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.

     

    4.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

     

    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

     

    Effort de migration

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

     


    4.7 Matrice de Complexité et Faisabilité par Module

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

    4.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)

    4.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.

    4.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 :

    4.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 :

    4.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)


    #


     


    5. Qualité du Code — Métriques et Recommandations

    5.1 Complexité Cyclomatique

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

    (1)Complexité=EN+2P

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

    Seuils de criticité :

    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

    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.

    5.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.

    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).

    5.3 Documentation (Javadoc)

    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.

    5.4 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é).