• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試中GUI回歸測試

    發布: 2009-11-16 09:37 | 作者: 網絡轉載 | 來源: 領測軟件測試網 | 查看: 80次 | 進入軟件測試論壇討論

    領測軟件測試網

    軟件測試中GUI回歸測試

    盡管GUIs(Graphical User Interfaces)包含了目前已開發出的很多軟件的很大一部分,并可以通過快速原型建立,但目前沒有有效的GUI回歸測試技術。對于GUI回歸測試的需求不同于對傳統軟件回歸測試的需求。當GUI的結構被修改時,原始結構GUI的測試用例在新結構上要么不可重用要么作廢。因為GUI測試用例的升級代價是很昂貴的,我們的目的就是使那些不可重用的測試用例可用。使不可用的用例可用化從沒被研究過。

    本文中,我們將說明對于GUI而言,大量測試用例的不可用是一個嚴重的問題。我們將展示一個嶄新GUI回歸測試技術,首先在GUI結構發生變化時自動判斷測試用例是否仍然可用。而后判斷那些不可用的測試用例中哪些是可以被修復的并應用到修改后的GUI。最后修復這些可修復的測試用例。我們的技術整合到GUI測試框架中,對于任意一個測試用例,都將自動在GUI執行。我們將通過兩個測試案例說明我們的技術是有效的,可以使很多測試用例修復,時間執行效率也是可以接受的。

    1 介紹

    GUI在當今的軟件系統中非常普及,占據了軟件代碼的半壁江山。一個軟件系統的GUI的正確性對于確保整個軟件系統的順利運行至關重要。一個普遍的方法是通過對GUI進行測試來確定GUI的正確性。GUI測試要求測試用例(一系列激活GUI窗口的GUI事件)在GUI中產生并執行。然后,目前對于獲取GUI測試用例的可行技術是基于資源,需要大量的人工干預。盡管目前有少量的有關自動產生GUI測試用例的文獻資料,但在實際操作中,測試用例仍然是通過手工的使用[抓取/重放]工具得到的。

    當使用[抓取/重放]工具時,測試人員需要與被測應用程序(AUT,application under test)有所互動;[抓取]可以在文件中保存這些互動,以便[重放]工具可以將它們重放。經驗證明,通過使用[抓取/重放]工具,為50個來自不同的窗口的事件生成一個測試用例打工需要20-30分鐘。因為需要花費時間,測試人員對于軟件界面只生成較少(100-300)的測試用例,因此每一個測試用例都是很珍貴的。

    另外,大多數的GUI都是使用快速原型法設計的,這樣軟件可以在層疊式地進行更新和測試。GUI結構不斷的修改要求測試用例可以在不同版本的軟件上都是可用的。因為為不同版本的軟件生成新的測試用例是非常昂貴的。

    盡管回歸測試對于傳統軟件而言是一項非常重要的軟件維護手段,占據了大約1/3的軟件開發成本,對于GUI的回歸測試仍然是一個巨大的有待開發的領域。對于GUI回歸測試的需求不同于傳統軟件對于回歸測試的需求;貧w測試的研究過去都集中于發展回歸測試中的選擇技術,這項技術的作用就是從一系列測試用例中選擇一部分,這部分用例表明了正確的輸入并認為對于驗證修改后的軟件是必不可少的。那些不能夠在新的軟件上使用的測試用例將被忽略并丟棄。不可用用例問題對于GUI而言更為嚴重,因為GUI結構的改變將導致大量測試用例不可用,需要昂貴的更新成本。

    當GUI發生變化時,一個測試集合中的測試用例就可被歸納為兩類:可用以及不可用。在可用的范疇中,這些測試用例還是可以在修改后的GUI上使用。而在不可用范疇內的測試用例是不能再重用的。例如,一個測試用例里可能包含點擊按鈕的操作,但這個按鈕很可能在新的結構中被刪除或是轉移到其他地方了。早期的[抓取/重放]工具是根據GUI窗口的對應像素來表示用戶事件的。然而,目前的[抓取/重放]工具不再只依賴于坐標,而且還包含了額外的信息如句柄、類型以及(可能的話)窗體的標簽,使得當控件被移走時[重放]工具仍然可以定位到正確的窗口。然而即便是用了這些現代的工具,由于GUI結構的修改,如添加一個新的菜單項,將激活一個對話框的動作從一個菜單換到另一個菜單,或是從一個窗口轉移到另一個窗口,因此仍然有大量的測試用例變為不可用。第6部分將說明超過74%測試用例將變為不可用。

    本文提出一個嶄新的GUI回歸測試技術。我們的核心想法是不丟棄那些在修改后的GUI上不可用的測試用例。而是自動地將他們修復以便可以應用到修改后的GUI。我們將注意力集中到產生與原有測試用例有些類似的測試用例上,其原因稍后會加以解釋。通過使用這項新的技術,一名測試人員可以(1)重新在修改后的GUI上使用原有的仍然可用的測試用例。(2)修復并試用原先已經不可用的測試用例。(3)產生新的測試用例去測試新的功能。第6部分將說明我們的技術將使超過70%的測試技術被修復。

    為了進一步說明GUI的回歸測試技術,我們在GUI測試框架中簡化了GUI的表示方法。同時我們定義了GUI結構事件的控制模型,使用模型來判斷GUI是否改變,判斷測試用例是否可用,若不可用是否可以被修復。當有很多種方法可以修復一個測試用例時,所有的方法都將被使用,這樣就會生成更多的測試用例。我們已經設計出了自動生成工具、表述工具以及重放已修復測試用例工具。

    本文的貢獻包括:

    1. 首次提出一項回歸測試技術,該技術可以從不可用測試用例中自動生成新的測試用例。

    2. 測試機將決定測試用例在已修改后的GUI上是可用的還是不可用的,以及不可用的測試用例是否可以被修復。

    3. 向修復機輸入可修復的測試用例,得到可以在已修改的GUI上使用的測試用例。

    4. 實驗表明,在現實的應用中,本文提供的方法是有效實用的。

    5. 將回歸測試技術整合到GUI測試框架中。

    在下一部分中,我們將定義一個GUI測試用例,并說明GUI的修改影響GUI測試用例的很多途徑。然后,我們將在第3部分定義GUI控制流圖和GUI調用圖。第4部分中將會介紹一個GUI回歸測試的例子。第5部分將詳細描述回歸測試人員將如何使用本文中的修復技術。在第6部分中,我們將通過在Acrobat Reader和WordPad兩個軟件上使用回歸測試技術說明實驗結果。最后,在第7部分中,我們將展示目前的一些相關研究。第8章包括本文的總結和未來的工作。

    2 GUI模型和測試案例

    在這一部分中,我們首先要介紹在GUI測試框架中GUI的模型。爾后我們將定義一個GUI測試用例并引入不可用以及可用測試模型的定義。

    一個GUI被模型化為一組對象或窗口O={o1,o2,…om}(例如,標簽、表格、按鈕、文本框等)以及一組屬性P={p1,p2,…pl}(例如,前景、名稱)。每一個GUI都會使用對象的相關屬性的某些性質。在任何時刻,GUI的狀態都可以通過它所包含的所有對象以及所有屬性的值來描述。因此,我們定義GUI的狀態為:

    定義:GUI的狀態是指GUI中包含的所有對象的所有屬性的狀態集。

    GUI的有效初始狀態定義如下。

    定義:如果GUI在初次被激活時的狀態Si∈SI,則狀態集SI稱作該GUI的有效初始狀態。

    GUI的狀態不是一成不變的,在GUI上運行的事件會改變GUI的狀態。這些改變后的狀態成為改變態。這些事件將被狀態轉換器進行定義。

    定義:事件E={e1,e2,…,en}是可以使GUI的狀態轉換到另一個狀態的函數。

    函數表示Sj = e(Si)用于表示狀態Sj是由于執行了事件e由狀態Si轉換而來的。對于測試人員而言,重要的是符合GUI結構的事件序列。我們將測試中使用到的有效的事件序列定義如下。

    定義:GUI的有效事件序列為e1;e2;e3;…;en,其中ei+1將在ei之后立刻執行。

    一個事件序列如果不是有效的,將被稱作非有效事件序列。例如,在MS Word中,剪切(在編輯菜單下)不能在打開(在文件菜單下)執行后立即被執行,因此事件序列<打開,剪切>就是非有效的(忽略鍵盤快捷方式)。

    最后,還要定義GUI測試用例。

    定義:GUI測試用例可以表示為(So,e1;e2;…;en),包括任何S0∈SI,SI為初始狀態,e1;e2;…;en為一個有效的事件序列。

    如果在測試用例中的初始狀態是非有效狀態或者它其中的事件是無效的,那么這個測試用例就是不可執行的。

    定義:如果GUI的改變造成狀態So非有效或是事件序列e1;e2;…;en是無法完成的,則測試用例(So,e1;e2;…;en)是不可用的。

    不可用的測試用例是不能在GUI上執行的,通常就會被丟棄。

    定義:如果測試用例(So,e1;e2;…;en)是可以在修改后的GUI上執行,則該測試用例是可用的。

    因為GUI的測試用例的生成是很昂貴的,因此我們設計了這項新技術來修復不可用的測試用例。首先描述GUI的結構來檢測出GUI結構上的變化,然后使用這一信息來修復不可用測試用例。并且,由于目前的GUI都非常的大,例如,它們通常包含大量的事件和窗口,我們的描述將使GUI分割為便于管理的幾部分。

    3 描述

    在本章中,我們將介紹GUI測試框架中將使用到的GUI控制流圖(G-CFG)和GUI調用圖(G-call graph)。在測試框架中,我們的技術是建立在對全局的描述上的,并可以感知GUI結構的改變。這些圖組合在一起可以代表GUI的結構,并可通過遍歷GUI事件結構自動獲得這些圖。

    使用G-CFG和一個G-call graph來表示一個GUI,原始的和修改后的描述可以通過比較揭示GUI結構上的改變,并可以辨別不可用測試用例。而且,因為這些描述將GUI的分割為便于管理的部分,修理機可以在同一時刻只專注一個組件。

    GUI在本質上是層次化的,層次可以將GUI事件進行分類,這樣就可以在GUI的不同部分中獨立地分析它們。GUI的一種層次劃分,也是在本文涉及到的,是通過測試GUI的對話框窗口獲得的。一個對話框窗口一旦被激活,將獨占與用戶的交互,使用戶的焦點落在對話框窗口內,直到該對話框關閉。在Adobe Acrobat軟件中的打印對話框就是一個對話框窗口的典型代表。所有其它的GUI窗口都成為非交互窗口,它們僅僅提供了一系列對用戶可用的GUI事件,但沒有獲得用戶的焦點。例如,在Adobe Acrobat Reader中,執行了查找事件將打開一個非交互窗口,名稱即為查找。

    在用戶與GUI交互的任何時刻,用戶都將在交互對話框的情況下調用事件。這個交互對話框包括一個交互對話框窗口X和一系列被X直接激活或間接激活的非交互對話框窗口。交互對話框將一直存活直到窗口X關閉為止。

    定義:GUI成員C是一個有序對(RF, UF),其中RF是用事件來代表一個交互對話框窗口,而UF也是用事件來說明一系列的非交互窗口。每一個UF的元素都是由UF或RF的事件引起的。

    由定義可知,一個成員的事件不會中斷而去執行其他成員的事件,除非其他成員被特別地激活或是中止。因此,互動窗口的操作非常類似于進程或是方法調用。

    GUI成員使用GUI控制流圖(G-CFG)進行描述。本質上說,G-CFG描述了與其他事件的所有可能交互關系,類似的,一個控制流圖描述了所有可能的程序流程。

    圖1:Acrobat Reader的部分G-CFG

    定義:對于成員C的G-CFG是一個四元組<V, E, B, I>:

    1. V是一組點代表成員的所有事件。任意v∈V代表C的一個事件。

    2. E∈ V * V是一組相鄰點之間的邊。如果ej直接在ei后執行,則ej排在ei后面。任意邊(Vx, Vy)∈E,表示Vy代表的事件在Vx代表的事件之后。

    3. B∈V是一組點,代表的是一些在成員C第一次被激活時對于用戶就可用的事件。

    4. I∈V是可以激活其他成員的事件集合。

    描述Acrobat Reader主要成員的一部分G-CFG如圖1所示。在最頂端的是三個點(File, Edit, Help)表示Acrobat Reader中的下拉菜單。它們是在主成員被第一次激活時的可用事件。一旦File在Reader中執行,則Edit、Help、Open和Save中的任何一個都可能被執行。因此在G-CFG中,File和其他這幾個點之間都有邊連接。從圖中看出,Open、About和Discover是虛線橢圓線標識。我們使用這個標識來表示可以激活其他成員的事件,例如,I={Open, About, Discover}。其他事件包括Save、Cut、Copy和Paste。在這些事件中的任何一個執行后,用戶可以執行File、Edit或是Help,如圖所示。

    一旦GUI中的所有成員都獨立地被G-CFG表示,下一步就是要建立GUI控制流圖來表示成員間的互動關系。這些互動包括激活等操作,定義如下:

    定義:如果成員Cx包含可以激活成員Cy的事件ex,則表示Cx激活Cy。

    由定義可知,GUI控制流圖表示出了GUI中所有成員之間的調用關系。一般來說,成員間的關系可以由直接非循環圖(DAG)表示,因為不同的成員都可以激活同一個成員。并且通過拷貝結點,DAG可以轉換為樹。使用調用樹模型上的遍歷簡化了我們的算法。調用樹的定義如下:

    定義:一棵GUI調用樹是一個三元組<N, R, B>,其中N是GUI的一組成員,而R∈N是可以調用主成員的指派成員。B是一系列直接的邊,表示不同成員間的調用關系。例如,如果Cx調用Cy,則(Cx, Cy)∈B。

    圖2:Acrobat Reader的部分GUI調用樹

    圖2是Acrobat Reader的部分調用樹的例子。結點表示GUI的成員,邊表示成員間的調用關系。成員的名稱說明了他們的功能。例如,FileOpen是Reader中用于打開文件的成員,圖2中的樹在Main和FileOpen之間有線連接,說明Main包含有一個事件,名稱為Open(可參見圖1),該事件可以激活FileOpen。

    4 GUI回歸測試實例

    通過(1)GUI結構修改的例子,(2)測試用例對于修改后的GUI不可用的例子,(3)如何分析GUI可以識別不可用用例,(4)不可用用例可以如何修改來獲得新的測試用例,我們已經對GUI回歸測試技術有了一個整體的認識。如果一個結點的語法發生改變,盡管GUI的輸出可能變化但測試用例仍然有可能是可用的。

    (a)原始GUI                 (b)修改后的GUI                 (c)原始的G-CFG                 (d)修改后的G-CFG

    圖3 表示了一個GUI,修改后的版本,以及它們相應的G-CFG圖。原始的GUI包含4個事件,Cut、Copy、Paste和Print,當GUI被激活時,這4個動作都可以被訪問。修改后的GUI包含4個原始事件中的3個;Print動作被刪除而另3個事件被整合到一個下拉菜單里,通過點擊Edit可以觸發。單個事件的語法都沒有改變。圖3的(c)和(d)分別展示了原始和修改后的GUI的G-CFG圖。原始GUI的G-CFG用4個點代表4個事件。修改后的GUI的G-CFG圖與原始GUI的G-CFG圖相差很多;它不再是全連結圖,Edit動作必須在其他事件執行之前執行。以下4種改變總結了這兩張G-CFG的差別:

    1. events_deleted = {Print}

    2. events_added = {Edit}

    3. efg_edges_deleted =
    {(Cut,Cut),(Copy,Copy),(Paste,Paste),(Print,Print),(Cut,Copy),(Cut,Paste),(Copy,Cut),(Copy,Paste),
    (Copy,Print),(Print,Cut),(Print,Copy),(Print,Paste),(Paste,Cut),(Paste,Copy),(Paste,Print)}

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: gui GUI 軟件測試

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>