李 震 王 肖 盧 超 王 敏 李 陽
1(江蘇科技大學(xué)電子信息學(xué)院 江蘇 鎮(zhèn)江 212003)
2(金舟軟件有限責(zé)任公司 江蘇 鎮(zhèn)江 212003)
?
Android軟件可靠性測試用例自動生成的設(shè)計(jì)研究
李震1,2王肖1盧超2王敏1李陽1
1(江蘇科技大學(xué)電子信息學(xué)院江蘇 鎮(zhèn)江 212003)
2(金舟軟件有限責(zé)任公司江蘇 鎮(zhèn)江 212003)
摘要Android是近幾年新興的智能手機(jī)操作系統(tǒng),同時(shí)也出現(xiàn)了各種類型的Android應(yīng)用軟件,競爭激烈。對其進(jìn)行可靠性測試是保證Android軟件質(zhì)量和可靠性的重要途徑,同時(shí)也可幫助開發(fā)方在滿足用戶期望和盡快上市發(fā)布產(chǎn)品兩者之間找到合理的平衡。而測試用例的生成是軟件可靠性測試的重要環(huán)節(jié)。針對Android軟件可靠性測試用例的自動生成問題,首先提出收集用戶對Android軟件使用的習(xí)慣數(shù)據(jù),以便于構(gòu)建軟件的馬爾科夫鏈模型的方法,并基于馬爾科夫鏈模型,提出和實(shí)現(xiàn)了設(shè)置狀態(tài)間轉(zhuǎn)移概率算法和測試用例生成算法,最終根據(jù)以上的研究內(nèi)容設(shè)計(jì)了帶有自動記錄用戶操作習(xí)慣模塊的Android文件管理器和Android軟件可靠性測試用例自動生成工具,給出了Android軟件可靠性測試用例設(shè)計(jì)的總體思路。實(shí)驗(yàn)結(jié)果表明,該方法大大降低了Android軟件測試用例生成的難度,同時(shí)節(jié)約了測試用例生成的時(shí)間和成本,提高了可靠性測試的效率。
關(guān)鍵詞馬爾科夫鏈模型Android軟件開發(fā)測試用例自動生成Eclipse插件開發(fā)遍歷算法
0引言
軟件可靠性是衡量軟件質(zhì)量的重要指標(biāo),它是綜合考慮測試資源和測試效果的一種定量測試方法,可用于軟件產(chǎn)品發(fā)布前的綜合測試[1],能夠從資源使用的角度最大限度地滿足用戶期望和平衡開發(fā)方成本。Android是近幾年新興的智能手機(jī)操作系統(tǒng),同時(shí)也出現(xiàn)了各種類型的Android應(yīng)用軟件,市場競爭激烈,對其進(jìn)行可靠性測試是保證Android軟件質(zhì)量和可靠性的重要途徑,也可幫助開發(fā)方在滿足用戶期望和盡快上市發(fā)布產(chǎn)品兩者之間找到合理的平衡。
軟件可靠性測試用例的編寫是軟件可靠性工程的重要活動之一。但Android軟件的可靠性測試中還沒有一個(gè)明確的測試用例生成的方案,所以能有一個(gè)完善的從軟件的設(shè)計(jì)到根據(jù)軟件的功能生成對應(yīng)的測試用例的方案顯得格外重要。
軟件的可靠性測試的主要特征是按照用戶實(shí)際使用軟件的習(xí)慣來測試軟件的,所以測試用例的設(shè)計(jì)必須要符合這個(gè)要求[2],否則測試得出的數(shù)據(jù)是不可靠的。針對新開發(fā)的軟件沒有用戶歷史使用數(shù)據(jù)的問題,本文提出了一個(gè)收集用戶使用軟件習(xí)慣的方法。設(shè)計(jì)出了帶記錄用戶操作習(xí)慣模塊的Android文件管理器軟件。
測試用例的編寫是一個(gè)費(fèi)時(shí)費(fèi)力的工作,一般都是由專業(yè)人員完成的[4]。本文基于馬爾科夫鏈模型,通過兩種算法設(shè)計(jì)和實(shí)現(xiàn)了Android軟件測試用例自動生成工具,節(jié)約了Android軟件測試用例生成的時(shí)間和成本,提高了可靠性測試效率。
1馬爾科夫鏈模型
馬爾科夫鏈?zhǔn)菭顟B(tài)和時(shí)間都離散的馬爾科夫過程[5]。它是滿足以下兩種假設(shè)的隨機(jī)過程:
1) t+1時(shí)刻系統(tǒng)的概率分布只與t時(shí)刻的狀態(tài)有關(guān),與t時(shí)刻以前的狀態(tài)無關(guān);
2) 從t時(shí)刻到t+1時(shí)刻的狀態(tài)轉(zhuǎn)移與t的值無關(guān)[6]。一個(gè)馬爾科夫鏈模型可表示為M=(S,P,Q),其中各元素的含義如下:
(1) S是系統(tǒng)所有可能的狀態(tài)組成的非空狀態(tài)空間。用Si、Sj表示狀態(tài)。


