999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

軟件回歸測試中的自動測試生成方法

2009-01-01 00:00:00楊昊蘇駱德全
計算機應用研究 2009年6期

摘 要:軟件回歸測試一般使用現有的測試用例集進行測試,如何有效利用這些用例成為回歸測試的關鍵。研究自動對現有測試用例集的擴展,包括自動改變測試用例的執行順序、自動進行測試用例數目的增減等,提出基于現有測試用例隨機生成新的測試用例集的方法。實驗證明,該方法生成的測試文件能在原有環境下成功執行,能實現自動測試范圍的擴大或縮小,以及測試時間的增加或減少,為軟件回歸測試提供了有用的自動化工具。

關鍵詞:軟件回歸測試; 測試用例自動生成; 測試自動化; 隨機算法

中圖分類號:TP311文獻標志碼:A

文章編號:1001-3695(2009)06-2349-03

doi:10.3969/j.issn.1001-3695.2009.06.105

Approach of automated testing generation in regression testing

ZENG Qiang, HONG Mei, YANG Hao-su, LUO De-quan

(School of Computer(Software), Sichuan University, Chengdu 610065, China)

Abstract:

In general, software regression testing applied existing set of test cases for testing. The critical issue would be how to apply the test case efficaciously. This paper did research on expanding existing set of test case, including to change the executing order of test case automatically and to increase or decrease the numbers of executing test cases. Proposed an approach of generation new set of test case automatically based on existing set of test case. The experiment proves that the new test file can run under the testing environment successfully and implement expanding and reducing the scope of testing as well as the time of testing. It provided a useful automated tool for regression testing.

Key words:regression testing; automated generation test cases; automated testing; random algorithm

軟件回歸測試是在軟件維護過程中為了證明程序的修改對程序的其他部分無負面影響而進行的測試。回歸測試需要在軟件出現發展性的改變 (即規范和代碼發生變化)和修正性改變(只有代碼發生變化)時運行,用于確保軟件在增加了新功能或者軟件修改后,現有功能仍然繼續可用。由于軟件的新增代碼中可能包含錯誤代碼,或者新增代碼或經過修改的代碼可能對軟件的其他部分產生影響,從而使軟件不能正常工作,所以有必要在軟件修改之后對軟件進行測試,以驗證軟件的現有功能是否仍然可用。

回歸測試的步驟是首先識別程序改動所影響的軟件元素;然后從現有測試用例集合中選擇能夠測試被影響軟件元素的測試用例集,執行這些用例,檢查該結果,驗證程序的正確性,識別并修改錯誤。回歸測試使用現有的測試用例進行軟件測試,為了支持回歸測試,需要建立可供復用的測試用例集。在回歸測試中,如何有效利用已有測試用例成為回歸測試的關鍵。

在現有測試用例有效利用方面,已有方法通過對程序本身和測試歷史的分析來有效利用測試用例。有學者指出為了提高測試用例的使用效率,可以采用優先級技術,為每個被選中復用的測試用例賦予一個優先級,在回歸測試過程中按照優先級順序來選擇執行相應的測試用例。

本文研究在回歸測試階段自動對現有測試用例進行擴展,包括自動改變測試用例執行順序,自動進行測試用例數目增減等,其目的是:a)通過改變測試順序,達到改變測試的初始狀態(測試輸入改變),以期實現更大的測試覆蓋;b)通過改變測試用例執行數目,可以根據需要增加或減少測試執行時間,使回歸測試更具有靈活性;c)構造正態分布函數,按照測試用例的重要程度(優先數)計算測試用例重復執行的次數,使優先級越高的測試用例重復次數越多,以期發現在高重復次數下才能出現的錯誤。

1 基于現有測試用例集的自動測試生成方法

利用現有測試用例自動生成新的測試用例的方法是:分析現有測試文件中測試用例的結構,從中提取出最小單元的測試用例,以此作為構建新的測試用例文件的基本單元;對提取出來的測試用例進行規范,使其具有獨立運行能力;標志測試用例,并為每個測試用例按照其重要性分配優先數;根據所需要新建測試文件的長度,確定是否需要設計重復執行部分測試用例;如果需要重復部分測試用例,則根據測試用例的優先數,用正態分布函數計算測試用例需要重復的次數;為測試用例分配隨機數,需要重復的測試用例按照重復次數分配多個隨機數;根據測試用例分配的隨機數,確定測試用例的執行;重新組合測試用例基本單元以生成新測試文件。

