国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

針對Android資源泄漏的基準測試集的構造與評測

2017-06-27 08:10劉潔瑞巫雪青楊紅麗
計算機應用 2017年4期
關鍵詞:測試程序開發(fā)者基準

劉潔瑞,巫雪青,嚴 俊,4,楊紅麗

1.計算機科學國家重點實驗室(中國科學院軟件研究所),北京 100190; 2.中國科學院大學 計算機與控制學院,北京 100049;3.北京工業(yè)大學 計算機學院,北京 100124; 4.中國科學院軟件研究所 軟件工程技術研究開發(fā)中心,北京 100190)(*通信作者電子郵箱yunjun@ios.ac.cn)

針對Android資源泄漏的基準測試集的構造與評測

劉潔瑞1,2,巫雪青3,嚴 俊1,2,4*,楊紅麗3

1.計算機科學國家重點實驗室(中國科學院軟件研究所),北京 100190; 2.中國科學院大學 計算機與控制學院,北京 100049;3.北京工業(yè)大學 計算機學院,北京 100124; 4.中國科學院軟件研究所 軟件工程技術研究開發(fā)中心,北京 100190)(*通信作者電子郵箱yunjun@ios.ac.cn)

Android系統(tǒng)是目前最受歡迎的開放手機操作系統(tǒng),然而高度的開放性也引來了許多問題,資源泄漏就是其中普遍存在的一個。對于Android系統(tǒng)出現的資源泄漏以及沒有基于該漏洞的基準測試集被提出的問題,構造出了一套針對Android資源泄漏的基準測試集ResLeakBench。首先,參考Android官方文檔以及觀察大量的真實Android應用,整理出了Android程序中使用的資源操作以及它們常用的使用場景。然后,根據整理的信息自主構造了35個基準測試程序;另外,收集了35個資源使用相關的真實開源程序作為基準測試程序來保證測試集的實用性。最后,利用ResLeakBench對資源泄漏檢測工具Relda2以及資源泄漏修復工具RelFix進行了有效性評測,發(fā)現了Relda2以及RelFix工具存在的問題。實驗結果表明ResLeakBench針對資源泄漏問題是一套實用的基準測試集。

基準測試程序;Android應用;資源泄漏;工具評測;程序分析

0 引言

隨著科技的發(fā)展,人們的生活水平越來越高,信息傳遞越來越方便,手機已經成為了人們生活中必不可少的工具。近年來,Android手機憑借真正的開放性占據了智能手機的主要市場。在2012年時,Android智能手機已占全球智能手機市場59%的份額[1],位居第一。截止到2016年第1季度,Android智能手機已經擁有超過83%的市場占有率[2]。然后,高度的開放性也引來了許多問題,資源泄漏就是眾多問題中普遍存在的一個。Android系統(tǒng)提供了豐富的資源給用戶使用,這些資源可以分為三類:獨占式資源(例如照相機)、內存消耗資源(例如音樂播放器)以及能源消耗資源(例如各種傳感器)。無論是哪一類資源,它們在使用時都需要顯式的申請和釋放。如果某個資源在使用后沒有執(zhí)行釋放操作,就會帶來資源泄漏的問題。資源泄漏問題可能會造成能量消耗、內存浪費甚至程序崩潰等一系列負面結果。

由于Android程序的缺陷層出不窮,目前基于靜態(tài)分析來檢測Android程序中潛在的缺陷已經成為研究熱點。例如針對資源泄漏問題,就有資源泄漏靜態(tài)檢測工具Relda2[3]和資源泄漏自動化修復工具RelFix[4]被提出。但是,目前還沒有工作對Relda2和RelFix的有效性進行驗證。

基準測試程序[5]可以對測試對象的某一性能指標進行特定以及可對比的測試。將具有相似測試目的基準測試程序整理到一起可以形成基準測試集[6],它作為一種評價方式在計算機領域中有著長期的應用。使用基準測試集進行測試的優(yōu)點是測試結果具有針對性以及可比性,利用它對已有工具進行測評不僅能夠為用戶提供選擇標準,而且還可以為開發(fā)者提供改進工具的方向。使用針對于Android程序資源泄漏問題的基準測試集測試Relda2和RelFix工具能夠客觀地驗證它們的有效性。但是目前還沒有這樣的基準測試集被提出,因此本文構建了一套針對于Android程序資源泄漏問題的基準測試集ResLeakBench。