2基于用戶操作習(xí)慣的馬爾科夫鏈模型的測試用例生成
2.1Android原子操作和用戶操作習(xí)慣數(shù)據(jù)的收集
對于新開發(fā)的軟件,程序員可以先開發(fā)一個(gè)包含自動記錄用戶操作習(xí)慣模塊的測試版本的軟件。首先把測試版本軟件分發(fā)給不同的人群試用,經(jīng)過一定的時(shí)間,把這些用戶的操作數(shù)據(jù)收集起來,通過統(tǒng)計(jì)分析就可以得到用戶實(shí)際的操作習(xí)慣[9]。通過這些數(shù)據(jù)構(gòu)造軟件的馬爾科夫鏈模型,最終生成的測試用例就能夠符合可靠性測試的要求。
編寫自動記錄模塊前提是必須要知道Android系統(tǒng)的所有原子操作,只有了解了這些原子操作,才能根據(jù)用戶的操作記錄相應(yīng)的內(nèi)容。通過對Android系統(tǒng)的研究,可以得到Android系統(tǒng)的原子操作如表1所示。

表1 Android系統(tǒng)原子操作及解釋

續(xù)表1
然后對用戶的操作進(jìn)行監(jiān)聽就可以得到用戶的操作習(xí)慣數(shù)據(jù)。具體方法和實(shí)現(xiàn)將在第3節(jié)介紹。
2.2狀態(tài)間轉(zhuǎn)移概率設(shè)置算法設(shè)計(jì)
為保證生成的測試用例有針對性,本文提出的做法是根據(jù)用戶的操作習(xí)慣來設(shè)置軟件的馬爾科夫鏈模型的狀態(tài)間轉(zhuǎn)移概率,這種做法不僅符合可靠性測試的特點(diǎn),而且能夠保證可靠性測試的充分性[10]。由馬爾科夫鏈特點(diǎn)可知,設(shè)計(jì)的算法不僅要滿足能夠?qū)λ械臓顟B(tài)間轉(zhuǎn)移概率進(jìn)行配置,還要能夠檢測出同一狀態(tài)的所有出邊概率之和是否為1。狀態(tài)間轉(zhuǎn)移概率設(shè)置算法設(shè)計(jì)如算法1。
算法1狀態(tài)間轉(zhuǎn)移概率設(shè)置算法。
//node為馬爾科夫鏈模型的一個(gè)節(jié)點(diǎn)
Procedure WidthTraversal(node){
//如果node有子節(jié)點(diǎn)
if node.hasChild
then{
//得到子節(jié)點(diǎn)個(gè)數(shù)
num=node. getChildren.size();
for i=0 to num
do{
//得到子節(jié)點(diǎn)并添加到數(shù)組array中
childNode = node. getChildren.get(i);
childNode. setProbability(probability);
array.add(childNode);
}
//對array數(shù)組進(jìn)行遍歷
For i=0 to array.length()
do{
//把a(bǔ)rray數(shù)組中節(jié)點(diǎn)所有的概率值相加
sum += array[i];
}
//如果所有節(jié)點(diǎn)的概率值不等于1,則說明配置有錯(cuò)
if sum !=1
then {
inputError = true;
}
for i=0 to node.getChildren.size()
do{
childNode = node.getChild.get(i);
//遞歸調(diào)用
WidthTraversal(childNode);
}
}
}
如果inputError為true,則說明配置有錯(cuò),提示用戶重新輸入即可。
2.3測試用例生成算法設(shè)計(jì)
測試用例生成算法必須要能根據(jù)軟件的馬爾科夫鏈模型自動識別出測試路徑,并根據(jù)路徑的節(jié)點(diǎn)信息生成對應(yīng)的測試用例。本文設(shè)計(jì)的測試用例生成算法如算法2。
算法2測試用例生成算法。
//node為馬爾科夫鏈模型的一個(gè)節(jié)點(diǎn)
Procedure DepthTraversal(node){
//如果node有子節(jié)點(diǎn)
if node.hasChild
then{
//循環(huán)遍歷子節(jié)點(diǎn)
for i=0 to node. getChildren.size()
do{
//得到一個(gè)子節(jié)點(diǎn)
childNode=node. getChildren.get(i);
//信息向下推壓,把子節(jié)點(diǎn)信息設(shè)置為父節(jié)
//點(diǎn)加自身節(jié)點(diǎn)信息
childNode.setInfo(node.getInfo()+childNode.getInfo());
//遞歸調(diào)用
DepthTraversal(childNode);
}
}
else{
//如果沒有子節(jié)點(diǎn),直接輸出節(jié)點(diǎn)信息即為
//此路徑對應(yīng)的測試用例
print node.getInfo();
}
}
3Android軟件和測試用例自動生成工具的設(shè)計(jì)
根據(jù)第2節(jié)的提出的方法,本節(jié)設(shè)計(jì)出了Android文件管理器軟件和測試用例自動生成工具,最終生成了文件管理器的測試用例集。流程圖如圖1所示。

