2009-08-14 131 views
3

我知道你會故意要損壞一個文件可能看起來很荒謬,但我向你保證它有一個很好的理由。程序破壞文件?

在我的應用程序中,我有很多xml序列化正在進行。這反過來也意味着,我有很多反序列化。

今天我嘗試了一些災難場景。我在序列化操作期間重置了服務器,正如預期的那樣它破壞了xml文件。

問題是,試圖在恰當的時間「關閉」服務器以破壞文件並非真正最佳,首先它的運氣在其.0001毫秒寫入時間內捕獲操作,其次是服務器需要重新啓動。另外,由於其他原因,從服務器拔出插頭只是一個糟糕的主意。

是否有可以有效破壞文件的應用程序,以便該文件可用於在我的應用程序中進行測試?

回答

20

打開它在一個hex editor和樂趣twiddling位?

+1

沒想到這一點。這可能是「破壞文件」的一種方法 – 2009-08-14 18:37:03

+0

更簡單的方法是,只需創建一個空文件,其中包含您需要測試的名稱。 – EBGreen 2009-08-14 18:39:06

+1

當然,取決於「腐敗」的含義。 – EBGreen 2009-08-14 18:39:37

2

您是否試圖測試部分降級的文件?

如果你想測試你的程序如何反應壞的數據,爲什麼不使用任何隨機文本文件作爲輸入?

+0

想要嘗試和模擬在沒有完成的實際寫入操作期間發生的相同腐敗。儘可能地真實。 – 2009-08-14 18:39:00

+1

如果您使用的是* nix,請查看dd和「/ dev/urandom」 - 不能比此更隨機 - 例如dd if =/dev/urandom of =/my/random/file bs = 1024 count = 1024 - > 1 meg total random file – Matt 2009-08-14 18:40:37

+0

Linux的好解決方案,但這是基於Windows的:) – 2009-08-14 18:42:40

0

同意十六進制編輯器選項,因爲這將允許您介紹非文本值到文件,如空值(0×00)等

+5

只是爲了幫助你,StackOverflow提供這種輸入的方法是將其添加爲對其他答案的評論,因爲這根本不是單獨的答案。 – EBGreen 2009-08-14 18:48:31

+0

雖然只是評論,但很難獲得代表。 – Robert 2009-08-14 18:52:39

+0

但是,當你投票反對rep農業時,很難得到代表。 ;) – WCWedin 2009-08-14 18:57:31

5

這是一種落後Fuzz Testing的方法,即引入隨機變化,並看看你的應用程序如何應對。您可能會看到引用鏈接中提到的一些模糊測試框架。但就你而言,使用隨機生成器並在這些位置插入一些位來破壞它是很容易的。如果您有已知案例,那麼您當然可以使用現有的損壞文件。

0

如果您試圖模擬中斷寫入,則可能需要截斷表示序列化數據的字符串。如果你使用單元測試,這將是特別容易的,但記事本仍然非常可行。

當然,這只是一種錯誤的數據,但值得注意的是,以任何方式惡意格式化的XML基本上不再是XML,並且大多數解析器在語法的第一個符號時會立即拒絕它錯誤。

2

有幾種方法可以破解XML文件。思考一些: - 不完整的XML標籤(截斷的XML)。 - 意外的數據內容(二進制/更多文本)。 首先,我會複製一個「正確/完整」的XML文件,並且會手工修改它。對於第二個,我將連接部分XML文件與文件系統上的任何二進制文件。

十六進制編輯器似乎有點過於多的我;)

1

我會強烈建議您不進行測試做「隨機字節」腐敗。你不僅不知道自己在做什麼測試狀態,如果你發現一個錯誤,你很難保證下一個測試會驗證修復。

我的建議是以可預測的方式手動(或以編程方式)破壞文件,以便您知道正在測試的內容以及如果必須重新進行測試。(當然,您可能需要多種可預測的方法來確保防止文件中任何地方出現腐敗)

+0

有一些問題最好用隨機數據測試 - 例如,當操作的性質導致有效輸入的組合爆炸時。這不是其中之一; +1。不知道爲什麼這是倒票。 – WCWedin 2009-08-14 20:05:49