基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法
【專利摘要】本發(fā)明涉及一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,包括以下步驟:步驟一、反編譯被測(cè)試安卓應(yīng)用軟件,生成資源文件與smali源文件;步驟二、編寫探針代碼,在smali源文件中插入探針代碼,獲得修改后的smali文件;步驟三、對(duì)步驟二獲得的smali文件進(jìn)行重新編譯,生成用于測(cè)試的應(yīng)用軟件,采用該應(yīng)用軟件完成被測(cè)試安卓應(yīng)用軟件的測(cè)試。與現(xiàn)有技術(shù)相比,本發(fā)明采用插樁技術(shù)編寫探針代碼并實(shí)現(xiàn)探針代碼的插入,最后完成安卓應(yīng)用軟件的測(cè)試,具有方法簡(jiǎn)便、測(cè)試可靠等優(yōu)點(diǎn)。
【專利說明】基于插粧技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種軟件測(cè)試方法,尤其是涉及一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法。
【背景技術(shù)】
[0002]一、當(dāng)前安卓應(yīng)用自動(dòng)化測(cè)試的難點(diǎn)
[0003]當(dāng)前安卓應(yīng)用軟件的自動(dòng)化測(cè)試一般采用robotium框架編寫自動(dòng)化測(cè)試用例。通過IObotium框架,自動(dòng)化測(cè)試用例在執(zhí)行時(shí),可以獲得被測(cè)試安卓應(yīng)用軟件的UI信息,也可以模擬用戶進(jìn)行按鍵或觸屏操作,從而可以對(duì)被測(cè)試安卓應(yīng)用軟件的邏輯進(jìn)行測(cè)試。
[0004]但是,由于安卓系統(tǒng)安全性的限制,robotium框架在下面的自動(dòng)化測(cè)試場(chǎng)景中存在問題:
[0005]1.測(cè)試用例要求對(duì)被測(cè)試安卓應(yīng)用發(fā)出的Intent進(jìn)行檢查,以確認(rèn)被測(cè)試安卓應(yīng)用各模塊內(nèi)部之間的耦合、被測(cè)試安卓應(yīng)用與安卓系統(tǒng)之間的耦合、被測(cè)試安卓應(yīng)用與其他應(yīng)用之間的耦合是否正常。
[0006]2.對(duì)很多與后臺(tái)服務(wù)有關(guān)的安卓應(yīng)用進(jìn)行自動(dòng)化測(cè)試時(shí),為降低被測(cè)試安卓應(yīng)用與服務(wù)器之間的耦合,使測(cè)試的軟件邏輯清晰可控,測(cè)試用例要求對(duì)服務(wù)器進(jìn)行Mock。
[0007]3.對(duì)使用了 GoogleMap服務(wù)的安卓應(yīng)用進(jìn)行自動(dòng)化測(cè)試時(shí),測(cè)試用例要求對(duì)被測(cè)試安卓應(yīng)用的Google MAP(V2)的相關(guān)功能數(shù)據(jù)進(jìn)行檢查,以確認(rèn)被測(cè)試安卓應(yīng)用的Google Map的相關(guān)軟件邏輯正常。由于Google Map (V2)是作為第三方庫(kù)的形式被測(cè)試軟件集成,而且Google Map (v2)并不支持自動(dòng)化測(cè)試,所以在robotium框架下無法對(duì)GoogleMap (v2)進(jìn)行自動(dòng)化測(cè)試。
[0008]二、程序插樁技術(shù)
[0009]程序插樁技術(shù)最早是由J.C.Huang教授提出的,它是在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針(又稱為“探測(cè)儀”),通過探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過對(duì)這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,從而實(shí)現(xiàn)測(cè)試目的的方法。
[0010]三、安卓應(yīng)用反編譯及smali匯編
[0011]安卓應(yīng)用均采用Java開發(fā),運(yùn)行在android dalvik java虛擬機(jī)之上,可以使用工具將安卓應(yīng)用進(jìn)行反編譯,得到資源文件和smali語言的源文件,也可以使用工具將反編譯得到資源文件和smali語言的源文件再次編譯打包,生成安卓應(yīng)用。
[0012]smali是android dalvik java虛擬機(jī)反編譯后的采用的一種類Jasmin語法的匯編語目,它是Java語目的指令級(jí)描述,與Java語目有 對(duì)應(yīng)關(guān)系。其特點(diǎn)是:
[0013](I)文件命名
[0014]在每個(gè)smali源文件中只能定義一個(gè)類,源文件的名稱與類的名稱相同,源文件的擴(kuò)展名為smal i,源文件所在的目錄為類的包名。例如:類com.droidbox.sandbox.DroidboxGoogleMapffrapper 所對(duì)應(yīng)的源文件為 com\droidbox\sandbox\DroidboxGoogleMapWrapper.smali。
[0015]⑵數(shù)據(jù)類型
[0016]smali語言中,有兩種主要的類型:基本數(shù)據(jù)類型和復(fù)雜類型。復(fù)雜類型又分為對(duì)象類型和數(shù)組。
[0017]基本數(shù)據(jù)類型
[0018]smali語言中的基本數(shù)據(jù)類型與Java中的基本數(shù)據(jù)類型相同,采用一個(gè)字母表示,與Java中類型對(duì)應(yīng)關(guān)系如下表所示:
[0019]Smali 類
[0020]型VZBSCIJFD
[0021]對(duì)應(yīng)Java
[0022]類型 void boolean byte short char int long float double
[0023]對(duì)象類型
[0024]smali語言中的對(duì)象類型即為Java中的類,采用的表示形式為:Lpackage/name/ClassName$InnerClassName ;
[0025]例如:Lcom/droidbox/sandbox/DroidboxGoogleMapWrapper$MapHeIper ;
[0026]它等同于Java語言中的 com.droidbox.sandbox.DroidboxGoogleMapffrapper.MapHelper0
[0027]數(shù)組
[0028]smali語言中的數(shù)組類型即為Java中的數(shù)組,采用的表達(dá)形式為:[DataType。'['的個(gè)數(shù)表示數(shù)組的維度。例如:'[I '等同于Java語言中的“int[]”,' [[Ljava/lang/String/ 等同于 Java 語言中的 “ java.lang.String[][] ”。
[0029]⑶寄存器
[0030]在Dalvik Java虛擬機(jī)中,所有的數(shù)據(jù)(包括基本數(shù)據(jù)類型的數(shù)據(jù)、對(duì)象、數(shù)組類型的數(shù)據(jù))必須保存在寄存器中才可以使用,執(zhí)行。
[0031]在Smali語言中,有兩類寄存器用于保存數(shù)據(jù)。一類是用于保存局部變量的變量寄存器,采用字母V表示,用數(shù)字索引來區(qū)分。另一類是函數(shù)內(nèi)用于保存?zhèn)魅雲(yún)?shù)的參數(shù)寄存器,采用字母P表示,使用數(shù)字索引來區(qū)分。
[0032](4)函數(shù)及傳參
[0033]在smali語言中,函數(shù)采用的表示形式為:
[0034]Lpackage/name/ClassName ;->Method (ParameterTypeList) RetumType。
[0035]例如:Ljava/util/ArrayList ;->get (I) Ljava/lang/0b ject ;
[0036]在這個(gè)例子中,“Ljava/util/ArrayList ; ”表示函數(shù)所屬的類為java.util.ArrayList0 " get"為函數(shù)的名稱。"I"為參數(shù)類型列表,表示參數(shù)只有一個(gè),為int類型。"Ljava/lang/Object ;"表示函數(shù)的返回值為 java.lang.0bject 類型。
[0037]在smali語言中,當(dāng)一個(gè)函數(shù)被調(diào)用的時(shí)候,采用寄存器傳遞函數(shù)參數(shù),而且函數(shù)的參數(shù)被置于寄存器列表的最后N個(gè)寄存器中(N為函數(shù)參數(shù)的個(gè)數(shù);通常,每個(gè)寄存器保存一個(gè)參數(shù))。相對(duì)于靜態(tài)函數(shù),由于非靜態(tài)函數(shù)存在隱藏的this參數(shù),所以非靜態(tài)函數(shù)在進(jìn)行參數(shù)傳遞時(shí)實(shí)際傳送的參數(shù)個(gè)數(shù)為N+1,而且參數(shù)列表中的第一個(gè)參數(shù)總是該函數(shù)所屬的對(duì)象。[0038]例如,非靜態(tài)方法LMyObject ;_>calIMe (II) V有2個(gè)整型參數(shù),另外還有一個(gè)隱含的LMyObject ;類型的this參數(shù),所以此函數(shù)被調(diào)用時(shí),共使用了 3個(gè)寄存器來傳遞參數(shù),而且第一個(gè)寄存器保存的是該函數(shù)所屬的對(duì)象。
[0039](5)指令與偽指令
[0040]與常見匯編語言一樣,在smali語言中,也存在偽指令和指令。偽指令用于指示編譯工具如何進(jìn)行編譯,主要功能有聲明類名、聲明父類、聲明接口、聲明引用類、聲明函數(shù)、聲明參數(shù)、聲明變量等。指令則用于指示Dalvik java虛擬機(jī)的執(zhí)行,主要包括寄存器操作指令,跳轉(zhuǎn)指令,函數(shù)調(diào)用指令,函數(shù)返回指令,類型強(qiáng)制轉(zhuǎn)換指令、對(duì)象創(chuàng)建指令、進(jìn)程同步區(qū)塊指令。
[0041]Smali語言的函數(shù)調(diào)用指令的語法格式為:ins {RegList}, Method。
[0042]Ins表示具體的函數(shù)調(diào)用指令。在Smali語言中,invoke-virtual,invoke-virtual/range, invoke-direct, invoke-direct/range 為非靜態(tài)函數(shù)調(diào)用指令;invoke-static, invoke-static/range 為靜態(tài)函數(shù)調(diào)用指令。
[0043]RegList表示函數(shù)調(diào)用時(shí)用于傳遞函數(shù)參數(shù)的寄存器列表。寄存器名稱之間采用逗號(hào)分隔。
[0044]Method表示函數(shù)的全稱,包括函數(shù)所屬的類名,函數(shù)的名稱(在類內(nèi)的名稱),函數(shù)的參數(shù)列表,函數(shù)的返回類型。
[0045]例如:invoke-virtual{v2,vl}, Ljava/util/ArrayList ;->get(I)Ljava/lang/Object ;
[0046]在這個(gè)例子中,“invoke-virtual”表示在此處進(jìn)行虛函數(shù)調(diào)用?!皏2,vl”為寄存器列表,寄存器”v2”保存類型為L(zhǎng)java/util/ArrayList ;的對(duì)象;寄存器”vl”保存類型為I 的數(shù)據(jù)?!癓java/util/ArrayList ;->get (I) Ljava/lang/0bject ; ”表示在此指令執(zhí)行時(shí)被調(diào)用的函數(shù)。
[0047]在上面的例子中,盡管“Ljava/util/ArrayList;->get (I) Ljava/lang/0b ject ; ”只聲明了一個(gè)參數(shù),但是按照Smali語言的參數(shù)傳遞規(guī)則,在實(shí)際傳參時(shí),還是需要傳遞兩個(gè)參數(shù)。
【發(fā)明內(nèi)容】
[0048]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法。
[0049]本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0050]一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,包括以下步驟:
[0051]步驟一、反編譯被測(cè)試安卓應(yīng)用軟件,生成資源文件與smali源文件;
[0052]步驟二、編寫探針代碼,在smali源文件中插入探針代碼,獲得修改后的smali文件;
[0053]步驟三、對(duì)步驟二獲得的smali文件進(jìn)行重新編譯,生成用于測(cè)試的應(yīng)用軟件,采用該應(yīng)用軟件完成被測(cè)試安卓應(yīng)用軟件的測(cè)試。
[0054]所述的步驟二中,插入探針代碼的方法為:修改類繼承關(guān)系,實(shí)現(xiàn)探針代碼的插入,具體如下:[0055]al)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得基類和目標(biāo)類,基類是目標(biāo)類的父類,在目標(biāo)類中存在對(duì)父類的目標(biāo)函數(shù)的調(diào)用;
[0056]a2)構(gòu)造一探針類,該探針類是基類的子類,完全重載了父類的構(gòu)造函數(shù),探針類的構(gòu)造函數(shù)均調(diào)用父類的具有相同參數(shù)類型的構(gòu)造函數(shù);
[0057]a3)探針類重載所述目標(biāo)函數(shù),重載后的目標(biāo)函數(shù)中包括探針代碼和對(duì)目標(biāo)函數(shù)的調(diào)用;
[0058]a4)修改目標(biāo)類的父類為探針類,即將探針代碼插入目標(biāo)類中。
[0059]所述的步驟二中,插入探針代碼的方法為:替換對(duì)非靜態(tài)函數(shù)的調(diào)用,實(shí)現(xiàn)探針代碼的插入,具體如下:
[0060]bl)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得一類A,該類A中存在對(duì)類B的一非靜態(tài)函數(shù)的調(diào)用,該非靜態(tài)函數(shù)稱為目標(biāo)函數(shù);
[0061]b2)構(gòu)造一探針函數(shù),該探針函數(shù)為全局靜態(tài)函數(shù),包括探針代碼與對(duì)目標(biāo)函數(shù)的調(diào)用,且探針函數(shù)的第一個(gè)參數(shù)的類型為目標(biāo)函數(shù)所屬的類型,后續(xù)參數(shù)與目標(biāo)函數(shù)完全相同;
[0062]探針函數(shù)調(diào)用目標(biāo)函數(shù)時(shí),調(diào)用的對(duì)象為第一個(gè)參數(shù),傳遞給目標(biāo)函數(shù)的參數(shù)為第一個(gè)參數(shù)的后續(xù)參數(shù),同時(shí)保持參數(shù)的個(gè)數(shù)與順序不變;
[0063]b3)將目標(biāo)函數(shù)替換為探針函數(shù),實(shí)現(xiàn)探針代碼的插入。
[0064]將目標(biāo)函數(shù)替換為探針函數(shù)時(shí),還包括將非靜態(tài)函數(shù)調(diào)用指令修改為靜態(tài)函數(shù)調(diào)用指令的步驟。
[0065]所述的步驟二中,插入探針代碼的方法為:替換靜態(tài)函數(shù),實(shí)現(xiàn)探針代碼的插入,具體如下:
[0066]Cl)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得一類A,該類A中存在對(duì)類B的一靜態(tài)函數(shù)的調(diào)用,該靜態(tài)函數(shù)稱為目標(biāo)函數(shù);
[0067]c2)構(gòu)造一探針函數(shù),該探針函數(shù)為全局靜態(tài)函數(shù),包括探針代碼與對(duì)目標(biāo)函數(shù)的調(diào)用,且探針函數(shù)的所有參數(shù)與目標(biāo)函數(shù)完全相同;
[0068]探針函數(shù)調(diào)用目標(biāo)函數(shù)時(shí),傳遞給目標(biāo)函數(shù)的參數(shù)與傳入的參數(shù)完全一致;
[0069]c3)將目標(biāo)函數(shù)替換為探針函數(shù),實(shí)現(xiàn)探針代碼的插入。
[0070]所述的探針函數(shù)的名稱與目標(biāo)函數(shù)的名稱相對(duì)應(yīng)。
[0071]與現(xiàn)有技術(shù)相比,本發(fā)明在smali語言下,采用插樁技術(shù)編寫探針代碼并實(shí)現(xiàn)探針代碼的插入,最后完成安卓應(yīng)用軟件的測(cè)試,方法簡(jiǎn)便,測(cè)試可靠,解決了現(xiàn)有技術(shù)中在robotium框架下進(jìn)行測(cè)試的缺點(diǎn)。
【專利附圖】
【附圖說明】
[0072]圖1為本發(fā)明的流程圖;
[0073]圖2為本發(fā)明的原理示意圖。
【具體實(shí)施方式】
[0074]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
[0075]如圖1所示,為了能夠保證被測(cè)安卓應(yīng)用原有的邏輯完整性以及插樁的可行性,本發(fā)明方法分為以下幾步:
[0076]—、反編譯被測(cè)試安卓應(yīng)用
[0077]在對(duì)安卓應(yīng)用進(jìn)行反編譯后會(huì)生成資源文件與smali源文件文件。
[0078]二、實(shí)現(xiàn)探針代碼,插入探針代碼
[0079]根據(jù)Smali語言的語法與面向?qū)ο缶幊痰奶攸c(diǎn),通過以下三種方法實(shí)現(xiàn)探針代碼的插入。
[0080]方法一:修改類繼承關(guān)系,實(shí)現(xiàn)探針代碼的插入。
[0081]此方法的原理如下:
[0082]假設(shè)被測(cè)試的應(yīng)用反編譯后得到類A和類C。類C是類A的子類,也就是說類C繼承了類A所有的非私有方法。在類C中存在對(duì)父類的非私有方法f的調(diào)用?,F(xiàn)需要在類C中對(duì)父類的非私有方法f的調(diào)用時(shí)插入探針代碼。
[0083]首先,根據(jù)類的繼承屬性,在代碼中加入類B。類B是類A的子類,它重載了類A的非私有方法f。在類B的方法f中,存在探針代碼和對(duì)類A的非私有方法f的調(diào)用。這樣,當(dāng)類B的非私有方法f被調(diào)用時(shí),探針代碼與類A的非私有方法f都得到執(zhí)行。而且,不考慮探針代碼的邏輯時(shí) ,類B的非私有方法f的邏輯與類A的非私有方法f的邏輯完全一致。
[0084]然后,修改類C的繼承關(guān)系,使類C的繼承自類B。這樣,類C在調(diào)用父類的非私有方法f時(shí),會(huì)首先調(diào)用類B的非私有方法f,再由類B調(diào)用類A的非私有方法f。由于類B的非私有方法f的邏輯與類A的非私有方法f的邏輯保持一致,所以這種修改實(shí)現(xiàn)了將類B的非私有函數(shù)f中探針代碼插入到類C的代碼中,而且沒有影響到類C原有的邏輯。
[0085]使用此原理的進(jìn)行探針代碼插樁時(shí),作為需要插入探針代碼的類被稱為目標(biāo)類,例如類C ;目標(biāo)類的原始父類被稱為基類,例如類A ;提供插樁代碼的類被稱為探針類,例如類B。它是基類的派生類,也是插樁完畢后目標(biāo)類的父類;在基類中,作為插樁目標(biāo)的函數(shù)被稱為目標(biāo)函數(shù),例如類A中的非私有函數(shù)f ;在探針類中,用于替代目標(biāo)函數(shù)的函數(shù)被稱為探針函數(shù),它是通過對(duì)基婁中的目標(biāo)函數(shù)重載而得。
[0086]根據(jù)此原理,可以根據(jù)插樁的目標(biāo)編寫探針代碼。在編寫探針代碼時(shí),需遵循如下規(guī)則:
[0087]1.探針類與目標(biāo)類具有相同的父類。
[0088]2.探針類完全重載了父類的構(gòu)造函數(shù)。探針類的構(gòu)造函數(shù)均調(diào)用父類的具有相同參數(shù)類型的構(gòu)造函數(shù)。
[0089]3.探針類重載目標(biāo)函數(shù)。
[0090]4.探針類的目標(biāo)函數(shù)由探針代碼與對(duì)目標(biāo)函數(shù)的調(diào)用組成。
[0091]由于Smali語言與Java語言是--對(duì)應(yīng)的,所以可以使用Java根據(jù)此規(guī)則編寫
探針類與探針函數(shù),然后再使用反編譯工具將探針類的代碼轉(zhuǎn)換為Smali語言的源代碼。
[0092]根據(jù)此原理,將探針代碼插入到目標(biāo)類的修改過程如下:
[0093]①修改目標(biāo)類的父類為探針類,即修改目標(biāo)類的源文件中關(guān)于父類的偽指令super”的參數(shù),使用探針類代替基類。
[0094]②在目標(biāo)類的smali文件中查找對(duì)目標(biāo)函數(shù)的調(diào)用指令。[0095]③修改目標(biāo)類的smali文件中的對(duì)目標(biāo)函數(shù)的調(diào)用指令。保持指令及寄存器列表不變,修改指令調(diào)用的函數(shù),使用探針類中對(duì)應(yīng)的函數(shù)替代基類的函數(shù)。
[0096]這個(gè)規(guī)則的具體替換過程可以參見下面的例子。在下面的例子中,基類是FragmentActivity,目標(biāo)類是TabletMainActivity,探針類是DroidboxFragmentActivity。
[0097]探針加入之前的代碼:
[0098]
【權(quán)利要求】
1.一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于,包括以下步驟: 步驟一、反編譯被測(cè)試安卓應(yīng)用軟件,生成資源文件與Smali源文件; 步驟二、編寫探針代碼,在smali源文件中插入探針代碼,獲得修改后的smali文件;步驟三、對(duì)步驟二獲得的smali文件進(jìn)行重新編譯,生成用于測(cè)試的應(yīng)用軟件,采用該應(yīng)用軟件完成被測(cè)試安卓應(yīng)用軟件的測(cè)試。
2.根據(jù)權(quán)利要求1所述的一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于,所述的步驟二中,插入探針代碼的方法為:修改類繼承關(guān)系,實(shí)現(xiàn)探針代碼的插入,具體如下: al)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得基類和目標(biāo)類,基類是目標(biāo)類的父類,在目標(biāo)類中存在對(duì)父類的目標(biāo)函數(shù)的調(diào)用; a2)構(gòu)造一探針類,該探針類是基類的子類,完全重載了父類的構(gòu)造函數(shù),探針類的構(gòu)造函數(shù)均調(diào)用父類的具有相同參數(shù)類型的構(gòu)造函數(shù); a3)探針類重載所述目標(biāo)函數(shù),重載后的目標(biāo)函數(shù)中包括探針代碼和對(duì)目標(biāo)函數(shù)的調(diào)用; a4)修改目標(biāo)類的父類為探針類,即將探針代碼插入目標(biāo)類中。
3.根據(jù)權(quán)利要求1所述的一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于,所述的步驟二中,插入探針代碼的方法為:替換對(duì)非靜態(tài)函數(shù)的調(diào)用,實(shí)現(xiàn)探針代碼的插入,具體如下: bl)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得一類A,該類A中存在對(duì)類B的一非靜態(tài)函數(shù)的調(diào)用,該非靜態(tài)函數(shù)稱為目標(biāo)函數(shù); b2)構(gòu)造一探針函數(shù),該探針函數(shù)為全局靜態(tài)函數(shù),包括探針代碼與對(duì)目標(biāo)函數(shù)的調(diào)用,且探針函數(shù)的第一個(gè)參數(shù)的類型為目標(biāo)函數(shù)所屬的類型,后續(xù)參數(shù)與目標(biāo)函數(shù)完全相同; 探針函數(shù)調(diào)用目標(biāo)函數(shù)時(shí),調(diào)用的對(duì)象為第一個(gè)參數(shù),傳遞給目標(biāo)函數(shù)的參數(shù)為第一個(gè)參數(shù)的后續(xù)參數(shù),同時(shí)保持參數(shù)的個(gè)數(shù)與順序不變; b3)將目標(biāo)函數(shù)替換為探針函數(shù),實(shí)現(xiàn)探針代碼的插入。
4.根據(jù)權(quán)利要求3所述的一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于,將目標(biāo)函數(shù)替換為探針函數(shù)時(shí),還包括將非靜態(tài)函數(shù)調(diào)用指令修改為靜態(tài)函數(shù)調(diào)用指令的步驟。
5.根據(jù)權(quán)利要求1所述的一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于,所述的步驟二中,插入探針代碼的方法為:替換靜態(tài)函數(shù),實(shí)現(xiàn)探針代碼的插入,具體如下: Cl)被測(cè)試安卓應(yīng)用軟件經(jīng)反編譯后獲得一類A,該類A中存在對(duì)類B的一靜態(tài)函數(shù)的調(diào)用,該靜態(tài)函數(shù)稱為目標(biāo)函數(shù); c2)構(gòu)造一探針函數(shù),該探針函數(shù)為全局靜態(tài)函數(shù),包括探針代碼與對(duì)目標(biāo)函數(shù)的調(diào)用,且探針函數(shù)的所有參數(shù)與目標(biāo)函數(shù)完全相同; 探針函數(shù)調(diào)用目標(biāo)函數(shù)時(shí),傳遞給目標(biāo)函數(shù)的參數(shù)與傳入的參數(shù)完全一致; c3)將目標(biāo)函數(shù)替換為探針函數(shù),實(shí)現(xiàn)探針代碼的插入。
6.根據(jù)權(quán)利要求3或5所述的一種基于插樁技術(shù)的安卓應(yīng)用軟件自動(dòng)化測(cè)試方法,其特征在于, 所述的探針函數(shù)的名稱與目標(biāo)函數(shù)的名稱相對(duì)應(yīng)。
【文檔編號(hào)】G06F11/36GK103970659SQ201410210389
【公開日】2014年8月6日 申請(qǐng)日期:2014年5月16日 優(yōu)先權(quán)日:2014年5月16日
【發(fā)明者】劉玉光 申請(qǐng)人:劉玉光