1.1 現有測試文件中測試用例的提取、規范和標志

在進行軟件回歸測試以前,測試人員已經對軟件有了一個比較完整的測試。也就是說,已經有了一個測試軟件所有功能的測試用例集合,如何重用該集合是軟件回歸測試的關鍵。

測試人員在編寫測試用例時,往往將測試相同功能的測試用例集合放在同一個文件中,并以注釋行作為分隔符,如“#……”“%……”等,在兩個非連續注釋行間的部分為一個單獨的測試用例,該用例已經不能再進行分割,是最小的測試用例,是構建新測試用例文件的基本單元。簡言之,第一個步驟是分析現有測試文件中測試用例的結構,從中提取出最小單元的測試用例,以此作為構建新測試用例文件的基本單元。

一個完整的測試用例至少應包括四個部分,即前置條件、預期結果、測試操作和善后處理。這四個部分是測試用例獨立運行的基本條件。通過分析現有的測試文件發現,部分測試文件并不具有完整的基本條件,如一個測試文件中的幾個測試用例共享相同的前置條件,拆分后使測試用例變得不完整。因此,需要檢查該測試用例的完整性并進行修正,補足缺少的部分。

拆分出來的測試用例是一長段代碼或者程序,為了以后調用或表示方便,需要標志測試用例,即給拆分出來的測試用例命名。同時,不同的測試用例的測試對象是不同的。不同的測試對象在軟件中的作用又不盡相同,有些是關鍵功能,具有很高的重要性;有些是附屬功能且很少使用,所以并不是很重要。為了提高效率,需要為每一個測試用例賦予一個優先數。

1.2 自動測試中各個測試用例重復執行次數的確定

在不同的測試條件下,對各個測試用例的需要是不一樣的。有些測試用例因為極具重要性而且有充裕的時間,需要重復執行多次;而有時因為時間不夠而不得不只選擇高優先級的測試用例執行。所以根據不同的情況,測試用例需要執行的次數是不同的。

如果需要的測試用例數目reqn小于或等于拆分后得到的測試用例數目,則可按照優先數從拆分后得到的測試用例集合中順序地取reqn個測試用例,選擇所得的每一個測試用例只執行一次。

如果需要的測試用例數目reqn大于拆分后得到的測試用例數目,說明有些測試用例需要重復執行多次。鑒于日常生活中的許多事情都是服從正態分布,測試用例的重復次數服從正態分布就具有更多的適用性。顯然,越高優先數的測試用例的重復次數越多。

現有的產生正態分布隨機數的算法不能滿足產生的隨機數和等于需要的測試用例數目reqn。本文提出了一個產生正態分布隨機數的新算法,該算法可以保證產生的正態分布隨機數的和等于所要求的值。具體算法如下:

由正態分布函數的3δ法則——在區間(μ-3δ,μ+3δ)內的概率為99.74%,將區間(μ-3δ,μ+3δ)劃分為測試用例數目個隨機長度的小區間,小區間的概率與所需要的測試用例數目reqn相乘,所得到的整數即可作為一個測試用例的重復次數。由于有取整的誤差,在分配完測試用例重復次數后應調整誤差——將已經分配的測試用例重復次數的和與所要求的測試用例數目相比較。如果分配的次數和少了,則補充上差額;如果分配的次數和多了,則減去多余的部分。這樣可以保證測試用例重復次數的和與所要求的測試用例數目完全相等,且測試用例重復次數具有正態分布的性質。正態分布隨機數計算公式為

Yn+1=(aYn+c)mod mF(x)=1/(2π)δ∫x-∞e×[-(t-μ)2](2δ2)/dt t=6δ/n

cycle1=F(μ-3δ+2t(Y1mod 100)/100)×reqn

cycle2=(F(μ-3δ+2t(Y1mod 100)/100+2t(Y2mod 100)/100)-

F(μ-3δ+2t(Y1mod 100)/100))×reqn

cyclen=(F(μ+3δ)-F(μ-3δ+2t(Y1mod 100)/100+2t(Y2mod 100)/100+NA1AD))×reqn