圖1 生成測試用例流程圖
3.1Android文件管理器介紹
本文編寫的Android文件管理器主要實(shí)現(xiàn)的是對文件的基本操作,主要界面如圖2所示。

圖2 文件管理器界面
主要功能包括瀏覽文件、新建文件、新建文件夾、復(fù)制、剪切、粘貼、重命名、刪除、查看文件屬性,由于內(nèi)容限制,在此對其實(shí)現(xiàn)過程不做具體介紹。
3.2文件管理器記錄用戶操作習(xí)慣數(shù)據(jù)模塊的實(shí)現(xiàn)
自動記錄模塊利用Android平臺提供的SharedPreferences類的key-value對來保存數(shù)據(jù)[11],保存用戶操作習(xí)慣數(shù)據(jù)流程如圖3所示。

圖3 記錄用戶操作模塊流程
編寫記錄用戶操作模塊前,要了解用戶會執(zhí)行哪些操作,例如執(zhí)行新建文件功能時(shí),用戶可能會執(zhí)行如圖4“新建文件馬爾科夫鏈模型”的操作。

圖4 新建文件馬爾科夫鏈模型
只需對用戶的這些操作進(jìn)行監(jiān)聽,在用戶點(diǎn)擊觸發(fā)一個(gè)操作的時(shí)候,記錄用戶點(diǎn)擊此操作次數(shù)的變量加1,最后退出軟件時(shí),把這些記錄用戶操作次數(shù)的變量存儲到手機(jī)中即可。
3.3測試用例自動生成工具的實(shí)現(xiàn)
本文設(shè)計(jì)的測試用例自動生成工具是使用Eclipse開發(fā)的,可以實(shí)現(xiàn)手機(jī)屏幕在PC上的實(shí)時(shí)顯示,并能通過PC直接控制手機(jī),記錄用戶操作軟件時(shí)的坐標(biāo)和操作步驟名稱。能夠支持對任何不同分辨率、不同尺寸和不同Android系統(tǒng)版本手機(jī)的測試用例的生成。測試用例自動生成工具操作流程圖如圖5所示。

