Jak zwykle podchodzisz do problemów zależności przechodnich, które występują w czasie wykonywania w dużych projektach oprogramowania?
Przez ostatnie trzy tygodnie próbowałem uruchomić komponent dużego oprogramowania w innym komponencie oprogramowania, ale okresowo umiera z powodu problemów z przechodnią, które są znane tylko w czasie wykonywania.
Przez problemy zależności przechodnich rozumiem, że niektóre zależności zależności danego projektu kolidują z innymi zależnościami w czasie wykonywania, powodując niestabilność lub natychmiastową awarię.
Istnieją setki zależności od setek zależności i istnieje około 50 podprojektów związanych z narzędziem, nad którymi pracują w izolacji inne zespoły, w których wszystkie moduły głęboko zagnieżdżają zależności między sobą. Nikt nie wie, do czego służą wszystkie podprojekty, biorąc pod uwagę skalę i złożoność projektu.
Czy w tej sytuacji spróbujesz wygenerować wizualną reprezentację DAG dla każdej zależności komponentu, którego dotyczy problem, i spróbujesz ustalić, gdzie w czasie wykonywania mogą wystąpić kolizje? Nie mam kontroli nad zarządzaniem zależnościami w innych podprojektach i nie mogę zmienić żadnego kodu Java napisanego przez innych programistów
Rozwiązania, które wymyśliłem, działają tylko przez godzinę lub dwie, a potem przestają działać z powodu zmian w komponentach początkowych. Przykładem wcześniejszego komponentu jest artefakt, od którego zależy projekt, nad którym pracuję, od którego jest budowany na wcześniejszym etapie w potoku CI.
Na prośby innych osób zamierzam podać informacje o tym, jaka technologia jest używana, na ryzyko zamknięcia pytania za dostarczenie zbyt dużej ilości informacji lub zbyt długiego ciała:
- Maven służy do zarządzania zależnościami; i
- Sprężyna jest używana jako pojemnik DI;
- Większość problemów związanych z zależnościami obejmuje nakładające się konteksty komponentu bean w wyniku załadowania kontekstów innych modułów w czasie wykonywania
- Produkt działa poprawnie, a istnieją testy zawierające testy jednostkowe i testy integracyjne, aby uniknąć poprawności działania programu
Zasadniczo szukam niezależnego od języka podejścia do identyfikowania sposobów rozwiązywania konfliktów zależności bez wyliczania wszystkich możliwych kombinacji zależności danego projektu.
Nie mogę ponownie zaprojektować projektu, dodać dodatkowych bramek jakości, naciskać na zmiany paradygmatu w firmie ani zmieniać języków jako rozdzielczości.