楊麗波
摘要:隨著計算機技術的高速發(fā)展和軟件技術的不斷提高,軟件已經應用在各行各業(yè),軟件的質量也越來越得到人們的重視。軟件測試是提高軟件質量的一個重要手段。文章對軟件測試方法中的自動化測試方法的發(fā)展現狀作了簡單的分析,列舉了現階段常用的軟件自動化測試方法,并對在采用自動化測試方法中容易出現的誤區(qū)和不適合采用自動化測試方法的情況~_45-了分析。
關鍵詞:軟件技術;軟件測試;自動化測試
軟件的質量就是軟件的生命。隨著軟件產品的應用范圍越來越廣、功能越來越復雜,軟件質量的管理也越來越困難,雖然人們在進行軟件開發(fā)的過程中使用了許多有效的分析、設計和實現方法,但仍然不能避免出現各種各樣的錯誤,因此,采用更加切實有效的方法發(fā)現軟件產品中的錯誤和缺陷將成為軟件測試人員的首要任務?,F階段可以采用的軟件測試方法包括人工測試和自動化測試,人工測試就是測試人員模擬用戶對軟件產品進行操作,從而發(fā)現軟件的功能和性能與用戶的需求不一致的地方,即軟件缺陷。軟件的自動化測試就是使用自動化測試工具或手段,按照測試工程師的預定計劃自動實現多次重復測試,并分析測試結果。采用自動化的測試方法可以大幅度地提高測試的效率,具有良好的可操作性。
1.自動化測試方法
1.1最初的軟件自動化測試技術
最初的軟件自動化測試技術出現在20世紀90年代初期,主要采用硬件方式來錄制鍵盤輸入和操作過程,然后通過播放實現重復的測試過程,在一定程度上提高了測試的效率,但是不能實現檢查點的功能,即不能針對某個功能點進行功能和屬性的檢查。在這種模式下,記錄操作過程的腳本和所操作的數據是混在一起的,因此維護的成本很高。而且,一旦界面進行了簡單的變化,從前的腳本就完全無法使用,必須重新錄制,這種方式不但使腳本的使用率降低,而且也降低了整個測試工作的效率。
1.2基于數據驅動的自動化測試技術
在20世紀90年代后期,隨著軟件測試技術的不斷發(fā)展,使得錄制和播放測試腳本的功能由硬件實現轉變?yōu)檐浖绞綄崿F,并且增加了檢查點的功能,即可以通過對某個功能實現所涉及的參數值或者屬性值與預期值進行比對來判斷該功能是否正確實現。
這種技術與最初的自動化測試不同的是可以實現從數據文件中讀取數據,數據和操作過程腳本實現了分離,被稱為基于數據驅動的自動化測試技術。它將輸入數據、預期輸出組織成表,表中的一行數據就對應著一次測試過程,測試時從表中一行一行的讀取數據,然后通過變量的形式傳入事先錄制好的或者是手工編寫的測試腳本中,這樣利用相同的測試過程測試不同的輸入、輸出數據的組合。這種方法對于具有很多不同數據作為測試用例的被測系統(tǒng)來說是非常有效的。
1.3基于關鍵字驅動的自動化測試技術
基于關鍵字驅動的自動化測試技術的應用開始于2001年,是基于數據驅動測試技術的擴展,關鍵字驅動的自動化測試用自然語言來描述測試用例,將測試腳本抽象化,使不懂任何代碼的非技術人員,也可以使用測試工具進行測試?;陉P鍵字驅動的自動化測試用關鍵字組成測試的業(yè)務邏輯,其主要思想是:腳本和數據實現分離、測試描述與具體實現細節(jié)分離、界面元素名和測試內部對象名實現分離。主要關鍵字包括:被操作對象(Item),操作(Operation)和價值(value),用面向對象形式可將其表現為Itern.Operation(Value)。
1.4基于領域驅動的自動化測試技術
基于領域驅動的自動化測試是在關鍵字驅動測試的基礎上發(fā)展而來的,主要特點是:從領域模型出發(fā),使用被測軟件產品的領域語言描述測試用例,進行建模,并對測試用例和領域關鍵字進行分析、設計、開發(fā)和組織管理,從而進行有效的測試。領域驅動的自動化測試優(yōu)點如下:(1)測試用例用領域語言描述,易于理解:(2)測試用例可以通過將領域關鍵字和設置參數進行組合來得到;(3)當被測軟件產品的實現方式發(fā)生變化時,可以更新領域驅動測試庫以適應新的變化,測試用例不需要做任何修改。
1.5基于功能驅動的自動化測試技術
基于功能驅動的自動化測試技術首先將整個系統(tǒng)劃分為多個獨立的模塊,在執(zhí)行自動化測試時首先要實現每個模塊的自動化測試,每個模塊都是一個可實現的測試載體,每個測試體被實現為一個包含測試信息的測試函數,代表著一個獨立的測試用例,并可以根據需要調用代表一個獨立功能模塊的應用模塊,讀取驅動這些應用所需的測試數據。在應用模塊中封裝著所有對系統(tǒng)界面的操作和輸入。由于應用模塊代表獨立的功能,所以對其進行維護也相對獨立。
由于在整個基于功能驅動的自動化測試中,所有與被測軟件系統(tǒng)有關的操作及屬性,都被封裝在每個應用模塊腳本中,當系統(tǒng)界面變化以后,只需去修改被影響的應用模塊的腳本,其他腳本可以保持穩(wěn)定。
1.6基于指令驅動的自動化測試技術
基于指令驅動的自動化測試是基于數據驅動自動化測試技術的改進,其整個過程所包含的功能都是由指令驅動的,可以支持由不同序列或多個不同路徑組成的測試。指令驅動的自動化測試建立在數據驅動自動化測試方法之上,但是表中存放的不是數據,而是指令,其獨立于執(zhí)行測試的自動化工具,是對數據驅動的自動化測試的有效改進,也是到目前為止,被學術界認為是比較理想的自動化測試。
2.使用自動化測試的誤區(qū)
軟件的自動化測試技術具有良好的可重復性和高效率等優(yōu)點,但也有一些局限性,下面來分析一下人們在使用自動化測試的過程中存在的一些誤區(qū)。
2.1采用自動化測試能夠完全取代手工測試
在很多情形下,軟件系統(tǒng)的測試過程必須由人來進行控制,只有當上一個步驟執(zhí)行完畢,才可以根據執(zhí)行結果判定下面如何執(zhí)行,或是輸入哪些測試數據,這樣的決策必須由人來做出,機器是無法完成的,所以不能期望在所有的情況下都使用自動化測試來取代手工測試。
2.2能夠對易用性方面的屬性進行測試
因為工具本身不具有審美觀和想象力,所以對于一些界面美觀和易用性方面的測試無法作出判斷,也就無法實現自動化測試。
2.3只要使用自動化測試就能縮短測試時間、提高測試效率
要采用自動化的測試方法,必須在測試執(zhí)行之前花費更多的時間搭建測試環(huán)境、錄制腳本、建立數據表格并輸入數據等等,與采用手工測試相比,要花費5~10倍的時間來開發(fā)一個自動化測試用例。因此如果不能增加額外的資源和時間,不可能進行大量的投入來搭建自動化測試框架,對于規(guī)模較小,測試用例較少的被測軟件系統(tǒng)來說采用自動化測試反而會增加測試時間、降低效率。
自動化測試工具采用圖形化界面,操作容易掌握,對測試人員的技術要求不高?!颁浿?回放”的方法操作簡單容易掌握,但是并不能實現有效的、長期的自動化測試,要想根據被測系統(tǒng)的特點來創(chuàng)建有效的自動化測試腳本,測試人員必須能夠熟練掌握腳本語言,可以對腳本進行編輯和優(yōu)化,最理想的測試人員是既有編程經驗,又有測試經驗。測試過程中,測試人員要對測試腳本庫中的腳本實時進行維護。
3.不適合自動化測試的情況
軟件的自動化測試技術雖然具有較好的可重復性、高效率等優(yōu)點,但是并不適合測試所有類型的軟件產品。以下情況不適合采用自動化測試方法。
定制型軟件項目:有些項目是根據客戶要求定制的,其維護階段是由客戶自己承擔的,而且有些定制型項目采用的開發(fā)語言、運行環(huán)境也是客戶方特別要求的,這就使得公司里對這個項目所積累的測試信息很少,所以這樣的項目不適合做自動化測試。
周期很短的項目:如果項目的開發(fā)周期短,那么測試周期就短,就不值得花費精力去投資自動化測試,即使有足夠的時間和資源搭建好測試環(huán)境,建立好測試腳本,但是不能得到充分的重復利用,也是不可取的。
業(yè)務規(guī)則復雜的軟件產品:如果被測軟件系統(tǒng)具有復雜的業(yè)務規(guī)則,有很多邏輯關系、運算關系,那么就必須由人來參與,工具就很難實現測試。
易用性、美觀性和聲音等方面的測試:與人的感受、感官和體驗有關的測試,包括系統(tǒng)界面的美觀性、聲音的效果、系統(tǒng)的易用性的測試只能由人來實現,機器是無法完成的。
很少運行的軟件系統(tǒng):采用自動化的測試技術就是讓軟件不厭其煩地反復運行,以此來提高測試效率,很少運行的軟件使用自動化測試就是一種浪費。
4.結語
本文從軟件測試是提高軟件質量的重要手段談起,重點討論了軟件的自動化測試的不同方法的特點和實現原理,以及人們在采用自動化測試過程中存在的誤區(qū),并且對不適合采用自動化測試的情況進行了分析,可以為從事軟件測試工作的人員提供參照。