當(dāng)前大部分的測(cè)試工具是軟件的功能性測(cè)試功能(也被稱(chēng)為記錄/回放工具),如Rational的Robot和Mercury 的Winrunner等。記錄/回放工具的缺陷使我們?cè)跍y(cè)試中不能過(guò)分依賴(lài)它。
缺陷:
記錄/回放工具能夠記錄下用戶(hù)和應(yīng)用程序交互時(shí)的擊鍵和鼠標(biāo)的移動(dòng)。擊鍵和鼠標(biāo)的移動(dòng)都被記錄成一個(gè)腳本,然后可以在測(cè)試執(zhí)行期間“回放”。雖然這種方法對(duì)特定的情形是有益的,但是記錄/回放功能大約僅僅是其全部功能的1/10。記錄/回放腳本在首次記錄生成之后必須要進(jìn)行修改。對(duì)功能性測(cè)試的修改主要集中在通過(guò)GUI進(jìn)行驗(yàn)證的測(cè)試,也稱(chēng)為黑箱測(cè)試。只是通過(guò)記錄/回放直接創(chuàng)建腳本有一些嚴(yán)重的局限和缺點(diǎn)。
1.硬編碼的數(shù)值。記錄/回放工具根據(jù)用戶(hù)的交互動(dòng)作來(lái)生成腳本,其中也包含了從用戶(hù)界面輸入或者接受的任何數(shù)據(jù)。讓數(shù)值在腳本中“硬編碼”會(huì)給以后的維護(hù)工作帶來(lái)問(wèn)題。如果應(yīng)用程序的用戶(hù)界面或則其他方面發(fā)生了變化,那么硬編碼的數(shù)值會(huì)導(dǎo)致腳本非法。例如:在記錄期間生成腳本的時(shí)候,輸入值、窗口坐標(biāo)、窗口標(biāo)題和其他值可能也被記入生成的腳本代碼中。如果在應(yīng)用程序中,這些值中任何一個(gè)發(fā)生了變化,那么測(cè)試執(zhí)行期間這些固定的數(shù)值就成了罪魁禍?zhǔn)祝簻y(cè)試腳本與應(yīng)用程序的交互是錯(cuò)誤的,或者徹底失敗。另一個(gè)可能出問(wèn)題的硬編碼數(shù)值是日期戳。如果測(cè)試工程師在測(cè)試過(guò)程中記錄了當(dāng)前日期,那么幾天后再次運(yùn)行這個(gè)腳本會(huì)導(dǎo)致失敗,因?yàn)槟_本中包含了硬編碼的數(shù)值不再和當(dāng)前的日期匹配。
2.非模塊化的、不易維護(hù)的腳本。測(cè)試工具產(chǎn)生的記錄/回放腳本通常不是模塊化的,維護(hù)起來(lái)非常困難。例如:可能許多測(cè)試過(guò)程都引用了一個(gè)WEB應(yīng)用程序中特殊的URL,如果腳本中使用了硬編碼的URL,那么這個(gè)URL的改變將會(huì)導(dǎo)致大量的腳本作廢。在一個(gè)模塊化的開(kāi)發(fā)方法中,只有一個(gè)函數(shù)中引用,或則包裝了這個(gè)URL。隨后各個(gè)是引用它的腳本會(huì)調(diào)用這個(gè)函數(shù),這樣URL的任何變化只需要改動(dòng)一處就可以了。
3.缺乏可重用性的標(biāo)準(zhǔn)。測(cè)試過(guò)程開(kāi)發(fā)面臨的最重要的課題之一是可重用性。如果測(cè)試創(chuàng)建專(zhuān)門(mén)的標(biāo)準(zhǔn),明確地要求開(kāi)發(fā)可復(fù)用的自動(dòng)測(cè)試過(guò)程,那么就會(huì)極大地提高測(cè)試組的工作效率。如果把用戶(hù)界面部分的測(cè)試封裝進(jìn)模塊化的、可重用的腳本文件,供其他腳本調(diào)用,那么當(dāng)用戶(hù)界面經(jīng)常不斷變化的時(shí)候,腳本的維護(hù)工作量就會(huì)大大降低。
創(chuàng)建一個(gè)可重用的函數(shù)庫(kù)時(shí),最好把諸如數(shù)據(jù)讀取、寫(xiě)入和確認(rèn)、導(dǎo)航、邏輯以及錯(cuò)誤檢查功能分別歸到不同的腳本文件中。自動(dòng)測(cè)試開(kāi)發(fā)的指導(dǎo)方針應(yīng)該大量的借用高效的軟件開(kāi)發(fā)工作所遵循的原則。遵循與測(cè)試工具生成腳本的開(kāi)發(fā)語(yǔ)言最接近的開(kāi)發(fā)語(yǔ)言的指導(dǎo)方針,這是一個(gè)很好的時(shí)間。例如:如果工具生成的腳本類(lèi)似于C語(yǔ)言,那么應(yīng)該遵從C語(yǔ)言的開(kāi)發(fā)標(biāo)準(zhǔn);如果工具生成的腳本類(lèi)似于BASIC語(yǔ)言,那么應(yīng)該遵從BASIC語(yǔ)言的開(kāi)發(fā)標(biāo)準(zhǔn)。
在自動(dòng)測(cè)試開(kāi)發(fā)中,只使用記錄/回放方法生成的測(cè)試腳本是很難維護(hù)和重用的,這是明顯的事實(shí)。雖然也有少數(shù)的情況,可使用未經(jīng)加工的腳本,但是對(duì)于大多數(shù)情況,如果不在記錄之后修改腳本,那么在測(cè)試執(zhí)行期間,測(cè)試工程師會(huì)由于正在測(cè)試的應(yīng)用程序的變化而反復(fù)記錄腳本。使用記錄/回放工具可能帶來(lái)的潛在收益,一定會(huì)被不斷重建測(cè)試腳本的無(wú)奈所抵消。這會(huì)使測(cè)試人員產(chǎn)生很強(qiáng)的挫折感,并且會(huì)對(duì)自動(dòng)測(cè)試工具感到不滿(mǎn)。
為了避免未經(jīng)加工的記錄/回放腳本帶來(lái)的問(wèn)題,應(yīng)該建立可復(fù)用的測(cè)試腳本的開(kāi)發(fā)方針。未經(jīng)過(guò)加工的記錄/回放腳本并不表示有效的自動(dòng)測(cè)試。
解決方法:自制開(kāi)發(fā)一個(gè)測(cè)試工具
為了去除自動(dòng)測(cè)試工具的局限性和對(duì)核心組件進(jìn)行更深入的測(cè)試,可以自制開(kāi)發(fā)一個(gè)測(cè)試工具。這種定制的測(cè)試工具一般用健壯的程序語(yǔ)言編寫(xiě),例如:獨(dú)立的C++或則Java程序,定制的測(cè)試工具一般比自動(dòng)測(cè)試工具生成的腳本運(yùn)行的速度更快,也更靈活,因?yàn)檫@些腳本受限于測(cè)試工具的特定環(huán)境。
我們舉一個(gè)適合用定制測(cè)試工具來(lái)測(cè)試任務(wù)的例子,假設(shè)一個(gè)應(yīng)用程序的用途使根據(jù)用戶(hù)提供的信息進(jìn)行計(jì)算,并且把計(jì)算的結(jié)果生成報(bào)告。計(jì)算過(guò)程可能是復(fù)雜的,并且可能對(duì)各種輸入?yún)?shù)的不同組合是敏感的。這可能會(huì)有數(shù)百萬(wàn)種潛在變化,這些變化會(huì)產(chǎn)生不同的結(jié)果,因此,對(duì)計(jì)算過(guò)程進(jìn)行全面的測(cè)試才能保證計(jì)算的正確性。
手工開(kāi)發(fā)和驗(yàn)證大量的計(jì)算性測(cè)試用例是非常浪費(fèi)時(shí)間的。在大多數(shù)情況下,通過(guò)界面執(zhí)行大量的測(cè)試用例也是非常緩慢的。此時(shí)一個(gè)更高效的方法是自制開(kāi)發(fā)一個(gè)測(cè)試工具,它會(huì)直接針對(duì)應(yīng)用程序的代碼(一般是直接針對(duì)用戶(hù)界面層之下的核心組件)執(zhí)行測(cè)試用例。
另一種使用自制測(cè)試工具的方法是:對(duì)照遺留組件或者系統(tǒng)來(lái)比較新組件。兩個(gè)系統(tǒng)通常使用的數(shù)據(jù)存儲(chǔ)格式是不同的,用不同的技術(shù)實(shí)現(xiàn)的用戶(hù)界面也是不同的。此時(shí),為了在兩個(gè)系統(tǒng)上運(yùn)行相同的測(cè)試用例并且生成比較報(bào)告,自動(dòng)測(cè)試工具需要一種特殊的機(jī)制來(lái)復(fù)制自動(dòng)測(cè)試腳本。在最壞的情況下,單個(gè)測(cè)試工具不能同時(shí)兼容兩個(gè)系統(tǒng),此時(shí)兩套測(cè)試腳本必須用兩種不同的自動(dòng)測(cè)試工具來(lái)開(kāi)發(fā)。一個(gè)更好的替代方案是自制生成一個(gè)定制的、自動(dòng)測(cè)試工具,它把兩個(gè)系統(tǒng)之間的差異封裝進(jìn)獨(dú)立的模塊,這樣我們就能夠設(shè)計(jì)出同時(shí)適用于兩套系統(tǒng)的測(cè)試。自制的自動(dòng)測(cè)試工具可以把遺留系統(tǒng)產(chǎn)生的測(cè)試結(jié)果作為基線,并且通過(guò)比較兩套結(jié)果和輸出它們之間的差異來(lái)自動(dòng)地驗(yàn)證新系統(tǒng)產(chǎn)生的結(jié)果。
達(dá)到上述目的的一種方法是使用自制工具適配器模式。自制測(cè)試工具適配器是一個(gè)模塊,它通過(guò)轉(zhuǎn)換或者改造正在測(cè)試地每個(gè)系統(tǒng)使之和自制測(cè)試工具兼容,這樣自制測(cè)試工具可以通過(guò)適配器在系統(tǒng)種執(zhí)行預(yù)定義地測(cè)試用例,并且把結(jié)果存儲(chǔ)為相互之見(jiàn)可以自動(dòng)比較地標(biāo)準(zhǔn)格式。對(duì)于每個(gè)開(kāi)發(fā)出來(lái)地適配器必須能夠直接和系統(tǒng)進(jìn)行交互和針對(duì)系統(tǒng)執(zhí)行測(cè)試用例。用一個(gè)自制測(cè)試工具測(cè)試兩個(gè)系統(tǒng)需要不同地適配器并獨(dú)立調(diào)用兩次自制測(cè)試工具,每個(gè)系統(tǒng)調(diào)用一次。兩次調(diào)用的結(jié)果應(yīng)用保留起來(lái)并進(jìn)行比較。圖示描述了針對(duì)遺留系統(tǒng)和新系統(tǒng)執(zhí)行測(cè)試用例的定制測(cè)試工具。
通過(guò)為每個(gè)系統(tǒng)使用不同的適配器,相同的測(cè)試用例可以用于多個(gè)系統(tǒng)。針對(duì)遺留系統(tǒng)的適配器來(lái)產(chǎn)生一組基線結(jié)果,這個(gè)結(jié)果用于和新系統(tǒng)的結(jié)果比較。
為了完成他們的任務(wù),自制的測(cè)試工具適配器首先獲得一組測(cè)試用例,然后按照順序執(zhí)行這些用例,從而直接測(cè)試每個(gè)系統(tǒng)的邏輯,繞過(guò)了用戶(hù)界面。繞過(guò)用戶(hù)界面使性能得到了優(yōu)化,使得測(cè)試用例的吞吐量最大化。它還具有更高的穩(wěn)定性。如果自制測(cè)試工具依賴(lài)于用戶(hù)界面,那么用戶(hù)界面的任何變化(在開(kāi)發(fā)生命周期種,用戶(hù)界面經(jīng)常會(huì)經(jīng)過(guò)多次修改)都可能導(dǎo)致自制測(cè)試工具對(duì)缺陷的漏識(shí)別。檢查這樣的結(jié)果會(huì)浪費(fèi)大量寶貴的時(shí)間。
每個(gè)測(cè)試用例的執(zhí)行結(jié)果被存儲(chǔ)在一個(gè)或者多個(gè)結(jié)果文件中,存儲(chǔ)的格式使相同的。與正在測(cè)試的系統(tǒng)無(wú)關(guān)。保存結(jié)果文件是為了與隨后運(yùn)行的測(cè)試產(chǎn)生的結(jié)果進(jìn)行比較。比較可以有一個(gè)定制生成的結(jié)果工具來(lái)完成,這個(gè)工具按照一定的規(guī)則讀取和評(píng)估結(jié)果文件,并且輸出發(fā)現(xiàn)的所有錯(cuò)誤或者差異。如果我們把結(jié)果格式化,那么也可以通過(guò)標(biāo)準(zhǔn)的“file diff”(比較文件差異)工具對(duì)它們進(jìn)行比較。
與所有的測(cè)試類(lèi)型一樣,自制測(cè)試工具使用的測(cè)試用例可能使相當(dāng)復(fù)雜的,特別是當(dāng)自制測(cè)試工具所測(cè)試的組件使用于數(shù)學(xué)計(jì)算或者科學(xué)計(jì)算的時(shí)候,利用自制的測(cè)試工具就可以覆蓋大部分的測(cè)試。
相關(guān)推薦:考試吧策劃:2010年軟件水平考試完全指南北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |