軟件測試分類
單元測試:單元測試(或模塊測試)是對程序中的單個子程序或具有獨立功能的代碼段進(jìn)行測試的過程踱卵。
集成測試:集成測試是單元測試的基礎(chǔ)上装获,將通過單元模塊組裝成系統(tǒng)或子系統(tǒng)掀亩,再進(jìn)行測試悄泥,重點是檢查模塊之間的接口是否正確。
系統(tǒng)測試:系統(tǒng)測試是針對整個產(chǎn)品系統(tǒng)進(jìn)行的測試劝堪,驗證系統(tǒng)是否滿足了需求規(guī)格的定義冀自,以及軟件系統(tǒng)的正確性和性能等是否滿足其規(guī)約所指定的要求。
驗收測試:驗收測試是部署軟件之前的最后一個測試操作秒啦。驗收測試的目的是確保軟件準(zhǔn)備就緒熬粗,向軟件購買都展示該軟件系統(tǒng)滿足其用戶的需求。
白盒測試帝蒿、黑盒測試荐糜、灰盒測試
白盒測試與黑盒測試,主要是根據(jù)在軟件測試工作中對軟件代碼的可見程度進(jìn)行的劃分葛超;這也是軟件測試領(lǐng)域中最基本的概念暴氏。
黑盒測試:黑盒測試,指的是把被測的軟件看作是一個黑盒子绣张,我們不去關(guān)心盒子里面的結(jié)構(gòu)是什么樣子的答渔,只關(guān)心軟件的輸入數(shù)據(jù)和輸出結(jié)果。它只檢查程序呈現(xiàn)給用戶的功能是否按照需求規(guī)格說明書的規(guī)定正常使用侥涵,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息沼撕。黑盒測試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu)芜飘,主要針對軟件界面和軟件功能進(jìn)行測試务豺。
白盒測試:白盒測試,指的是把盒子打開嗦明,去研究里面的源代碼和程序執(zhí)行結(jié)果笼沥。它是按照程序內(nèi)部的結(jié)構(gòu)測試程序,通過測試來檢測產(chǎn)品內(nèi)部動作是否按照設(shè)計規(guī)格說明書的規(guī)定正常進(jìn)行娶牌,檢驗程序中的每條通路是否都能按預(yù)定要求正確工作奔浅。
灰盒測試:灰盒測試介于黑盒測試與白盒測試之間∈迹可以這樣理解汹桦,灰盒測試關(guān)注輸出對于輸入的正確性,同時也關(guān)注內(nèi)部表現(xiàn)鉴裹,但這種關(guān)注不象白盒那樣詳細(xì)舞骆、完整,只是通過一些表征性的現(xiàn)象径荔、事件葛作、標(biāo)志來判斷內(nèi)部的運行狀態(tài),有時候輸出是正確的猖凛,但內(nèi)部其實已經(jīng)錯誤了赂蠢,這種情況非常多,如果每次都通過白盒測試來操作辨泳,效率會很低虱岂,因此需要采取這樣的一種灰盒測試的方法。
功能測試與性能測試從對軟件的不同測試點可以劃分為功能測試與性能測試菠红。
功能測試功能測試檢查實際的功能是否符合用戶的需求第岖。測試的大部分工作也是圍繞軟件的功能進(jìn)行,設(shè)計軟件的目的也就是滿足客戶對其功能的需求试溯。如果偏離的這個目的任何測試工作都是沒有意義的蔑滓。
功能測試又可以細(xì)分為很多種:邏輯功能測試、界面測試、易用性測試键袱、安裝測試燎窘、兼容性測試等。
性能測試性能測試是通過自動化的測試工具模擬多種正常蹄咖、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試褐健。軟件的性能包括很多方面,主要有時間性能和空間性能兩種澜汤。
時間性能:主要是指軟件的一個具體的響應(yīng)時間蚜迅。比如一個登錄所需要的時間,一個交易所需要的時間等俊抵。當(dāng)然谁不,拋開具體的測試環(huán)境,來分析一次事務(wù)的響應(yīng)時間是沒有任何意義的徽诲。需要搭建一個具體且獨立的測試環(huán)境刹帕。
空間性能:主要指軟件運行時所消耗的系統(tǒng)資源,比如硬件資源馏段,CPU轩拨、內(nèi)存,網(wǎng)絡(luò)帶寬消耗等院喜。
手工測試與自動化測試從對軟件測試工作的自動化程度可以劃分為手工測試與自動化測試亡蓉。
手工測試:手工測試就是由人去一個一個的去執(zhí)行測試用例,通過鍵盤鼠標(biāo)等輸入一些參數(shù)喷舀,查看返回結(jié)果是否符合預(yù)期結(jié)果砍濒。手工測試并不非專業(yè)術(shù)語,手工測試通常是指我們在系統(tǒng)測試階段所進(jìn)行的功能測試硫麻,為了更明顯的與自動化測試進(jìn)行區(qū)分爸邢,所以這里使用了手工測試。
自動化測試自動化測試是把以人為驅(qū)動的測試行為轉(zhuǎn)化為機器執(zhí)行的一種過程拿愧。通常杠河,在設(shè)計了測試用例并通過評審之后,由測試人員根據(jù)測試用例中描述的規(guī)程一步步執(zhí)行測試浇辜,得到實際結(jié)果與期望結(jié)果的比較券敌。在此過程中,為了節(jié)省人力柳洋、時間或硬件資源待诅,提高測試效率,便引入了自動化測試的概念熊镣。
自動化測試又可分為:功能自動化測試與性能自動化測試卑雁。我們一般所說的自動化測試就是指功能自動化測試募书,通過相關(guān)的測試技術(shù),通過編碼的方式用一段程序來測試一個軟件的功能测蹲,這樣就可以重復(fù)執(zhí)行程序來進(jìn)行重復(fù)的測試莹捡。如果一個軟件一小部分發(fā)生改變我們只要修改一部分自動化測試代碼,就可以重復(fù)的對整個軟件進(jìn)行功能測試弛房;從而大大的提高了測試效率道盏。性能自動化測試而柑,當(dāng)然文捶,除了早期階段,現(xiàn)在的性能測試工作都是通過性能測試工具輔助完成的媒咳。通過工具可以模擬成千上萬的用戶向系統(tǒng)發(fā)送請求粹排,用來驗證系統(tǒng)的處理能力。
冒煙測試涩澡、回歸測試顽耳、隨機測試這三種測試出現(xiàn)在軟件功能測試周期中,既不算具體明確的測試階段也不是具體的測試方法妙同。
冒煙測試:是指在對一個新版本進(jìn)行系統(tǒng)大規(guī)模的測試之前射富,先驗證一下軟件的基本功能是否實現(xiàn),是否具備可測性粥帚。引入到軟件測試中胰耗,就是指測試小組在正規(guī)測試一個新版本之前,先投入較少的人力和時間驗證一個軟件 的主要功能芒涡,如果主要功能都沒有實現(xiàn)柴灯,則打回開發(fā)組重新開發(fā)。這樣做的好處是可以節(jié)省大量的時間成本和人力成本费尽。
回歸測試:回歸測試是指修改了舊代碼后赠群,重新進(jìn)行測試以確認(rèn)修改后沒有引入新的錯誤或?qū)е缕渌a產(chǎn)生錯誤『涤祝回歸測試一般是在進(jìn)行軟件的第二輪測試開始的查描,驗證第一輪中發(fā)現(xiàn)的問題是否得到修復(fù)。當(dāng)然柏卤,回歸也是一個循環(huán)的過程冬三,如果回歸的問題通不過,則需要開發(fā)人員修改后再次進(jìn)行回歸闷旧,直到通過為止长豁。
隨機測試:是指測試中的所有輸入數(shù)據(jù)都是隨機生成的,其目的是模擬用戶的真實操作忙灼,并發(fā)現(xiàn)一些邊緣性的錯誤匠襟。隨機測試可以發(fā)現(xiàn)一些隱蔽的錯誤钝侠,但是也有很多缺點,比如測試不系統(tǒng)酸舍,無法統(tǒng)計代碼覆蓋率和需求覆蓋率帅韧,發(fā)現(xiàn)的問題難以重現(xiàn)。一般是放在測試的最后執(zhí)行啃勉。其實隨機測試更專業(yè)的升級版叫 探索性測試探索性測試探索性測試可以說是一種測試思維技術(shù)忽舟。它沒有很多實際的測試方法、技術(shù)和工具淮阐,但是卻是所有測試人員都應(yīng)該掌握的一種測試思維方式叮阅。
探索性強調(diào)測試人員的主觀能動性,拋棄繁雜的測試計劃和測試用例設(shè)計過程泣特,強調(diào)在碰到問題時及時改變測試策略浩姥。
安全測試安全測試是在 IT 軟件產(chǎn)品的生命周期中,特別是產(chǎn)品開發(fā)基本完成到發(fā)布階段状您,對產(chǎn)品進(jìn)行檢驗以驗證產(chǎn)品符合安全需求定義和產(chǎn)品質(zhì)量標(biāo)準(zhǔn)的過程勒叠。安全測試也在越來越受到企業(yè)的關(guān)注和重視,因為由于安全性問題造成的后果是不可估量的膏孟。尤其對于互聯(lián)網(wǎng)產(chǎn)品最容易遭受各種安全攻擊眯分。
分層的自動化測試
傳統(tǒng)的自動化測試更關(guān)注產(chǎn)品 UI 層的自動化測試,而分層的自動化測試倡導(dǎo)產(chǎn)品開發(fā)的不同階段(層次)都需要自動化測試柒桑。
- 單元測試:我們需要規(guī)范的來做單元測試同樣需要相應(yīng)的單元測試框架弊决,如 java 的 Junit、testNG幕垦,C#的 NUnit 丢氢,Python 的 unittest、pytest 等先改,幾乎所有的主流語言疚察,都會有其對應(yīng)的單元測試框架。
- 集成仇奶、接口測試:對于不少測試新手來說不太容易理解貌嫡,單元測試關(guān)注代碼的實現(xiàn)邏輯,例如一個 if分支或一個 for 循環(huán)的實現(xiàn)该溯;那么集成岛抄、接口測試關(guān)注的一是個函數(shù)、類(方法)所提供的接口是否可靠狈茉。例如夫椭,我定義一個 add()函數(shù)用于計算兩個參數(shù)的結(jié)果并返回,那么我需要調(diào)用 add()并傳參氯庆,并比較返回值是否兩個參數(shù)相加蹭秋。當(dāng)然扰付,接口測試也可以是 url 的形式進(jìn)行傳遞。例如仁讨,我們通過 get 方式向服務(wù)器發(fā)送請求羽莺,那么我們發(fā)送的內(nèi)容做為 URL 的一部分傳遞到服務(wù)器端。但比如 Web service 技術(shù)對外提供的一個公共接口洞豁,需要通過 soapUI 等工具對其進(jìn)行測試盐固。
- UI 層的自動化測試:這個大家應(yīng)該再熟悉不過了,大部分測試人員的大部分工作都是對 UI 層的功能進(jìn)行測試丈挟。例如刁卜,我們不斷重復(fù)的對一個表單提交,結(jié)果查詢等功能進(jìn)行測試礁哄,我們可以通過相應(yīng)的自動化測試工具來模擬這些操作长酗,從而解放重復(fù)的勞動溪北。UI 層的自動化測試工具非常多桐绒,比較主流的是 QTP,Robot Framework之拨、watir茉继、Selenium 等。為什么要畫成一個金字塔形蚀乔,則不是長方形 或倒三角形呢烁竭? 這是為了表示不同階段所投入自動化測單元測試:我們需要規(guī)范的來做單元測試同樣需要相應(yīng)的單元測試框架,如 java 的 Junit吉挣、testNG派撕,C#的 NUnit ,Python 的 unittest睬魂、pytest 等终吼,幾乎所有的主流語言,都會有其對應(yīng)的單元測試框架氯哮。集成际跪、接口測試:對于不少測試新手來說不太容易理解,單元測試關(guān)注代碼的實現(xiàn)邏輯喉钢,例如一個 if分支或一個 for 循環(huán)的實現(xiàn)姆打;那么集成、接口測試關(guān)注的一是個函數(shù)肠虽、類(方法)所提供的接口是否可靠幔戏。例如,我定義一個 add()函數(shù)用于計算兩個參數(shù)的結(jié)果并返回税课,那么我需要調(diào)用 add()并傳參闲延,并比較返回值是否兩個參數(shù)相加豹缀。當(dāng)然,接口測試也可以是 url 的形式進(jìn)行傳遞慨代。例如邢笙,我們通過 get 方式向服務(wù)器發(fā)送請求,那么我們發(fā)送的內(nèi)容做為 URL 的一部分傳遞到服務(wù)器端侍匙。但比如 Web service 技術(shù)對外提供的一個公共接口氮惯,需要通過 soapUI 等工具對其進(jìn)行測試。UI 層的自動化測試:這個大家應(yīng)該再熟悉不過了想暗,大部分測試人員的大部分工作都是對 UI 層的功能進(jìn)行測試妇汗。例如,我們不斷重復(fù)的對一個表單提交说莫,結(jié)果查詢等功能進(jìn)行測試杨箭,我們可以通過相應(yīng)的自動化測試工具來模擬這些操作,從而解放重復(fù)的勞動储狭。UI 層的自動化測試工具非常多互婿,比較主流的是 QTP,Robot Framework辽狈、watir慈参、Selenium 等。為什么要畫成一個金字塔形刮萌,則不是長方形 或倒三角形呢驮配? 這是為了表示不同階段所投入自動化測
自動化測試及工具簡述
- 自動化測試的概念有廣義與狹義之分;
廣義上來講所有借助工具來進(jìn)行軟件測試都可以稱為自動化測試着茸;狹義上來講壮锻,主要指基于 UI 層的自動化測試;除此之外還有基代碼編寫階段的單元自動化測試涮阔,基本集成測試階段的接口自動化測試猜绣。注意:如果沒有特別說明,本文所說的“自動化測試”均指基于“UI 的功能自動化測試”澎语。目前市面上的自動化測試工具非常多途事,下面幾款是比較常見的自動化測試工具。
- QTP
QTP 是 HP Quick Test Professional software 的簡稱擅羞,是一種企業(yè)級的自動測試工具尸变。提供了強大易用的錄制回放功能。支持 B/S 與 C/S 兩種架構(gòu)的軟件測試减俏。是目前主流的自動化測試工具召烂。 - Robot Framework
Robot Framework 是一款 Python 編寫的功能自動化測試框架。具備良好的可擴展性娃承,支持關(guān)鍵字驅(qū)動奏夫,可以同時測試多種類型的客戶端或者接口怕篷,可以進(jìn)行分布式測試執(zhí)行。 - watir
Watir 全稱是“Web Application Testing in Ruby”酗昼。它是一種基于 Web 模式的自動化功能測試工具廊谓。watir 是一個 Ruby 語言庫,使用 Ruby 語言進(jìn)行腳本開發(fā)麻削。 - Selenium
Selenium 也是一個用于 Web 應(yīng)用程序測試的工具蒸痹,支持多平臺、多瀏覽呛哟、多語言去實現(xiàn)自動化測試叠荠。目前在 web 自動化領(lǐng)域應(yīng)用越來越廣泛。當(dāng)然扫责,除了上面所列自動化測試工外榛鼎,根據(jù)不同的應(yīng)用還有很多商業(yè)的、開源的以及公司自己開發(fā)的自動化測試工具鳖孤。