ResLeakBench由兩大部分基準測試程序組成:一是根據資源類別以及Android程序特性自主開發(fā)的Android程序;二是從知名Android市場下載的具有相關資源操作的Android程序。這兩部分都包含了存在資源泄漏的程序以及不存在資源泄漏的程序。另外,自主開發(fā)的Android程序覆蓋了三種類型(獨占式、內存消耗、能源消耗)的資源。使用自主開發(fā)的基準測試程序,能夠模擬出資源的各種不同的使用方式以及泄漏方式,使得ResLeakBench具有一定的完備性。考慮到自主開發(fā)的基準測試程序一般情況下規(guī)模比較小、功能單一,和真實的應用程序有著比較大的差距,因此本文還使用Android市場下載的真實程序作為一部分基準測試程序,這樣使ResLeakBench更具有實際意義。最終,ResLeakBench總共包含70個基準測試程序,其中自主開發(fā)和市場下載的各有35個。

本文的另一工作是使用ResLeakBench對資源泄漏靜態(tài)分析工具Relda2以及資源泄漏自動化修復工具RelFix進行了有效性的評測。對Relda2工具的評測結果表明該工具能夠分析出絕大部分Android程序中存在的資源泄漏問題,但是也有一小部分分析盲點。不過作為靜態(tài)分析工具,Relda2的結果是比較令人滿意的。對RelFix工具的評測結果表明該工具能夠有效修復幾乎各種類型的資源泄漏問題,但是對于由Manifest配置文件[7]導致的資源泄漏問題無法修復。因為由Manifest配置文件導致的資源泄漏問題在實際程序中只占很小的一部分,所以RelFix的修復結果還是比較令人滿意的。

1 相關背景知識

1.1 基準測試集

基準測試集作為一種評價某種系統(tǒng)(工具)性能的標桿,在計算機領域中占有著重要的角色。它被用于測試和預測計算機系統(tǒng)的性能,揭示不同結構機器的長處和短處,為用戶決定購買或使用哪種工具最合適他們的應用要求提供決策?;鶞蕼y試集的測試有些偏重于硬件,有些偏重于軟件,還有偏重于整個系統(tǒng)或者是某個工具?;鶞蕼y試集也可用于測評一些工具。對于學術界和工業(yè)界最新提出的工具,如果它能夠通過某些基準測試集的評測,它的認可度將會得到顯著的提高。例如,FlowDroid[8]是一個Android程序的靜態(tài)污點分析工具,人們對該工具的認可不僅是因為該工具本身的功能,同時還因為工具的開發(fā)者同時提出了該工具配套的基準測試集(DroidBench)。基準測試集對開發(fā)者和用戶都是很有價值的,對于開發(fā)者的作用是為產品進行市場宣傳和發(fā)現該產品的瓶頸,對用戶的作用是指導產品的選擇。

1.2 Android基礎

Android程序是由活動(Activity)、服務(Service)、內容提供器(Content Provider)以及廣播接收器(Broadcast Receiver)四大組件構成的。在這些組件中,活動提供了一個能夠與用戶交互的畫面;服務用于處理一些需要長時間處理的事務;內容提供器提供了一種在不同應用程序之間交換數據的接口;而廣播接收器用于相應各種系統(tǒng)以及用戶發(fā)出的廣播。根據Android官方文檔[9]的描述,活動組件是管理資源的基本單元,所以本文構造的基準測試程序更多關注的是活動這個組件。

在Android程序中,活動有著自己的生命周期。這個生命周期定義了活動是如何被創(chuàng)建、使用以及銷毀的。活動的生命周期對應著一系列的回調函數[10],特定的回調函數會在活動轉換到生命周期的特定狀態(tài)時被調用。開發(fā)者可以復寫這些回調函數,從而使活動在狀態(tài)轉換時能夠處理一些額外的邏輯。圖1展示了活動的生命周期[11],可以看到活動被創(chuàng)建時會首先調用onCreate()函數,開發(fā)者可以在這里做一些初始化操作;而活動被銷毀時會調用onDestroy()函數,開發(fā)者可以在這里讓系統(tǒng)執(zhí)行一些回收資源的指令。

