自動化測試能否取代手工測試
手工測試和自動化測試都是軟件質(zhì)量保障的重要途徑,也是很多測試人員爭相討論的兩種測試方法。如何正確的看待這兩種測試方式,更好的使兩者相互結(jié)合是我們現(xiàn)在所要討論的話題。本文總結(jié)了自動化測試和手工測試的優(yōu)點(diǎn)和缺點(diǎn),列舉了各自的適用范圍,并分析了自動化測試無法最終取代手工測試的原因。
1. 自動化測試是靈丹妙藥嗎?
自動化測試有眾多的優(yōu)點(diǎn),例如:快速、全面、可靠、可編程、可重復(fù)使用、可重用。自動化測試產(chǎn)品和解決方案的潛在客戶經(jīng)常會以下面的思考方式設(shè)想自動化測試:
快速:顯然測試腳本執(zhí)行比人工執(zhí)行要快得多,而且和手工測試相比,計算機(jī)可以不知疲憊的執(zhí)行測試,一天24小時不休息的工作
全面:所有的測試都能夠?qū)崿F(xiàn)自動化,你可以構(gòu)建一個覆蓋應(yīng)用程序每一個功能的測試包
可靠:每次測試腳本在運(yùn)行時執(zhí)行相同的操作,因此減少了人為的錯誤,排除了人測試的不確定性,使測試結(jié)果更加客觀。
可編程:你可以編寫復(fù)雜的測試腳本來找出應(yīng)用程序中隱藏的信息
可重復(fù):對于重復(fù)執(zhí)行相同操作,計算機(jī)軟件可以輕松完成
可重用:你可以重復(fù)使用測試腳本來測試應(yīng)用程序的不同版本,即使用戶界面發(fā)生了變更
如此看來,完全可以用自動化測試取代手工測試嗎?答案是否定的。無庸質(zhì)疑,自動化測試具有上述優(yōu)點(diǎn),但這些優(yōu)點(diǎn)是在一定的約束條件下存在的。盡管人們對自動化測試有美好的愿望,但自動化測試并非我們夢寐以求的神兵利器。
Frederick P. Brooks, Jr. 曾在1986年寫過一篇題為《沒有銀彈:軟件工程的根本和次要問題》的文章(No Silver Bullet – Essence and Accidents of Software Engineering)。這篇文章列舉了人們對于軟件工程技術(shù)發(fā)展的一些期望,并與現(xiàn)實(shí)進(jìn)行了對比。他的論點(diǎn)歸納如下:沒有一種單純的技術(shù)或管理上的進(jìn)步,能夠獨(dú)立地承諾在10年內(nèi)大幅度地提高軟件的生產(chǎn)率、可靠性和簡潔性。Brooks鼓勵我們將技術(shù)和方法視作一種演進(jìn)手段,而并非革命。
我完全同意Brooks的觀點(diǎn),這有助于我們對理解自動化測試的真正含意,,自動化測試或者說自動化測試策略及工具的實(shí)現(xiàn),毫無疑問具有強(qiáng)大功能、高效等使我們獲益匪淺,但只是測試人員工具箱里的一件利器,它無法取代測試人員的地位。
自動測試生來就是用腳本寫成的,而不是探索性的,它需要我們設(shè)定上下文后才能在一定的范圍內(nèi)為特定的目的而執(zhí)行。即便我們使用的是一個引入了所有可能情況的自動測試組合,我們的測試也只能在它們覆蓋的地方游刃有余,但對于其它沒有涵蓋到的地方,它們就鞭長莫及了。如果出現(xiàn)了哪些沒有預(yù)料到的情況,那么它們很可能就失效了,而且即使它們能夠從這些情況中恢復(fù)過來,它們還是無法停止正在處理的任務(wù)并檢查沒有預(yù)料到的情況。很顯而易見將所有測試都自動化是不切實(shí)際的。
2. 手工測試會被自動化測試替代嗎?
也許有人認(rèn)為“手工測試沒有技術(shù)含量,總有一天會被自動化測試所替代”,實(shí)際上這種認(rèn)識是不全面的。測試是依靠知識和智慧作為生產(chǎn)資料的一項(xiàng)工作,這要求測試人員具備較強(qiáng)的業(yè)務(wù)知識、較高的計算機(jī)操作能力和深厚的測試?yán)碚摶A(chǔ)。通過設(shè)計科學(xué)合理的測試用例,正確的執(zhí)行用例、準(zhǔn)確的分析測試結(jié)果,才可能得到客觀的測試結(jié)論。
手工測試的***特點(diǎn)是具有探索性,可以依據(jù)測試工作的進(jìn)展適時調(diào)整測試策略,尤其是在需要進(jìn)行人為主觀判斷和主觀感覺來對被測試對象做出評價時,則手工測試將是最理想的選擇,例如:在進(jìn)行用戶體驗(yàn)測試時,測試者基于用戶的使用習(xí)慣和思維模式出發(fā),結(jié)合實(shí)際的業(yè)務(wù)場景,對軟件產(chǎn)品的外觀、操作方式等方面進(jìn)行檢查。從而體驗(yàn)軟件產(chǎn)品的使用者對產(chǎn)品的印象、感覺,測試既有的軟件使用習(xí)慣和業(yè)務(wù)思維模型的綜合反映。提出軟件產(chǎn)品在方便、易用、符合思維習(xí)慣方面的修改意見。
手工測試有其不可替代的地方,因?yàn)槿司哂泻軓?qiáng)的判斷能力,而工具沒有。手工測試不可替代的地方至少包括以下幾點(diǎn)。
測試用例的設(shè)計:測試人員的經(jīng)驗(yàn)和對錯誤的判斷能力是工具不可替代的。
界面和用戶體驗(yàn)測試:人類的審美觀和心理體驗(yàn)是工具不可模擬的。
正確性的檢查:人們對是非的判斷、邏輯推理能力是工具不具備的。
3. 什么時候該用自動化測試?
對于一些基本的、邏輯性不強(qiáng)的操作,可以使用自動化測試工具。應(yīng)該說,現(xiàn)在性能測試、壓力測試等方面,自動化測試有其不可替代的優(yōu)勢。它可以用簡單的腳本,實(shí)現(xiàn)大量的重復(fù)的操作。從而通過對測試結(jié)果的分析,得出結(jié)論,這樣不僅節(jié)省了大量的人力和物力,而且使測試的結(jié)果更準(zhǔn)確。對于一些邏輯性很強(qiáng)的操作,如果自動化測試不是很健全的話,不建議使用。因?yàn)檫@需要比較復(fù)雜的腳本語言,不可避免的增加了由于測試腳本的缺陷所造成測試結(jié)果錯誤的誤差。這時就需要手動測試了。
采用手工回歸測試,不但代價昂貴,而且容易出錯。自動化測試可以減少但不能消除這種工作的工作量。測試者可以有更多的時間去從事更有意義的測試,例如在應(yīng)用程序在復(fù)雜的場景下的不同處理等,盡管測試就是要花費(fèi)更長的時間找到錯誤,但比不意味著因此而要付出更高的代價。所以選擇正確的測試方法是尤為重要的。
總結(jié)起來自動化測試適用的情況如下:
回歸測試。這可能是自動化測試最主要的任務(wù),特別是在程序修改比較頻繁時,效果是非常明顯的。由于回歸測試的動作和用例是完全設(shè)計好的,測試期望的結(jié)果也是完全可以預(yù)料的,將回歸測試自動運(yùn)行,可以極大提高測試效率,縮短回歸測試時間。
可以運(yùn)行更多更繁瑣的測試。自動化的一個明顯的好處是可以在較少的時間內(nèi)運(yùn)行更多的測試。
可以執(zhí)行一些手工測試?yán)щy或不可能進(jìn)行的測試。比如,對于大量用戶的測試,不可能同時讓足夠多的測試人員同時進(jìn)行測試,但是卻可以通過自動化測試模擬同時有許多用戶,從而達(dá)到測試的目的。
更好地利用資源。將繁瑣的任務(wù)自動化,可以提高準(zhǔn)確性和測試人員的積極性,將測試技術(shù)人員解脫出來投入更多精力設(shè)計更好的測試用例。有些測試不適合于自動測試,僅適合于手工測試,將可自動測試的測試自動化后,可以讓測試人員專注于手工測試部分,提高手工測試的效率。
測試具有一致性和可重復(fù)性。由于測試是自動執(zhí)行的,每次測試的結(jié)果和執(zhí)行的內(nèi)容的一致性是可以得到保障的,從而達(dá)到測試的可重復(fù)的效果。
測試的復(fù)用性。由于自動測試通常采用腳本技術(shù),這樣就有可能只需要做少量的甚至不做修改,實(shí)現(xiàn)在不同的測試過程中使用相同的用例。
增加軟件信任度。由于測試是自動執(zhí)行的,所以不存在執(zhí)行過程中的疏忽和錯誤,完全取決于測試的設(shè)計質(zhì)量。一旦軟件通過了強(qiáng)有力的自動測試后,軟件的信任度自然會增加。
4. 什么時候該用手工測試?
手工測試更適合測試業(yè)務(wù)邏輯,因?yàn)闇y試人員學(xué)習(xí)業(yè)務(wù)后執(zhí)行測試要比交給自動化容易得多。手工測試者最適合成為領(lǐng)域?qū)<遥罁?jù)他們自身對業(yè)務(wù)的理解去評價復(fù)雜的業(yè)務(wù)邏輯實(shí)現(xiàn)的正誤,通過觀察分析細(xì)微的邏輯問題找到問題的癥結(jié)。
另外,從經(jīng)濟(jì)性的解度考慮,執(zhí)行自動化測試需要事先花費(fèi)大量的時間和精力來初始化腳本,完善自動化測試的上下文。這對于某些情況是不適合的,比如說在某些有時間要求的項(xiàng)目中,初始化自動化測試腳本所需時間是不可接受的。在這樣的情況下手工測試具有更強(qiáng)的靈活性。
總結(jié)起來手工測試適用的情況如下:
界面測試
用戶體驗(yàn)測試
探索性測試
周期短并且一次性的項(xiàng)目
進(jìn)度非常緊張的項(xiàng)目
需求非常不穩(wěn)定的項(xiàng)目
界面尚未確寫
使用了很多第三方或自定義控件的項(xiàng)目
5. 結(jié)論
手工測試和自動化測試也是很多測試人員爭相討論的兩種測試方法。有人對自動化測試趨之若鶩,也有人對自動化測試嗤之以鼻。在做出如何看待自動化測試的決定之前,首先要對自動化測試有一個清晰的認(rèn)識。
自動化測試是對手工測試的一種補(bǔ)充,自動化測試不可能完全替代手工測試,因?yàn)楹芏鄶?shù)據(jù)的正確性、界面是否美觀、業(yè)務(wù)邏輯的滿足程度等都離不開測試人員的人工判斷。而僅僅依賴手工測試的話,則會讓測試過于低效,尤其是回歸測試的重復(fù)工作量對測試人員造成了巨大的壓力。
因此,自動化測試僅僅是某些條件下手工測試的一種補(bǔ)充,而無法全面取代手工測試。