Bagaimana Anda biasanya mendekati masalah ketergantungan transitif yang terjadi pada saat dijalankan dalam proyek perangkat lunak besar?
Selama tiga minggu terakhir, saya telah mencoba untuk memulai komponen dari sebagian besar perangkat lunak dalam komponen lain dari perangkat lunak, tetapi sebentar-sebentar mati karena masalah ketergantungan transitif yang hanya diketahui pada saat run-time.
Dengan masalah dependensi transitif, maksud saya bahwa dependensi tertentu dari dependensi proyek tertentu bertabrakan dengan dependensi lain pada saat run-time, menyebabkan ketidakstabilan, atau kegagalan instan.
Ada ratusan, berdasarkan ratusan dependensi yang digunakan, dan ada sekitar 50 sub proyek yang terkait dengan alat yang dikerjakan secara terpisah oleh tim lain, di mana semua modul memiliki ketergantungan yang sangat bersarang antara satu sama lain. Tidak ada yang tahu untuk apa semua sub proyek digunakan, mengingat skala, dan kompleksitas proyek.
Dalam situasi ini, akankah Anda mencoba untuk menghasilkan representasi visual dari DAG untuk masing-masing dependensi komponen yang terpengaruh, dan berupaya menentukan di mana tabrakan dapat terjadi pada saat run-time? Saya tidak memiliki kendali atas bagaimana dependensi dikelola di sub-proyek lain, dan tidak dapat mengubah kode Java apa pun yang telah ditulis oleh pengembang lain
Solusi yang saya buat hanya bekerja selama satu jam, atau dua, dan kemudian mereka berhenti bekerja karena perubahan komponen hulu. Contoh dari komponen hulu adalah artefak yang bergantung pada proyek yang saya kerjakan yang dibangun pada tahap awal dalam pipa CI.
Atas permintaan orang lain , saya akan memasukkan informasi tentang teknologi apa yang digunakan, dengan risiko pertanyaan ditutup karena terlalu banyak memberikan informasi, atau tubuh terlalu lama:
- Maven digunakan untuk manajemen ketergantungan; dan
- Pegas digunakan sebagai wadah DI;
- Sebagian besar masalah ketergantungan melibatkan tumpang tindih konteks kacang sebagai akibat dari konteks modul lain yang dimuat saat run-time
- Produk ini bekerja dengan baik, dan ada banyak tes unit, dan tes integrasi untuk menghindari ketepatan fungsional program.
Secara umum, saya mencari pendekatan agnostik bahasa untuk mengidentifikasi cara menyelesaikan konflik ketergantungan tanpa menyebutkan semua kombinasi yang mungkin dari ketergantungan proyek yang diberikan.
Saya tidak dapat merancang ulang proyek, menambahkan gerbang kualitas tambahan, mendorong perubahan paradigma di seluruh perusahaan, atau beralih bahasa sebagai resolusi.