圖5 測試用例自動生成工具操作流程
其中,根據(jù)用戶的輸入設(shè)置狀態(tài)轉(zhuǎn)移概率用到的方法是2.2節(jié)介紹的狀態(tài)間轉(zhuǎn)移概率設(shè)置算法,遍歷軟件的馬爾科夫鏈模型生成測試用例用到的方法是2.3節(jié)介紹的測試用例生成算法。
測試用例自動生成工具主要界面如圖6所示,通過向?qū)?chuàng)建一個(gè)Android軟件測試用例自動生成工程。

圖6 設(shè)置工程名和測試功能點(diǎn)對話框
通過鼠標(biāo)右鍵就可以添加下一步操作,如圖7所示。

圖7 Android軟件的原子操作
這里提供了操作Android軟件所需的所有原子操作,點(diǎn)擊不同的選項(xiàng)會彈出對應(yīng)的對話框,例如圖8是點(diǎn)擊了touch原子操作所彈出的對話框。

圖8 配置Touch原子操作對話框
在這個(gè)對話框中可以直接操作手機(jī),命名操作步驟的名稱并自動記錄功能按鈕的坐標(biāo)。另加入了findAndTouch操作,在執(zhí)行自動化測試時(shí),在特定位置的矩形方框內(nèi)如果發(fā)現(xiàn)指定的圖片則點(diǎn)擊它,如果發(fā)現(xiàn)不了則就說明程序出錯(cuò)了,點(diǎn)擊findAndTouch后出現(xiàn)的對話框如圖9所示。

圖9 findAndTouch對話框
可以編輯操作步驟的名稱,自動記錄截取的圖片及其坐標(biāo)。最終文件管理器要進(jìn)行測試的操作步驟如圖10所示。

圖10 文件管理器的功能操作
點(diǎn)擊右上角測試用例生成按鈕會彈出如圖11所示設(shè)置操作步驟轉(zhuǎn)移概率對話框。

圖11 設(shè)置操作步驟轉(zhuǎn)移概率
可以根據(jù)用戶的操作習(xí)慣配置操作步驟間的轉(zhuǎn)移概率,并且會自動的檢測同一操作出邊狀態(tài)的概率之和是否為1。點(diǎn)擊確定按鈕,會自動根據(jù)配置的概率和測試用例總個(gè)數(shù)生成對應(yīng)個(gè)數(shù)的測試用例,如圖12所示。

圖12 測試用例生成個(gè)數(shù)對話框
生成的測試用例的信息如圖13和圖14所示,最終Android文件管理器測試用例的自動生成工程完成。接下來就可以將生成的測試用例導(dǎo)入到自動化測試工具中進(jìn)行可靠性測試,本文就不做介紹了。

圖13 所有測試用例的信息