其中:μ是位置參數,當σ不變時,μ越大,則曲線沿橫軸越向右移動;反之,μ越小,曲線沿橫軸越向左移動。σ是變異度參數,當μ不變時,σ越大,表示數據越分散,曲線越平坦;σ越小,表示數據越集中,曲線越陡峭,σ是一個隨機值,這樣可以保證該計算公式每次的計算結果不同。x 為正態總體中隨機抽取的樣本值。cycle1,cycle2,NA1AD,cyclen為所求的測試用例重復次數,它們可能取整為0,為保證每一個測試單元至少有一次提取機會,當取整為0,令cyclei等于1。

為保證所產生的測試單元數和與需要的測試用例數目reqn一致,作如下處理:

sum=∑ni=1cyclei,sum為測試用例重復次數的和。

T=sum-reqn,T為測試用例重復次數的和與需要測試用例數目的差。如果T為負,則cycle1=cycle1+[T/2],cyclen=T-[T/2]+cyclen;如果T為正,則cycle[n/2]=cycle[n/2]-T。

經過修正后,測試用例重復次數的和就等于需要的測試用例的數目,且重復次數具有正態分布的性質。

現假設共有50個測試用例單元,需要生成包含1 000個測試用例單元的新測試用例文件,則這50個測試用例單元的重復次數分別是1,6,7,2,4,6,11,15,24,2,1,19,28,8,29,35,28,22,36,52,36,52,6,51,17,14,3,40,51,43,44,21,42,40,8,28,9,26,8,12,18,4,9,7,6,1,1,1,1,1,如圖1所示。

1.3 自動測試中各個測試用例執行順序的確定

測試用例以不同的順序執行,可能會得到不同的結果。為了提高測試的有效性,需要以不同的順序執行測試用例。由于不知道何種測試用例執行順序可以發現新的錯誤,最好以隨機順序來執行測試用例。

產生隨機數的方法比較多。用投色子計數的方法產生真正的隨機數,但電腦若也這樣做,將會占用大量內存。用數學方法產生最適合計算機,如迭代取中法、線性同余算法等。線性同余算法因其計算速度快,容易實現,輸出序列周期長等特點而被廣泛使用。本文的隨機數用該算法產生。

一個測試用例重復cyclei次,說明在新測試用例文件中該測試用例需要出現cyclei次,每次在什么位置出現應該是隨機的,所以每個測試用例需要cyclei個隨機數,該隨機數是測試用例的執行順序。由新測試用例文件中測試用例與隨機數之間的對應關系:可設向量(r1,rorder1),(r2,rorder2),NA1AD,(rreqn,rorderreqn)。其中:r1,r2NA1AD,rreqn為新測試用例文件中測試用例的名稱;rorder1,NA1AD,rorderreqn為該測試用例的順序編號,即隨機數。其具體計算公式如下:

Yn+1=(aYn+c)mod mr1=s′1,r2=s′1,…,rcycle1=s′1NA1ADr∑n-1i=1cyclei+1=s′n,r∑n-1i=1cyclei+2=s′n,NA1AD,r∑n-1i=1cyclei+cyclen=s′nrorder1=Y1,rorder2=Y2,NA1AD,rorderreqn=Yreqn

其中:Yn+1=(aYn+c)mod m為線性同余算法;s′1,s′2,NA1AD,s′n為測試用例集合根據優先級排序后得到的序列;Y1為種子,改變它的值就得到基本序列的不同區段;a為乘法器(multiplier);c為增值(additive constant);m為模數(modulus);mod為取模運算,即(aYn+c)除以m后的余數,a、c、Y1、m 均為正整數。使用時需要仔細地挑選模數m 和乘子a ,使得產生出的隨機數的循環周期要盡可能長。

1.4 新測試文件的自動生成

通過以上步驟,已經得到能獨立運行的測試用例單元和每個測試用例單元的重復次數和順序,只需要根據順序編號升序排列計算出的結果:(r1,rorder1),(r2,rorder2),NA1AD,(rreqn,rorderreqn),然后順序地將r1,r2,NA1AD,rreqn指代的測試用例單元寫入到新的測試文件中。生成的測試文件即為需要的長度自定、順序隨機,且測試單元具有正態分布性質的新測試用例文件。

2 基于MySQL test framework的測試文件自動生成

