因?yàn)檐浖䴗y試的工作量很大(40% 到60% 的總開發(fā)時間),而又有很大部分適于自動化,因此,測試的改進(jìn)會對整個開發(fā)工作的質(zhì)量、成本和周期帶來非常顯著的效果。

 

  首先,談?wù)勗跍y試自動化的情況下,帶有圖形界面的產(chǎn)品的測試用例的設(shè)計(jì)問題。因?yàn)閳D形界面的輸出顯示不是很容易做到測試結(jié)果自動化比較,所以一般的做法是把圖形界面輸出的部分單獨(dú)建立測試用例,以手工運(yùn)行。而所有非圖形輸出則可進(jìn)行自動測試。

  下面舉出一些測試自動化的例子:

 

  1.測試個案(test case ,或稱為測試用例)的生成:


  用編程語言或更方便的劇本語言(script language 例如Perl等)寫出短小的程序來產(chǎn)生大量的測試輸入(包括輸入數(shù)據(jù)與操作指令);蛲瑫r也按一定的邏輯規(guī)律產(chǎn)生標(biāo)準(zhǔn)輸出。輸入與輸出的文件名字按規(guī)定進(jìn)行配對,以便控制自動化測試及結(jié)果核對的程序易于操作。

  這里提到測試個案的命名問題,如果在項(xiàng)目的文檔設(shè)計(jì)中作統(tǒng)一規(guī)劃的話,軟件產(chǎn)品的需求與功能的命名應(yīng)該成為后繼開發(fā)過程的中間產(chǎn)品的命名分類依據(jù)。這樣,會為文檔管理和配置管理帶來很大的方便,使整個產(chǎn)品的開發(fā)過程變得更有條理,更符合邏輯。任何新手半途加入到開發(fā)工作中也會更容易進(jìn)入狀態(tài)。

  2.測試的執(zhí)行寫控制:


  單元測試或集成測試可能多用單機(jī)運(yùn)行。但對于系統(tǒng)測試或回歸測試,極有可能需要多臺機(jī)在網(wǎng)絡(luò)上同時運(yùn)行。記住一個這樣的原則,在開發(fā)過程中的任何時候,如果你需要等候測試的運(yùn)行結(jié)果的話,那是一個縮短開發(fā)時間的機(jī)會。

 

  對于單個的測試運(yùn)行,挖潛的機(jī)會在測試的設(shè)置及開始運(yùn)行和結(jié)果的對比及顯示。有時候,需要反復(fù)修改程序,重新匯編和重新測試。這樣,每一個循環(huán)的各種手工鍵入的設(shè)置與指令所花費(fèi)的時間,加起來非?捎^。如果能利用make或類似的軟件工具來幫助,能節(jié)省大量的時間。


  對于系統(tǒng)測試或回歸測試這類涉及大量測試個案運(yùn)行的情況,挖潛的的機(jī)會除了利用軟件工具來實(shí)現(xiàn)自動化之外,是怎樣充分利用一切硬件資源。往往,算是在白天的工作時間內(nèi),每臺計(jì)算機(jī)的負(fù)荷都沒有被充分利用。能夠把大量測試個案分配到各臺機(jī)器上去同時運(yùn)行,能節(jié)省大量的時間。另外,把大量的系統(tǒng)測試及回歸測試安排到夜間及運(yùn)行,更能提高效率。

  如果不購買商品化的工具的話,應(yīng)當(dāng)遵從正規(guī)的軟件開發(fā)要求來開發(fā)出好的軟件測試自動化工具。在實(shí)踐中,許多企業(yè)自行開發(fā)的自動化工具都是利用一些現(xiàn)成的軟件工具再加上自己寫的程序而組成的。這些自己開發(fā)的工具完全是為本企業(yè)量身定做的,因此可用性非常強(qiáng)。同時,也能根據(jù)需要隨時進(jìn)行改進(jìn),而不必受制于人。當(dāng)然,這要求有一定的人力的投入。

  在設(shè)計(jì)軟件自動測試工具的時候,路徑(path)控制是一個非常重要的功能。理想的使用情況是:這個工具可以在任何一個路徑位置上運(yùn)行,可以到任何路徑位置去取得測試用例,同時也可以把測試的結(jié)果輸出放到任何的路徑位置上去。這樣的設(shè)計(jì),可以使不同的測試運(yùn)行能夠使用同一組測試用例而不至于互相干擾,也可以靈活使用硬盤的空間,并且使備份保存工作易于控制。

  同時,軟件自動測試工具必須能夠有辦法方便地選擇測試用例庫中的全部或部分來運(yùn)行,也必須能夠自由地選擇被測試的產(chǎn)品或中間產(chǎn)品采作為測試對象。

  3.測試結(jié)果與標(biāo)準(zhǔn)輸出的對比:

  在設(shè)計(jì)測試用例的時候,必須考慮到怎樣才能夠易于對此測試結(jié)果和標(biāo)準(zhǔn)輸出。輸出數(shù)據(jù)量的多少及數(shù)據(jù)格式對比較的速度有直接影響。而另一方面,也必須考慮到輸出數(shù)據(jù)與測試用例的測試目標(biāo)的邏輯對應(yīng)性及易讀性,這將會大大有利于分析測試所發(fā)現(xiàn)的不吻合,也有利于測試用例的維護(hù)。

  許多時候,要寫一些特殊的軟件來執(zhí)行測試結(jié)果與標(biāo)準(zhǔn)輸出的對比工作,因?yàn)榭赡苡胁糠值妮敵鰞?nèi)容是不能直接對比的(比如,對運(yùn)行的日期時間的記錄,對運(yùn)行的路徑的記錄,以及測試對象的版本數(shù)據(jù)等),要用程序進(jìn)行處理。


  4.不吻合的測試結(jié)果的分析、分類、記錄和通報(bào):

  上一點(diǎn)所談到的,用于對測試結(jié)果與標(biāo)準(zhǔn)輸出進(jìn)行對比的特殊軟件,往往也同時擔(dān)任對不吻合的測試結(jié)果進(jìn)行分析、分類、記錄和通報(bào)的任務(wù)。

  “分析”是找出不吻合的地方并指出錯誤的可能起因!胺诸悺卑ǜ鞣N統(tǒng)計(jì)上的分項(xiàng),例如,對應(yīng)的源程序的位置,錯誤的嚴(yán)重級別(提示、警告、非失效性錯誤、失效性錯誤;或別的分類方法),新發(fā)現(xiàn)的還是已有記錄的錯誤,等等!坝涗洝保前捶诸惔鏅n。“通報(bào)”,是主動地對測試的運(yùn)行者及測試用例的“負(fù)責(zé)人”通報(bào)出錯的信息。

 

  這里提到測試用例的“負(fù)責(zé)人”的概念。是用以指定一個測試用例運(yùn)行時發(fā)現(xiàn)的缺陷,由哪一個開發(fā)人員負(fù)責(zé)分析(有時是另外的開發(fā)人員引進(jìn)的缺陷而導(dǎo)致的錯誤)及修復(fù)。在設(shè)立測試用例庫時,各用例均應(yīng)有指定的負(fù)責(zé)人。


  直接的通報(bào)方法是由自動測試軟件發(fā)出電子郵件給測試運(yùn)行者及測試用例負(fù)責(zé)人。郵件內(nèi)容的詳細(xì)程度可根據(jù)需要靈活決定。


  5.總測試狀況的統(tǒng)計(jì),報(bào)表的產(chǎn)生:


  這些都是自動測試工具所應(yīng)有的功能。目的是提高過程管理的質(zhì)量,同時節(jié)省用于產(chǎn)生統(tǒng)計(jì)數(shù)據(jù)的時間。

  產(chǎn)生出來的統(tǒng)計(jì)報(bào)表,好是存放到一個約定的路徑位置,以便任何有關(guān)人員都知道怎樣查閱。同時,可按需要用電子郵件向適當(dāng)?shù)膶ο?如項(xiàng)目經(jīng)理,測試經(jīng)理和質(zhì)量保證經(jīng)理)寄出統(tǒng)計(jì)報(bào)表。

  6.自動測試與開發(fā)中產(chǎn)品每日構(gòu)建(build )的配合:

  自動測試應(yīng)該是整個開發(fā)過程中的一個有機(jī)部分。自動測試要依靠配置管理來提供良好的運(yùn)行的環(huán)境,同時它必須要與開發(fā)中的軟件的構(gòu)建緊密配合。

 

  在開發(fā)中的產(chǎn)品達(dá)到一定程度的時候,應(yīng)該開始進(jìn)行每日構(gòu)建和測試。這種做法能使軟件的開發(fā)狀態(tài)得到頻繁的更新,以及及早發(fā)現(xiàn)設(shè)計(jì)和集成的缺陷。


  為了充分利用時間與設(shè)備資源,下班之后進(jìn)行自動的軟件構(gòu)建,緊接著進(jìn)行自動測試(這里多數(shù)指的是系統(tǒng)測試或回歸測試),是一個非常行之有效的方法。如果安排得好,到第二天上班時,測試結(jié)果已經(jīng)在各人的電子郵箱里面面了,等待著新的的開發(fā)工作。