圖14 新建文件夾路徑2測試用例詳細(xì)信息
4結(jié)語
本文介紹了收集 Android 軟件用戶操作習(xí)慣數(shù)據(jù)的方法,從馬爾科夫鏈模型出發(fā),提出了設(shè)置馬爾科夫鏈狀態(tài)間轉(zhuǎn)移概率算法和測試用例生成算法。根據(jù)所提的方法和算法編寫了 Android 文件管理器和測試用例自動生成工具,最終利用所開發(fā)的工具生成了文件管理器的測試用例集,節(jié)約了測試用例生成的時(shí)間和成本,提高了可靠性測試效率。
對于其他的Android軟件,都可以通過本文介紹的方法來實(shí)現(xiàn)測試用例的自動生成。對于用戶操作習(xí)慣數(shù)據(jù)的收集方法來說,因?yàn)橛脩魧浖牟僮鞫际峭ㄟ^觸控不同的功能按鈕來實(shí)現(xiàn)的,只需要對這些動作進(jìn)行監(jiān)聽就可以得到用戶的操作數(shù)據(jù);對于測試用例自動生成工具的設(shè)計(jì),因?yàn)楸疚脑O(shè)計(jì)的工具是支持Android手機(jī)的所有原子操作,所以可以對不同的Android應(yīng)用程序進(jìn)行測試用例的生成。因此本文所介紹的內(nèi)容和方法具有通用性,最終給出了Android軟件測試用例自動生成的一個(gè)新思路。
參考文獻(xiàn)
[1] 孫海濤.軟件可靠性評價(jià)與輔助測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2010.
[2] 鄭曦.基于組件式軟件系統(tǒng)的可靠性指標(biāo)分配與預(yù)測模型[D].華南理工大學(xué),2012.
[3] 路曉波.軟件開發(fā)過程中白盒測試方法和工具的研究及應(yīng)用[D].南京郵電大學(xué),2013.
[4] 李孟庭.軟件測試用例生成的研究與應(yīng)用[D].北京郵電大學(xué),2013.
[5] 隋磊.面向DB2應(yīng)用的自動測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱工業(yè)大學(xué),2012.
[6] 楊治.手機(jī)軟件交互設(shè)計(jì)研究[D].哈爾濱工程大學(xué),2013.
[7] 鄭曦.基于組件式軟件系統(tǒng)的可靠性指標(biāo)分配與預(yù)測模型[D].華南理工大學(xué),2012.
[8] 尹魯燕.基于UML的軟件可靠性分析模型自動轉(zhuǎn)換研究[D].重慶大學(xué),2012.
[9] 孫寶云.軟件測試用例自動生成技術(shù)的應(yīng)用研究[D] .吉林大學(xué),2012.
[10] 伍小薈.面向軟件可靠性的性能測試方法研究與應(yīng)用[D].上海交通大學(xué),2012.
[11] 于濤.基于動態(tài)權(quán)重和靜態(tài)權(quán)重的軟件可靠性混合模型研究[D].西南大學(xué),2013.
ON DESIGNING AUTOMATIC GENERATION OF ANDROID SOFTWARE RELIABILITY TEST CASES
Li Zhen1,2Wang Xiao1Lu Chao2Wang Min1Li Yang1
1(SchoolofElectronicsandInformation,JiangsuUniversityofScienceandTechnology,Zhenjiang212003,Jiangsu,China)2(JinzhouSoftwareCo.,Ltd,Zhenjiang212003,Jiangsu,China)
AbstractIntelligent mobile phone operating system, Android, is emerging in recent years, and various types of Android software have become a flood with fierce competition. Reliability testing is the important way to ensure the quality and reliability of Android software, which can also help the developers to catch a balance between the expectations of users and releasing the software as earlier as possible. And test case generation is an important part of software reliability testing. The main contents of this paper are as follows: First, we proposed a method to collect usage data of users on Android software so as to build software Markov chain model. Secondly, based on Markov chain model, we proposed and implemented the algorithms of setting transition probabilities between the states and the test case generation. Finally, according to the above two proposals, we designed the Android file manager software which contains a module automatically recording users’ operation habits and an automatic generation tool for Android software reliability test cases, and gave the general idea of designing Android software reliability test cases. Experimental result showed that the method greatly reduced the difficulty of Android software reliability test cases and saved the time and cost of test cases generation as well, and the efficiency of the reliability test was increased as well.
KeywordsMarkov chain modelAndroid software developmentAutomatic test case generationEclipse plug-in developmentTraversal algorithm
中圖分類號TP311.56
文獻(xiàn)標(biāo)識碼A
DOI:10.3969/j.issn.1000-386x.2016.01.058
收稿日期:2014-05-28。江蘇高校優(yōu)勢學(xué)科建設(shè)工程資助項(xiàng)目;江蘇省2012年度企業(yè)博士集聚計(jì)劃;鎮(zhèn)江市第六批“331”計(jì)劃。李震,副教授,主研領(lǐng)域:系統(tǒng)安全性,系統(tǒng)可靠性,軟件測試。王肖,碩士生。盧超,工程師。王敏,副教授。李陽,講師。