軟件自動(dòng)化測(cè)試的推動(dòng)力
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2011/10/14 13:49:37 ] 推薦標(biāo)簽:
誰(shuí)在推動(dòng)軟件自動(dòng)化測(cè)試?
做過(guò)一個(gè)單元測(cè)試自動(dòng)化,我們開(kāi)發(fā)了近百行的測(cè)試代碼去測(cè)試一個(gè)代碼行為10行的函數(shù);在UI測(cè)試自動(dòng)化,則調(diào)用了IE的COM接口去驅(qū)動(dòng)IE application,以模擬在界面上的兩個(gè)動(dòng)作,輸入“測(cè)所”和點(diǎn)擊“搜索”按鈕,總共9行代碼(如果考慮自動(dòng)化健壯性的話,還要增加錯(cuò)誤處理代碼)。
觀察到這些,我們暫且不考慮自動(dòng)化測(cè)試開(kāi)發(fā)之后的維護(hù),至少可以有一個(gè)直觀的認(rèn)識(shí):從手工測(cè)試向自動(dòng)化測(cè)試的轉(zhuǎn)變是要付出的成本的,而且這個(gè)投入要遠(yuǎn)比做一次手工測(cè)試的代價(jià)要高,比如,一個(gè)有經(jīng)驗(yàn)的自動(dòng)化測(cè)試開(kāi)發(fā)人員完成一段健壯的100行左右的測(cè)試腳本大概需要左右的時(shí)間,而手工完成這個(gè)功能點(diǎn)的測(cè)試則只需要10分鐘。 VS十分鐘,按理說(shuō),這是一個(gè)賠本的買(mǎi)賣(mài),但為什么還有這么多的軟件企業(yè)對(duì)測(cè)試自動(dòng)化情有獨(dú)鐘呢?排除一些盲目跟風(fēng),試圖提高測(cè)試技術(shù)含金量的情感因素,至少有以下幾個(gè)理性的現(xiàn)實(shí)驅(qū)動(dòng)力。
1. 測(cè)試自動(dòng)化主要是做長(zhǎng)線投資,而非一時(shí)之計(jì)
顯而易見(jiàn)地,開(kāi)發(fā)一個(gè)程序,只為了運(yùn)行一次自動(dòng)化測(cè)試是非常不劃算的。那么要想能收回開(kāi)發(fā)自動(dòng)化測(cè)試的投資,要盡可能多地運(yùn)行測(cè)試程序,每多運(yùn)行一次,會(huì)多節(jié)省一份手工測(cè)試工作量。這個(gè)簡(jiǎn)單的道理可以說(shuō)明為什么如今測(cè)試自動(dòng)化應(yīng)用多的是回歸測(cè)試階段。由于回歸測(cè)試往往是驗(yàn)證軟件bug的fix或者軟件補(bǔ)丁的有效性,理論上,每一次bug的修復(fù),都需要進(jìn)行一次全面回歸測(cè)試。如下圖所示。
這樣在軟件測(cè)試流程里,回歸測(cè)試包括在測(cè)試分支(Test Branch)上進(jìn)行的bug驗(yàn)證測(cè)試,還有在發(fā)布分支(Release Branch)上進(jìn)行的補(bǔ)丁更新測(cè)試(在實(shí)際的企業(yè)實(shí)踐中,發(fā)布分支的更新遠(yuǎn)遠(yuǎn)比圖中頻繁),這樣回歸測(cè)試的重復(fù)性非常高,而且持續(xù)時(shí)間長(zhǎng),直到軟件在市場(chǎng)上的退出才結(jié)束。這對(duì)于手工測(cè)試人員來(lái)說(shuō),可以說(shuō)是一個(gè)對(duì)耐心和毅力的巨大考驗(yàn),再美好有趣的事情如果天天重復(fù)去做,而不做任何變化,終也會(huì)成為枯燥乏味的代名詞。所以手工測(cè)試人員是有愿望通過(guò)自動(dòng)化測(cè)試來(lái)改變現(xiàn)狀的。這為回歸測(cè)試自動(dòng)化的實(shí)施同時(shí)提供了主觀的動(dòng)機(jī)和客觀需求。
【案例】:
一些有經(jīng)驗(yàn)的軟件測(cè)試團(tuán)隊(duì)通常會(huì)采用一些激勵(lì)或游戲規(guī)則來(lái)增加回歸測(cè)試的趣味性,我曾看過(guò)一個(gè)TOP500的軟件企業(yè)里的測(cè)試部門(mén),每隔一段時(shí)間會(huì)由高層發(fā)起一個(gè)“蟲(chóng)子打獵”(Bug hunting)的活動(dòng),通常在一個(gè)不太繁忙的周五午后,通知郵件一發(fā)出,全體部門(mén)立即行動(dòng),不論職務(wù)高低,不分經(jīng)理,工程師,紛紛赤膊上陣。為了找到獵物,每人都各顯神通,盡可能地設(shè)計(jì)一些平時(shí)想不到的測(cè)試場(chǎng)景去尋找軟件里的bug,但有一個(gè)前提條件,是他不能測(cè)試自己本來(lái)負(fù)責(zé)的系統(tǒng)模塊,必須去測(cè)試別人的而且他不熟悉的的模塊。比如小張是負(fù)責(zé)測(cè)Email的,那他在這次活動(dòng)中,偏偏要去測(cè)試Messenger;測(cè)試messenger的小李這次又要去測(cè)試calendar,這完全是一個(gè)網(wǎng)狀交叉的測(cè)試。打獵活動(dòng)結(jié)束后,高層還要召開(kāi)“慶功會(huì)”,評(píng)定出“好的bug”,“有創(chuàng)意的bug”等等稱(chēng)號(hào),雖然沒(méi)有獎(jiǎng)金,但是每個(gè)獲得榮譽(yù)的人都會(huì)倍感自豪。而且,對(duì)于團(tuán)隊(duì)來(lái)說(shuō),打獵活動(dòng)收到成效也是顯著的,是一舉三得的好事情。
第一,交叉測(cè)試會(huì)找到以往被忽略的bug。
第二,熟悉不同模塊,測(cè)試人員將來(lái)可以在工作中互為備份。
第三,增強(qiáng)了團(tuán)隊(duì)凝聚力,并激發(fā)對(duì)測(cè)試工作的熱情。
2. 測(cè)試自動(dòng)化可以隨時(shí)觸發(fā)運(yùn)行
測(cè)試自動(dòng)化一旦開(kāi)發(fā)完成,可以在任何時(shí)間被觸發(fā)運(yùn)行,而沒(méi)有下班或的概念,測(cè)試人員完全可以在下班之前觸發(fā)某個(gè)自動(dòng)化開(kāi)關(guān),把測(cè)試任務(wù)移交給自動(dòng)化腳本,然后經(jīng)過(guò)一夜的運(yùn)行,第二天早上上班來(lái)查看自動(dòng)化測(cè)試報(bào)告,這是自動(dòng)化的獨(dú)特優(yōu)勢(shì)所在。從這個(gè)意義上講,測(cè)試自動(dòng)化延伸了手工測(cè)試的工作時(shí)間和范圍。
3. 測(cè)試自動(dòng)化有助于知識(shí)的存儲(chǔ)和移交
這是一個(gè)潛在的事實(shí),在以前的手工測(cè)試一統(tǒng)天下的時(shí)候,測(cè)試人員的知識(shí)主要是靠文檔存儲(chǔ),比如測(cè)試計(jì)劃,測(cè)試案例說(shuō)明書(shū),bug數(shù)據(jù)庫(kù)等等。因此,我們看到,當(dāng)一個(gè)測(cè)試工程師離職的時(shí)候,他會(huì)把他的知識(shí)以文檔的方式留給原來(lái)的團(tuán)隊(duì)。而隨著自動(dòng)化測(cè)試的發(fā)展,這種測(cè)試知識(shí)的形式也在發(fā)生變化,測(cè)試人員的技術(shù)可以通過(guò)測(cè)試程序保留下來(lái)。對(duì)整個(gè)測(cè)試團(tuán)隊(duì)來(lái)說(shuō),能夠量化共享的知識(shí)越多,團(tuán)隊(duì)越穩(wěn)定,受到個(gè)體測(cè)試人員的影響越少。這是老板愿意看到的場(chǎng)面,因此,從這個(gè)角度來(lái)說(shuō),測(cè)試經(jīng)理比測(cè)試工程師更有動(dòng)力去推動(dòng)軟件測(cè)試自動(dòng)化。
4. 第三方自動(dòng)化測(cè)試工具的使用提高了自動(dòng)化測(cè)試開(kāi)發(fā)的效率
如果說(shuō)前三點(diǎn)已經(jīng)講清了自動(dòng)化測(cè)試的合理性動(dòng)機(jī),那么自動(dòng)化測(cè)試工具的應(yīng)用則為自動(dòng)化測(cè)試實(shí)施提供了保障,使得做自動(dòng)化測(cè)試不在那么困難和復(fù)雜,而變得簡(jiǎn)單和有效率。
使用Junit來(lái)完成案例一
import junit.framework.TestCase;
public class funTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testFun() throws Throwable {
//調(diào)用被測(cè)函數(shù)
int i = Fun(2);
//使用junit提供的assert斷言語(yǔ)句比較結(jié)果
assertTrue(1,i);
}
}
在以上代碼中, funTest類(lèi),以及funTest類(lèi)的setup函數(shù)和teardown函數(shù)(環(huán)境回收工作)是由Junit自動(dòng)生成的,我們寫(xiě)的測(cè)試程序只有2條語(yǔ)句,其中斷言語(yǔ)句assertTrue會(huì)通過(guò)比較,給出pass還是fail的結(jié)果報(bào)告。可以看出,使用Junit工具幫我們減少了自動(dòng)化測(cè)試開(kāi)發(fā)的工作量。
使用QTP來(lái)完成案例二,如下:
使用QTP錄制同樣的google搜索操作,只有兩條語(yǔ)句生成:
Browser(”Google”).Page(”Google”).WebEdit(”q”).Set “測(cè)所”
Browser(”Google”).Page(”Google”).WebButton(”Google 搜索”).Click
其中Browser,page,webEdit,webbutton都是QTP提供的對(duì)象,操作起來(lái)非常直觀方便。
相關(guān)推薦

最新發(fā)布
性能測(cè)試之測(cè)試環(huán)境搭建的方法
2020/7/21 15:39:32軟件測(cè)試是從什么時(shí)候開(kāi)始被企業(yè)所重視的呢?
2020/7/17 9:09:11Android自動(dòng)化測(cè)試框架有哪些?有什么用途?
2020/7/17 9:03:50什么樣的項(xiàng)目適合做自動(dòng)化?自動(dòng)化測(cè)試人員應(yīng)具備怎樣的能力?
2020/7/17 8:57:06幾大市面主流性能測(cè)試工具測(cè)評(píng)
2020/7/17 8:52:11RPA機(jī)器人能夠快速響應(yīng)企業(yè)需求,是怎么做到的?
2020/7/17 8:48:05Bug可以真正消滅嗎?為什么?
2020/7/17 8:43:03軟件測(cè)試基本概念是怎么來(lái)的?軟件測(cè)試生命周期的形成歷經(jīng)了什么?
2020/7/16 9:11:10