Abstract: Software test is one measure to insure the quality of software, it costs half of time and resource in the whole process of development. If test tools can be used in the process, it would to improve the speed of test and the quality of test, It’s probable to develop software rapidly and to produce high quality. In this document it introduces some software test tools for the different of test moment, it introduce the time for every kind of tools, but the function of the test tool.
關鍵字:軟件測試工具; 測試設計; 靜態分析; 單元測試; 功能測試; 性能測試; 測試過程管理;
Keywords: software test tool; test design; static analysis; unit test; function test; performance test; test process management;
1引言
最近幾年,軟件測試在國內越來越受到重視,因為大家逐漸認識到了軟件測試對于保證軟件質量的重要性。隨著對軟件測試重視的提高,國內軟件測試技術的發展也很快,逐漸從過去手工作坊式的測試向測試工程化的方向發展。
要真正實現軟件測試的工程化,其基礎之一就是要有一大批支持軟件測試工程化的工具。因此,軟件測試工具對于實現軟件測試的工程化來說至關重要。本文就從如何進一步提高軟件測試質量和效率的角度出發,討論測試工具在軟件測試過程中的應用。
2為什么要引入測試工具
在測試過程中引入測試工具能給我們帶來以下的好處。
2.1提高工作效率
這是引入測試工具給我們帶來的一個顯著好處。那些固定的、重復性的工作,可以由測試工具來完成,這樣就使得測試人員能有更多的時間來計劃測試過程,設計測試用例,使測試進行的更加完善。
2.2保證測試的準確性
測試是需要投入大量的時間和精力的,人工進行測試時,經常會犯一些人為的錯誤,而工具的特點恰恰能保證測試的準確性,防止人為疏忽造成的錯誤。
2.3執行困難的測試工作
有一些測試工作,人工進行是很困難的。有的是因為進行起來較為復雜,有的是因為測試環境難以實現。測試工具可以執行一些通過手工難于執行,或者是無法執行的測試。
3測試工具在軟件測試過程中的具體應用
在這一部分,我們討論測試工具在測試過程中的具體應用。
現在的測試工具很多,基本上覆蓋了各個測試階段。按照工具所完成的任務,可以分為以下幾大類:測試設計工具、靜態分析工具、單元測試工具、功能測試工具、性能測試工具、測試過程管理工具。下面,我們就針對每一類工具展開介紹。
3.1測試設計工具
測試設計工具,更完整的名稱應該是測試用例設計工具,是一種幫助我們設計測試用例的軟件工具。
設計測試用例是一項智力性的活動,工具如何能夠代替呢?確實是這樣,但仔細思考一下我們就會發現,很多設計測試用例的原則、方法是固定的,比如等價類劃分、邊界值分析、因果圖等等,這些成型的方法,很適合通過軟件工具來實現。
測試用例設計工具按照生成測試用例時數據輸入內容的不同,可以分為:基于程序代碼的測試用例設計工具和基于需求說明的測試用例設計工具。下面分別對這兩類工具進行介紹。
3.1.1基于程序代碼的測試用例設計工具
基于程序代碼的測試用例設計工具是一種白盒工具,它讀入程序代碼文件,通過分析代碼的內部結構,產生測試的輸入數據。這種工具一般應用在單元測試中,針對的是函數、類這樣的測試對象。由于這種工具與代碼的聯系很緊密,所以,一種工具只能針對某一種(些)編程語言。
這類工具的局限性是——只能產生測試的輸入數據,而不能產生輸入數據后的預期結果,這個局限也是由這類工具生成測試用例的機理所決定的。所以,基于程序代碼的測試用例設計工具所生成的測試用例,還不能稱之為真正意義上的測試用例。不過即使這樣,這種工具仍然為我們設計單元測試的測試用例提供了很大便利。
3.1.2基于需求說明的測試用例設計工具
這種測試用例設計工具,依據軟件的需求說明,生成基于功能需求的測試用例。這種工具所生成的測試用例既包括了測試輸入數據,也包括預期結果,是真正完整的測試用例。
使用這種測試用例設計工具生成測試用例時,需要人工的事先將軟件的功能需求轉化為工具可以理解的文件格式,再以這個文件作為輸入,通過工具生成測試用例。在使用這種測試用例設計工具來生成測試用例時,需求說明的質量是很重要的。
由于這種測試用例設計工具是基于功能需求的,所以可用來設計任何語言、任何平臺的任何應用系統的測試用例。
我們來看一個這類工具的例子——SoftTest。在使用SoftTest生成測試用例時,先將軟件功能需求轉化為文本形式的因果圖,然后讓SoftTest讀入,SoftTest會根據因果圖自動生成測試用例。在這個過程中,工具的使用者只需要完成由功能需求到因果圖的轉化,至于如何使用因果圖來生成測試用例,則完全由Softtest完成。
所有測試用例設計工具都依賴于生成測試用例的算法,工具比使用相同算法的測試人員設計的測試用例更徹底、更精確,這方面工具有優勢。但人工設計測試用例時,可以考慮附加測試,可以對遺漏的需求進行補充,這些是工具無法做到的。所以,測試用例設計工具并不能完全代替測試工程師來設計測試用例。使用這些工具的同時,再人工的檢查、補充一部分測試用例,會取得比較好的效果。
3.2靜態分析工具
一提到軟件測試,人們的第一印象就是填入數據、點擊按鈕等這些功能操作。這些測試工作確實是重要的,但它們不是軟件測試的全部。與這種動態運行程序的測試相對應,還有一種測試被稱為靜態測試,也叫做靜態分析。
進行靜態分析時,不需要運行所測試的程序,而是通過檢查程序代碼,對程序的數據流和控制流信息進行分析,找出系統的缺陷,得出測試報告。
進行靜態分析能切實提高軟件的質量,但由于需要分析人員閱讀程序代碼,使得這項工作進行起來工作量又很大。對軟件進行靜態分析的測試工具在這種需求下也就產生了?,F在的靜態分析工具一般提供以下兩個功能:分析軟件的復雜性、檢查代碼的規范性。
軟件質量標準化組織制定了一個ISO/IEC9126質量模型,用來量化的衡量一個軟件產品的質量。該軟件質量模型是一個分層結構,包括質量因素、質量標準、質量度量元三層。質
量度量元處于質量模型分層結構中的最底層,它直接面向程序的代碼,記錄的是程序代碼的特征信息,比如函數中包含的語句數量、代碼中注釋的數量。質量標準是一個概括性的信息,它比質量度量元高一級,一個質量標準由若干個質量度量元組成的。質量因素由所有的質量標準共同組成,處于軟件質量模型的最高層,是對軟件產品的一個總體評價。具有分析軟件復雜性功能的靜態分析工具,除了在其內部包含上述的質量模型外,通常還會從其它的質量方法學中吸收一些元素,比如Halstend質量方法學、McCabe質量方法學。這些靜態分析工具允許用戶調整質量模型中的一些數值,以更加符合實際情況的要求。
在用這類工具對軟件產品進行分析時,以軟件的代碼文件作為輸入,靜態分析工具對代碼進行分析,然后與用戶定制的質量模型進行比較,根據實際情況與模型之間的差距,得出對軟件產品的質量評價。
具有檢查代碼規范性功能的靜態分析工具,其內部包含了得到公認的編碼規范,比如函數、變量、對象的命名規范,函數語句數的限制等等,工具支持對這些規范的設置。工具的使用者根據情況,裁減出適合自己的編碼規范,然后通過工具對代碼進行分析,定位代碼中違反編碼規范的地方。
以上就是靜態分析工具所具有的功能。與人工進行靜態分析的方式相比,通過使用靜態分析工具,一方面能提高靜態分析工作的效率,另一方面也能保證分析的全面性。
3.3單元測試工具
單元測試是軟件測試過程中一個重要的測試階段。與集成測試、確認測試相比,在編碼完成后對程序進行有效的單元測試,能更直接、更有效的改善代碼質量。
進行單元測試不是一件輕松的事。一般來講,進行一個完整的單元測試所需的時間,與編碼階段所花費的時間相當。進行單元測試時,根據被測單元(可能是一個函數,或是一個類)的規格說明,設計測試用例,然后通過執行測試用例,驗證被測單元的功能是否正常實現。除此之外,在單元測試階段,我們還需要找出那些短時間不會馬上表現出來的問題(比如C++代碼中的內存泄露),還需要查找代碼中的性能瓶頸,并且為了驗證單元測試的全面性,我們還想了解單元測試結束后,我們的測試所達到的覆蓋率。
針對這些在單元測試階段需要做的工作,各種用于單元測試的工具就產生了。典型的單元測試工具有以下幾類:動態錯誤檢測工具、性能分析工具、覆蓋率統計工具。
動態錯誤檢測工具,用來檢查代碼中類似于內存泄露、數組訪問越界這樣的程序錯誤。程序功能上的錯誤比較容易發現,因為它們很容易表現出來。但類似于內存泄露這樣的問題,因為在程序短時間運行時不會表現出來,所以不易發現。遺留有這樣問題的單元被集成到系統后,會使系統表現的極不穩定。
性能分析工具,記錄被測程序的執行時間。小到一行代碼、一個函數的運行時間,大到一個exe或dll文件的運行時間,性能分析工具都能清晰的記錄下來。通過分析這些數據,能夠幫助我們定位代碼中的性能瓶頸。
覆蓋率統計工具,統計出我們當前執行的測試用例對代碼的覆蓋率。覆蓋率統計工具提供的信息,可以幫助我們根據代碼的覆蓋情況,進一步完善測試用例,使所有的代碼都被測試到,保證單元測試的全面性。
動態錯誤檢測工具、性能分析工具、覆蓋率統計工具的運行機理是:用測試工具對被測程序進行編譯、連接,生成可執行程序。在這個過程中,工具會向被測代碼中插入檢測代碼。然后運行生成的可執行程序,執行測試用例,在程序運行的過程中,工具會在后臺通過插入被測程序的檢測代碼收集程序中的動態錯誤、代碼執行時間、覆蓋率信息。在退出程序后,工具將收集到的各種數據顯示出來,供我們分析。
目前被普遍使用的單元測試工具中有Compuware公司的NuMega DevPartner Studio,Rational 公司的Rational Suite Enterprise。這些軟件產品都是一個工具套件,其中包含了我們前面所討論的動態錯誤檢測工具、性能分析工具、覆蓋率統計工具等。
3.4功能測試工具
在軟件產品的各個測試階段,通過測試發現了問題,開發人員就要對問題進行修正,修正后的軟件版本需要再次進行測試,以驗證問題是否得到解決,是否引發了新的問題,這個再次進行測試的過程,稱為回歸測試。
由于軟件本身的特殊性,每次回歸測試都要對軟件進行全面的測試,以防止由于修改缺陷而引發新的缺陷。進行過回歸測試人都會深有體會,回歸測試的工作量是很大的,而且也很乏味,因為要將上一輪執行過的測試原封不動的再執行一遍。設想一下,如果能有一個機器人,就象播放錄影帶一樣,忠實的將上一輪執行過的測試原封不動的在軟件新版本上重新執行一遍,那就太好了。這樣做,一方面,能保證回歸測試的完整、全面性,測試人員也能有更多的時間來設計新的測試用例,從而提高測試質量;另一方面,能縮短回歸測試所需要的時間,縮短軟件產品的面市時間。功能測試自動化工具就是一個能完成這項任務的軟件測試工具。
功能測試自動化工具理論上可以應用在各個測試階段,但大多數情況下是在確認測試階段中使用。功能測試自動化工具的測試對象是那些擁有圖形用戶界面的應用程序。
一個成熟的功能測試自動化工具要包括以下幾個基本功能:錄制和回放、檢驗、可編程。
錄制,就是記錄下對軟件的操作過程,回放,就是象播放電影一樣重放錄制的操作。啟動功能測試自動化工具,打開錄制功能,依照測試用例中的描述一步一步的操作被測軟件,功能測試自動化工具會以腳本語言的形式記錄下你操作的全過程。依照此方法,可以將所有的測試用例進行錄制。在需要重新執行測試用例時,回放錄制的腳本,功能測試自動化工具依照腳本中的內容,操作被測軟件。除了速度非??熘?,通過功能測試自動化工具執行測試用例與人工執行測試用例的效果是完全一樣的。
錄制只是實現了測試輸入的自動化。一個完整的測試用例,由輸入和預期輸出共同組成。所以,光是錄制回放還不是真正的功能測試自動化。測試自動化工具中有一個檢驗功能,通過檢驗功能,在測試腳本中設置檢驗點,使得功能測試自動化工具能夠對操作結果的正確性進行檢驗,這樣,就實現了完整的測試用例執行自動化。軟件界面上的一切界面元素,都可以作為檢驗點來對其進行檢驗,比如文本、圖片、各類控件的狀態等。
腳本錄制好了,也加入了檢驗點,一個完整的測試用例已經被自動化了。但我們還想對腳本的執行過程進行更多的控制,比如依據執行情況進行判斷,從而執行不同的路徑,或者是對某一段腳本重復執行多次。通過對錄制的腳本進行編程,可以實現上述的要求?,F在的主流功能測試自動化工具都支持對腳本的編程。象傳統的程序語言一樣,在功能測試自動化工具錄制的腳本中,可加入分支,循環,函數調用這樣的控制語句。通過對腳本進行編程,能夠使腳本更加靈活,功能更加強大,腳本的組織更富有邏輯性。在傳統的編程語言中適用的那些編程思想,在組織測試自動化腳本時同樣適用。
在測試過程中,使用功能測試自動化工具的大體過程是這樣的:
● 準備錄制
保證所有要自動化的測試用例已經設計完畢,并形成文檔。
● 進行錄制
打開功能測試自動化工具,啟動錄制功能,按測試用例中的輸入描述,操作被測試應用程序。
● 編輯測試腳本
通過加入檢測點、參數化測試,以及添加分支、循環等控制語句,來增強測試腳本的功能,使將來的回歸測試真正能夠自動化。
● 調試腳本
調試腳本,保證腳本的正確性。
● 在回歸測試中運行測試
在回歸測試中,通過功能測試自動化工具運行腳本,檢驗軟件正確性,實現測試的自動化進行。
● 分析結果,報告問題
查看測試自動化工具記錄的運行結果,記錄問題,報告測試結果。
功能測試自動化工具是軟件測試工具中非?;钴S的一類工具,現在發展的已經較為成熟,象Mercury Interactive公司的WinRunner,Rational公司的Robot,都是被廣泛使用的功能測試自動化工具。
3.5性能測試工具
通過性能測試,檢驗軟件的性能是否達到預期要求,是軟件產品測試過程中的一項重要任務。性能測試用來衡量系統的響應時間、事務處理速度和其它時間敏感的需求,并能測試出與性能相關的工作負載和硬件配置條件。通常所說的壓力測試和容量測試,也都屬于性能測試的范疇,只是執行測試時的軟、硬件環境和處理的數據量不同。
對系統經常會進行的性能測試包括:系統能承受多少用戶的并發操作;系統在網絡較為擁擠的情況下能否繼續工作;系統在內存、處理器等資源緊張的情況下是會否發生錯誤,等等。由于性能測試自身的特點,完全依靠人工執行測試具有一定的難度。比如,我們要檢驗一個基于Web的系統,在10000個用戶并發訪問的情況下,是否能正常工作。如果通過人工測試的方式,很難模擬出這種環境。在這種情況下,就需要使用性能測試工具。
使用性能測試工具對軟件系統的性能進行測試時,大體分為以下幾個步驟:
首先,錄制下軟件產品中要對其進行性能測試的功能部分的操作過程。這一步與前面我們討論過的功能測試自動化工具中的那個錄制過程很相似。功能錄制結束后,會形成與操作相對應的測試腳本。
然后,根據具體的測試要求,對腳本進行修改,對腳本運行的過程進行設置,如設置并發的用戶數量、網絡的帶寬,使腳本運行的環境與我們實際要模擬的測試環境一致。
最后,運行測試腳本。性能測試工具會在模擬的環境下執行我們所錄制的操作,并實時的為我們顯示與被測軟件系統相關的各項性能數據。
性能測試工具實際上是一種模擬軟件運行環境的工具,它能幫助我們在實驗室里搭建出我們需要的測試環境?,F在,基于Web是軟件系統發展的一個趨勢,性能測試也就變的比以往更加重要了,性能測試工具也自然會在軟件測試過程中被更多的使用。
3.6測試過程管理工具
軟件測試貫穿于整個軟件開發過程,按照工作進行的先后順序,測試過程可分為制定計劃、測試設計、測試執行、跟蹤缺陷這幾個階段。在每個階段,都有一些數據需要保存,人員之間也需要進行交互。測試過程管理工具就是一種用于滿足上述需求的軟件工具,它管理整個測試過程,保存在測試不同階段產生的文檔、數據,協調技術人員之間的工作。
測試過程管理工具一般都會包括以下這些功能:管理軟件需求、管理測試計劃、管理測試用例、缺陷跟蹤、測試過程中各類數據的統計和匯總。
市面上商用的測試管理工具有很多,基本上都是基于Web的系統,這樣更利于跨地區團隊之間的協作。
4正確認識測試工具的作用
如果一個現在正在從事軟件測試工作,但在測試過程中還沒有使用過測試工具的人看到以上的這些內容,可能會非常興奮,因為他覺的只要在測試過程中引入相關的測試工具,那些一直困擾他們測試團隊的問題就都能輕松解決了。
在業內經常會有這種想法,認為通過引入一種新的技術,就能解決面臨的所有問題了。這種想法,忽視了除技術以外我們仍然需要做的工作。軟件測試工具確實能提高測試的效率和質量,但它并不是能夠解決一切問題的靈丹妙藥。
軟件測試工具能在測試過程中發揮多大的作用,取決于測試過程的管理水平和人員的技術水平。測試過程的管理水平和人員的技術水平都是人的因素,是一個開發組織不斷改進,長期積累的結果。如果一個測試組織的測試過程管理很混亂,人員缺乏經驗,那么不必忙于引入各種測試工具,這時首先應該做的是改進測試過程,提高測試人員的技術水平,待達到一定程度后,再根據情況逐步的引入測試工具,進一步的改善測試過程,提高測試效率和質
量。
5結束語
軟件測試在整個軟件開發過程中占據了將近一半的時間和資源。通過在測試過程中合理的引入軟件測試工具,能夠縮短軟件開發時間,提高測試質量,從而更快、更好的為用戶提供他們需要的軟件產品。
原文轉自:http://www.anti-gravitydesign.com