圖1 活動的生命周期

開發(fā)者可以使用各種資源組件使得他們的程序更加有趣,但是,對這些資源的不合理使用會導致資源泄漏的問題。資源泄漏問題可能會造成能量消耗、內存浪費甚至程序崩潰等一系列負面結果。根據Android官方文檔,每一個資源都有一個建議執(zhí)行回收操作的回調函數,不同的資源可能會有不同回調函數,但是,這些回調函數只可能是onPause()、onStop()以及onDestroy()中的一個。當一個資源在一個活動中被申請,但是忘記在這個活動的特定生命周期回調函數中(或者之前)被釋放掉時,資源泄漏問題就出現了。修復資源泄漏最直接的方法就是在特定的生命周期回調函數中插入對應的資源回收操作。

在Android程序中,回調函數的使用是必不可少的,在這里,本文將回調函數分為系統(tǒng)回調函數和用戶回調函數。系統(tǒng)回調函數是指系統(tǒng)會根據某種狀態(tài)的變化自動觸發(fā)回調的函數。例如,活動組件的生命周期回調函數(onCreate()、onDestroy()等)就屬于系統(tǒng)回調函數。用戶回調函數是指通過用戶事件觸發(fā)的回調函數。例如,當手機屏幕中某個按鈕被點擊時,這個按鈕的點擊監(jiān)聽器中的onClick()函數就會被執(zhí)行,這個onClick()函數就是一個用戶回調函數,它只有在這個按鈕被點擊后才會被執(zhí)行。ResLeakBench中的很多基準測試程序都和回調函數有關。

1.3 資源泄漏相關工具

隨著資源泄漏問題的出現,一些研究工作開始關注這個問題。目前,已經有針對資源泄漏問題的工具被提出。比較有代表性的就是資源泄漏靜態(tài)檢測工具Relda2和資源泄漏自動化修復工具RelFix。

Relda2是一個輕量級的靜態(tài)分析工具,它能夠自動地分析目標Android程序的資源操作,然后報告出可能出現資源泄漏的操作的具體位置。工具的開發(fā)者從Android 官方文檔中的1 994個類中提取出了313種資源操作,形成一張資源列表。對于目標Android程序,Relda2主要分為以下幾步來進行分析:首先,使用逆向工程技術獲得該程序的Dalvik字節(jié)碼[12];然后,通過分析得到的Dalvik字節(jié)碼構造出函數調用圖;最后,利用構造出的函數調用圖和資源列表,通過自底向上分析的方法找出沒有執(zhí)行釋放資源操作的資源。

RelFix是一個資源泄漏自動化修復工具。該工具主要是通過必要的動態(tài)跟蹤和字節(jié)碼插樁的技術進行自動修復。RelFix以Android應用的apk安裝包以及該應用經過資源泄漏靜態(tài)分析工具分析后的報告作為輸入,通過Apktool[13]得到該應用的Dalvik字節(jié)碼,再根據資源泄漏的報告生成必要的Dalvik補丁代碼插入到原程序中,最后將修改后的代碼打包生成新的apk安裝包。該工具主要有安全修復(修復了資源泄漏問題并且沒有引入其他額外的錯誤)、輕量級靜態(tài)分析(靜態(tài)分析耗時在一秒鐘時間以內)以及低插樁代價(修復一個漏洞平均只需要不到4%的額外補丁代碼)三個特點。

2 基準測試集構造

2.1 基準測試集的需求

一些面向Android應用程序資源泄漏的分析和修復工具,其主要功能是能夠檢測潛在的資源泄漏問題以及對存在資源泄漏問題的程序進行修復。所以,本文的基準測試集是由與資源操作相關的Android程序構成的,同時,這些程序還應該滿足以下需求:

1)覆蓋獨占性資源、內存消耗資源以及能源消耗資源三種類型的資源;

2)包含盡可能多的不同資源操作;

