1. 程式人生 > >軟體測試自動化綜述

軟體測試自動化綜述

自動化軟體測試不是銀彈

電腦科學巨匠Fred Brooks,在1986年發表了他的著名論文《No Silver Bullet: Essence and Accidents of Software Engineering》。文章列舉了人們對於軟體工程技術發展的一些期望,並與現實進行了對比。其論點歸納如下:沒有一種單純的技術或管理上的進步,能夠獨立地承諾在10年內大幅度地提高軟體的生產率、可靠性和簡潔性。直到現在,雖然軟體交付效率在持續的提高,銀彈仍然沒有出現。在軟體測試領域中,將自動化技術引入測試工作時,這個觀點依然適用。 測試自動化就是任何利用工具來輔助的測試,雖然幾乎在計算機工業產生的第一天,這種測試就出現了。但是,歷史上從來沒有出現過“測試自動化取代測試工程師工作”這種事情發生。測試自動化無法再現測試工程師那些創造性思維。好的軟體測試,天然的、必然的是一種人類活動。測試是一種社會活動,一種心理活動。軟體越複雜,人在識別軟體問題上的作用就越大。 特別是今天軟體的使用場景、使用者型別、業務都極大的複雜化了。手工測試會越來越重要,其中一個原因就是:我們的測試將會社會化、複雜化、更需要人的智慧。軟體測試不僅是一項技術性工作,同時也涉及經濟學、人類心理學等社會學科的一些重要因素。因此,自動化測試依然不能完全代替手動測試,更無法取代測試人員的地位。

自動化測試的必要性

儘管如此,自動化測試仍然毫無疑問地在測試效率和徹底性方面使我們獲益匪淺。自動化測試在傳統開發和敏捷開發中都取得了成功,沒有自動化測試,敏捷開發就不會成功,更不會有持續構建、持續整合、持續部署。 自動化最重要的事情就是提高效率以及實現手動無法完成的事情。到目前為止,自動化測試依然是提高測試效率、儘早儘快反饋測試結果的不二選擇。

成功自動化測試的因素

然而,通向成功的道路並不簡單,成功的自動化測試需要智慧和毅力。哪些主要因素促成了自動化測試的成功?對此,並沒有簡單而通用的答案,但是卻存在一些公共的要素。一般認為最重要的兩個要素是管理問題和測試件架構。本文分別從管理和技術這兩個維度進行分析。

【管理因素】

1. 自動化測試目標制定一個合適的目標對自動化測試的成功實施至關重要。

將軟體測試所要達到的目標與自動化所要達到的目標區分開來是很重要的。一個好的測試目標是發現許多bug,這沒有必要成為一個好的自動化測試目標。在對專案進行一些改動之後,需要進行迴歸測試以確保變更的部分不會影響系統的已有特性,而這類測試很少發現新的錯誤。這並不意味著自動化測試不成功。迴歸測試的主要好處是獲取自信和保證,是對已有特性的守護,而不是發現缺陷。 2. 對自動化測試要進行精心培育並有效引導一種“自下而上”的方法並不是通向良好自動化測試的一條長期可持續的道路。開始的成功並不會保證長期的成功。以“自下而上”的方式開始自動化是困難的;為了長期的成功,需要管理層的大力支援。 3. 合理的角色劃分

測試人員所需要的技能和自動化測試人員不同,在一般情況下,行業的經驗表明讓手動測試人員也做自動化測試通常是不成功的。 自動化測試人員的角色有著嚴格的區分:一類是高層次的自動化設計人員(測試架構師),其任務是設計自動化測試的整體結構。另一類是自動化測試件的實現人員,他們具有良好的變成基礎,其任務是設計、編寫、維護自動化測試中的軟體、指令碼、資料、期望結果以及額外的實用工具。同時負責實現多個層次的抽象,這使得測試人員不必學會程式設計就可以使用這些自動化手段。 很多測試人員並不一定擅長開發技術,而且他們也不想成為程式設計師。他們關注的是測試的基本想法(即對什麼進行測試),而不是測試的具體實現。 4. 計劃、範圍和期望當自動化測試有好的計劃時,它通常更有可能獲得成功。不要期望自動化專案中不會出現任何問題;沒有什麼事情是沒有問題的,應該隨時準備應對可能出現的問題。設定符合實際的目標,即在規定的時間內完成任務。對打算應用自動化測試的專案,最重要的建議是從小範圍開始應用和試點。在將自動化測試擴充套件到更廣的範圍之前現在小範圍內嘗試不同的方法,來判斷哪種方法最好,以便積累更好的經驗。 5. 工具和培訓無論使用什麼工具,培訓都是很重要的,良好的培訓能夠避免浪費很多時間。  

