軟件測試
軟件測試是為了發現錯誤而執行程序的過程
軟件測試的最基本原則:盡早地和不斷地進行軟件測試(盡可能多的發現軟件中的Bug)
根據測試方法划分:黑盒測試、白盒測試、灰盒測試
黑盒測試:
黑盒測試,指的是把被測的軟件看作是一個黑盒子,我們不去關心盒子里面的結構是什么樣子的,只關心軟件的輸入數據和輸出結果。
它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息。黑盒測試着眼於程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。
采用黑盒技術設計測試用例的方法有:等價類划分、邊界值分析、錯誤推測、因果圖和綜合策略。
白盒測試:
白盒測試,指的是把盒子蓋子打開,去研究里面的源代碼和程序結果。
它是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作 。
灰盒測試:
灰盒測試介於黑盒測試與白盒測試之間。
可以這樣理解,灰盒測試關注輸出對於輸入的正確性,同時也關注內部表現,但這種關注不象白盒那樣詳細、完整,只是通過一些表征性的現象、事件、標志來判斷內部的運行狀態,有時候輸出是正確的,但內部其實已經錯誤了,這種情況非常多,如果每次都通過白盒測試來操作,效率會很低,因此需要采取這樣的一種灰盒的方法。
根據測試流程/開發階段划分:
單元測試(Unit Test):單元測試是對軟件中的基本組成單位進行的測試。目的是檢驗軟件基本組成單位的正確性。
集成測試(Integration Test):集成測試是在軟件系統集成過程中所進行的測試。目的是檢查軟件單位之間的接口是否正確。
系統測試(System Test):系統測試是對已經集成好的軟件系統進行徹底的測試,以驗證軟件系統的正確性和性能等是否滿足其規約所指定的要求。
驗收測試(Acceptance Test):驗收測試是部署軟件之前的最后一個測試操作。驗收測試的目的是確保軟件准備就緒,向軟件購買都展示該軟件系統滿足其用戶的需求。
單元測試階段:
模塊接口測試: 通過所測模塊的數據流進行測試。調用所測模塊時的輸入參數與模塊的形式參數的個數、屬性和順序是否匹配。
局部數據結構測試: 局部數據結構是為了保證臨時存儲在模塊內的數據在程序執行過程中完整、正確,模塊的局部數據結構往往是錯誤的根源。
路徑測試: 對模塊中重要的執行路徑進行測試。
錯誤處理測試: 比較完善的模塊設計要求能遇見出錯的條件,並設置適當的出錯處理,以便在一旦程序出錯時,能對出錯程序重做安排,保證其邏輯上的正確性。
邊界條件測試: 軟件經常在便捷上失效,邊界條件測試是一項基礎測試,也是后面系統測試中的功能測試的重點。
集成測試階段:
在集成測試中,我們主要關注以下內容:
1. 把各個模塊連接起來時,穿越模塊接口的數據據是否會丟失。
2. 各個了模塊組合起來,能否達到預期要求的功能。
3. 一個模塊的功能是否會對另一個模塊的功能產生不利影響。
4. 全局數據據結構是否有問題。
5. 單個模塊的誤差積累起來是否會被放大,從而達到不可接受的程序。
系統測試階段:
一般系統的主要測試工作都集中系統測試階段。根據不同的系統,所進行的測試種類也很多,例如:
功能測試:功能測試是對產品的各功能進行驗證,以檢查是否滿足需求的要求。
性能測試:性能測試是通過自動化測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。
安全測試:安全測試檢查系統對非法入侵的防范能力。
兼容測試:兼容性測試主要是測試系統在不同的軟硬件環境下是否能夠正常的運行。
(add by candy)
通常系統測試階段還包含確認測試,確認測試包含:功能測試(有效性測試)、軟件配置復查、Alpha Test、Beta Test。
α測試是由一個用戶在開發環境下進行的測試,也可以是公司內部的用戶在仿真實際操作環境下進行的測試。這是在受控制的環境下進行的測試。α測試的目的是評價軟件產品的FURPS【即功能(function)、易用性(usability)、可靠度(reliability)、性能(performance)及可支持性(supportability)】。尤其注重產品的接口和特色。
β測試是由軟件的多個用戶在一個或多個用戶的實際使用環境下進行的測試。與α測試不同的是,開發者通常不在測試現場。因而,β測試是在開發者無法控制的環境下進行的軟件現場應用
驗收測試階段:
功能確認測試
安全可靠性測試
兼容性測試
易用性測試
可擴充性測試
資源占用率測試
用戶文檔資料驗收
根據測試的側重划分:功能測試與性能測試
功能測試: 功能測試檢查實際的功能是否符合用戶的需求。
功能測試又可以細分為很多種:邏輯功能測試、界面測試、易用性測試、安裝測試、兼容性測試等。
功能測試(function testing):是在規定的一段時間內運行軟件系統的所有功能,以驗證這個軟件系統有無嚴重錯誤。
易用性測試(usability testing):可使用性測試(易用性測試)主要從使用的合理性和方便性等角度對軟件系統進行檢查,發現認為因素或使用上的問題。
安裝測試(installation testing):安裝測試的目的不是找軟件錯誤,而是找安裝錯誤。
兼容性測試(compatibility testing):這類測試主要想驗證軟件產品在不同版本之間的兼容性。有兩類基本的兼容性測試:向下兼容(測試軟件新版本保留它早期版本的功能)和交錯兼容(驗證共同存在的兩個相關但不同的產品之間的兼容性)。
恢復測試(recovery testing):恢復測試是要證實在克服硬件故障(包括掉電、硬件或網絡出錯等)后,系統能否正常地繼續進行工作,並不對系統造成任何損害。為此,可采用各種人工干預的手段,模擬硬件故障,並由此檢查:
① 錯誤探測功能——系統能否發現硬件失效或故障;
② 能否切換或啟動備用的硬件;
③ 在故障發生時能否保護正在運行的作業和系統狀態;
④ 在系統恢復后能否從最后記錄下來的無錯誤狀態開始繼續執行作業等。
如果系統的恢復是自動的(由系統自身執行),則應對重新初始化、數據恢復、重新啟動等逐個進行正確性評價。如果恢復需要人工干預,就需要對恢復的平均時間進行評估以判定它是否在允許的范圍之內。
文檔測試(documentation testing):這種測試是檢查用戶文檔(如用戶手冊)的清晰性和精確性。確保敘述正確無誤。
可支持性測試(supportability testing):這類測試是要驗證系統的支持策略對於公司與用戶方面是否切實可行。它所采用的方法是試運行支持過程(如對有錯部分打補丁的過程,熱線界面等),對其結果進行質量分析,評審診斷工具、維護過程、內部維護文檔;衡量修復一個明顯錯誤所需的平均最少時間。還有一種常用的方法是,在發行前把產品交給用戶,向用戶提供支持服務的計划,從用戶處得到對支持服務的反饋。
互連測試(interoperability testing):互連測試是要驗證兩個或多個不同的系統之間的互連性。這類測試對支持標准規格說明,或承諾支持與其他系統互連的軟件系統有效。
性能測試:性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。
性能測試是相對功能測試來說的。它們之間最本質的區別就是:對系統的處理能力是否夠成壓力。如果一個用戶的一個操作(比如超大數據量的查詢)對系統夠成了壓力,也可以視其為性能測試。
軟件的性能包括很多方面,主要有時間性能和空間性能兩種。
時間性能:主要是指軟件的一個具體的響應時間。比如一個登錄所需要的時間,一個交易所需要的時間等。
空間性能:主要指軟件運行時所消耗的系統資源,比如硬件資源,CPU、內存,網絡帶寬消耗等。
性能測試(廣義)包括:
性能測試(狹義)
性能測試方法是通過模擬生產運行的業務壓力量和使用場景組合,測試系統的性能是否滿足生產性能要求。通俗地說,這種方法就是要在特定的運行條件下驗證系統的能力狀態。(理解為how much and how fast)
特點:
1、這種方法的主要目的是驗證系統是否有系統宣稱具有的能力。
2、這種方法要事先了解被測試系統經典場景,並具有確定的性能目標。
3、這種方法要求在已經確定的環境下運行。
也就是說,這種方法是對系統性能已經有了解的前提,並對需求有明確的目標,並在已經確定的環境下進行的。
負載測試(Load Test)
通過在被測系統上不斷加壓,直到性能指標達到極限,例如“響應時間”超過預定指標或某種資源已經達到飽和狀態。(理解為how much)
也就是說,這種方法是對一個系統持續不段的加壓,看你在什么時候已經超出“我的要求”或系統崩潰。
Load Test = Large amount of users
特點:
1、這種性能測試方法的主要目的是找到系統處理能力的極限。
2、這種性能測試方法需要在給定的測試環境下進行,通常也需要考慮被測試系統的業務壓力量和典型場景、使得測試結果具有業務上的意義。
3、這種性能測試方法一般用來了解系統的性能容量,或是配合性能調優來使用。
壓力測試(Stress Test 強度測試)
壓力測試方法測試系統在一定飽和狀態下,例如cpu、內存在飽和使用情況下,系統能夠處理的會話能力,以及系統是否會出現錯誤
也就是說,這種測試是讓系統處在很大強度的壓力之下,看系統是否穩定,哪里會出問題。
Stress Test = Too many users, too much data, too little time and too little room
特點:
1、這種性能測試方法的主要目的是檢查系統處於壓力性能下時,應有的表現。
2、這種性能測試一般通過模擬負載等方法,使得系統的資源使用達到較高的水平。
3、這種性能測試方法一般用於測試系統的穩定性。
配置測試(Configuration Test)
配置測試方法通過對被測系統的軟\硬件環境的調整,了解各種不同對系統的性能影響的程度,從而找到系統各項資源的最優分配原則。
特點:
1、這種性能測試方法的主要目的是了解各種不同因素對系統性能影響的程度,從而判斷出最值得進行的調優操作。
2、這種性能測試方法一般在對系統性能狀況有初步了解后進行。
3、這種性能測試方法一般用於性能調優和規划能力。
也就是說,這種測試關注點是“微調”,通過對軟硬件的不段調整,找出這他們的最佳狀態,使系統達到一個最強的狀態。
可靠性測試(Reliability Test)
在給系統加載一定業務壓力的情況下,使系統運行一段時間,以此檢測系統是否穩定。
也就是說,這種測試的關注點是“穩定”,不需要給系統太大的壓力,只要系統能夠長期處於一個穩定的狀態
特點:
1、這種性能測試方法的主要目的是驗證是否支持長期穩定的運行。
2、這種性能測試方法需要在壓力下持續一段時間的運行。(2~3天)
3、測試過程中需要關注系統的運行狀況。
容量測試(Volume Test)
是通過測試預先分析出反映軟件系統應用特征的某項指標的極限值(如最大並發用戶數、數據庫記錄數等),系統在其極限值狀態下沒有出現任何軟件故障或還能保持主要功能正常運行。
Volume Test = Large amounts of data
並發測試
並發測試方法通過模擬用戶並發訪問,測試多用戶並發訪問同一個應用、同一個模塊或者數據記錄時是否存在死鎖或其者他性能問題。
也就是說,這種測試關注點是多個用戶同時(並發)對一個模塊或操作進行加壓。
特點:
1、這種性能測試方法的主要目的是發現系統中可能隱藏的並發訪問時的問題。
2、這種性能測試方法主要關注系統可能存在的並發問題,例如系統中的內存泄漏、線程鎖和資源爭用方面的問題。
3、這種性能測試方法可以在開發的各個階段使用需要相關的測試工具的配合和支持。
根據測試是否使用自動化工具划分:手工測試與自動化測試
手工測試:手工測試就是由人去一個一個的去執行測試用例,通過鍵盤鼠標等輸入一些參數,查看返回結果是否符合預期結果。
(在目前的測試領域,手工測試仍然是無法替代的一種測試方法)
自動化測試: 自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例並通過評審之后,由測試人員根據測試用例中描述的規程一步步執行測試,得到實際結果與期望結果的比較。在此過程中,為了節省人力、時間或硬件資源,提高測試效率,便引入了自動化測試的概念。
自動化測試是對手工測試的一種補充,因為很多數據的正確性、GUI、業務邏輯等都離不開測試人員的人工判斷。
自動化測試:又可分為功能自動化測試與性能自動化測試。
我們一般所說的自動化測試就是指功能自動化測試,通過相關的測試技術,通過編碼的方式用一段程序來測試一個軟件的功能,這樣就可以重復執行程序來進行重復的測試。如果一個軟件一小部分發生改變,我們只要修改一部分代碼,就可以重復的對整個軟件進行功能測試。這樣就大大的提高了測試效率。
性能自動化測試,除了早期階段,現在的性能測試工作都是通過性能測試工具輔助完成的。能過工具可以模擬成千上萬的用戶向系統發送請求,用來驗證系統的處理能力。
冒煙測試、回歸測試、隨機測試
這三種測試在軟件功能測試過程中,既不算具體明確的測試階段也不算是具體的測試方法。
冒煙測試(Smoke Test):
是指在對一個新版本進行系統大規模的測試之前,先驗證一下軟件的基本功能是否實現,是否具備可測性。
引入到軟件測試中,就是指測試小組在正規測試一個新版本之前,先投入較少的人力和時間驗證一個軟件 的主要功能,如果主要功能都沒有實現,則打回開發組重新開發。這樣做的好處是可以節省大量的時間成本和人力成本。
回歸測試(Regression Test):
回歸測試是指修改了舊代碼后,重新時行測試以確認修改后沒有引入新的錯誤或導致其他代碼產生錯誤。
回歸測試一般是在進行軟件的第二輪測試開始的,驗證第一輪中發現的問題是否得到修復。當然,回歸也是一個循環的過程,如果回歸的問題通不過,則需要開發人員修改后再次進行回歸,直到通過為止。
隨機測試(Ad-hoc test):
是指測試中的所有輸入數據都是隨機生成的,其目的是模擬用戶的真實操作,並發現一些邊緣性的錯誤。
隨機測試可以發現一些隱蔽的錯誤,但是也有很多缺點,比如測試不系統,無法統計代碼覆蓋率和需求覆蓋率,發現的問題難以重現。一般是放在測試的最后執行。其實隨機測試更專業的升級版叫 探索性測試。探索性測試可以說是一種測試思維技術。它沒有很多實際的測試方法、技術和工具,但是卻是所有測試人員都應該掌握的一種測試思維方式。探索性強調測試人員的主觀能動性,拋棄繁雜的測試計划和測試用例設計過程,強調在碰到問題時及時改變測試策略。探索性測試應該是未來測試領域的一個方向。
安全性測試(Security Test): 安全測試是在IT軟件產品的生命周期中,特別是產品開發基本完成到發布階段,對產品進行檢驗以驗證產品符合安全需求定義和產品質量標准的過程。安全測試也在越來越受到企業的關注和重視,因為由於安全性問題造成的后果是不可估量的。尤其對於互聯網產品最容易遭受各種安全攻擊。
場景測試(Scenario Test):針對用戶需求內容的測試,稱之為場景測試;場景測試首先在系統測試階段測試通過,然后在用戶確認階段,由用戶執行場景測試來進行產品驗收。
要做到場景測試,實際上需要從需求開始做起,需求與用戶溝通,確認用戶的實際場景,然后分析這些場景,並據此設計出產品的解決方案,得到用戶使用產品的應用場景,並排列出優先級;然后開發根據場景優先級開發出產品;最后測試根據場景優先級進行測試,並結合軟件實際情況,給出拓展場景,給出使用說明,推薦給用戶使用。
輔助功能測試(Accessibility test):軟件輔助功能測試是指測試軟件是否向殘疾用戶提供足夠的輔助功能
本地化/全球化測試(Localization/Globalization)
一般自動化測試都用來做冒煙和回歸。
性能測試分類之我見:http://www.cnblogs.com/fnng/archive/2012/06/09/2543274.html