3)考慮到資源泄漏的各種場景;

4)能夠有一定的實際意義。

2.2 基準測試集的設計

首先,考慮到自主開發(fā)的基準測試程序往往功能單一,和實際的應用程序存在比較大的差距,為了滿足“具有一定的實際意義”的需求,本文的基準測試集將由兩部分組成:自主開發(fā)的程序[14]和下載的開源程序。同時,每一類程序都分別包含有存在資源泄漏問題的程序以及不存在問題的程序。因此,ResLeakBench的整體構成由圖2所示。

圖2 ResLeakBench的整體構成

本文通過自主開發(fā)的方式實現的基準測試程序能夠更準確地定位目標,更好對工具進行評估。本文利用自主開發(fā)方式實現的基準測試程序主要有兩類,分別是存在資源泄漏和不存在資源泄漏的基準測試程序。其二者的根本區(qū)別在于當申請了一些已經被明確規(guī)定需要釋放的資源時,資源釋放操作是否被有效執(zhí)行。

首先,是存在資源泄漏基準測試程序的設計。出現資源泄漏的情況主要分為兩種:第一種情況是開發(fā)者根本沒有寫對應的資源釋放語句(每次都會出現資源泄漏);另一種情況是開發(fā)者將資源釋放語句寫在了不恰當的地方,程序在某種狀態(tài)下會導致該釋放語句不會被執(zhí)行(并非每次都會出現資源泄漏),比如在用戶接口(User Interface,UI)控件中申請與釋放資源。對于第一種情況,可以在系統(tǒng)回調函數中執(zhí)行申請資源操作,但是不執(zhí)行釋放資源操作;對于第二種情況,可以基于用戶回調函數和一些判定語句來進行設計。存在資源泄漏的自主開發(fā)測試集構成如圖3所示。

圖3 存在泄漏的自主開發(fā)測試集構成

其次,是不存在資源泄漏基準測試程序的設計。當開發(fā)者申請了資源后,只有對相關資源執(zhí)行有效的釋放操作,才能避免資源泄漏情況的發(fā)生。根據申請資源位置的不同,不存在資源泄漏的自主開發(fā)測試集的構成可如圖4所示。

圖4 不存在泄漏的自主開發(fā)測試集構成

對于每一個資源,Android官方文檔都給出了它應該被釋放的位置,這個位置是onPause()、onStop()和onDestroy()函數中的一個。雖然在圖4中沒有規(guī)定資源的釋放位置,但是不存在資源泄漏的自主開發(fā)測試集應該覆蓋這三種在不同函數中釋放的資源。

為保證ResLeakBench的全面性,本文參考了關于Android資源泄漏研究的文獻以及Android官方文檔,整理出了Android程序中使用的資源操作[15]。不同的程序使用這些資源的方式也是不同的,為了找到Android應用中最常用的資源使用方式,本文收集了大量的真實Android應用,整理出了最常用的資源以及它們常用的使用場景。由于資源操作數目眾多以及資源使用場景的不確定性,ResLeakBench雖然沒有覆蓋所有的資源操作以及使用場景(幾乎不可能),但是它里面基準測試程序的選取都是通過以上分析得到的,能夠以最合適的測試程序數量最大限度地保證自身的全面性。

2.3 基準測試集的實現

2.3.1 自主開發(fā)測試集的實現

根據2.2節(jié)的設計,存在資源泄漏的測試集實現了五大類,不存在資源泄漏的測試集實現了4大類,總共實現了35個基準測試程序。

存在資源泄漏的自主開發(fā)測試集的實現如下:

1)在活動的生命周期中申請資源并且不釋放:在活動生命周期中的onCreate()、onStart()、onResume()三個回調函數中申請資源。

2)在服務的生命周期中申請資源并且不釋放:在服務生命周期中的onCreate()、onStartCommand()、onBind()三個回調函數中申請資源。

3)在其他常用回調函數中申請資源并且不釋放:分別在onReceive()、onActivityResult()、onLocationChange()、onPictureTaken()、onSensorChange()、onServiceConnected()、onCompletion()、onGlobalLayoutListener()函數中申請資源。

