專利名稱:從抽象測試用例表示中基于規(guī)則產生自動測試腳本的方法和系統的制作方法
技術領域:
本發(fā)明一般地涉及產生測試用例的系統和方法,尤其涉及使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的方法和系統。
背景技術:
在暴露程序缺陷方面提供足夠覆蓋和效力的適當測試用例的創(chuàng)建和維護是一項非常有挑戰(zhàn)性且資源密集的活動。測試用例管理的當前方法不保證所需級別的測試用例的可重用性和可維護性。這導致從一個版本到另一個版本、從一種環(huán)境到另一種環(huán)境以及從一種平臺到另一種平臺測試用例重新創(chuàng)建的重復周期。
測試用例創(chuàng)建的當前方法是以多種編程語言中一種手工編程或使用記錄/回放系統記錄測試用例。在兩種方法中,測試用例作為已知為測試腳本的編程語言語句序列創(chuàng)建和管理。這些測試腳本然后通過將它們看作存儲磁盤上的文件的一組實用程序管理。
這樣管理測試用例的一個缺點在于它們依賴于目標執(zhí)行環(huán)境。不同測試執(zhí)行環(huán)境支持不同的腳本語言并且相同的操作在這些環(huán)境中將由不同的語句表示。如果企業(yè)軟件公司決定改變測試執(zhí)行環(huán)境,所有他們的測試用例不得不在新的環(huán)境中重新創(chuàng)建。
考慮到這種努力所需的基本投資,許多軟件開發(fā)組織將依賴于單個廠商的測試執(zhí)行環(huán)境。另外,在用戶化環(huán)境中測試企業(yè)應用也表現出一種挑戰(zhàn)。大多數企業(yè)應用基本上在它們客戶環(huán)境中用戶化。相對于一套標準測試程序測試應用可以保證應用沒有以不期望的方式更改。假設這種測試用例可以減少這種應用在客戶場所的首次展示時間以及提高現場支持活動的效率。客戶不能支持與軟件供應商相同的測試執(zhí)行環(huán)境使這變得不可能。
企業(yè)應用需要跨越大量平臺的測試。這些平臺涉及彼此配合的操作系統、數據庫系統和其他應用的技術堆棧。為了有效管理測試用例,腳本將不依賴于任何特定平臺。
幾乎所有企業(yè)應用都支持國際化和地方化,相同的測試可以使用不同語言和不同地區(qū)格式的數據集執(zhí)行是重要的。為了實現這一點,數據集必須與測試場景分離。當測試用例作為腳本管理時,這需要一個人手工確定腳本的參數。這又涉及高等技工的基本投資。
如前一段落描述的確定參數的測試用例也需要保證足夠的覆蓋。相同的測試場景必須以不同的數據集、不同的邊界條件值例如執(zhí)行以保證系統的正常機能。
當企業(yè)應用從一個版本遷移至下一個時,甚至細小改變例如用戶界面的布局改變可能導致測試用例的改變。使用腳本的測試用例表示中抽象的缺乏基本上降低測試用例的可重用性而增加維護成本。
所有企業(yè)應用都具有在許多不同上下文中重復的功能性。以模塊化方式創(chuàng)建測試用例的能力提高其可重用性。針對相同功能性的測試用例可以在使用相同功能性的測試場景中重復使用。大多數腳本編輯環(huán)境通過過程支持提供模塊化。這種過程抽象局限于它們的能力,因為測試用例不僅包括過程抽象而且包括數據抽象。設計測試用例管理系統中的適當抽象使得測試用例可以模塊化方式建立并有效且有力地重新組合。
需要產生測試用例的改進系統和方法。進一步需要使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的改進方法和系統。
發(fā)明內容
因此,本發(fā)明的一個目的在于提供產生測試用例的改進系統和方法。
本發(fā)明的另一個目的在于提供使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的改進方法和系統。
本發(fā)明的又一個目的在于提供使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的改進方法和系統,其中抽象表示包括應用狀態(tài)、外部交互序列和來自數據存儲的測試用例的輸入數據。
本發(fā)明的再一個目的在于提供使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的改進方法和系統,其中抽象表示包括表示應用在定義外部交互上下文的測試下的運行時間快照的應用狀態(tài)。
本發(fā)明的另一個目的在于提供使用測試用例從抽象表示中基于規(guī)則產生的產生測試用例的改進方法和系統,其中抽象表示包括包含一組應用對象、其屬性和屬性值的應用狀態(tài)。
本發(fā)明的這些和其他目的在產生測試用例的方法中實現。測試用例的基于規(guī)則的產生從包括應用狀態(tài)、外部交互序列和來自數據存儲的測試用例的輸入數據的抽象表示中提供。確認產生的測試用例。然后測試用例轉換成測試腳本。
在本發(fā)明的另一種實施方案中,提供一種計算機系統,其包括連接到存儲器的處理器。存儲器存儲測試用例從抽象表示中基于規(guī)則的產生,其中抽象表示包括應用狀態(tài)、外部交互序列和來自數據存儲的測試用例的輸入數據,以產生測試用例。邏輯確認測試用例。邏輯將測試用例轉換成測試腳本。
圖1是說明本發(fā)明的測試用例轉換實施方案的一種實施方案的示意圖。
圖2是說明圖1實施方案的一般流程圖。
圖3是說明在本發(fā)明一種實施方案中使用的應用狀態(tài)和交互表示的關系的示意圖。
圖4是說明以本發(fā)明的方式使用的測試用例導入的一種實施方案的示意圖。
圖5是說明以本發(fā)明的方式使用的導入處理的一種實施方案的流程圖。
圖6是說明可以本發(fā)明一種實施方案的方式使用的應用對象模型的示意圖。
圖7是說明可以本發(fā)明的方式使用的語義分析的一種實施方案的流程圖。
圖8是說明可以用來實現本發(fā)明的圖1測試用例轉換實施方案的計算機系統的示意圖。
圖9是說明本發(fā)明測試用例轉換實施方案的一種實施方案的示意圖。
圖10是說明使用組成、抽象形式和確認的本發(fā)明測試用例轉換實施方案的一種實施方案的示意圖。
圖11是說明可以用來實現圖9和10測試轉換實施方案的計算機系統的示意圖。
具體實施例方式
參考圖1和2,本發(fā)明的一種實施方案是轉換測試用例的系統10和方法。導入以一種或多種腳本語言編寫的測試用例12。測試用例12然后轉換成抽象表示14,其包括一種或多種應用狀態(tài)16、外部交互序列18和輸入數據20。抽象表示14存儲在數據庫系統22中。多種不同的數據庫系統22可以使用,包括但不局限于,關系數據庫管理系統、XML數據庫管理系統等。
應用狀態(tài)16表示應用在定義外部交互上下文的測試下的運行時間快照。在一種實施方案中,如圖3所示,應用狀態(tài)16是一組應用對象24,例如網頁或窗口控制或賬戶對象等。每個應用對象24與一組屬性26及其值相關聯。例如,網頁可以具有稱作url的屬性26,其包含與當前網頁相對應的統一資源定位器(URL),以及稱作標題的屬性26,其包含當前網頁的標題。在一種實施方案中,該組應用狀態(tài)16在測試用例12中表示并且以分層方式排列。
使用的腳本語言可以是用于記錄或編輯測試用例的類型化或未類型化編程語言。外部交互序列18可以表示由外部代理28在應用對象24上調用的事件。外部代理28可以是人工代理或其他軟件代理。交互序列可以包括捕獲順序、并發(fā)、循環(huán)、條件交互等的流控制結構32。
如圖4所示,在一種實施方案中,語法分析34可以為引入的腳本而實現。語法分析器34可以為每種腳本語言實現一個。語法分析器34可以利用在擴展巴科斯諾爾范式(EBNF)中指定的語法分析規(guī)則36。語法分析可以產生抽象語法樹(AST)38形式的分析樹。使用本發(fā)明處理腳本的方法的一種實施方案在圖5流程圖中說明。
在一種實施方案中,實現基于應用對象模型(AOM)44將AST 38轉換成抽象內部測試用例表示42的語義分析40。語義分析40將表示為AST 38的測試用例分解為應用狀態(tài)16、外部交互序列和輸入數據。
如圖6所示,AOM 44可以是在測試下模擬應用的元數據表示。元數據表示的組成部分包括,但不局限于,應用對象24的應用對象類型定義48,每個應用對象24類型的屬性定義50,由每個應用對象24類型支持的方法和事件52的定義,事件52在應用狀態(tài)16上效果的定義等。使用本發(fā)明執(zhí)行語義分析的方法的一種實施方案在圖7流程圖中說明。
應用對象類型定義48可以包括每個應用對象24類型的另外分類,并且可以是(i)分層,(ii)容器和(iii)簡單(simple)。分層對象類型與其自己的應用狀態(tài)16相關聯??梢园渌麑ο髮嵗膽脤ο箢愋?6是容器型。例如,網頁可以由分層對象類型表示且網頁中的表格由容器型表示。頁面中的標簽由簡單對象類型表示。與分層應用對象類型16相關聯的狀態(tài)是模態(tài)應用狀態(tài)或非模態(tài)應用狀態(tài)。模態(tài)應用狀態(tài)限制對當前應用狀態(tài)16中可用的應用對象24實例的可能交互。對話窗口例如將所有用戶交互限制于當前對話窗口。
事件52在應用狀態(tài)16上的效果捕獲事件52對應用狀態(tài)16的一個或多個結果。事件52的結果可以是給定類型對象實例的創(chuàng)建、對象類型實例的刪除、該類型現有對象屬性的修改、對象類型實例的選擇等。
分層對象類型的創(chuàng)建或選擇可以導致新的應用狀態(tài)16的形成,與該對象類型相關聯的應用狀態(tài)16的選擇等。
在另一種實施方案中,測試用例12的抽象表示14使用來自應用元數據倉庫54的信息豐富。測試用例12的抽象表示14可以通過提取與在引入的測試腳本中缺少的測試用例12相關聯的應用對象24的那些屬性26的值來豐富。測試用例12的豐富可以分離測試用例12及其記錄或編輯環(huán)境等,并且允許在應用元數據表示54中固定的屬性26的使用。例如,應用元數據倉庫54中的內部識別字段56可以用來識別給定對象24,代替依賴語言的顯示標簽。這提高測試用例12的可重用性。因為不同的測試執(zhí)行環(huán)境可以使用不同的屬性26來識別相同的應用對象16,這種分離提供平臺獨立性。
在一種實施方案中,應用對象屬性26和輸入數據與外部交互序列分離以提供自動參數確定。通過自動分離數據和測試用例場景,10系統極大地減少確定腳本參數所涉及的手工勞動。使用應用對象模型,與每個事件52相關聯的輸入數據與場景定義分離。應用相同的處理以存儲對象屬性26。輸入數據定義形成為場景中涉及的事件52而驅動的嵌套表格數據類型定義,以及應用對象模型中的對象事件定義。這允許匹配該定義的任何數據集應用于同一組場景。
在本發(fā)明另一種實施方案中,如圖8所示,計算機系統110包括連接到存儲器114的處理器112。存儲器114存儲可由處理器112執(zhí)行的程序指令116,用于將測試用例轉換成包括應用狀態(tài)、外部交互序列和輸入數據的抽象內部表示。數據庫116存儲測試用例的抽象表示。語法分析器118可以為引入的腳本而包括。語法分析器118產生抽象語法樹(AST)120形式的分析樹。
邏輯122提供以實現語義分析并且基于應用對象模型(AOM)將AST 120轉換成抽象內部測試用例表示122。邏輯124使用來自應用元數據倉庫126的信息豐富抽象內部測試用例表示。邏輯126將應用對象屬性和輸入數據與外部交互序列分離以提供自動參數確定。
在本發(fā)明另一種實施方案中,如圖9和10所示,提供產生測試用例212的方法和系統210。測試用例212從包括應用狀態(tài)216、外部交互序列218和來自數據存儲222的測試用例的輸入數據220的抽象表示214中產生。測試用例212產生,然后被確認。測試用例212轉換成測試腳本224。多種數據存儲222可以使用,包括但不局限于,關系數據庫管理系統、XML數據庫管理系統、文件系統等。應用狀態(tài)216可以與應用狀態(tài)26相同。
在一種實施方案中,規(guī)則226為測試用例定義的組成部分,也就是應用狀態(tài)216、外部交互序列218和輸入數據220的選擇而提供,像數據驅動測試用例產生的規(guī)則228一樣。選擇規(guī)則226可以使用查詢語言來指定,包括但不局限于,SQL、Xquery、從以編程語言編寫的代碼中調用的API等。查詢語言的使用允許測試用例從現場客戶數據產生。
在本發(fā)明一種實施方案中,測試用例212的產生包括如輸入數據222指示地組成測試用例212。多個數據集230可以為測試用例212的輸入數據集220的至少一部分或全部提供。這導致多個測試用例212或在每個數據集230的循環(huán)控制結構中重復的外部交互序列的產生。對于輸入數據220的一部分,多個數據集230的使用導致與在循環(huán)控制結構例如“while”循環(huán)中重復的輸入數據的該部分相對應的交互序列。
在一種實施方案中,輸入數據220的每個元素使用數據有效性標記232標記為有效或無效。輸入數據220中有效性標記232的存在,其不同于當記錄或編輯測試用例212時與輸入數據220相對應的有效性標記,導致包括異常處理的適當交互序列的產生步驟。例如,存儲在抽象表示214中的測試用例可以具有當提供有效輸入數據集220時的正常交互序列218。抽象表示也可以包含在異常條件例如無效數據進入的情況下遵循的交互序列218。當從該抽象表示以及無效輸入數據產生測試用例212的產生器將創(chuàng)建包括異常情況的交互序列218而不是正常交互交互序列的測試用例。
產生的測試用例212可以相對于外部應用元數據倉庫238而確認。確認行為可以通過另外的確認規(guī)則240來控制。
測試用例212從內部表示到腳本語言的轉換可以通過平臺相關映射234。平臺相關映射包括語言映射和其他環(huán)境映射。使用的語言映射可以將作為關于應用對象的事件而捕獲的外部交互218映射成腳本語言236的適當語句。不止一種語言映射可以同時提供。這允許多種測試執(zhí)行環(huán)境的測試腳本的產生。另外的環(huán)境映射提供以支持另外的平臺獨立性。例如,如果測試下的應用使用第三方報表書寫程序,測試用例可以使用一般報表書寫程序對象表示,并且特定報表書寫程序的映射可以通過環(huán)境映射而提供。這一級別的支持可以延伸到任何級別的底層平臺。
在本發(fā)明另一種實施方案中,如圖11所示,提供有計算機系統310,其包括處理器312和連接到處理器310的存儲器314。存儲器314存儲測試用例316從抽象表示318的基于規(guī)則的產生。抽象表示318包括應用狀態(tài)、外部交互序列以及來自數據存儲的測試用例的輸入數據以產生測試用例。邏輯320確認測試用例。邏輯322為將測試用例轉換成測試腳本而提供。
邏輯320規(guī)定測試用例定義的組成部分,也就是應用狀態(tài)、外部交互序列和輸入數據彼此以及與應用對象模型一致。邏輯320可以是外部確認邏輯。外部確認邏輯可以包括相對于應用元數據倉庫確認產生的測試用例的步驟。
計算機系統310也可以包括提供測試用例定義的組成部分,也就是應用狀態(tài)、外部交互序列和輸入數據的選擇規(guī)則;數據驅動測試用例產生的規(guī)則的邏輯324。計算機系統310也可以包括提供數據驅動測試用例產生的邏輯326。邏輯326可以如輸入數據指示地組成測試用例。
雖然本發(fā)明的實施方案已經說明和描述,這些實施方案并不打算說明和描述本發(fā)明的全部可能形式。相反地,在本說明書中使用的文字是描述而不是限制的文字,并且應當理解,可以進行各種改變而不背離本發(fā)明的本質和范圍。
權利要求
1.一種產生測試用例的方法,包括提供測試用例從抽象表示中的基于規(guī)則的產生,其中抽象表示包括應用狀態(tài)、外部交互序列和來自數據存儲的測試用例的輸入數據;確認產生的測試用例;以及將測試用例轉換成測試腳本。
2.根據權利要求1的方法,其中數據存儲是關系數據庫管理系統。
3.根據權利要求1的方法,其中數據存儲是XML數據庫管理系統。
4.根據權利要求1的方法,其中數據存儲是文件系統。
5.根據權利要求1的方法,其中應用狀態(tài)表示應用在定義外部交互上下文的測試下的運行時間快照。
6.根據權利要求5的方法,其中應用狀態(tài)包括一組應用對象、其屬性和屬性值。
7.根據權利要求5的方法,其中與測試用例相對應的應用狀態(tài)以分層方式排列。
8.根據權利要求1的方法,其中外部交互序列表示由外部代理在應用對象上調用的事件。
9.根據權利要求8的方法,其中外部代理是人工代理或其他軟件代理。
10.根據權利要求8的方法,其中交互序列包括捕獲順序、并發(fā)、循環(huán)和條件交互的流控制結構。
11.根據權利要求1的方法,其中產生的測試用例的確認包括內部和外部確認。
12.根據權利要求11的方法,其中內部確認保證測試用例定義的組成部分、外部交互序列和輸入數據彼此以及與應用對象模型一致。
13.根據權利要求12的方法,其中應用對象模型是在測試下模擬應用的元數據表示。
14.根據權利要求13的方法,其中元數據表示包括應用對象的對象類型定義。
15.根據權利要求13的方法,其中元數據表示包括每個應用對象類型的屬性定義。
16.根據權利要求13的方法,其中元數據表示包括由每個應用對象類型支持的方法和事件的定義。
17.根據權利要求13的方法,其中元數據表示包括事件在應用狀態(tài)上的效果的定義。
18.根據權利要求14的方法,其中應用對象類型定義包括每個應用對象類型到分層、容器和簡單類型的另外分類。
19.根據權利要求18的方法,其中分層對象類型與其自己的應用狀態(tài)相關聯,其中可以包含其他對象實例的應用對象類型稱為容器型。
20.根據權利要求19的方法,其中與分層應用對象類型相關聯的狀態(tài)是模態(tài)應用狀態(tài)或非模態(tài)應用狀態(tài)。
21.根據權利要求20的方法,其中模態(tài)應用狀態(tài)限制對當前應用狀態(tài)中可用的應用對象實例的可能交互。
22.根據權利要求17的方法,其中事件在應用狀態(tài)上的效果捕獲事件對應用狀態(tài)的一個或多個結果。
23.根據權利要求22的方法,其中事件的結果選自給定類型的新的對象實例的創(chuàng)建、給定類型的對象實例的刪除、現有對象實例屬性的修改以及對象類型實例的選擇。
24.根據權利要求23的方法,其中分層類型的對象的新實例的創(chuàng)建導致新的應用狀態(tài)的創(chuàng)建。
25.根據權利要求23的方法,其中分層類型的對象實例的選擇導致與該對象實例相關聯的應用狀態(tài)的選擇。
26.根據權利要求11的方法,其中外部確認相對于應用元數據倉庫確認產生的測試用例。
27.根據權利要求26的方法,其中應用元數據倉庫包含應用對象的定義以及測試下應用中它們交互的性質。
28.根據權利要求26的方法,其中外部確認用作測試用例的靜態(tài)驗證測試。
29.根據權利要求26的方法,其中外部確認通過指出無效測試用例增加生產力。
30.根據權利要求26的方法,其中外部確認通過指出可靜態(tài)驗證的應用行為中的矛盾來增加生產力。
31.根據權利要求1的方法,其中測試腳本是以腳本語言表示的測試用例。
32.根據權利要求31的方法,其中腳本語言可以是用于記錄或編輯測試用例的類型化或未類型化編程語言。
33.根據權利要求1的方法,還包括提供測試用例定義的組成部分、外部交互序列和輸入數據的選擇規(guī)則;數據驅動測試用例產生的規(guī)則。
34.根據權利要求33的方法,其中選擇規(guī)則使用查詢語言指定。
35.根據權利要求34的方法,其中查詢語言是結構化查詢語言(SQL)。
36.根據權利要求34的方法,其中查詢語言是XML查詢(XQuery)。
37.根據權利要求34的方法,其中查詢語言是從以編程語言編寫的代碼中調用的應用編程接口(API)。
38.根據權利要求34的方法,其中查詢語言的使用允許測試用例從現場客戶數據產生。
39.根據權利要求33的方法,其中數據驅動測試用例產生涉及如輸入數據指示地組成測試用例。
40.根據權利要求39的方法,其中輸入數據的多個數據集的可用性將導致多個測試用例或在每個數據集的循環(huán)控制結構中重復的外部交互序列的產生。
41.根據權利要求39的方法,其中對于輸入數據的一部分的多個數據集的可用性將導致與在循環(huán)控制結構中重復的輸入數據的該部分相對應的交互序列。
42.根據權利要求39的方法,其中輸入數據的每個元素可以標記為有效或無效。
43.根據權利要求42的方法,其中輸入數據中有效性標記的存在,其不同于當記錄或編輯測試用例時與輸入數據相對應的有效性標記,導致包括異常處理的適當交互序列的產生器。
44.根據權利要求1的方法,還包括通過語言映射將測試用例從內部表示轉換成腳本語言。
45.根據權利要求44的方法,其中映射用來將作為關于應用對象的事件而捕獲的外部交互映射成腳本語言的適當語句。
46.根據權利要求44的方法,其中不止一種語言映射同時提供。
47.根據權利要求44的方法,其中產生的測試用例同時轉換成不止一種腳本語言。
48.根據權利要求47的方法,其中以多種腳本語言產生測試用例允許多種測試執(zhí)行環(huán)境的測試腳本的產生。
49.一種計算機系統,包括處理器;連接到處理器的存儲器,存儲器存儲測試用例從抽象表示中基于規(guī)則的產生,其中抽象表示包括應用狀態(tài)、外部交互序列和來自數據存儲的測試用例的輸入數據,以產生測試用例;確認測試用例的邏輯;以及將測試用例轉換成測試腳本的邏輯。
50.根據權利要求49的系統,其中確認測試用例的邏輯規(guī)定測試用例定義的組成部分、外部交互序列和輸入數據彼此以及與應用對象模型一致。
51.根據權利要求49的系統,其中確認測試用例的邏輯是外部確認邏輯。
52.根據權利要求51的系統,其中外部確認邏輯包括相對于應用元數據倉庫確認產生的測試用例。
53.根據權利要求49的系統,還包括提供測試用例定義的組成部分、外部交互序列和輸入數據的選擇規(guī)則的邏輯;其中規(guī)則是數據驅動測試用例產生。
54.根據權利要求49的系統,還包括提供數據驅動測試用例產生的邏輯。
55.根據權利要求54的系統,其中提供數據驅動測試用例產生的邏輯包括如輸入數據指示地組成測試用例。
全文摘要
本發(fā)明提供一種一般的基于規(guī)則的技術,用于從抽象內部測試用例表示中產生測試用例。抽象內部測試用例表示基于測試用例表示模型,其包括應用狀態(tài)(狀態(tài)信息)、外部交互序列(控制流信息)和輸入數據。抽象表示本質上提供測試用例的平臺獨立表示。應用對象模型提供捕獲測試下應用的結構和行為性質所需的表示能力。規(guī)則可以被指定以定義哪種應用狀態(tài)(狀態(tài)信息)、外部交互序列(控制信息)和輸入數據集應當在測試用例的產生中使用。多個數據集可以創(chuàng)建并應用以支持數據驅動測試用例產生。提供一種基于平臺映射的技術以將測試用例轉換成針對任何特定應用平臺的任何特定測試腳本執(zhí)行環(huán)境的自動測試腳本。
文檔編號G06F11/36GK1954298SQ200580006415
公開日2007年4月25日 申請日期2005年1月6日 優(yōu)先權日2004年1月13日
發(fā)明者約翰·蘭道爾·維斯特, 薩希施·K.·M.·戈皮納蘭內爾, 安德魯·海安-查爾·金 申請人:交響樂服務公司