• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Android應用錄制與回放工具設計①

      2018-09-17 08:49:52孫軍梅劉雪嬌
      計算機系統(tǒng)應用 2018年9期
      關鍵詞:手勢觸摸屏滑動

      閆 凱,孫軍梅,劉雪嬌,朱 敏

      (杭州師范大學 杭州國際服務工程學院,杭州 311121)

      隨著移動互聯(lián)網的日益成熟,移動設備已經成為了許多應用軟件的載體,從辦公自動化到游戲,再到社交工具,無不依托于移動設備的便捷.移動平臺的吸引力主要源自于用戶可以通過觸摸屏實現與系統(tǒng)的交互,以及通過多樣化的傳感器(如加速度傳感器,羅盤,GPS)驅動程序的行為,實現多樣化的功能.然而,這些新特性也給軟件開發(fā)、測試和維護帶來了重大挑戰(zhàn).

      錄制和回放對于許多軟件工程的任務都是很有價值的,可以進行程序的調試、測試以及對應用程序的分析.然而,現有的基于GUI的應用程序的錄制與回放工具卻不能滿足目前智能手機平臺的要求.基于GUI的錄制回放工具主要是通過離散的捕獲用戶的高級動作,不能夠詳細的表達復雜的手勢動作,例如滑動,手指的縮放等,也不支持傳感器事件的回放.

      本文設計實現了一個Android平臺的錄制回放工具 RARA(Record And Replay for Android).RARA 通過直接捕獲和重現用戶在使用Android應用過程中的底層事件流,不僅能捕獲和回放應用GUI的觸屏事件,如點擊,輸入等,而且能捕獲交互的手勢事件,如滑動、手指的縮放動作;此外RARA也能捕獲傳感器事件,如加速度傳感器、光傳感器、指南針等.

      1 Android 事件介紹

      Android是基于Linux的開放源代碼的操作系統(tǒng),在Linux系統(tǒng)上增加了Dalvik虛擬機,每一個Android應用都運行在一個Dalvik虛擬機實例里,而每一個虛擬機實例都是一個獨立的進程空間.當用戶與Android應用交互時,Android設備的傳感器通過/dev/input/event*設備文件生成事件并且發(fā)送到系統(tǒng)內核.常見的觸摸屏操作主要包括:快速點擊-釋放、長按、滑動、縮放四種操作.其中三項涉及到手勢:長按,滑動,縮放.觸摸屏手勢需要大量的底層觸摸屏事件來提供它們的感知功能.

      事件采用五元組格式(timestamp device:type code value)表示,其中timestamp表示距上一次系統(tǒng)重啟的時間或者當前時間的時間戳,原生Android系統(tǒng)表示距上一次系統(tǒng)重啟的時間,部分廠商經過修改表示當前時間的時間戳;device表示已創(chuàng)建事件的設備,其余字段取決于具體的事件類型.如:

      [100.119269]/dev/input/event2:0002 0035 000000ef表示一條事件五元組編碼,其中:

      [100.119269]字段表示該事件距離手機最近一次啟動的時間間隔為 100.119 269 s.

      /dev/input/event4:字段表示輸入設備為event2,對應于本文的設備是觸摸屏.

      0002 0035 000000 ef分別指事件的 type(輸入事件類型),code(鍵碼類別),value(具體數值),這三個字段表示了坐標信息,0035對應于事件的X坐標,具體值為000000ef(十六進制)對應于屏幕的坐標為239.Android其它復雜的事件都是由上述標準的事件流格式組合而成.一個觸摸屏手勢由若干個事件構成,形成事件流.例如,單個按鍵操作通常涉及大約18個觸摸屏事件,而滑動通常涉及大約80個觸摸屏事件.圖1所示為一個滑動的事件流詳細信息,此次滑動一共有80 條基本事件流,表示該次滑動在 154 546.327 764 s至 154 546.588 003 s時間段完成;1–7 行是滑動事件的開始信息,第4行,5行分別表示滑動開始時手指所按屏幕位置的橫坐標以及縱坐標.8–75行表示在滑動過程中持續(xù)變化的位置的坐標信息;76–80行表示該次滑動結束時手指釋放位置的橫坐標以及縱坐標.

      圖1 一次滑動事件流

      時間序列是回放成功至關重要的因素.來自傳感器的事件以及觸摸屏的事件都必須以高吞吐量捕獲,某一事件的缺失都會影響到事件回放的行為.為了評估傳感器以及觸摸屏的事件量,我們對4款常見應用程序在同一臺設備上5分鐘內三個輸入設備的事件量做了統(tǒng)計,如表1所示,其中觸摸屏事件占絕大多數,傳感器也有大量的事件.

      表1 事件量統(tǒng)計

      1.1 Android應用錄制與回放工具介紹

      目前比較常見的錄制與回放工具主要是采用基于關鍵字的錄制與回放技術.如:Android GUITAR[1],Abbot[2],HP WinRunner[3],IBM Rational Robot[4]和 GUI crawler[5]就是采用關鍵字技術對用戶的操作過程進行錄制,然后進行回放.基于關鍵字技術的錄制與回放工具將輸入的事件從具體的GUI級別中抽象出來,使用GUI對象在系統(tǒng)中的句柄或者名稱與其進行交互.例如 click buttonMenu表示點擊控件 ID為buttonMenu 的 button.然而,像憤怒的小鳥[6],王者榮耀[7],割繩子[8]此類游戲主界面只有一個Activity,沒有布局文件,獲取不到GUI組件對象.所以基于關鍵字的錄制技術并不能適用于此類場景.另外一些如Monkey[9]、MonkeyRunner[10]能夠模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行操作回放.但它們的腳本不支持觸摸屏手勢的操作.文獻[11]給出了一個基于手勢的錄制與回放工具RERAN.該工具能夠錄制和回放涉及手勢和傳感器的Android事件.但該工具沒有對不同廠家類型的手機時間戳表示進行統(tǒng)一.對于不同類型的手機廠家收集的事件流有時不能正?;胤?RARA擴充了RERAN的功能.在回放時用到了RERAN的回放代理工具.本文的主要貢獻如下:

      (1)使用統(tǒng)一的事件流格式來表示Android事件流.

      (2)對錄制生成的事件流文件進行排序及關鍵信息提取,生成可回放的腳本文件.

      (3)錄制與回放的時間精確到微妙,時間增量只有1%左右.

      (4)設計并實現了一個能錄制并回放不同類型Android手機事件流的工具RARA.

      2 RARA 框架

      圖2為RARA的整體架構圖,錄制和回放可以從任何一臺Android設備開始,可以使用Android提供的模擬器,或者通過USB連接到計算機的手機.通過使用 Android SDK 中的 ADB(Android Debug Bridge)命令作為RARA與手機之間的接口.通過ADB發(fā)送shell命令到手機系統(tǒng)進行錄制與回放.

      圖2 RARA 架構圖

      2.1 錄制

      RARA 使用 Android SDK 的 getevent工具,讀取/dev/input/event *文件,可以記錄手機上輸入事件的實時日志,如圖 2錄制部分,在錄制過程中,首先利用ADB(Android Debug Bridge)啟動收集命令,將手機的輸入實時的儲存到錄制文件中,應用程序的性能在日志記錄過程中不受影響;一旦記錄結束,就會生成一個操作事件文件,供回放時使用.

      2.2 事件流格式統(tǒng)一

      Android平臺的開源性導致Android系統(tǒng)的碎片化問題.RARA提出的基于事件流的錄制方法也受到了Android碎片的影響,事件流格式不統(tǒng)一,不同的品牌不同版本的Android操作系統(tǒng)捕獲的事件流有所差異.

      本文通過三星手機與小米手機來分析事件流之間的差異,如圖 3,圖 4 所示,分別為三星設備事件流內容的樣例以及小米手機錄制到的事件流樣例.它們都是標準的五元組事件流格式,但是通過比較可以發(fā)現存在兩處差異,首先,兩份事件流文件中的時間字段格式不統(tǒng)一,如三星事件流的時間字段為[100.839976],代表手機距離上次啟動的時間間隔為 100.839 976 s,而小米手機事件流的時間字段為[149256649.144810],代表捕獲事件當時的時間戳;時間字段不論從格式,還是所代表的意義都有一定的差異;其次,三星手機相鄰兩條事件流中都是空白行,而小米手機是隔行輸出.雖然這些差異很細微,但是這些差異給回放帶來了巨大的障礙.

      圖3 三星設備事件流內容樣例

      圖4 小米手機事件流內容樣例

      本文針對數據流格式差異的問題,實現了時間格式轉換器程序,將事件流信息轉換為統(tǒng)一格式,將時間字段的數字單獨提取出來,統(tǒng)一為149256649.144810/dev/input/event2:0002 0001 00000001,用于重現,使得回放程序的兼容性更強,統(tǒng)一后的格式如圖5所示.

      圖5 統(tǒng)一格式以后的事件流

      2.3 回放

      Android SDK 提供了一個 sendevent工具,允許開發(fā)人員將單個輸入事件命令發(fā)送到手機,但是,在實驗過程中發(fā)現,當輸入一系列連續(xù)的事件流時,sendevent會有時間滯后,事件之間的時間間隔不精確,無法真實的回放錄制的事件流,對于涉及手勢或者傳感器交互時,就需要精確的物理坐標和事件之間的時間間隔;如果回放期間時間沒有嚴格控制,則會產生許多錯誤的結果,例如,滑動中間的延遲將會導致滑動變?yōu)橐婚L串長按;所以,sendevent不能夠準確的回放事件流程.以準確的時間回放事件是一個關鍵技術,比如,回放滑動通常需要80或者更多的事件,而對于每次滑動通常時間小于1 s,并且滑動中的各個事件之間的時間間隔通常小于60 μs.

      2.3.1 基于時間節(jié)點的事件流排序器

      在錄制過程中,錄制程序實時對用Android的所有輸入設備進行采集并且寫入文件,時間精確到μs;但是,當數據寫到文件中時,由于終端無緩沖,高頻輸出事件流,導致事件流文件的時間節(jié)點會亂序,圖3,圖4中框選的事件流為亂序的時間節(jié)點.在回放過程中,提取事件的關鍵信息時,相鄰事件間出現時間間隔為負數,導致回放屢屢失敗.因此,RARA 實現了基于時間節(jié)點的操作日志排序器,在對事件流文件進行轉換之前,首先根據時間節(jié)點對錄制到的操作事件流按照時間戳升續(xù)重新排序,保證事件執(zhí)行過程中的時間間隔不能為負數,使得事件流信息能夠完整的實時回放.

      A為狀態(tài)變換矩陣,B為數據輸入變換矩陣,ω為機器人運動過程的噪聲元素,滿足以下協(xié)方差矩陣Q(實驗數據結果):

      2.3.2 事件流關鍵參數提取(生成回放的腳本)

      如圖2所示,在回放階段,首先對事件流文件進行格式統(tǒng)一,其次通過基于時間節(jié)點的事件流排序器對事件流文件進行排序.在完成上述步驟以后,RARA實現了對事件流文件關鍵信息的提取,提取出每條事件流的關鍵信息,以此生成回放的腳本.通過圖2中的回放代理對該腳本的讀取進行事件的重現.如:

      該條事件流提取完的信息為 2,2,35,289 分別代表事件的輸入設備為event2,type(輸入事件類型為2),code(鍵碼類別為 35),value(具體參數數值為 289).

      事件流文件提取完事件參數生成的重現腳本如圖6所示,每個腳本的第一行的數字表示該腳本總共包含的事件數目,圖6所示的事件流包含1549條事件流信息.從第二行開始,所有的偶數行只有一個數字,代表與上一個事件的時間間隔,單位為毫秒;所有的奇數行有四個數字,分別代表事件的輸入設備,事件 type,事件code碼,以及事件value值.腳本執(zhí)行的過程中就是循環(huán)讀取事件的參數,然后進行事件注入.

      圖6 重現腳本樣例

      2.3.3 回放代理

      RARA采用RERAN的回放代理技術進行回放.回放代理工具由C語言編寫,并且用交叉編譯arm-elfgcc進行編譯,通過Android的sendevent工具源代碼作為指導,確定如何與設備進行交互,回放代理工具通過讀取事件回放腳本,把事件流信息寫入到/dev/input/event*中,對手機設備進行事件注入,通過手機設備生成事件.回放代理運行在手機設備上,可以滿足回放手勢所需的微秒級別的精度.

      2.3.4 回放

      如圖2所示,通過ADB命令將回放腳本以及回放代理工具發(fā)送到手機設備的/data/local/目錄下面,通過ADB shell進入手機系統(tǒng),首先利用su命令獲取root權限,其次,輸入命令行/data/local/Replay.exe(回放代理工具)/data/local/translateEvent.txt(回放腳本)用于完整的事件回放.

      3 實驗驗證及分析

      本節(jié)主要對RARA的功能以及性能進行了實驗驗證,主要驗證了如下三個問題:

      (2)RARA在錄制回放時對宿主APP的影響?

      (3)RARA是否有助于發(fā)現軟件中的缺陷?

      實驗設備采用表2所列的10臺設備,詳細的配置信息如表2所示.

      表2 實驗設備信息表

      3.1 錄制回放實驗驗證

      實驗選取了豌豆莢應用市場上20款不同類型的應用程序進行錄制與回放,應用包括了通訊社交類、視頻影音類、游戲類、系統(tǒng)工具類應用.每款應用的錄制不少于3分鐘,實驗步驟如下:

      (1)通過USB數據線連接實驗設備到計算機,輸入adb devices驗證連接是否成功;

      (2)啟動要錄制的應用,同時啟動getevent工具錄制事件流信息;

      (3)操作應用不少于三分鐘,結束錄制,保存事件流信息到文件夾;

      (4)利用編譯完成的程序對事件流的格式進行統(tǒng)一;

      (5)基于時間節(jié)點的事件流排序器對步驟4完成的事件流信息進行排序;

      (6)經過腳本生成器對事件流的關鍵參數進行提取,生成回放腳本;

      (7)利用ADB push命令將生成的重現腳本與重現代理工具傳送到錄制的Android設備上,啟動回放.

      通過上述步驟的錄制與回放,實驗結果成功完整地回放了其中的14款,表3為成功錄制回放的14款應用的名稱,表4為失敗的6款應用名稱.RARA成功的錄制與重現了割繩子與憤怒的小鳥此類對時間精確度要求很高的游戲類應用.首先,這兩款游戲的實現用到傳感器以及物理計算,時間精確度非常高,每次手勢操作的時機不同,結果也是有所差別的.其次,這兩款游戲的布局文件實現是通過在運行時繪制的,游戲界面沒有控件元素,基于對象的錄制方法是無能為力的.通過對6款未成功錄制回放的應用程序進行分析,原因主要有兩點:1)需要 Android 傳感器服務.例如,無法回放音頻錄制類應用,因為此類應用需要從麥克風中捕獲音頻數據,在Android中,這些類型的輸入來自傳感器,不像觸摸屏和加速度計(使用/ dev / input /event *)一樣.2)界面元素動態(tài)或者隨機出現的應用,RARA不能捕獲非確定性的界面,例如,通過動態(tài)布局或彈出窗口,網絡連接變化或者使用了非確定性的算法(如使用隨機數生成器).通過表4可以看出這些界面動態(tài)或者隨機變化的應用大部分是游戲類應用,比如像游戲2048,每次游戲開始的初態(tài)是動態(tài)變化的,游戲數字的產生都是隨機的.

      表3 成功錄制與回放的應用

      表4 未成功回放的應用名稱

      3.2 時間與空間開銷

      本文通過對表5所示的10款應用程序的時間與空間開銷進行了測量,每款應用分別由5位不同的用戶操作,分別對5位用戶的操作進行錄制與回放.實驗結果如表5所示.首先,我們將原始執(zhí)行的完成時間與重播執(zhí)行的完成時間進行了比較.第2和第3列顯示了原始運行和重播運行的執(zhí)行時間的平均運行時間;第4列顯示了所有情況下的時間開銷,接近1%.回放開銷很大程度上是由于事件注入不是即時的.在捕獲期間,有時輸入設備將事件同時傳遞,然而,由于事件是以程序方式注入的,而不是由物理設備生成,捕獲的同時事件只能在 500 μs內重播.盡管如此,它在應用程序行為上沒有明顯的差異.最后一列顯示捕獲事件的平均日志大小.

      表5 錄制回放時間與空間開銷

      3.3 RARA重現Bug能力的測試

      重現是錯誤修復的關鍵.RARA通過記錄執(zhí)行,直到遇到錯誤,然后重播錄制,為重現錯誤提供了重要幫助.我們使用常見的Android應用程序中的實際錯誤來測試RARA的Bug再現功能.首先在GitHub上收集帶有Bug的Android程序,通過Issuse中提供的重現步驟,進行手工重現,同時使用RARA記錄輸入操作,當手動能夠重現Bug時,通過RARA進行重放收集的事件輸入,手動重現的 2 種錯誤,在回放期間,全部重現了.重現的Bug具體如下:

      (1)Android 空指針異常(NullpointExcepiton)造成的閃退,在 GeekNews V1.01 版本中,listView 加載網絡數據的時候出現了空指針異常,由于在listView的適配器getView()方法中,把convertView返回null導致.

      (2)Android中數組越界異常(IndexOutOfBoundsException)造成閃退,在 Calculator 5.4版本中,由于計算器歷史結果數目超過了listView的長度,導致從計算器的主界面跳轉到歷史結果界面時出現閃退.

      RARA可以錄制回放由于手勢操作而觸發(fā)的閃退,而其他Android測試工具無法處理,如AndroidGUITAR[2]就無法重現GeekNews V1.01版本中的空指針異常造成的用戶手勢操所時觸發(fā)的閃退現象.Android GUITAR不支持觸摸屏手勢,例如滑動和縮放,或其他輸入設備,例如加速度計和羅盤.

      4 結論與展望

      本文設計并實現了一個Android應用錄制與回放工具:RARA.RARA通過直接捕獲手機設備上底層的事件流信息,并進行統(tǒng)一格式處理、排序、關鍵元素提取處理后,生成可進行回放的腳本,實現Android應用的錄制與回放功能.實驗驗證RARA能成功回放豌豆莢應用市場上的多款應用程序.與傳統(tǒng)的基于關鍵字技術的錄制回放工具相比,RARA可以廣泛的應用于復雜GUI手勢的精確回放.而基于關鍵字技術的錄制回放工具當涉及到觸摸屏手勢的很多維度的關鍵信息時,顯得無能為力.因此,RARA 對于觸摸屏的手勢以及傳感器事件錄制回放具有很大的優(yōu)勢.此外,本文的方法可以用于軟件測試時Bug的重現,通過錄制回放有效的提高軟件測試人員的測試效率.

      猜你喜歡
      手勢觸摸屏滑動
      PLC和觸摸屏在衛(wèi)生間控制系統(tǒng)的應用
      挑戰(zhàn)!神秘手勢
      V字手勢的由來
      一種新型滑動叉拉花鍵夾具
      皮膚“長”出觸摸屏
      Big Little lies: No One Is Perfect
      勝利的手勢
      滑動供電系統(tǒng)在城市軌道交通中的應用
      一種基于變換域的滑動聚束SAR調頻率估計方法
      雷達學報(2014年4期)2014-04-23 07:43:07
      投射式多點觸控電容觸摸屏
      河南科技(2014年12期)2014-02-27 14:10:32
      仙游县| 祁东县| 丹棱县| 渝北区| 夹江县| 丘北县| 洛扎县| 建瓯市| 收藏| 新郑市| 鹤山市| 江达县| 莱州市| 阿荣旗| 马关县| 同江市| 延川县| 逊克县| 越西县| 如东县| 兴安盟| 仪陇县| 石嘴山市| 霸州市| 长顺县| 龙泉市| 崇礼县| 潍坊市| 黄梅县| 金华市| 楚雄市| 成安县| 汤阴县| 湖北省| 堆龙德庆县| 彭泽县| 临颍县| 广东省| 时尚| 都安| 沂源县|