4)在UI控件中申請與釋放資源:利用Button直接申請與釋放資源;利用Button間接申請資源與釋放資源。

5)在判定語句中釋放某資源:在onDestory()函數里的if語句中釋放資源;在onPause()函數里的else語句中釋放資源。

不存在資源泄漏的自主開發(fā)測試集:本文實現了10個不存在資源泄漏的測試程序,主要是通過修改前面存在資源泄漏的基準測試程序實現的(在適當的地方加上資源釋放語句)。

2.3.2 開源程序測試集的實現

為了使ResLeakBench更具有實際意義,本文讓ResLeakBench也包含了一部分真實的Android開源應用。本文通過以下步驟為ResLeakBench一共搜集了35個應用:

1)確定開源程序的獲取途徑為著名的開源社區(qū)Javaapk以及F-Droid。

2)通過查看應用程序的簡介,初步分析該應用是否包含相關資源操作,并下載初步認定有資源操作的應用程序的源碼。

3)分析應用程序源碼,人為判定該應用是否真實存在相關資源操作。如果有,則繼續(xù)判定是否有資源泄漏問題。

4)下載上一步確定有資源操作的應用安裝包,并根據分析結果將該應用分類(存在泄漏還是不存在泄漏)。

最終,本文下載的Android應用程序主要涉及一些含有拍照錄像、音樂播放、使用傳感器、錄音等功能的應用程序。

3 對Relda2工具的評測

本章將使用ResLeakBench對資源泄漏靜態(tài)分析工具Relda2進行評測。對于ResLeakBench里的每一個測試程序,本文使用Relda2工具對其進行檢測,并生成對應的測試報告。然后將報告中的資源泄漏情況與預期的泄露情況進行對比,以便能夠找到Relda2分析不正確的地方。本文使用Relda2分析了測試集里所有的70個測試程序,其中有54個測試程序的實驗結果預期一致,有16個實驗結果是與預期不一致(8個開源測試程序,8個自主開發(fā)的測試程序)。與預期不一致的實驗結果如表1所示。

表1 Relda2與預期不一致的實驗結果

測試實驗結果可以從兩個方面對Relda2進行評估:基于系統(tǒng)回調函數的資源泄漏檢測情況以及基于用戶回調函數的資源泄漏檢測情況。

基于系統(tǒng)回調函數的基準測試程序根據回調函數的不同大致可以分為四類:活動組件的生命周期回調函數、服務組件的生命周期回調函數、廣播接收器組件的onReceive()回調函數以及其他常用的系統(tǒng)回調函數。對于不同類型的資源泄漏情況,Relda2的實驗結果如表2所示。

表2 Relda2對系統(tǒng)回調函數的檢測情況

從實驗結果可以看出,對于存在于組件回調函數中的資源泄漏,Relda2沒有出現漏報;對于存在于其他常用系統(tǒng)回調函數中的資源泄漏,Relda2雖然出現了誤報,但是誤報率在可接受范圍內。由此可見,Relda2能夠較好地檢測系統(tǒng)回調函數中的資源泄漏問題,特別是存在于主要組件中的資源泄漏問題。另外,對于資源在系統(tǒng)回調函數中合理使用(沒有資源泄漏)的基準測試程序,Relda2也沒有產生誤報。

基于用戶回調函數的基準測試集中主要是通過Button間接執(zhí)行資源操作(點擊Button之后,在Button的事件偵聽函數中觸發(fā)另一個方法或者啟動另一個組件,并且在該方法或者組件中執(zhí)行資源操作)和直接執(zhí)行資源操作(點擊Button之后,在Button的事件偵聽函數中執(zhí)行資源操作)而實現的。相應的實驗結果如表3所示。

當本文利用一個Button進行申請資源時,無論是通過onClick屬性方式進行申請資源還是通過注冊方式申請資源都能夠被Relda2成功檢測出資源泄漏問題。當用兩個Button實現資源的申請與釋放時,對于onClick屬性方式與注冊方式混合或者全部都是注冊方式實現Button的事件偵聽方式時,Relda2同樣能夠成功地檢測出基準測試程序的資源泄漏問題,但是兩個Button都是用onClick屬性方式實現事件偵聽時(兩個按鈕都是通過onClick屬性方式實現資源的申請與釋放),Relda2并不能檢測出資源泄漏的問題。所以面對Button的onClick屬性,Relda2存在一定的不足。

