對於 Teddy 的底細略有了解的鄉民們,應該知道 Teddy 博速論文研究的是軟體『例外處理』(exception handling)。如果一個軟體在執行時妥善地處理所遭遇到的例外情況,我們就說這個軟體很 robust,在此中文姑且稱之為『強壯』。一個強壯的軟體,遇到例外不會假裝沒事欺騙使用者,更不會隨隨便便的就當機
就好像沒有人希望買到一台一撞就爛的汽車一樣,相信也沒有人願意使用動不動就死當或是造成資料損毀的軟體(暈到死系列軟體具有治外法權,不在此限)。問題來了,使用者要如何判斷一個軟體系統強不強壯?而稍微有點良心的軟體開發人員要怎麼自我評估軟體夠不夠強壯到可以拿給使用者用?
這邊 Teddy 提供一個簡單的方法,藉由撰寫 robustness stories (強壯故事?好爛的翻譯) 來表達軟體例外處理的需求。Teddy 用 SyncFree 這個軟體舉個實際的例子說明。SyncFree 是一個跨平台的檔案同步軟體,可以雙向同步來源與目的資料夾中的檔案,也可以單向的把來源資料夾中的檔案備份到目的資料夾中。SyncFree 是用 Java 開發的軟體,在Windows 和 Linux 平台上都可以正常的執行。以下是 SyncFree 在 Ubunut 9.10 x64 執行的畫面。
使用 SyncFree 的人(就是 Teddy 啦),最擔心的就是執行 SyncFree 之後檔案並沒有真正同步,以及發生檔案損毀的問題。為了評估 SyncFree 是否夠強壯到可以保護 Teddy 的資料,Teddy 寫了以下這幾個 robustness stories 。
- 身為使用者,Teddy 希望當來源或目的磁碟機容量不足時,執行 SyncFree 雙向同步不會造成檔案複製不完整 (不會影響資料正確性)。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若來源目錄不存在,不會毀損目的目錄中的資料。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若目的目錄不存在,不會毀損來源目錄中的資料。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若有檔案被其他使用者刪除,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若有檔案被其他使用者改名,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若有檔案被其他使用者鎖住,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若遇到唯讀的檔案,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若使用者操作檔案的權限不足,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若來源檔案檔名太長無法複製到目的磁碟,不會造成同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若檔名中有特殊編碼的字元,不會造成同步錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 透過網路同步檔案時若網路中斷,不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若 SyncFree 被殺掉或電腦當機或電源中斷,不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若 Teddy 中斷同步執行,不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步檔案時若發生 out of memory exception,不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步單一檔案大小為 20G 的檔案不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望使用 SyncFree 同步20萬個檔案不會造成檔案複製不完整或同步資料錯誤。
- 身為使用者,Teddy 希望 SyncFree 執行完畢之後不會鎖住檔案造成磁碟機無法卸載。
- 身為使用者,Teddy 希望即使來源與目的電腦時間不同步,SyncFree 還是可以正確地同步檔案。
如果上面這 18 個需求 SyncFree (或是任何一個檔案同步軟體) 全部都可以做到,那麼鄉民們應該可以放心的把心愛的資料交給 SyncFree 來同步或備份。當然,前提是在沒有任何例外發生的情況下,SyncFree 的功能要能正常執行,也就是說雙向同步或是單向備份之後,兩邊的資料要是正確的。如果正常功能都不正確 (correctness),就不用談例外處理的問題了 (robustness)。
什麼,你問 Teddy Syncfree 有沒有滿足這 18 個需求?
Teddy 說:如果有,就不會寫這一篇部落格了。
沒有留言:
張貼留言