私は以前の仕事でこの問題に遭遇し、現在の仕事でも再び発生しました。つまり、運が非常に悪いか、この問題を解決できるツールまたは組織システムを認識していません。
どちらの場合も、最終製品はいくつかの独立したコンポーネントで構成され、それぞれが合意されたインターフェースを介して隣接コンポーネントと通信していました。問題は、時間の経過とともにインターフェイスが変更され、すべてが機能し続けるように、それぞれのコンポーネントも更新する必要があることです。
それ自体は問題ありません。問題は、SCM の履歴をさかのぼろうとすると、バグの追跡が非常に困難になることです。ある時点で、デバッグしようとしているコンポーネントがシステムの他の部分と互換性がなくなり、それらに対してテストできなくなるためです。それらをロールバックすることもありません。
次の例を見てください。
- クライアント/サーバー製品があり、簡単にするために、どちらも完全に動作する状態で開始するとします。これらのバージョンを client-1.0 および server-1.0 と呼びます。
- しばらくすると、バグ修正と機能が両方に加えられます。これで client-1.7 と server-1.2 になりました。
- サーバーのインターフェイスが変更されたため、クライアントも変更する必要があります: server-2.0 と client-1.8。
- バージョン 1.9 のクライアントでバグが見つかったため、以前のバージョンをテストして、サーバーで動作しなくなった場所を確認したいと考えています。ただし、1.8 を過ぎた場合は、サーバーも元に戻す必要があります。
私が提供するシナリオ例は非常に単純化されていますが、問題は次のとおりです。クライアントとサーバーのどのバージョンが相互に互換性があるかを強制する最良の方法は何ですか?
ドキュメントを通じてこれを行うことを検討しましたが、必然的に、人間の性質が勝利し、誰かが自分のコンポーネントまたは他のコンポーネントの更新を忘れます。バージョンを一致させることも考えました(つまり、サーバーが2.0になると、クライアントも昇格します)が、問題は、クライアントがサーバーとは関係のない他のコンポーネントの依存関係を持っている可能性があるため、意味がありません全体的にバージョンを更新します。
この問題を解決するには、何らかの解決策が必要です。誰か提案や私の研究の出発点はありますか?