Combine Internal Test Oracles and Capture/Replay GUI Testing for Precise Replay and Higher Validation Power
潘韋成, Wei-Cheng Pan · 2013
由於圖形使用者界面(Graphical User Interface, GUI)應用程式的種類非常複雜多變,為它們實施測試自動化相當困難,而有關GUI應用程式的測試方法之研究已經行之有年,其中較廣為使用的即是Capture-and-Replay方法。Capture-and-Replay方法可分為非侵入式與侵入式兩種。非侵入式方法是以模擬作業系統的操作資訊記錄操作過程,因此不需要修改待測程式;而侵入式方法則相反,是在待測程式內部插入額外程式碼記錄操作訊息。非侵入式的實作方法非常適合錄製與重現視窗操作,MIT實驗室的Sikuli即屬此類。它能夠撰寫腳本找尋畫面上的視窗元件位置,並模擬滑鼠與鍵盤操作。但因為此作法通常需要在作業系統插入hook以攔截滑鼠與鍵盤等輸入事件,若操作內容有頻繁的拖曳事件則很容易影響到軟體的效能,導致重播失敗,甚至可能一開始就無法錄製。這個問題在近期逐漸興起的多點觸控行動裝置應用程式等需要大量拖曳操作的程式又更顯重要。若要避免效能上的損失,在待測程式內部插入程式碼記錄輸入流程則是另一種可行的方式,然而若需要插入大量程式碼,容易對開發人員造成負擔。此外,在重播過程中的test oracle也是測試自動化時相當重要,卻變化很大的環節。根據不同的狀況,測試系統可能需要偵測外觀變化,或是觀測內部變數狀態來判斷待測程式的正確性,然而非侵入式的作法無法得知待測程式的內部狀態,侵入式做法又剛好相反,很難感測GUI程式的外觀變化。最後,現今的GUI程式大多採事件驅動(event driven)設計,事件之間經常有先後關係,重播時不可隨意變更順序,但也有些事件是交由多執行緒之間同時觸發,重播時可或不可忽略順序的變動。此種不確定性又提高了測試系統的設計難度。本論文將會探討各種Capture-and-Replay在實際應用上的優缺點,並融合它們各自的優點,以Sikuli為主,插入程式碼為輔,建立一個盡可能通用的測試自動化工具及函式庫──xTitan。