表3 Relda2對用戶回調函數的檢測情況

總體來說,Relda2能夠較好地分析資源泄漏的情況,并且能夠很好地檢測出主要組件中的資源泄漏。但是,對于存在于用戶回調函數中的資源泄漏時,Relda2的檢測還是存在一定的不足,所以 Relda2可以在用戶回調函數這方面進行改善。對于靜態(tài)分析工具來說,Relda2的分析結果還是比較令人滿意的。

4 對RelFix工具的評測

本章將使用ResLeakBench對資源泄漏修復分析工具RelFix進行評測。在這里,本文主要通過自主開發(fā)的基準測試集對RelFix進行測評。由于RelFix需要使用Relda2提供的漏洞報告進行修復,因此需要選用存在資源泄漏并且能夠被Relda2正確檢測的基準測試程序。最終,有12基準測試滿足要求,于是本文使用RelFix對12個基準測試程序進行了修復。對于每一個測試程序,經過RelFix的修復之后能夠生成一個新的apk安裝包,并且相關資源操作后面被插入了日志語句。這些日志語句能夠幫助本文在程序動態(tài)運行時觀察和追蹤資源的操作。最后將被修復過后的基準測試程序安裝到真機中進行驗證,通過觀察資源操作的日志信息,得到測試RelFix的實驗結果如表4所示。

表4 測試RelFix的實驗結果

從實驗結果可以知道,在進行資源泄漏修復過程中修復前后的代碼并沒有增加多少,并且滿足了工具開發(fā)者所說的控制在代碼總量的4%。存在資源泄漏的基準測試程序主要分為以下類型:活動生命周期中的資源泄漏、服務生命周期中的資源泄漏、常用的回調函數中的資源泄漏。并且RelFix是在Relda2的基礎上進行對Android應用程序進行資源修復,最后的修復結果對Relda2的報告文件還是存在一定的依賴性的。接下來主要對表格中沒有修復成功的基準測試程序進行分析。

對于名為onActivityResult.lanuchMode.singleInstance的基準測試程序,它的活動在Android的配置文件中的啟動模式是單例模式(singleInstance)。當Activity處于這種模式時,onActivityResult并不會被系統(tǒng)自動調用,也就是說在該回調函數中釋放資源是無效的。如果要進行資源修復有兩種辦法:一種是直接在申請資源所在的組件中釋放資源;另一個種是將活動的登錄模式進行轉換成其他模式,但是RelFix的修復結果并沒有成功。最后修復過的基準測試程序無法正常運行。

在回退鍵中進行釋放資源是許多開發(fā)者經常應用到的情況。例如點開一個網頁可以進行播放音樂,當點擊回退鍵時就應該釋放資源,停止播放音樂。在本次實驗中用onkeyDown基準測試程序進行模擬,首先在本組件的活動的onCreate()函數中申請資源;其次調用用戶回調函數中的onkeyDown()函數,并且注冊的按鍵是回退鍵(是當用戶按下回退鍵之后會執(zhí)行onkeyDown()函數);最后不進行釋放資源操作,確?;鶞蕼y試程序存在資源泄漏問題。對于這一基準測試程序的預期結果是RelFix能夠在onkeyDown()函數中對申請的資源進行釋放。如果選擇在onDestory()釋放資源的話并不能真正有效地釋放資源,也就是修復失敗,因為當用戶點擊回退鍵時,系統(tǒng)沒有調用onDestory(),資源沒有被釋放。RelFix對這一特殊情況沒有修復成功,它直接在onDestory()函數中釋放資源,但是此時釋放資源的操作是無效的。

對于名為onLocationChanged()的基準測試程序來說,它是需要在地理位置發(fā)生變化才能執(zhí)行onLocationChanged()回調函數中申請的資源操作, RelFix對該基準測試程序進行修復時,并沒有修復成功。

