私が取り組んでいるレガシー プロジェクトには、一連のバイナリ jar ファイルの形式でいくつかの外部ライブラリが含まれています。分析と潜在的なパッチ適用のために、このライブラリのソースを受け取り、それらを使用して新しいバイナリを構築し、詳細で十分な長さの回帰テストを行った後、これらのバイナリに切り替えることにしました。
すでにソースを取得してビルドしていると仮定します (実際には計画段階です)。実際のテストの前に、いくつかの「互換性チェック」を実行して、ソースが「古い」バイナリとは劇的に異なるものを表している可能性を排除したいと思います。
このjavap
ツールを使用して、コンパイルに使用された JDK のバージョンを抽出できました (少なくとも JDK のバージョンであると思います)。それによると、バイナリはメジャー バージョン 46 とマイナー 0 を使用してビルドされました。この記事によると、JDK 1.2 にマップされます。
ソースのコンパイルに同じ JDK が使用されると仮定します。
問題は、これらのバイナリが両方とも同じソースから構築されている場合、信頼できる効果的な検証方法があるかどうかです。すべてのメソッド シグネチャとクラス定義が同一であるかどうか、およびほとんどまたはすべてのメソッド実装が同一/類似しているかどうかを知りたいです。
ライブラリはかなり大きいので、逆コンパイルされたバイナリの詳細な分析はオプションではない可能性があると思います。