MySQL數據庫管理系統針對自身的測試提出了一個測試框架(test framework),該框架在Linux下實現,并集成于MySQL 5.1 Linux源代碼版本中。MySQL test framework 包括了一系列的測試用例和用于執行這些用例的程序。測試人員使用框架中的程序來執行測試用例,以驗證MySQL的服務器和客戶端程序的執行結果是否與正常的期望結果吻合。其測試過程是首先由測試人員編寫測試用例文件*.test,創建該測試用例文件的預期結果文件*.result,然后調用Perl腳本程序mysql-test-run.pl運行*.test。mysql-test-run.pl是MySQL test framework的主要應用程序,它啟動MySQL服務器,創建mysqltest的運行環境;然后調用mysqltest,mysqltest則復制讀取測試用例文件,建立連接,將SQL語句發送到服務器等。由于此時*.result文件為空,此次運行將失敗,同時產生錯誤報告文件*.reject;將*.reject中的內容拷貝到*.result中,則完整的測試用例文件和其預期結果就編寫完成。此時再調用mysql-test-run.pl運行*.test就能得到測試的結果。以后修改了相關代碼后只需要再調列mysql-test-run.pl運行*.test就可以檢驗修改是否有效。

在MySQLA 5.1.6 Alpha Linux源代碼版本中,已經提供了600多個測試用例。基本涵蓋了所有的功能測試。以其中一個測試用例read_only.test為例,介紹如何進行測試用例提取和新測試文件生成。下面是read_only.test的部分內容:

# Test of the READ_ONLY global variable:

# check that it blocks updates unless they are only on temporary tables.

……

create table t1 (a int);

insert into t1 values(1);

create table t2 select * from t1;

connection default;

set global read_only=1;

# We check that SUPER can:

create table t3 (a int);

drop table t3;

connection con1;

……

通過類似的處理,從read_only.test文件中提取出的9個基本測試用例單元,分別保存在a.txt、b.txt、c.txt、d.txt、e.txt、f.txt、g.txt、h.txt、i.txt個文件中。假設新測試用例文件需要50個測試用例基本單元,則每個測試用例基本單元的重復次數和為50。先生成正態分布隨機數:2,1,6,0,13,6,8,4,1(該數組的和與50相差為9),經修正誤差和按照遞減排序后得到每個測試用例的重復次數為14,9,7,7,5,3,2,2,1;然后為每個測試用例分配多個隨機數,其數量對于需要重復的次數按照隨機數大小排序后得到(r1,rorder1),(r2,rorder2),NA1AD,(rreqn,rorderreqn)向量集,即

(g.txt 1 009),(e.txt 976),(d.txt 945),(b.txt 920),(b.txt 914),

(d.txt 914),(a.txt 895),(d.txt 878),(c.txt 875),(g.txt 866),

(b.txt 859),(a.txt 847),(h.txt 823),(c.txt 806),(f.txt 756),

(b.txt 752),(a.txt 726),(a.txt 661),(a.txt 658),(e.txt 658),

(e.txt 617),(a.txt 598),(a.txt 592),(h.txt 573),(c.txt 506),

(a.txt 493),(d.txt 487),(e.txt 486),(c.txt 461),(b.txt 441),

(d.txt 438),(i.txt 435),(d.txt 380),(d.txt 377),(a.txt 368),

(e.txt 340),(f.txt 321),(c.txt 290),(b.txt 273),(a.txt 273),

(a.txt 271),(b.txt 254),(b.txt 192),(a.txt 162),(a.txt 114),

(f.txt 103),(c.txt 97),(a.txt 70),(b.txt 30),(c.txt 4)

按此順序讀取測試單元的存儲文件,將文件內容寫入到新的測試用例文件中,則可得到需要的新測試用例文件。

3 結束語

軟件回歸測試的關鍵是測試用例的有效利用和復用,已有的復用方法是從測試用例的使用歷史或者程序本身的角度出發,沒有從測試用例本身出發。本文提出的新測試用例復用方法正是基于此——從測試用例本身來復用測試用例。該方法將一個測試用例文件拆分成最小的、相互獨立的測試用例。然后以此為基礎構建具有正態分布隨機順序的測試用例文件,且測試用例的和能根據需要的測試用例數目調整,越高優先級的測試用例能重復次數越多。

由于時間和水平有限,在測試用例拆分方面還有些不足,現有的拆分方法不能滿足所有的測試用例文件,有時拆分出來的測試用例不太完整,在覆蓋率方面也有待拓展。

參考文獻:

[1]MYERS G J. The art of software testing[M]. 2nd ed. 王峰,譯.北京:機械工業出版社,2006.