通過利用基準測試集對RelFix進行測試發(fā)現RelFix的修復結果基本滿足了用戶需求,不過從RelFix不能修復成功的基準測試程序中可以得出RelFix可能以下幾個不足:在進行資源泄漏修復時不能修復由于Android配置文件導致的資源泄漏問題;資源泄漏修復還是需要依靠資源泄漏檢測工具,所選擇的資源泄漏檢測工具也成為RelFix是否能修復成功的一個因素;對于基于回調的機制的用戶回調函數中進行設計的基準測試程序不能被有效的修復??傮w來說,RelFix可以從減少對其他工具的依賴性和提高對Android配置文件處理這兩方面進行改善。

5 結語

使用基準測試集測試是衡量被測試對象某一特性的重要方法。本文構建了一套針對于Android程序資源泄漏問題的基準測試集ResLeakBench,它一共包含70個基準測試測序,主要由自主開發(fā)和開源程序兩個方面構成。本文利用這70個基準測試程序對資源泄漏檢測工具Relda2和修復工具RelFix進行測試。無論是Relda2還是RelFix,都被發(fā)現出了一些問題,這說明ResLeakBench有著不錯的實用性,能夠檢測出被測試的對象存在的問題。另外,對Relda2的測試結果表明,Relda2能夠比較理想地檢測出在Activity組件中存在的資源泄漏問題,但是面對使用Button進行相關資源操作的測試程序,它的檢測準確率還有待提高。對RelFix的測試結果表明,RelFix能夠比較理想地實現資源泄漏的修復,并且修復過后的Android應用程序的原有功能沒有受到影響。但是,它對資源泄漏檢測的工具具有一定依賴性,資源泄漏檢測工具的有效性也會對它的修復結果產生影響。

此外,ResLeakBench不僅能夠對本文使用的測試對象Relda2和RelFix進行測評,還可以對其他關于Android應用軟件資源泄漏地檢測和修復的工具進行測評。對于資源相關工具的使用者來說,ResLeakBench能夠為提供選擇策略。用戶可以利用本文構造出的基準測試集進行對多個工具進行驗證,通過對實驗結果的比較,得出比較符合他們要求的工具。對于資源工具的開發(fā)者來說,他們可以利用ResLeakBench對工具進行改進。

References)

[1] 楊嬌. 基于Android平臺手機通訊錄的設計與實現[D]. 西安. 西安電子科技大學, 2013.(YANG J. Design and implementation for a mobile phone contacts on Android platform [D]. Xi’an: Xidian University, 2013.)

[2] IDC. Smartphone OS market share, 2016 Q1 [EB/OL]. [2016- 06- 01]. http://www.idc.com/promo/smartphone-market-share/os; jsessionid=B13EFFFA3D9B1C2CB357D32DBF4204BA.

[3] WU T, LIU J, XU Z, et al. light-weight, inter-procedural and callback-aware resource leak detection for Android apps[J]. IEEE Transactions on Software Engineering, 2016, 42(11): 1054-1076.

[4] LIU J, WU T, YAN J, et al. Fixing resource leaks in Android apps with light-weight static analysis and low-overhead instrumentation[C]// Proceedings of the 2016 IEEE 27th International Symposium on Software Reliability Engineering. Piscataway, NJ: IEEE, 2016: 342-352.

[5] Flyingstarwb.目前高性能計算基準測試程序分類[EB/OL]. [2016- 04- 01]. http://blog.csdn.net/flyingstarwb/article/details/4225913/.

[6] 王良. Benchmark性能測試綜述[J]. 計算機工程與應用, 2006, 42(15): 45-48.(WANG L. Summa of benchmark performance test[J]. Computer Engineering and Applications, 2006, 42(15): 45-48.)

[7] GUO C, ZHANG J, YAN J, et al. Characterizing and detecting resource leaks in Android applications [C]// Proceedings of the 2013 IEEE/ACM 28th International Conference on Automated Software Engineering. Piscataway, NJ: IEEE, 2013: 389-398.

[8] ARZT S, RASTHOFER S, FRITZ C, et al. FlowDroid: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps [J]. ACM SIGPLAN Notices, 2014, 49(6): 259-269.

