軟件質量保證的優化方法淺析
摘要:在軟件測試技術的不斷發展過程中,自動化測試技術作為軟件測試技術的一個分支,被越來越多的使用在軟件測試的各個階段,大大節省了軟件測試成本、提高了測試效率、縮短了軟件開發周期。本文結合自動化測試理論與技術,基于現有的自動化測試技術、測試框架以及自動化測試工具進行了研究,提出了一種基于當前較成熟的軟件測試自動化技術一關鍵字驅動的自動化測試技術而構建的自動化測試框架模型,并在此框架模型的基礎上,設計實現了基于Selenium 的自動化測試框架。
關鍵詞:自動化測試;Selenium;測試框架
0、引言
在現代化管理中,如優化問題、信息系統、決策支持系統等,都要廣泛地應用軟件。軟件質量的優劣是通過對軟件的功能、性能和可靠性等質量要素進行驗證的,發現軟件缺陷并幫助定位和修復缺陷,確保軟件系統功能滿足需求的活動。根據多年軟件工程研究和實踐經驗,認為通過在軟件項目中執行如下最佳經驗,可以有效提高軟件質量,確保項目進度:
a)強化開發人員測試;
b)盡早引入性能測試;
c)實施測試管理自動化;
d)引人功能測試執行自動化。
可以說,實施測試自動化是軟件行業一個不可逆轉的趨勢,如果在這個領域走在了前列,無論從企業的核心競爭力還是個人的工作技能來說,都有巨大的優越性。
自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例中描述的規程一步步執行測試,得到實際結果與期望結果的比較。在此過程中,為了節省人力、時間或硬件資源,提高測試效率,便引入了自動化測試的概念。相對于手工測試而言,測試自動化通常具有速度快、執行效率高、測試全面,可連續工作,執行過程受外界因素干擾小、測試結果準確等優點。缺點是前期投入較大,所以在采用測試自動化之前需做好相應的評估工作。本文以Selenium 自動化測試框架為應用背景,對測試自動化在系統測試過程中的應用做了初步的研究。
1、軟件測試的優化分析
隨著人們對軟件質量重視程度的提高,軟件測試的地位逐步提高,軟件測試技術也隨之快速發展,逐漸從過去手工式的測試向測試自動化方向發展,引發了軟件測試自動化的研究和應用熱潮。目前,軟件測試自動化的研究領域主要集中在軟件測試流程的自動化管理以及動態測試的自動化(如單元測試、功能測試以及性能測試方面)。在這兩個領域,與手工測試相比,測試自動化的優勢是明顯的。首先,自動化測試可以提高測試效率,使測試人員更加專注于新的測試模塊的建立和開發,從而提高測試覆蓋率;其次,自動化測試更便于測試資產的數字化管理,使得測試資產在整個測試生命周期內可以得到復用,這個特點在功能測試和回歸測試中尤其具有意義;此外,測試流程自動化管理可以使機構的測試活動開展更加過程化,這很符合CMMI過程改進的思想。根據Oppenheimer Funds的調查,在2001年前后的3年中,全球范圍內由于采用了測試自動化手段所實現的投資回報率高達1500%。
然而,存在優勢并不一定意味著選擇自動化測試方案都能為企業帶來效益匯報,在決定是否引人自動化測試或使用合適的自動化測試方案以前,需從以下方面進行分析:
(1)選擇合適的自動化測試方案測試自動化的引進和實施,不僅涉及測試工作本身流程上、組織結構上的調整與改進,甚至也包括需求、設計、開發、維護及配置管理等其他方面的配合。如果對這些必要的因素沒有考慮周全的話,必然在實施過程中處處碰壁,既定的實施方案也無法開展。
(2)盡管自動化測試可以降低人工測試的工作量,但并不能完全取代手工測試。100% 的自動化測試只是一個理想目標,即便一些如SAP、Oracle ERP等測試庫規劃十分完善的套件,其測試自動化率也不會超過70% 。所以一味追求測試自動化只會給企業帶來運作成本的急劇上升。再次,實施測試自動化需要企業有相對規模的投入,對企業運作來說,投入回報率將是決定是否實施軟件測試自動化的最終指揮棒,因此企業在決定實施軟件測試自動化之前,必須要做量化的投資回報分析。
?。?)實施軟件測試自動化并不意味著必須采購強大的自動化軟件測試工具或自動化管理平臺,在企業內部通常存在許多不同種類的應用平臺,應用開發技術也不盡相同,甚至在一個應用中可能就跨越了多種平臺,或同~應用的不同版本之間存在技術差異。所以選擇軟件測試自動化方案必須深刻理解這一選擇可能帶來的變動、來自諸多方面的風險和成本開銷。畢竟軟件質量的保證不是依靠產品或技術,更多的因素在于高素質的人員和合理有效的流程。
2、選型分析
實施自動化測試之前需要對軟件開發過程進行分析,以觀察其是否適合使用自動化測試。通常需要同時滿足以下條件:
1)軟件需求變動不頻繁
測試腳本的穩定性決定了自動化測試的維護成本。如果軟件需求變動過于頻繁,測試人員需要根據變動的需求來更新測試用例以及相關的測試腳本,而腳本的維護本身就是一個代碼開發的過程,需要修改、調試,必要的時候還要修改自動化測試的框架,如果所花費的成本不低于利用其節省的測試成本,那么
自動化測試便是失敗的。
項目中的某些模塊相對穩定,而某些模塊需求變動性很大,此時可對相對穩定的模塊進行自動化測試,而變動較大的仍是用手工測試。
2)項目周期足夠長
由于自動化測試需求的確定、自動化測試框架的設計、測試腳本的編寫與調試均需要相當長的時間來完成。這樣的過程本身就是一個測試軟件的開發過程,需要較長的時間來完成。如果項目的周期比較短,沒有足夠的時間去支持這樣一個過程,那么實施自動化測試就變成空談。
基于上述條件,我們在實際應用中多選取在項目規模較大的回歸測試環節,或者增量式開發、持續集成的項目中采用自動化測試。
3、測試框架評估
自動化測試框架從最初簡單的腳本錄制/回放發展到結構化腳本、數據驅動?(data·driven)腳本,再發展到關鍵字驅動(keyword.driven)腳本,以及相繼出現的各種自動化測試框架,逐漸形成了良好的腳本開發環境或平臺,使得自動化測試腳本的開發更具開放性、可視性和層次性,測試人員開發和維護腳本都變得更輕松、容易,從而在整體上進一步提高自動化測試的效率和應用范圍。
現有可提供自動化測試解決方案的產品很多,但是其應用結果往往不競如人意,主要存在:定位控件不方便;驗證數據不方便;代碼維護不方便等。對于經常涉及手工任務操作的Web應用程序測試,為了盡可能地消除人為因素,節約手工操作的人員成本和時間,實現跨平臺的Web測試框架,我們發現了Selenium這個開源的軟件自動化測試框架。
a)自動化框架的選擇
測試框架的選擇是成功實施測試自動化的基礎,必須考慮各種因素以使測試自動化更加有效地被使用。Selenium是一種Web應用的自動測試工具,通過模擬用戶對Web頁面的各種操作,可以精確重現軟件測試人員編寫的Test Cases步驟。相對于一般的腳本錄制自動化框架,其優勢在于:
(1)Selenium測試直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium測試可以在Windows、Linux和MacintoshAnd上的Internet Explorer、Mozilla和Firefox中運行。其他測試工具都不能覆蓋如此多的平臺。
?。?)Selenium提供了組件化的測試用例開發方法,建立了靈活的表達方式,很大程度了提高了運行腳本的復用率,節省了腳步開發時間。
?。?)通過Selenium開發的自動測試框架,對組件進行了有效封裝,大大降低了維護工作量。不會產生傳統自動化測試工具錄制回放方法中出現的隨程序變更,需要重復錄制腳本的問題。
?。?)Selenium以業務為驅動,可以通過測試數據流的配置,快速、靈活地實現不同的業務流分支的回歸測試。
(5)Selenium的測試用例、測試結果數據統一在配置庫中管理,實現了測試工具無關性??梢院芎玫倪M行移植,并為用戶提供了一套完整的測試資產庫。
但是Selenium是輕量的測試框架,腳本所處理的測試用例構成簡單,其實質就是通過HTTP協議,發送請求(request)來完成測試用例,所以很困難處理業務邏輯關系強的測試用例。
b)選擇合適的測試用例
大部分自動化測試項目失敗的原因主要歸咎于被測試應用程序的快速變化、不恰當的測試用例、不可靠的框架、腳本編程等問題。并非所有的測試用例都可以用自動化來完成,因此需要對用例進行挑選,選擇合適的用例作為自動化測試用例。自動化測試的成本是巨大的,一般來說,一個腳本運行6—7次才算收回成本,因此不可寄予自動化測試過高期望。通常需要結合測試用例的復雜度的評估來考慮選擇的測試用例以及個數。這樣會帶來較低的維護成本,實現更重要的業務價值。
首先把測試用例按一定的原則分為簡單、中等、復雜3大類。然后從這3大類的測試用例中按一定的比例來抽取需要實現自動化的用例。測試用例的復雜度分組可以通過綜合分析測試用例包含的操作步驟,以及測試用例所包含的檢查點個數來判定。
c)基于Selenium的分層測試框架
在Selenium環境中組織多個測試模塊的測試,每個模塊實現特有的功能,有多條測試路徑需要覆蓋,同時,各個模塊功能之間又有共通之處,可以抽取某些部分進行復用。對此,我們假設這樣的場景:分別對提交的多個待測組件返回的結果頁面中設置相應的檢查點,為它們撰寫Test Cases用于執行測試。事實上,這些組件的測試由于同質性,還能夠合并為一種測試,用不同的輸入參數來指定所要測試的那個待測組件。
表中針對上述各待測組件做自動化測試,以一個經驗豐富的測試人員做3次回歸做一個成本對比。
通過上面表格的對比,可以很明顯看出很多模塊功能都包含一些公共檢查點,例如:文本框、DBGrid列表信息、showModalDialog自定義控件、修改信息保存成功、樹形節點、各種級別菜單選擇等等。把這些公共檢查點封裝在公共函數庫中,任何新功能模塊的驗證都只需要調用公共函數、配置測試數據,組合調試好測試腳本就可以進行測試了,這樣大大提高了測試效率和測試覆蓋率。
d)集成運行框架
構造一個適當的集成環境,會極大地提高自動化的效率。例如,通過數據庫服務器來存儲和管理測試用例和測試結果,以提高過程管理的質量。同時生成統計所需要的數據,供Web服務器使用,顯示測試結果、生成統計報表、結果曲線。運行一個自動化測試項目時,客戶端先通過Web服務器查詢所用的測試用例和資源;然后提交任務,Web服務器負責向控制機發出指令,開始執行測試任務。測試結果經控制器存儲到數據庫中測試自動化運行環境,如圖1所示。
圖1 測試自動化的集成運行框架
e)腳本維護
測試腳本的開發和維護直接關系到軟件測試自動化的成敗,至少對自動化測試的投入產出存在巨大的影響。同時對不同的測試庫的權限應該有很明確的定義。一個好的方案會將測試庫的組織劃分為三個級別:
級別1:全局的,這個一個通常的級別,被存儲在這個級別的測試功能能夠被所有的項目訪問。通用的功能如,登陸、創建一個用戶都是這個級別很好的候選者。
級別2:項目的,在這個級別的測試功能是與特定的測試項目相關的,但是通常在項目中有用的。通用的功能如,項目中自定義控件等。通常級別2是級別1的功能的提供者。
級別3:腳本的,功能被直接關聯到特定的測試腳本。在這個級別中,通常一個測試功能的第一個版本是被開發的。在新的測試腳本的創建期間已有測試功能的重用性被發現,并被移到了級別2中。在這個級別上盡量最小化功能的數量,因為它將增加維護工作量。
4、結語
從軟件測試的優化來看,如何實現軟件的自動化測試是一個很吸引人的技術問題,由于不同企業在組織架構、人員能力以及管理水平等方面的不同,我們很難用一個實例、一兩句話來說明不同解決方案的適用性,具體如何選擇,需要仔細權衡。
posted on 2013-06-24 11:25 順其自然EVO 閱讀(259) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