iT邦幫忙

0

想要學習單元測試的話,有什麼比較好的入門書或網路資源嗎?

以前寫程式都是自己丟一些簡單的值去測試,事後都發現還是有思慮不周的地方,所以想要學比較完整的測試方法。

如果是php的開發人員,有什麼比較適合的入門書或者是網路資源嗎?我想要學習包括觀念還有框架的用法,謝謝。

網路資源

在台灣好像找不到類似的網站,有點汗顏...
http://www.cntester.com/Tools/List_162.shtml
fillano iT邦超人 1 級 ‧ 2008-04-20 18:55:32 檢舉
不小心把自己的回答殺了,又不能回復.....

另加一個:http://bbs.51testing.com/default.php

國內好像不太重視軟體測試....資源真的很少,看看大陸出版的測試方面的書就知道了。
28
davistai
iT邦大師 1 級 ‧ 2008-04-10 17:04:37
最佳解答

台北縣三重田中跟蘆洲圖書館有「專業PHP5程式設計指南」這本書,作者是FuecksHarry
,可以先借來看看合不合用,若是再買吧~~時機歹歹,加減省點吧??

16
pqr0007
iT邦研究生 1 級 ‧ 2008-04-09 18:29:39

試試各大書店資訊類叢書...

22
ploglin
iT邦新手 4 級 ‧ 2008-04-10 08:27:30

你可以參考"專業PHP5程式設計"這本書,之前博客來還賣蠻便宜的199,不過現在活動已經結束了,裡面有介紹一些phpunit的用法,整本書的內容寫的還不錯。
http://www.books.com.tw/exep/prod/booksfile.php?item=0010308209

16
john651216
iT邦研究生 1 級 ‧ 2008-04-11 12:08:58

參考一下重慶南路一帶的書店,那邊應有盡有有關電腦方面的書籍,每個人需求不同你可以跟電家詢問甚至可以請店家幫你找或者購買

22
海綿寶寶
iT邦超人 1 級 ‧ 2008-04-11 15:57:15

提供一個網路資源供參考
http://www.opensourcetesting.org/unit\_php.php

其中的 SimpleTest 最多人下載,
不妨參考看看

22
fillano
iT邦超人 1 級 ‧ 2008-04-20 19:39:39

之前不小心把自己的回答刪掉了,又沒辦法回復,真是抱歉阿。

關於單元測試,最重要的就是Kent Becker提出的xUnit架構,在Java下面就是JUnit,在php下面應該有不少選擇,我比較知道的是PHPUnit,在PEAR裡面有一些包括PHPUnit的套件:
http://pear.php.net/packages.php?catpid=43&catname=Testing

要在php做單元測試,先決條件是你的php程式有足夠的組織,讓單元測是有意義,最好是用物件導向的方式做,至少也要用函數把整個程式的分工做好,不然很難做單元測試。

通常單元測試的單位,是程式中不可再分割的單元,通常是函數或類別的方法。最基本的進行方式是傳參數給函數/方法,然後檢查他的反應是否正確。傳入的參數除了正常的狀況,還要包括邊際條件。例如變數型別、長度等等問題有沒有處理等等。要用單元測試來保證程式可靠的話,另外要注意的是測試覆蓋率的問題。你的程式中有邏輯分支的地方,例如if/then/else或switch/case的話,你的測試條件至少要把所有的程式碼都執行到,最好是所有的路徑組合也能測試到。但是這只是理想,因為看程式的複雜度,路徑組合可能會太多,全部覆蓋的成本太高了。從另外一方面來看,其實一個單元內的邏輯分支太多,也會造成維護的困難,所以如果因為邏輯分支太多而難以覆蓋時,其實應該考慮把一些功能分出去,減少這個方法/函數的負擔。

如果要做XP的TDD(提出xUnit概念的Kent Beck,同時也是提出XP的人喔),會碰到另外一個問題,就是測試先行。在測試先行的時候,跟你的方法/函數互動的其他類別方法或函數可能也都還沒些出來,但是不用這些你也寫不出測試。這時候會先用一個假的來代替,叫做stub。(所以其實在設計階段,應該就確定有哪些協作的單元跟他的介面)你的stub類別/方法/函數會先模擬預設的行為,讓你可以做測試,等到這些協作的類別/方法/函數開發好後,再用真的來代替(不過這一部分比較屬於整合測試的範圍,但是同樣可以用xUnit的自動化單元測試來做)

另一個新的單元測試策略是使用mock object,不過我不知道php有沒有這一方面的解決方案。mock object讓你可以透過他來模擬協作的類別,並且在過程中記錄狀態。用它可以減少一些做stub的功夫。目前java上常用的mock object可以支援reflection,所以可以傳interface給他就產生要用的mock,蠻方便的。

一些參考的資源:
JUnit網站,他上面還維護(收集?)了各種軟體的單元測試方案列表:
http://www.junit.org/
提出mock object概念的幾位人士的blog:
http://www.mockobjects.com/
大陸的一個測試論壇:
http://bbs.51testing.com/default.php
另外,當然也要看看Kent Beck的網站:
http://www.xprogramming.com/
對TDD有興趣,不能不提到重構,這是作者的網站:
http://www.martinfowler.com/

我要發表回答

立即登入回答