我想要做的事:
我想確保在對源文件進行任何更改後,開發人員會增加開發者設置的靜態值。如果開發人員無法增加版本,則會引發錯誤。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/ – 2012-02-13 06:47:12
是否要檢測更改到代碼,或只是該類的公共接口? – msandiford 2012-02-13 07:35:34
我懷疑這些更改是嵌入類文件中的某處的時間戳/日期時間問題。您嘗試實現的可重現性也受編譯器及其所使用的開關的影響。你看過代碼簽名嗎?也許它可以幫助你滿足你的要求。哈希/跟蹤源文件以查找更改可能會更好。 – vasquez 2012-02-13 07:42:44