想知道TDD /自動化單元測試的優缺點,並尋找社區對於專業開發人員是否可以在不支持單元測試的情況下編寫應用程序是否可接受的觀點?作爲一名專業開發人員而不是編寫單元測試是否可以接受?
回答
它是由你。這個問題更具哲理性。
單元測試只是爲了幫助你的工具。你可以選擇忽略它們。但是,如果你打算做一個不重要的項目,我會建議你使用單元測試。
是的,他們需要時間,也寫了。但最終如果有任何重構或代碼的某些部分需要更改,則會節省很多。
一如往常:這要看。
一般來說,單元測試是一件好事:它們捕獲整個類的錯誤,它們驗證代碼中的特定部分在給定的情況下如預期的那樣工作,並且它們使得在發生某些事情時更容易追蹤錯誤錯誤。所以除非你有充分的理由不這樣做,否則你應該編寫單元測試。
好理由不寫單元測試包括:
- 製作相對小的變化是不好,幾乎沒有結構,因爲這可測試的代碼庫(通常情況下,原因是存在的顧慮少分離,並且可測試單元不能隔離進行測試,而不會對代碼庫本身造成干擾)。
- 問題域的本質使得代碼本身不可測試。這種情況很少見,但會發生 - 例如,很難爲繪製GUI的例程提供有意義的單元測試:您必須將其渲染到模擬表面,然後檢查單個像素,但是您還必須嘲笑影響佈局決策的所有參數等。雖然這在理論上是可行的,但通常不值得付出努力,並且在這種情況下應該選擇手動或半自動測試。
- 該項目是與這樣一個小範圍,這樣短的生命週期,所述益處由單元測試獲得的(增加的可維護性,減少複雜性)一個微小的不重磨程序是微不足道的。但請記住,軟件的壽命比設計的要長,而且您的一次性使用一次性腳本可能最終成爲公司流程中關鍵任務的一部分。
有時候我希望從瘋狂的TDD傢伙那裏得到統計數據,實際上有多少次測試對他們意外失敗(在實現不計算之前),以及這些錯誤有多複雜。我個人的經驗是,如果我不寫一個困難的,由領域驅動的商業邏輯,測試什麼都不會顯示,你可以編寫數千行代碼,然後重構它們,而不必通過它們發現一個錯誤。 (請注意:我通常沒有錯誤,至少只要我遵循我的項目) – Aadaam 2012-08-05 12:59:19
@Aadaam:我當然不是TDD瘋子,但自動化測試已經救了我好幾次,特別是在沒有動態語言的情況下一個編譯器因爲做愚蠢的事情或做出愚蠢的錯誤而大吼大叫。此外,查找錯誤僅僅是你編寫單元測試的一個原因 - 正式定義和記錄單元行爲(在TDD中,甚至在實現之前),構建一系列迴歸測試,並以可縮回的方式組織您的想法是其他。您甚至可以使用它們主動跟蹤重構時需要注意的地方,這非常有用。 – tdammers 2012-08-05 13:03:49
用於組織我的想法,並在實現之前記錄文檔,我有UML,很容易可以是我是他們的最後一個用戶,但它爲我服務了十多年。我嘗試了這些單獨的TDD/BDD方法(我不得不),但我總是發現它們很麻煩,而且不如繪製一系列模型和檢查一切是否正常。也就是說,當涉及到像OCL一樣的東西時,單元測試當然是要走的路。 – Aadaam 2012-08-05 13:06:50
我相信,我會得到-1 -ed這一點,但我還是要說:如果你有其他措施,以確保質量,包括避免迴歸,程序驗證,程序驗證,然後沒有。
唯一的問題通常是人們沒有任何其他工具比單元測試來實現這一目標。
如果您有正式測試過的模型(有一個工具,實際測試它,或者它是以確保其有效的方式構建的),並且已經正式測試確保實際運行的軟件符合那個模型,那很好。
例如:如果您確定,您在ruby中編寫的代碼將按照您的預期行事(因爲您或其他人測試了ruby解釋器並且沒有錯誤,或者您只使用子集的功能已知是安全的),那麼它很好。通常,我們以這種方式信任C編譯器和CPU。
另外,如果一個程序只能使用一次,就沒有迴歸問題!如果我用bash編寫一行代碼,它會爲我計算一些東西,我可能會首先手動對假數據進行測試,然後在真實數據上運行 - 無需編寫自動測試。
如果你承擔責任,你也可以隨同假設:我通常認爲,日食在創建setters和getters方面非常好,而且我不對這些假設進行測試。另外,我假設,如果Java 7中的Java Collection類存在任何問題,它現在已經結束了。但如果遇到麻煩,這是您的個人問題。不要責怪任何人。
就我個人而言,我很少在某些代碼上使用單元測試,因爲我正在測試它們,而它們仍然是一張紙上的流程圖,並且我確保我只使用已知在其中工作的語言/庫的子集這種情況。另外,如果沒有同行評審,我絕不會讓代碼出來。不過,如果有人對他們進行驗收測試,有時候會更好......
沒有人說你應該單獨依靠單元測試*。這很愚蠢 - 就像僅僅依靠正式證明或手動測試一樣愚蠢。 – tdammers 2012-08-05 12:59:09
- 1. 是否可以使用Angular方案編寫單元測試?
- 2. qa測試完成後才創建單元測試是否可以接受?
- 3. 是否可以在單個開發人員工作站上測試SQL AlwaysOn可用性組?
- 4. 是否可以編寫一個可以測試AuthorizationPolicy對象的測試?
- 5. 單元測試是否保護您的代碼免受其他開發人員的錯誤?
- 6. 對於專業的.NET開發人員來說,OS X是否適合Mono?
- 7. 在測試驅動開發中,你是否先編寫每一個可能的測試,然後編寫代碼?
- 8. 如何編寫測試以測試文件夾是否可讀/可寫
- 9. 是否可以將錯誤鏈接到單元測試?
- 10. 是否可以爲模板類的成員函數編寫專門化?
- 11. 爲單一方法編寫classist和mockist單元測試是否有優勢?
- 12. 自由職業者Iphone開發 - Xcode警告是否可以接受?
- 13. 誰在寫自動UI測試?開發人員或測試人員?
- 14. 在TDD中,誰寫測試 - 開發人員或QA /測試人員?
- 15. 是否可以檢查TCP連接是否斷開而不寫入它?
- 16. Android包是否存儲開發人員/公司/作者姓名?
- 17. 如果編譯時間高於可接受的水平,是否可以創建失敗的單元測試?
- 18. 是否可以直接訪問QDeclarativeListProperty,而不是作爲模型?
- 19. 是否可以超級演員名單?
- 20. Trac中的門票的多名受理人(開發人員,審覈人員,測試人員)
- 21. Oracle專業開發人員,版本。爲MS-DOS 6.0.33
- 22. 是否可以在IE開發人員工具中更正JavaScript?
- 23. Whate是否可以在線發佈iPhone開發人員的工作請求?
- 24. 秒錶基準測試是否可以接受?
- 25. 測試T-SQL FLOAT列值是否可以接受YYY.QQ格式
- 26. 開發iphone應用程序而不是蘋果開發人員
- 27. 是否可以在C(而不是C++)中編寫node.js擴展?
- 28. 是否可以用C++而不是C編寫OpenCL內核?
- 29. 使用痣覆蓋到System.Configuration,而不是作爲單元測試
- 30. 考慮開發人員時間的單元測試GetHashCode
屬於[程序員.se]。 – eggyal 2012-08-05 12:43:56
如果你不測試你的東西,你怎麼知道它是正確的。對我來說看起來並不專業。 – Steven 2012-08-05 12:56:26