Stage Technique INPT - SEEDS Research Team
Durant mon stage de deuxième année à l’INPT, j’ai rejoint l’équipe de recherche SEEDS pour travailler sur un projet mêlant théorie des graphes et architecture logicielle. L’objectif était de concevoir un outil capable d’analyser des architectures microservices afin de détecter automatiquement les mauvaises pratiques, notamment les dépendances cycliques qui rendent les systèmes difficiles à maintenir et à faire évoluer.
Pour répondre à ce besoin, j’ai modélisé les architectures comme des graphes orientés où chaque service représente un nœud et chaque interaction une arête. Cette représentation m’a permis d’appliquer des algorithmes issus de la théorie des graphes, notamment celui de Tarjan, pour identifier les cycles et mesurer le degré de couplage entre les services. L’idée était d’offrir aux architectes une vision claire de la structure de leur système avant même la phase d’implémentation.
J’ai développé l’interface de l’application avec React et React Flow, afin de permettre aux utilisateurs de modéliser visuellement leurs architectures et de voir en temps réel les dépendances détectées. Le backend, basé sur Python et NetworkX, réalisait les calculs d’analyse et renvoyait des recommandations. Cette approche combinait la rigueur scientifique de la recherche avec les exigences de performance d’une application moderne.
Les principaux défis concernaient la performance de l’analyse sur des architectures de grande taille et la lisibilité des graphes complexes. J’ai travaillé sur des optimisations d’algorithmes et sur une meilleure organisation visuelle des nœuds pour rendre la navigation plus fluide. Une autre difficulté a été de valider la fiabilité de l’outil : j’ai comparé les résultats de l’analyse avec des architectures réelles et discuté des écarts avec les chercheurs de l’équipe.
Travailler sur ce projet m’a appris à passer d’un papier de recherche à une solution concrète, à manipuler des concepts avancés comme la cohérence architecturale et la détection d’anti-patterns, et à collaborer efficacement avec des chercheurs tout en gardant une approche orientée produit. J’ai mené ce travail en binôme, en utilisant Git pour organiser le développement, suivre les itérations et assurer une collaboration fluide entre la partie scientifique et la partie logicielle.