[2]SLUTZ D. Massive stochastic testing of SQL[C]//Proc of the 24th International Conference on Very Large Data Boases. San Francisco: Morgan Kaufmann Publishers,2007:618-622.

[3]CHAYS D,DENG Yue-tang,FRANKL P G. AGENDA: a test gene-rator for relational database applications, TR-CIS-2002-04[R]. [S.l.]:Department of Computer and Information Science,2002.

[4]CHANDRAMOULI R,BLACKBURN M. Automated testing of security functions using a combined model interface driven approach[C]//Proc of the 37th Hawaii International Conference on System Sciences. Washington DC: IEEE Computer Sciety, 2004.

[5]楊自強,魏公毅. 綜述:產生偽隨機數的若干新方法[J].數值計算與計算機應用, 2001,22(9):201-216.

[6]張玉彬,謝康林.測試用例的設計和復用技術[J].計算機應用與軟件,2008,25(1):100-101.

[7]馬玉蘭.C++ 中增加計算正態分布類的方法[J].中國科技信息,2005,15(A):9.

[8]KNUTH D E. 計算機程序設計藝術,第2卷:半數值算法[M]. 蘇運霖,譯.北京: 國防工業出版社, 2002.

[9]李剛毅, 金蓓弘.自動化回歸測試的技術和實現[J].計算機應用研究, 2006,23(2):186-188.

[10]吳飛.產生隨機數的幾種方法及其應用[J].數值計算與計算機應用,2006(1):48-51.

[11]張淑梅,李勇.計算機產生隨機數的方法[J].數學通報,2006 ,45(3):44-45.

主站蜘蛛池模板: 人妻丰满熟妇AV无码区| h视频在线观看网站| 久久国产精品夜色| 永久天堂网Av| 视频一区亚洲| 日韩视频精品在线| 在线无码九区| 久久国产热| 91成人精品视频| 欧美19综合中文字幕| AV无码一区二区三区四区| 在线免费看片a| 亚洲日韩精品欧美中文字幕 | www亚洲天堂| 成人午夜免费观看| 人妻少妇久久久久久97人妻| www.99精品视频在线播放| 青青草原国产免费av观看| 日本一本在线视频| 四虎AV麻豆| 91福利在线观看视频| 亚洲日韩国产精品无码专区| 国产成人精品男人的天堂下载 | 日韩中文无码av超清| 亚洲 成人国产| 国产精品第三页在线看| 国产一二三区在线| 人妻出轨无码中文一区二区| 毛片久久网站小视频| 亚洲成人动漫在线观看| 久久男人视频| AV在线天堂进入| 日韩人妻精品一区| 亚洲AV无码乱码在线观看裸奔 | 毛片大全免费观看| 黄色a一级视频| 全部免费特黄特色大片视频| 99热这里只有精品2| 国产精品久久久久久久久| 久久这里只精品热免费99| 2019年国产精品自拍不卡| 亚洲一级毛片在线观| 成人欧美日韩| 亚洲国产精品无码久久一线| 午夜视频在线观看免费网站| 亚洲A∨无码精品午夜在线观看| 国内精品自在欧美一区| 亚洲国产精品VA在线看黑人| 久久综合国产乱子免费| 国产av一码二码三码无码| 久久久精品国产亚洲AV日韩| 日韩在线第三页| 色综合五月| 久久久久久午夜精品| 国产又爽又黄无遮挡免费观看| 国产精品免费电影| 国产欧美专区在线观看| 精品视频一区在线观看| 欧美精品H在线播放| 欧美综合区自拍亚洲综合天堂| 精品无码一区二区三区电影| 国产欧美日韩另类| 国产免费精彩视频| 亚洲女同一区二区| 亚洲天堂福利视频| 亚洲中字无码AV电影在线观看| 99久久精品免费视频| 高清欧美性猛交XXXX黑人猛交 | 亚洲永久色| 国产一级在线观看www色| 色噜噜狠狠色综合网图区| hezyo加勒比一区二区三区| 好吊色妇女免费视频免费| 欧美一级片在线| 国产特级毛片aaaaaa| 思思99热精品在线| 一本久道久综合久久鬼色| 久久美女精品| 午夜成人在线视频| 国产成人精品在线| 特黄日韩免费一区二区三区| 国产嫖妓91东北老熟女久久一|