通常、大規模なソフトウェアプロジェクトで実行時に発生する一時的な依存関係の問題にどのように取り組みますか?
過去3週間、私はソフトウェアの別のコンポーネント内で大規模なソフトウェアのコンポーネントを開始しようとしましたが、実行時にのみ知られる一時的な依存関係の問題が原因で断続的に停止します。
一時的な依存関係の問題とは、特定のプロジェクトの依存関係の特定の依存関係が実行時に他の依存関係と衝突し、不安定性や瞬時の障害を引き起こすことを意味します。
何百、何百もの依存関係が使用されており、ツールに関連する約50のサブプロジェクトが他のチームによって分離されており、すべてのモジュールが相互に深くネストされた依存関係を持っています。プロジェクトの規模と複雑さを考えると、誰もがすべてのサブプロジェクトが何に使用されるのかを知りません。
この状況では、影響を受けるコンポーネントの依存関係ごとにDAGの視覚的な表現を生成し、実行時に衝突が発生する可能性のある場所を特定しようとしますか?他のサブプロジェクトで依存関係を管理する方法を制御できず、他の開発者が作成したJavaコードを変更できません
私が思いついたソリューションは、1〜2時間しか機能せず、その後、上流コンポーネントの変更により機能が停止します。上流コンポーネントの例は、私が取り組んでいるプロジェクトが依存する成果物であり、CIパイプラインの初期段階でビルドされます。
他の要求に応じて、使用されているテクノロジーに関する情報を含めます。情報が多すぎるために質問が閉じられたり、身体が長くなりすぎたりするリスクがあります。
- Mavenは依存関係管理に使用されます。そして
- SpringはDIコンテナーとして使用されます。
- 依存関係の問題のほとんどは、実行時に読み込まれる他のモジュールのコンテキストの結果として、Beanコンテキストの重複を伴います
- 製品は適切に動作し、単体テストのスモールガスド、およびプログラムの機能的な正確さを逃れる統合テストがあります
一般的に、特定のプロジェクトの依存関係の可能なすべての組み合わせを列挙することなく、依存関係の競合を解決する方法を識別するための言語にとらわれないアプローチを探しています。
プロジェクトを再構築したり、品質ゲートを追加したり、会社全体のパラダイムシフトを推進したり、解決策として言語を切り替えたりすることはできません。