2011-08-22 15 views
3

在SDLC中,測試過程應該在實施後正確。但是,測試驅動開發鼓勵我們在執行時進行測試。在我的講座課程中,教授說測試案例應該是設計的一部分。什麼時候應該設計和記錄我的測試用例?

我是一名初級開發人員,爲實現新功能,何時應設計和記錄我的測試用例?

我發現在完成實施後測試所有情況並不那麼實際。這是因爲一旦案件失敗,我必須更改代碼並重新測試所有案件。是否有另一種方法可以克服並避免這種情況?我知道自動化睾丸是解決方案之一,但不知何故,自動化睾丸不能刺激所有的測試案例,尤其是涉及不同方面的集成測試案例。

另外,在我的測試用例中,我應該測試代碼的所有部分嗎?或者只是測試該功能請求的功能?或者它實際上取決於你得到了多少時間?

非常感謝。

+0

太多問題:) - 自動化測試不需要模擬所有測試案例,只需要那些應該工作的。集成測試用例可以由端到端的自動化測試來覆蓋。是的,你應該測試你想要工作的所有代碼。 – Gishu

回答

5

你的問題不容易回答,因爲如你所說,「這實際上取決於你得到多少時間。」這裏有一些意見,但:實施後

測試:沒有

作爲一個程序員,你對彼此的頂部堆疊多個期限的昂貴和稀缺資源。如此有效,這意味着「永不測試」。在你實現了一段代碼之後,你將繼續閱讀下一段代碼,並且意味着當你有時間時(你從來沒有時間)回來寫測試。

還有你提到的問題。如果在編寫代碼之後執行所有測試,並且測試發現某些根本錯誤的內容,則必須返回並修復所有代碼以及所有測試。

在實施

測試:

這種方法實際上是真正有用的,一旦你得到一個節奏吧。你寫了一個類,然後寫一點單元測試,並不斷修改你的測試和代碼,直到完成。我相信它實際上比沒有測試編寫代碼更快。

當處理大型項目時,它也特別有用。運行一個單元測試以查看一個小模塊是否工作是即時的。構建和加載整個應用程序以查看一個小模塊是否正常工作可能需要幾分鐘的時間。它也可能會打斷你的注意力(至少花費10分鐘)。

什麼測試:儘可能

100%的測試覆蓋率大概是從來沒有實用。但絕對測試你的程序的關鍵部分,執行數學計算或許多業務邏輯的東西。儘可能測試剩餘的所有東西。沒有理由測試一個「toString()」函數,除非這對於業務邏輯或某事來說是關鍵的。

此外,保持您的測試儘可能簡單,只是輸入和輸出。我的大多數測試功能都是兩三行。如果你的函數很難測試,因爲組合太多了,這表明你的函數可能需要分解一點點。確保測試邊緣案例和「不可能」的場景。

+0

感謝您的選擇,我非常同意你的觀點,我從來沒有時間回來寫測試。順便說一下,一些函數很難測試(特別是在使用很多不同的obj的java中)好吧,「分解一點點」,你是說把函數分解成不同的部分? 你會在實現它之前爲你的代碼設計測試用例嗎? –

+0

是的。我在考慮實現的功能非常長或者需要大量參數。就像@JVerstry所說的那樣,一些功能是不可測試的。但是通常可以將大塊函數中的塊分解爲可測試的塊。 – Seth

+0

關於測試設計,我通常不會從功能設計中分出測試用例設計。對我而言,他們是一回事。我的測試通常集中於參數驗證,這有助於我定義行爲應該是什麼。也許我的函數參數是一個對象引用和一個正數。所以我寫了一個發送空引用的測試。在這種情況下該函數是否應該返回null?如果我傳遞一個負數,該函數是否會拋出某種無效的參數異常?所以這個函數規定了測試,並且測試幫助定義了函數。 – Seth

2

我的經驗:

  1. 文檔與如果代碼是不言自明的,或者如果被測試的情況下是「棘手」的角落情況下這是不是在第一眼看到明顯的(儘管代碼可能你的測試是)。
  2. 請勿爲您的測試創建單獨的文檔。如果您使用的是Java,請將所有內容放在評論和Javadoc中。換句話說,保持這些信息接近代碼。這就是需要的地方。
  3. 關於設計和實現:只需迭代。編寫一些實現,然後編寫一些測試代碼,然後寫更多的實現代碼等,直到完成實現代碼和測試代碼。它比編寫所有實現,然後測試,然後重寫失敗的實現代碼更快。你不能預計所有的測試在設計時實施,這是不可能的。所以,不用擔心,如果你沒有完全掌握。
  4. 如果您覆蓋超過80%的代碼,您已經很好,但越多越好。有時候,代碼不能被測試。我建議使用測試覆蓋工具,比如Emma for Java。

或者它實際上取決於你有多少時間?

您不是測試節省的時間是永遠不你必須花費在項目後期解決的錯誤的時間支付。一個正確的測試集永遠都會在路上付出很多。

相關問題