🏠
  • 1. Méthodologie d'Audit

    1.1 Périmètre de l'Analyse

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

    1.1.X Périmètre d'Analyse — Définition des Classes et Nomenclature

    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)
    Justification des Écarts

    Analyse systématique (952 classes) :

    Analyse enrichie (904 classes) :

    Validation croisée :

    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.

    Recommandation pour les Livrables

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

    Rationale :

    Chiffre complémentaire : 904 classes (analyse enrichie)

    Usage :

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

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

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

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

    (1)σ=|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

     

    1.1.5 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 v5 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.

     

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

    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
    Impact Quantifié

    Réduction du délai d'audit :

    Amélioration de la couverture :

    Traçabilité :

    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 :

    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.

     

    1.2 Cadre Théorique

    1.2.1 Métriques de Couplage

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

    Densité de couplage global :

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

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

    Règles empiriques (Martin, 2002) :

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

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


     


    2. Architecture Actuelle — État des Lieux

    2.1 Vue d'Ensemble

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

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

    2.2 Modules et Dépendances

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

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

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

    2.3 Architecture Logique Actuelle

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

    2.3.2 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%)

     

     


    2.4 Propagation des Assignations par Graphe de Dépendances

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

     

    2.4.2 Méthode de Propagation

    É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

    É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é

    É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

    É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 %

    É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 %)

     

    2.4.3 Résultats Globaux

    2.4.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 %

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

     

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

     

    2.4.5 Interprétation Structurale

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

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

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

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

     

    2.4.6 Recommandations Opérationnelles

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

    2.4.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é.

     

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

     

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

     

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