Come si affrontano normalmente i problemi di dipendenza transitiva che si verificano in fase di esecuzione in progetti software di grandi dimensioni?
Nelle ultime tre settimane, ho cercato di avviare un componente di un grosso software all'interno di un altro componente del software, ma esso si interrompe in modo intermittente a causa di problemi di dipendenza transitiva che sono noti solo in fase di esecuzione.
Per problemi di dipendenza transitiva, intendo che alcune dipendenze delle dipendenze di un determinato progetto si scontrano con altre dipendenze in fase di esecuzione, causando instabilità o fallimento immediato.
Ci sono centinaia, su centinaia di dipendenze in uso e ci sono circa 50 sottoprogetti associati allo strumento su cui si lavora isolatamente da altri team, in cui tutti i moduli hanno dipendenze profondamente annidate tra loro. Nessuno sa a cosa servano tutti i sottoprogetti, date le dimensioni e la complessità del progetto.
In questa situazione, proveresti a generare una rappresentazione visiva del DAG per ciascuna delle dipendenze del componente interessato e tenteresti di determinare dove possono verificarsi collisioni in fase di esecuzione? Non ho alcun controllo su come vengono gestite le dipendenze in altri sottoprogetti e non posso modificare alcun codice Java scritto da altri sviluppatori
Le soluzioni che ho escogitato funzionano solo per un'ora o due e poi smettono di funzionare a causa di cambiamenti nei componenti a monte. Un esempio di un componente a monte è un artefatto da cui dipende il progetto su cui sto lavorando, che è stato costruito in una fase precedente della pipeline CI.
Su richiesta di altri , includerò informazioni su quale tecnologia viene utilizzata, a rischio di avere la domanda chiusa per fornire troppe informazioni o che il corpo si allunghi troppo a lungo:
- Maven viene utilizzato per la gestione delle dipendenze; e
- La primavera è usata come contenitore DI;
- La maggior parte dei problemi di dipendenza riguardano contesti di bean sovrapposti a seguito del caricamento di contesti di altri moduli in fase di esecuzione
- Il prodotto funziona correttamente e sono disponibili gruppi di test unitari e test di integrazione per eludere la correttezza funzionale del programma
In generale, sto cercando un approccio indipendente dal linguaggio per identificare i modi per risolvere i conflitti di dipendenza senza enumerare tutte le possibili combinazioni delle dipendenze di un determinato progetto.
Non posso riprogettare il progetto, aggiungere ulteriori porte di qualità, spingere per cambiamenti di paradigma all'interno dell'azienda o cambiare lingua come risoluzione.