【技術因素】最重要的技術因素是測試件架構以及多個層次上的抽象。測試件(testware)是所有建立的用於測試的事物,包括指令碼、資料、文件、檔案、環境資訊等。測試件架構就是這些事物是如何組織的,以及他們彼此之間是如何依賴的。例如,高層次的指令碼使用了低層次的指令碼用來與被測試軟體進行互動。 1. 對測試件進行抽象、抽象、再抽象對於成功的自動化測試來說,至少有兩個主要的抽象層次:

(1)將測試(即測試人員所從事的工作)與結構化的測試件分離開來。自動化測試人員負責這些層次的抽象,如果這些層次實現的不好,那麼自動化維護起來就會很昂貴而且很難使用。
(2)將工具和工具特定細節與結構化的測試件分離開來。 這一個層次的抽象應該是我們能做好的。本文主要關注這個層次的抽象。
這二個層次的抽象能讓自動化測試有著更長的生命週期,即使更換了測試工具,自動化測試依然可以工作。但是,這也是一個要求非常高的抽象。一般情況下,很難達到。 頂層的抽象是將測試的基本想法(即對什麼進行測試)與測試的實現(如何構建自動化測試)分離。測試人員使用對他們有意義的高階(領域相關的)關鍵字編寫測試,以描述他們想要執行的測試,而不應該考慮過多的實現細節。  2. 自動化測試標準當很多人同時使用自動化時,制定自動化標準是很有必要的。如果人們僅僅關注自己的事情,他們將會以只對他們有意義的方式建立自動化測試和測試件,然而他們建立的東西很可能彼此之間都不相同。如果想要很多人使用自動化測試,那麼定義自動化的標準並去遵守這一標準是很重要的。例如,標準的命名方式、建立測試件的方式、指令碼的標頭檔案等等。  3. 可複用性、可擴充套件性、文件、靈活性
不要重複造輪子,去尋找那些可以複用的模組,而不是一切從頭編寫,將自動化測試件結構化以供複用,一旦有了可重用的元素,就可以容易地新增新的自動化測試。同時這些可複用的模組必須具有良好的文件。隨著業務的發展,在已有測試件的基礎上能夠靈活擴充套件是非常重要的。  4. 對哪些測試進行自動化對測試進行自動化時,要考慮它們的優先順序。總的來說,要對那些能夠為測試帶來價值的測試進行自動化;其次自動化那些重複使用的測試。  5. 自動化測試本身也是軟體,也必須對其進行測試  6. 正確認識工具要素工具不是測試自動化最重要的因素。在大多數情況下。擁有好的工具不能保證在測試自動化中取得成功,必須對整個測試框架進行良好地設計、定製和維護,工具僅僅是一小部分。

對自動化測試的展望就像在《Experiences of Test Automation – Case Studies of Software Test Automation》的譯者序中所說:“…同我們分享他們在自動化測試過程中所經歷的酸甜苦辣,其中有過迷茫,有過失敗,也有喜悅和激動。自動化測試的故事,有浪漫之旅,也有歷經坎坷、披荊斬棘才走完的艱辛之路;更有鳳凰涅槃、絕地逢生,迎來自動化測試春天的感人故事”。讀完之後,再次感受到,沒有什麼能夠隨隨便便成功,自動化測試也不例外。 軟體測試自動化依然不是軟體測試的銀彈。“銀彈綜合症”是所有自動化測試人員已經或將來會面臨的問題,我們需要保持清醒,結合實際,不能冒進。少一些浮躁,多一些務實,在自動化之路上不僅要有技術的追求,更要遵循軟體工程的一般方法。堅定、踏實、精益求精的“工匠精神”應該要成為我們自動化之路上的應有的姿態。

當前,自動化測試不再是件奢侈品而是必需品;隨著應用程式和系統變得越來越大、越來越複雜,僅僅依賴手動測試已經無法全面地系統測試。隨著技術的進步,測試也必須進行調整,而且要快。這是一種必然,我們必須要迎接這樣的變化,否則被淘汰只是一個時間問題。 (本文轉自: http://mp.weixin.qq.com/s__biz=MzAwMTkxNTg3Nw==&mid=2247484067&idx=1&sn=ccebca9d5a4c5778f4fa2c1ffe7d87c3&mpshare=1&scene=1&srcid=1013RBSyO8i9MsRxFexRb6kA#wechat_redirect)