[心得] 測試先行作業與相關心得 PART2

分類: 軟體測試 作者: daniel

30 七月 2009

經過上次歡樂(?)的偽噗浪網址轉換器後,本週的作業是「編碼解碼器」;完全沒有測試先行概念的我,首先當然就專注在編碼解碼資源的搜尋上囉!拜 Google 大神後發現也不少推薦的可逆的加密演算法:知名的 AES3DES,雖然網路上提供許多詳細又完整的 PHP 實踐方式,但是跟此次作業要求的「最後呈現的方式必須為數字」的條件不符。後來稍微看了一下之前在專案中曾經使用過的 XXTEA,發現裡面就提供數字轉字串,與字串轉數字的函數;真是太棒了!

整個程式的思考概念是從 Andrew 提供的靈感開始:「將 4 個字元的字串分拆為字元,再由單個字元轉換為 4 個數字;最後第 17 個數字則為前 16 個數字的驗證碼」(感謝 Andrew 的分享^^);不過準備開始的時候發現,測試的部分不知道要如何下手:「測試時,利用 function 編碼後的字串 = function 編碼後的字串?既然用到同一個 function 不是永遠相等嗎?」,所以問了一下 Jace 的用意。才發現我從 function 開始的思考方式就是錯誤的,以「測試先行」的概念來看,應該要先決定編碼過後呈現的字串,反推 function 撰寫的公式!

可是令我感到困惑的是,既然 function 就是編碼的公式;那「利用 function 編碼後的字串 = 利用公式編碼後的字串」,這還是永遠的等式啊!?我整個呈現鬼打牆的狀態!(暈)「測試先行」的概念可能是著重在思考邏輯的步驟上吧。原本的思考方式是:想 function -> 測試需求 -> 通過測試 -> 完成;但是測試先行的思考方式是:預測結果 -> 推導 function -> 測試需求 -> 通過測試 -> 完成。怎麼看都是後者比較花時間!(囧)

原本對數學就苦手的我,對於推導公式的過程是完全的頭大啊!(囧)因為昨天跟 Jace 討論的時候有提到查表法,好像並沒有限制這個方法;索性我就把 XXTEA 的公式做成密碼表,根據這個密碼表進行編碼解碼的動作囉~這次的作業還不僅是練習測試先行的概念,同時帶有專案管理的概念,要把 Jace 模擬為客戶,並向他提出需求上沒有的問題;是老師的用心良苦,也是學生的額外課題(囧)!

對我來說測試先行的優點在於,思考的邏輯更為清晰;就好像畫素描一樣,必須先從大輪廓開始,在一步步修飾細部才能唯妙唯肖。缺點是必須經過比較多步驟,可能會增加許多不必要的時間。畢竟當畫素描是一個有限定時間的考試時,雖然慢工出細活,但能不能拿到高分就難說了~^^|||

測試先行作業 PART2 下載(090804修正程式)

3 Responses to [心得] 測試先行作業與相關心得 PART2

Avatar

fillano

七月 31st, 2009 at 10:06 上午

如果我要寫這個例子,我會把它做成幾個方法的協作:把字串拆成字元陣列(不過php的字串好像可以直接這樣操作)、把字元轉換成四個小於10整數的陣列、從整數陣列產生一位10base整數檢查碼、主方法,然後把這些串在一起。

這樣可以先測試各個方法有沒有依照預期運作,在主方法裡面有沒有依照預期執行等等。

演算法的步驟不是只有一個,如果全部寫在一個方法裡,那當然只能看它產出的結果對不對了...

一點小小意見,僅供參考啦。

Avatar

daniel

七月 31st, 2009 at 10:18 上午

原來如此,把 function 分拆成更多小 function,再對這些步驟進行個別的單元測試;的確是大大的提高了測試的可用性,同時也讓錯誤發生時的判斷能更有依據,思路更為清晰,感謝分享^^

...不過如此一來撰寫時所花費的時間也會大大的增加(噗)^^|||

Avatar

fillano

七月 31st, 2009 at 11:15 上午

但是如果需求修改,程式的彈性會比較大(例如要修改char->int array的演算法,或是要提高效能時我只要改這一個方法,不必動到主方法,這樣可以減少對相關程式的影響。甚至需要的話可以微調架構讓它能抽換演算法)。另外的考慮就是要拆出方法時,也需要針對方法的重用性等來做決策。

我要留言

關於這裡

這個部落格分享了哇寶在電子商務領域的技術及資訊,希望能讓更多人一起為台灣的網路產業加油。