錯誤1:我們已經在做單元測試
每個人對“單元測試”都有不同的認識,不過大多數業界專家普遍認為,單元測試應該是測試應用程序的基礎組成部分,即代碼單元。換句話說,這是API層次上的測試。一些團隊聲稱他們在做單元測試,而實際上他們做的是系統測試,或者是所謂的“開發測試(dev test)”。還有一些團隊做了部分API層次的測試,但他們并沒有把單元測試作為開發過程中的必要組成部分。
除非團隊把持續進行API層次的單元測試作為開發過程中不可缺少的組成部分,否則單元測試必然會隨著日程與預算帶來壓力的提升、政策與項目的發展,以及人員的流動而滅亡。
那些極少數長期保持傲人業績的企業正是把單元測試安排為例行任務的企業。因此,不但要利用自動化測試來保證單元測試盡量全面、順暢、高效地執行,還要為保證這一質量過程能夠長期執行并根據需求而調整來確定基本的工作規范,比如把各個報告中的問題直接指向負責的開發人員,以及讓管理人員能夠及時方便地看到各開發人員的測試任務分配情況等。
錯誤2:自動測試并沒多大用處
許多開發人員認為,除非是親自編寫單元測試,否則其一點利用價值都沒有。這就大錯特錯了。由于生成測試的方式與算法的發展,測試工具也變得越來越有效。即使是最基本的自動化方法,也可以在很短時間里生成幾千個原來根本無法完成的測試。這可是毫不費力就可以得到的好處。
除了可以給你生成測試,甚至“免費”幫你找到一些缺陷,自動測試還能讓你集中精力進行那些更重要、更復雜、更全面的測試,那些真正需要專業技術的測試。
當前工具所能提供的高層次的自動測試能夠顯著減少開發團隊在這些方面的工作,從而節省大量的時間與精力。如果沒有這些工具的幫助,單元測試可能會消耗團隊的大量資源,而這正是讓許多團隊認為單元測試是一種理論上有用但實際卻很難實行的測試方法的原因所在。
錯誤3:要做的只是購買一個優秀的單元測試工具
我見過許多團隊在購買測試工具時把它當做實現目標或完成任務的萬能藥。他們不想在其上花費任何精力,不對其進行任何設置,也不將其作為工作日程的一部分。到最后,他們自然也無法得到理想的結果。他們以為單元測試沒有給他們帶來任何好處,而實際上他們并沒有執行真正意義上的單元測試——而只是在空談。
單元測試工具并不是可以解決所有問題的王牌。事實上,它只是一個開始。開發人員需要的不僅僅是工具,他們還需要適當的指導、訓練、支持設施和工作流程。如果真的希望這個工具能夠成為開發過程的一部分,你就得積極主動地學習和使用它,尋找讓它能在既定工作環境下發揮作用的辦法,并保證這些使用方法都簡單易行。目前有許多可以使用的工具,但是除非測試團隊真正去使用它——部署、擴展并根據情況進行調整,否則你買到的只是“閑置工具”而已。
錯誤4:自動測試達到75%的覆蓋率——任務完成
許多人認為,如果自動測試工具能夠生成近75%覆蓋率的測試,他就能跟老板說自動測試已經完成了。這絕對是個錯誤的想法。雖然這是一個非常好的開始,但你不能僅僅因為這一點就認為已經做完單元測試。實際上你只是剛剛開始而已,你還需要驗證軟件的具體功能。
自動測試很有用,但必須讓這些測試與需求掛鉤。為了實現這一點,你可以檢驗并了解這些工具給你生成的測試,然后利用這些免費“禮物”去實現更多的價值。
大多數自動測試工具都會提供一些工具集,使你能夠擴展這些自動生成的測試。比如Parasoft Jtest里就有對象庫、樁、測試用例參數化和追蹤工具Tracer(一個只需在應用程序中運行用例便可以生成功能測試用例的工具)。
錯誤5:單元測試不值得費工夫
每個了解單元測試的人都知道,這絕不是一份簡單的工作,但這并不意味著不值得在這方面花費工夫。
單元測試確實有很高的門檻:測試團隊必須了解什么是單元測試、怎樣進行單元測試、用它測試什么,以及如何使用工具簡化單元測試。如果測試團隊真的對單元測試不感興趣、不了解,甚至根本沒有時間開始嘗試它,那么他們可能就不會感覺到單元測試的緊迫性。有些團隊可能認識到單元測試的重要性,但他們只是被問題纏得團團轉,而沒有花時間在真正的方向上邁出第一步。歸根到底,這需要對單元測試的價值、對質量方面的責任,以及它將為項目爭取到的額外時間有一個清楚的認識。
那么,是什么讓單元測試的價值超過為此付出的努力呢?單元測試的一個很大優勢在于,發現問題的時間越早,在后期遇到的深層錯誤就越少。這里說的深層錯誤是指那些并沒有形成真正破壞,但它們在API里隱藏得越來越深,直到最后誘發真正問題的錯誤。這種情況發生的時候,通常很難發現問題的源頭。即使你找到源頭,也會發現已經有太多的代碼層依賴于這個API。
如果正確地進行單元測試,驗證代碼能夠準確地實現功能,就能更早、更有效地發現問題。如果能及早發現問題,缺陷就不會被帶入源代碼庫中,也就是說以后也無需再對它進行修改——通常這時再修改的困難度、成本與時間都會指數疊加。
從我的經驗來看,那些真正采用單元測試的開發人員最終都能寫出更為優秀的代碼,工作效率自然也更高。而原因則在于他們不會被各種缺陷繞得團團轉,無須一次又一次地重寫同一段代碼。任何接受了單元測試,并將其作為所有開發項目標準來實踐的企業都能顯著地提高質量,減少軟件開發過程中的缺陷,并最終獲得巨大的競爭優勢。
文章來源于領測軟件測試網 http://www.kjueaiud.com/