[9] Google. App components [EB/OL]. [2016- 04- 01]. https://developer.android.com/guide/components/index.html.

[10] 王鉻. 回調函數在軟件設計中的應用[J]. 河南教育學院學報(自然科學版), 2003, 12(3): 44-46.(WANG G. The application of callback function in software design[J]. Journal of Henan Education Institute (Natural Science Edition), 2003, 12(3): 44-46.)

[11] Google. Activity lifecycle [EB/OL]. [2016- 04- 01]. https://developer.android.com/training/basics/activity-lifecycle/index.html.

[12] Google. Dalvik bytecode [EB/OL]. [2016- 04- 01]. https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html.

[13] TUMBLESON C, WISNIEWSKI R. A tool for reverse engineering Android APK files [EB/OL]. [2016- 04- 01]. https://ibotpeaches.github.io/Apktool/.

[14] 姚尚朗, 靳巖. Android開發(fā)入門與實戰(zhàn)[M]. 北京: 人民郵電出版社, 2009: 57-136.(YAO S L, JIN Y. Introduction and Practice of Android Development [M]. Beijing: Posts & Telecom Press, 2009: 57-136.)

[15] ZHANG J. Resourcetable [EB/OL]. [2016- 04- 01]. http://lcs.ios.ac.cn/~zj/ResourceTable.html.

This work is partially supported by National Natural Science Foundation of China (91418206).

LIU Jierui, born in 1990, M. S. candidate. His research interests include program analysis and testing.

YAN Jun, born in 1980, Ph. D., associate research fellow. His research interests include program analysis and testing.

YANG Hongli, born in 1970, Ph. D. associate research fellow. Her research interests include program analysis and verification.

Benchmarks construction and evaluation for resource leak in Android apps

LIU Jierui1,2, WU Xueqing3, YAN Jun1,2,4*, YANG Hongli3

(1. State Key Laboratory of Computer Science (Institute of Software, Chinese Academy of Sciences), Beijing 100190, China;2. School of Computer and Control Engineering, University of Chinese Academy of Sciences, Beijing 100049, China;3. College of Computer Science, Beijing University of Technology, Beijing 100124, China;4. Technology Center of Software Engineering, Institute of Software, Chinese Academy of Sciences, Beijing 100190, China)

Android system is becoming the most popular mobile operating system for its opening property. However, the opening also brings some problems, the resource leak is one of the common ones. For the problems that resource leak is existed in Android system and no benchmarks has been provided for this specific issue, a benchmark named ResLeakBench for resource leak problem was proposed. First, official Android reference and a lot of real apps were studied, then the operation of resources and their common application scenarios were generalized. Second, 35 self-designed test apps were put into the benchmark according to the collected information; besides, to ensure the practicality of the benchmarks, 35 real apps related to resources were added into the benchmark. Finally, to evaluate the ResLeakBench, the resource leak analysis tool Relda2 and resource leak fixing tool RelFix were tested on the benchmark, and some shortages of Relda2 and RelFix were found. The experimental results show that ResLeakBench is a practical benchmark.

benchmarking procedure; Android app; resource leak; tool evaluation; program analysis

2016- 09- 09;

2016- 12- 23。 基金項目:國家自然科學基金資助項目(91418206)。

劉潔瑞(1990—),男,四川成都人,碩士研究生,主要研究方向:程序分析與測試; 嚴俊(1980—),男,湖北石首人,副研究員,博士,CCF會員,主要研究方向:程序分析與測試; 楊紅麗(1970—),女,陜西寶雞人,副教授,博士,CCF會員,主要研究方向:程序分析與驗證。

1001- 9081(2017)04- 1129- 06

10.11772/j.issn.1001- 9081.2017.04.1129

TP311.5

A

猜你喜歡
測試程序開發(fā)者基準
下期要目
應如何確定行政處罰裁量基準
基于Castle型機械手的三溫量產測試平臺實現
手機APP交互界面人因適合性測試程序的設計與實現
“85后”高學歷男性成為APP開發(fā)新生主力軍
16%游戲開發(fā)者看好VR
電氣自動化控制設備可靠性測試探討
滑落還是攀爬
燃氣輪機燃燒基準溫度估算方法