標籤:qa 雲測試 雲端運算 軟體測試
|
Gavlin Pather在俄羅斯的KZN長大,在那裡他學習資訊技術並開始了作為一名開發人員的職業生涯,後來他又成了測試領域的一名黑箱測試員,接著又轉向白盒測試,最終是自動化測試。在測試專業領域近6年並在測試實驗室中進行測試,自然而然地,他逐漸開始對雲產生興趣。 |
?
電腦和軟體在我們的日常生活中越來越常見。現代社會中隨著我們對技術越來越依賴,不可避免地就需求它們變得更快,更好。更快,更好的需求提高了,就需要更高品質的軟體。要做到這一點,就不能只依靠手工測試,我們需要進入一個自動化的測試時代。
通過結合自動化的測試和手動測試,我們就能夠在較短時間內達成一套品質標準。然而,隨著我們邁向一個更加技術化的(要求我們開發的軟體不僅在我們的個人電腦上,且在行動裝置上也能運作的)現代社會,就需要更多的雲端運算。擁有了更先進的軟體,硬體和託管平台人們就需要有更加複雜和精密的測試方法以保持傳統軟體測試中達到的品質標準。
雲端運算改變了我們提供及管理計算資源(如CPUs ,資料庫和客戶儲存系統)的方式。
我們測試在雲上啟動並執行軟體的方式可以更好地表現出該軟體將如何在現實世界中運作。正如Jerry Gao等人所說,“雲端運算是互連網發展的下一階段。一個典型的雲必須有幾個不同的屬性:彈性和可擴充性,多租戶,自我管理功能,服務收費和計量功能以及串連介面和技術”。此外,雲支援大規模使用者在各地從互連網進入。它為客戶隨時提供按需應用服務,並提供虛擬和/或物理裝置。因此,雲中的軟體測試可能會更複雜,花費比預期更長的時間,這就造成手動測試一支獨大。
在雲端運算中加入自動化測試讓你能夠在多個平台上運行迴歸測試指令碼,這擴大了進行中的測試的範圍並消除了可能造成誤差的人為因素,同時也減少了完成迴歸測試所需要的時間。由於各種軟體複雜性、雲的浩瀚廣闊及(可能在測試過程中被發現並導致兩種測試方法結合的)缺陷,手工測試不能完全消失。此外,開發人員使用單元測試可以確保一個軟體上的改變對系統的影響最小,還能在部署之前檢測出缺陷。
通過結合這些方法並把它們應用到雲端運算中(同時也要考慮雲的複雜性,自動化測試的靈活性,及解決手工測試問題的能力),我們要在較短時間內在不斷變化、適應和發展的軟體工程和開發業完成更高品質的軟體。
?
雲端運算
雲端運算是一個為可配置計算共用池(共用池可以被快速配置且其發布只需極少的管理或服務提供者互動)提供普遍,便捷及按需網路訪問的模型。使用者可在任何地方按需擷取,並不是只能從本地電腦擷取。運行他們自己的基礎設施的公司(如亞馬遜,Google和Facebook )使用該模型就能時刻應對正在啟動並執行系統及按需縮放的系統上的變化及升級了。使用者或客戶可用瀏覽器內的雲端式的電腦資源提供的一項服務及執行所要求的功能和/或輸出的一項服務去執行一個任務,如準備一份庫存報告或執行文文書處理。Jerry等人2011觀察到的傳統軟體測試與雲測試之間要注意的些微區別見表1。注意這些差異非常重要,因為這能協助更好地理解這兩個測試平台之間的差異,以及這些差異會怎樣影響測試軟體可能採取的方法。任何功能的雲測試,如整合測試,都包含了確定一組預定義策略來設計測試案例以覆蓋最大範圍的使用者期待需求。
雲測試
因為雲測試相對而言還比較新,我們無法明確應在雲系統測試實踐中應用什麼軟體測試技術,建議,方法和工具。因此,我們對雲測試還沒有一個明確且被普遍接受的理解。傳統的軟體測試方法主要是根據測試者和標準的最佳實務而不是理論。它是由Kitchenham等人在他們的(其中既沒有關於軟體工程師如何找到缺陷和/或將之引入軟體系統的已知理論,也沒有任何提供關於測試人員如何識別這些缺陷或bugs的理論的)研究工作中提出的。在任一現存雲端服務測試中,終端使用者的參與都更積極,更直接。這些終端使用者可以是個人或企業使用者,他們已成為雲應用和雲端服務供應商的雲測試團隊的強大和不可缺少的一部分。由於非雲端式的應用程式的硬體和軟體的限制,大多數軟體應用程式需要存在於主機或小型機上。評估被測軟體時主要考慮三個方面,即:單元測試,自動化測試和手工測試。
表1.傳統軟體測試與雲測試間的差異
單元測試
為了確保開發中的雲應用的更高品質,正在做測試的開發人員建立了可應用的單元測試。單元測試提供了一些好處,諸如能夠無需等待其他可用單元就可進行測試,能夠以更低的成本來檢測和刪除軟體故障(比起在後期這麼做)。對雲應用進行單元測試的一個有效方法是使用各種基於案頭的雲環境模擬器,如Microsoft Azure Compute和Storage Emulators,它們使開發人員能夠在本地運行並測試他們的雲應用程式,而不是部署後再進行測試。然後這些單元測試就可以用於進行迴歸測試了,如果該軟體改變了,他們可以早點生效並最大限度地減少對系統的不利影響。通常,輸入所有的可能去測試一個單元是不可行的,因為輸入空間太大以至無限。因此,我們需要一個標準來決定使用什麼測試輸入及何時停止測試。
自動化測試
為了減少手動工作,測試人員或開發人員可以使用可以自動產生測試輸入以實現高結構覆蓋的自動化測試產生工具。由於雲應用程式實際上是依靠雲環境的應用程式的,所以一個雲應用程式裡被測單元的行為是依賴於單元輸入及雲環境狀態的。使用存根雲模型可以減輕這些問題。有了這樣的模型,就可以用(能夠給Cloud API方法調用提供一些預設的或使用者定義的返回值的)假/存根雲環境類比真正的雲環境了。一個圖形化使用者介面(GUI )的自動化測試表現了在基於字元介面未被發現的顯著困難;少了很多命令列介面或編程介面(APIs )。圖形化使用者介面往往是由複雜的組件構成,而且往往在開發過程中被不斷地重新設計。發布能夠識別和操作圖形化使用者介面的測試載入器取得了顯著成功。Selenium與Sahi就是執行個體。該GUI自動化測試可以由開發人員寫或具備適當技能的測試人員寫。這些測試案例的深層開發是為了使用者體驗和正確性。這些測試案例僅表示測試案例中的被操作對象。使用這些工具,你就能通過錄製和重放或通過寫測試代碼來建立測試案例。如果編寫準確,這些測試就可以與在一個連續整合(CI)環境中建立並啟動並執行單元測試整合起來。所寫測試將可以和終端使用者一樣操縱一個瀏覽器。然而,並非所有的測試案例都可以,因為雲的狀態和環境不一樣。從源(例如:資料庫或檔案)讀取資料,將使得測試以幾種不同的方式運行以呈現GUI,這就允許文字欄位的不同輸入和結果的驗證,以便能夠點擊按鈕和下拉式功能表,並且還能夠驗證文本及螢幕上對象的位置。如果注意到任何差異,它就能夠將該問題寫入(可以用來驗證問題已被挖掘的)記錄檔中。它多樣且能夠在多個瀏覽器的Web測試中運行,這就使你能夠攔截缺陷並輕鬆複製。自動化測試的這兩個方法將能夠比手動測試快得多地運行測試案例,還能夠覆蓋更廣泛的測試環境和狀態。這些測試案例運行期間挖掘的缺陷也可以在終端使用者互動之前被修複和部署,從而獲得更好的使用者體驗並減少人為錯誤。
手動測試
軟體測試的方法可以基於程式的形態及其實現,或兩者兼有。所要求的基於形態的測試指導測試案例的選擇過程,並提供一種評估測試充分性的手段。另外,基於實現的測試側重於行使被測程式,因此充分性通常是指覆蓋程式結構要素。測試可以在多個粒度層級進行組件測試,整合測試和系統測試。一個更廣泛且快速增長的手工測試方法是探索性測試。在某些情況下,它可以比指令碼測試更有效率。所有測試人員都會用到某種形式的探索性測試。隨著企業尋求更靈活及更具成本效益的方法去開發軟體,這種態度開始改變。其高度情境結構可以使它在不經意的觀察中看起來沒有任何結構。
“所以說,一段旅程要想夠得上探險,必須是可信的並有困難和風險的,還必須要有新發現。就像板球一樣,對外行解釋起來有那麼點困難。但有一個元素是絕對重要的,事實上從探索早期就開始嚴格地區分探索階段並嚴格採用“探索”一詞。很簡單,這是對科學的崇敬。”——選自John Keay的《The Permanent Book of Exploration》
James Bach等人提到:探索性測試某種程度上來說是測試者主動控制測試設計的任一測試,因為那些測試都被執行了並使用了從通過測試設計新的更好的測試時獲得的資訊。手工測試仍是大多數軟體開發工作的高度相關部分。這些人如測試人員的特性(包括創造力,智力,領域知識及有效識別各種問題的能力)使手動測試成為軟體測試的重要部分。
結論
總之,軟體測試作為一項雲端運算服務是相當新穎的,要放下測試傳統或常規方式去適應它,仍需要作出轉變。不同類型的測試方法,例如自動化測試,手工測試和單元測試已被用來在雲中進行測試時試著達到最好的效果。把這些方法結合起來並雲端式中還是會留下很多可以改進的漏洞。仍然存在許多漏洞的原因是:需要獲得“雲測試最佳實務指南”。隨著越來越多的應用程式遷移到雲中,我們對於它們將如何應對在這樣的環境下進行以及如何最好地測試它們,測試什麼,用什麼方法測試什麼都會有更好地理解。要使用什麼自動化工具(如果必須是自動化的),要做單元測試嗎,或者它應該是純手工測試嗎,這些問題都是公司需要做出的並具有增值收益的業務決策。
為了實現雲端運算中軟體的更高品質,需要一種新的關於如何測試軟體的思維方式,包括採取什麼步驟以擷取最佳結果。測試的傳統方法已經給了測試人員和開發人員許多經驗教訓,並且隨著我們進入一個多數應用程式隨處可得的時代,確保所獲知識適應且適合雲端運算就成了他們的責任,當然這也是利益相關者和業務管理的責任。
著作權聲明:本文出自 SPASVO澤眾軟體測試網:http://www.spasvo.com/news/html/201458143930.html
原創作品,轉載時請務必以超連結形式標明本文原始出處、作者資訊和本聲明,否則將追究法律責任。
提高雲端運算中的軟體品質