Comment abordez-vous normalement les problèmes de dépendance transitive qui se produisent au moment de l'exécution dans les grands projets logiciels?
Au cours des trois dernières semaines, j'ai essayé de démarrer un composant d'un gros morceau de logiciel dans un autre composant du logiciel, mais il meurt par intermittence en raison de problèmes de dépendance transitive qui ne sont connus qu'au moment de l'exécution.
Par problèmes de dépendance transitive, je veux dire que certaines dépendances des dépendances d'un projet donné entrent en collision avec d'autres dépendances au moment de l'exécution, provoquant une instabilité ou une défaillance instantanée.
Il existe des centaines, des centaines de dépendances en cours d'utilisation et environ 50 sous-projets associés à l'outil qui sont travaillés de manière isolée par d'autres équipes, où tous les modules ont des dépendances profondément imbriquées entre elles. Personne ne sait à quoi servent tous les sous-projets, étant donné l'ampleur et la complexité du projet.
Dans ce cas, tenteriez-vous de générer une représentation visuelle du DAG pour chacune des dépendances du composant affecté et tenteriez-vous de déterminer où des collisions peuvent se produire au moment de l'exécution? Je n'ai aucun contrôle sur la façon dont les dépendances sont gérées dans d'autres sous-projets et je ne peux pas modifier le code Java écrit par d'autres développeurs
Les solutions que j'ai trouvées ne fonctionnent que pendant une heure ou deux, puis elles cessent de fonctionner en raison de changements dans les composants en amont. Un exemple de composant en amont est un artefact dont dépend le projet sur lequel je travaille et qui est construit à un stade antérieur dans le pipeline CI.
À la demande des autres , je vais inclure des informations sur la technologie utilisée, au risque de clore la question pour avoir fourni trop d'informations, ou pour le corps trop long:
- Maven est utilisé pour la gestion des dépendances; et
- Le ressort est utilisé comme conteneur DI;
- La plupart des problèmes de dépendance impliquent des contextes de bean qui se chevauchent en raison du chargement des contextes d'autres modules au moment de l'exécution
- Le produit fonctionne correctement et il existe une multitude de tests unitaires et de tests d'intégration pour échapper à l'exactitude fonctionnelle du programme
En général, je recherche une approche indépendante du langage pour identifier les moyens de résoudre les conflits de dépendance sans énumérer à travers toutes les combinaisons possibles des dépendances d'un projet donné.
Je ne peux pas ré-architecturer le projet, ajouter des portes de qualité supplémentaires, pousser pour des changements de paradigme à travers l'entreprise ou changer de langue comme résolution.