私がやろうとしていること:
ソースファイルを変更した後、開発者が静的な値を増やしたいとします。開発者がバージョンをインクリメントできないと、エラーがスローされます。ソースコードを変更せずにJavaクラスオブジェクトのハッシングを変更する
私は何をしていますか:
私は、クラスオブジェクトから入力ストリームを取得し、MD5ハッシングアルゴリズムで実行するテストプログラムを持っています。どの時点で私はハッシュとバージョン番号を記録し、データ対を形成する。バージョンの変更なしでハッシュが変更された場合、エラーがスローされます。
私の問題は次のとおりです。
ほとんどの場合、コードは意図したとおりに動作し、クラスが変更されたときに開発者のバージョンが認識されません。しかし、実際のソースコードに明らかな変更がなくても、出力ハッシュの断続的な変更に遭遇しています。
私のテストのための私の方法は次のとおりです。
- テスト01:コンパイルコード、実行テストプログラム、および記録のハッシュ。
- テスト02:クラスファイルを削除し、コードをコンパイルし、テストプログラムを実行し、ハッシュを記録します。
- テスト03:クラスファイルを削除し、コードを変更し、コンパイルし、テストプログラムを実行し、ハッシュを記録します。 (この時点でハッシュが変更されます)
- テスト04:クラスファイルを削除し、前のビルドの変更を元に戻し、コンパイルしてテストプログラムを実行し、ハッシュを記録します。 Test04後
、変更が元に戻されているので、ハッシュががTEST02からハッシュと同じでなければならない、しかし、これは当てはまりません。
私の質問は
私は見ていないか、
ありがとうございます。
serialVersionUIDを使用できませんでしたか? http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf http://www.mkyong.com/java-best-practices/understand-the-serialversionuid/ –
変更を検出しますか?コード、またはクラスのパブリックインターフェイスだけに? – msandiford
私は、これらの変更がクラスファイルに埋め込まれたタイムスタンプ/日時の問題であると考えています。達成しようとしている再現性は、使用しているコンパイラとそのスイッチの影響を受けます。あなたはコード署名を見ましたか?たぶんそれはあなたの要求にあなたを助けるかもしれません。変更を見つけるためにソースファイルをハッシュ/トラッキングする方が良いかもしれません。 – vasquez