2008年6月25日 星期三

測試驅動開發

有一種關於開發方法的觀念,叫做「測試驅動開發」。意思是先寫下用來測試物件或程式功能的程式碼,然後再以「通過測試」為目標,開發物件或是程式功能。

不過我並沒有老老實實的用這個方法。

開發遊戲引擎的同時,我建立了一個專職拿來測試用的專案,隨時將需要測試的重要功能,寫一個小程式進行測試。算是做單元測試,也算是一種「測試驅動開發」的方法。

舉例來說,建立遊戲引擎所需要的數學函式庫之後,可以先寫一個測試程式來檢驗這個函式庫裡面的運算是否正確,而這個測試程式是要保留下來的,當做是整個開發專案的一部份。

保留下來有幾個作用。

第一,可以當作程式庫的應用範例程式。也許對於數學函式庫來說,不太需要這樣的應用範例,但是對於遊戲引擎的其他系統而言,這會是一個很好的範例程式。

第二,當我們對程式庫進行程式碼的修改之後,我們只需要將這個測試程式再跑個幾遍,就可以知道我們是不是已經將程式庫改壞掉了....這個很重要,因為一旦程式越來越龐大,那麼程式越改Bug越多的狀況就會常常出現......

用正確的測試方式也很重要。例如說,要測試數學函式庫裡的反矩陣運算是否正確,可以將矩陣與它的反矩陣相乘,所得的結果必須為單位矩陣,如果不是,那麼這個反矩陣運算就有問題。不需要把另外的演算法寫在測試程式中進行測試,一來我們未必能找到其他的演算法,二來,誰知道這另一個演算法有沒有寫錯咧?

這種開發的觀念很有用,也很實在。隨著開發的內容越來越多,範例測試程式也會跟著越來越多,因為有測試程式隨時可以檢查,開發的內容可以一直保持著好的程式穩定性,不至於出什麼太大的狀況。

沒有留言: