In che modo affronterai normalmente i problemi di dipendenza transitoria 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 pezzo di software all'interno di un altro componente del software, ma muore 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 certe dipendenze delle dipendenze di un determinato progetto si scontrano con altre dipendenze in fase di esecuzione, causando instabilità o errore immediato.
Esistono centinaia e 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 nidificate l'una dall'altra. Nessuno sa a cosa servono 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 tentare di determinare dove potrebbero verificarsi collisioni durante l'esecuzione? Non ho alcun controllo su come le dipendenze sono gestite in altri sottoprogetti e non posso modificare alcun codice Java che sia stato scritto da altri sviluppatori
Le soluzioni che ho trovato funzionano solo per un'ora o due e poi smettono di funzionare a causa di cambiamenti nei componenti upstream. Un esempio di un componente upstream è un artefatto su cui il progetto a cui sto lavorando dipende da quale è stato costruito in una fase precedente nella pipeline CI.
Alle richieste di altri , includerò informazioni su quale tecnologia viene utilizzata, con il rischio di chiudere la domanda per fornire troppe informazioni o il corpo troppo lungo:
- Maven è usato per la gestione delle dipendenze; e
- Spring viene utilizzato come contenitore DI;
- La maggior parte dei problemi di dipendenza coinvolge contesti di bean sovrapposti come risultato dei contesti di altri moduli caricati in fase di esecuzione
- Il prodotto funziona correttamente e ci sono smorgasbords di unit test e test di integrazione per eludere alla correttezza funzionale del programma
In generale, sto cercando un approccio indipendente dalla lingua per identificare i modi di risolvere i conflitti di dipendenza senza enumerare tutte le possibili combinazioni delle dipendenze di un dato progetto.
Non riesco a riprogettare il progetto, aggiungere ulteriori gate di qualità, spingere per cambiamenti di paradigma in tutta l'azienda o cambiare lingua come risoluzione.