李 震 王 肖 盧 超 王 敏 李 陽(yáng)
1(江蘇科技大學(xué)電子信息學(xué)院 江蘇 鎮(zhèn)江 212003)
2(金舟軟件有限責(zé)任公司 江蘇 鎮(zhèn)江 212003)
?
Android軟件可靠性測(cè)試用例自動(dòng)生成的設(shè)計(jì)研究
李震1,2王肖1盧超2王敏1李陽(yáng)1
1(江蘇科技大學(xué)電子信息學(xué)院江蘇 鎮(zhèn)江 212003)
2(金舟軟件有限責(zé)任公司江蘇 鎮(zhèn)江 212003)
摘要Android是近幾年新興的智能手機(jī)操作系統(tǒng),同時(shí)也出現(xiàn)了各種類(lèi)型的Android應(yīng)用軟件,競(jìng)爭(zhēng)激烈。對(duì)其進(jìn)行可靠性測(cè)試是保證Android軟件質(zhì)量和可靠性的重要途徑,同時(shí)也可幫助開(kāi)發(fā)方在滿(mǎn)足用戶(hù)期望和盡快上市發(fā)布產(chǎn)品兩者之間找到合理的平衡。而測(cè)試用例的生成是軟件可靠性測(cè)試的重要環(huán)節(jié)。針對(duì)Android軟件可靠性測(cè)試用例的自動(dòng)生成問(wèn)題,首先提出收集用戶(hù)對(duì)Android軟件使用的習(xí)慣數(shù)據(jù),以便于構(gòu)建軟件的馬爾科夫鏈模型的方法,并基于馬爾科夫鏈模型,提出和實(shí)現(xiàn)了設(shè)置狀態(tài)間轉(zhuǎn)移概率算法和測(cè)試用例生成算法,最終根據(jù)以上的研究?jī)?nèi)容設(shè)計(jì)了帶有自動(dòng)記錄用戶(hù)操作習(xí)慣模塊的Android文件管理器和Android軟件可靠性測(cè)試用例自動(dòng)生成工具,給出了Android軟件可靠性測(cè)試用例設(shè)計(jì)的總體思路。實(shí)驗(yàn)結(jié)果表明,該方法大大降低了Android軟件測(cè)試用例生成的難度,同時(shí)節(jié)約了測(cè)試用例生成的時(shí)間和成本,提高了可靠性測(cè)試的效率。
關(guān)鍵詞馬爾科夫鏈模型Android軟件開(kāi)發(fā)測(cè)試用例自動(dòng)生成Eclipse插件開(kāi)發(fā)遍歷算法
0引言
軟件可靠性是衡量軟件質(zhì)量的重要指標(biāo),它是綜合考慮測(cè)試資源和測(cè)試效果的一種定量測(cè)試方法,可用于軟件產(chǎn)品發(fā)布前的綜合測(cè)試[1],能夠從資源使用的角度最大限度地滿(mǎn)足用戶(hù)期望和平衡開(kāi)發(fā)方成本。Android是近幾年新興的智能手機(jī)操作系統(tǒng),同時(shí)也出現(xiàn)了各種類(lèi)型的Android應(yīng)用軟件,市場(chǎng)競(jìng)爭(zhēng)激烈,對(duì)其進(jìn)行可靠性測(cè)試是保證Android軟件質(zhì)量和可靠性的重要途徑,也可幫助開(kāi)發(fā)方在滿(mǎn)足用戶(hù)期望和盡快上市發(fā)布產(chǎn)品兩者之間找到合理的平衡。
軟件可靠性測(cè)試用例的編寫(xiě)是軟件可靠性工程的重要活動(dòng)之一。但Android軟件的可靠性測(cè)試中還沒(méi)有一個(gè)明確的測(cè)試用例生成的方案,所以能有一個(gè)完善的從軟件的設(shè)計(jì)到根據(jù)軟件的功能生成對(duì)應(yīng)的測(cè)試用例的方案顯得格外重要。
軟件的可靠性測(cè)試的主要特征是按照用戶(hù)實(shí)際使用軟件的習(xí)慣來(lái)測(cè)試軟件的,所以測(cè)試用例的設(shè)計(jì)必須要符合這個(gè)要求[2],否則測(cè)試得出的數(shù)據(jù)是不可靠的。針對(duì)新開(kāi)發(fā)的軟件沒(méi)有用戶(hù)歷史使用數(shù)據(jù)的問(wèn)題,本文提出了一個(gè)收集用戶(hù)使用軟件習(xí)慣的方法。設(shè)計(jì)出了帶記錄用戶(hù)操作習(xí)慣模塊的Android文件管理器軟件。
測(cè)試用例的編寫(xiě)是一個(gè)費(fèi)時(shí)費(fèi)力的工作,一般都是由專(zhuān)業(yè)人員完成的[4]。本文基于馬爾科夫鏈模型,通過(guò)兩種算法設(shè)計(jì)和實(shí)現(xiàn)了Android軟件測(cè)試用例自動(dòng)生成工具,節(jié)約了Android軟件測(cè)試用例生成的時(shí)間和成本,提高了可靠性測(cè)試效率。
1馬爾科夫鏈模型
馬爾科夫鏈?zhǔn)菭顟B(tài)和時(shí)間都離散的馬爾科夫過(guò)程[5]。它是滿(mǎn)足以下兩種假設(shè)的隨機(jī)過(guò)程:
1) t+1時(shí)刻系統(tǒng)的概率分布只與t時(shí)刻的狀態(tài)有關(guān),與t時(shí)刻以前的狀態(tài)無(wú)關(guān);
2) 從t時(shí)刻到t+1時(shí)刻的狀態(tài)轉(zhuǎn)移與t的值無(wú)關(guān)[6]。一個(gè)馬爾科夫鏈模型可表示為M=(S,P,Q),其中各元素的含義如下:
(1) S是系統(tǒng)所有可能的狀態(tài)組成的非空狀態(tài)空間。用Si、Sj表示狀態(tài)。
2基于用戶(hù)操作習(xí)慣的馬爾科夫鏈模型的測(cè)試用例生成
2.1Android原子操作和用戶(hù)操作習(xí)慣數(shù)據(jù)的收集
對(duì)于新開(kāi)發(fā)的軟件,程序員可以先開(kāi)發(fā)一個(gè)包含自動(dòng)記錄用戶(hù)操作習(xí)慣模塊的測(cè)試版本的軟件。首先把測(cè)試版本軟件分發(fā)給不同的人群試用,經(jīng)過(guò)一定的時(shí)間,把這些用戶(hù)的操作數(shù)據(jù)收集起來(lái),通過(guò)統(tǒng)計(jì)分析就可以得到用戶(hù)實(shí)際的操作習(xí)慣[9]。通過(guò)這些數(shù)據(jù)構(gòu)造軟件的馬爾科夫鏈模型,最終生成的測(cè)試用例就能夠符合可靠性測(cè)試的要求。
編寫(xiě)自動(dòng)記錄模塊前提是必須要知道Android系統(tǒng)的所有原子操作,只有了解了這些原子操作,才能根據(jù)用戶(hù)的操作記錄相應(yīng)的內(nèi)容。通過(guò)對(duì)Android系統(tǒng)的研究,可以得到Android系統(tǒng)的原子操作如表1所示。
表1 Android系統(tǒng)原子操作及解釋
續(xù)表1
然后對(duì)用戶(hù)的操作進(jìn)行監(jiān)聽(tīng)就可以得到用戶(hù)的操作習(xí)慣數(shù)據(jù)。具體方法和實(shí)現(xiàn)將在第3節(jié)介紹。
2.2狀態(tài)間轉(zhuǎn)移概率設(shè)置算法設(shè)計(jì)
為保證生成的測(cè)試用例有針對(duì)性,本文提出的做法是根據(jù)用戶(hù)的操作習(xí)慣來(lái)設(shè)置軟件的馬爾科夫鏈模型的狀態(tài)間轉(zhuǎn)移概率,這種做法不僅符合可靠性測(cè)試的特點(diǎn),而且能夠保證可靠性測(cè)試的充分性[10]。由馬爾科夫鏈特點(diǎn)可知,設(shè)計(jì)的算法不僅要滿(mǎn)足能夠?qū)λ械臓顟B(tài)間轉(zhuǎn)移概率進(jìn)行配置,還要能夠檢測(cè)出同一狀態(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);
}
//對(duì)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,則說(shuō)明配置有錯(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,則說(shuō)明配置有錯(cuò),提示用戶(hù)重新輸入即可。
2.3測(cè)試用例生成算法設(shè)計(jì)
測(cè)試用例生成算法必須要能根據(jù)軟件的馬爾科夫鏈模型自動(dòng)識(shí)別出測(cè)試路徑,并根據(jù)路徑的節(jié)點(diǎn)信息生成對(duì)應(yīng)的測(cè)試用例。本文設(shè)計(jì)的測(cè)試用例生成算法如算法2。
算法2測(cè)試用例生成算法。
//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{
//如果沒(méi)有子節(jié)點(diǎn),直接輸出節(jié)點(diǎn)信息即為
//此路徑對(duì)應(yīng)的測(cè)試用例
print node.getInfo();
}
}
3Android軟件和測(cè)試用例自動(dòng)生成工具的設(shè)計(jì)
根據(jù)第2節(jié)的提出的方法,本節(jié)設(shè)計(jì)出了Android文件管理器軟件和測(cè)試用例自動(dòng)生成工具,最終生成了文件管理器的測(cè)試用例集。流程圖如圖1所示。
圖1 生成測(cè)試用例流程圖
3.1Android文件管理器介紹
本文編寫(xiě)的Android文件管理器主要實(shí)現(xiàn)的是對(duì)文件的基本操作,主要界面如圖2所示。
圖2 文件管理器界面
主要功能包括瀏覽文件、新建文件、新建文件夾、復(fù)制、剪切、粘貼、重命名、刪除、查看文件屬性,由于內(nèi)容限制,在此對(duì)其實(shí)現(xiàn)過(guò)程不做具體介紹。
3.2文件管理器記錄用戶(hù)操作習(xí)慣數(shù)據(jù)模塊的實(shí)現(xiàn)
自動(dòng)記錄模塊利用Android平臺(tái)提供的SharedPreferences類(lèi)的key-value對(duì)來(lái)保存數(shù)據(jù)[11],保存用戶(hù)操作習(xí)慣數(shù)據(jù)流程如圖3所示。
圖3 記錄用戶(hù)操作模塊流程
編寫(xiě)記錄用戶(hù)操作模塊前,要了解用戶(hù)會(huì)執(zhí)行哪些操作,例如執(zhí)行新建文件功能時(shí),用戶(hù)可能會(huì)執(zhí)行如圖4“新建文件馬爾科夫鏈模型”的操作。
圖4 新建文件馬爾科夫鏈模型
只需對(duì)用戶(hù)的這些操作進(jìn)行監(jiān)聽(tīng),在用戶(hù)點(diǎn)擊觸發(fā)一個(gè)操作的時(shí)候,記錄用戶(hù)點(diǎn)擊此操作次數(shù)的變量加1,最后退出軟件時(shí),把這些記錄用戶(hù)操作次數(shù)的變量存儲(chǔ)到手機(jī)中即可。
3.3測(cè)試用例自動(dòng)生成工具的實(shí)現(xiàn)
本文設(shè)計(jì)的測(cè)試用例自動(dòng)生成工具是使用Eclipse開(kāi)發(fā)的,可以實(shí)現(xiàn)手機(jī)屏幕在PC上的實(shí)時(shí)顯示,并能通過(guò)PC直接控制手機(jī),記錄用戶(hù)操作軟件時(shí)的坐標(biāo)和操作步驟名稱(chēng)。能夠支持對(duì)任何不同分辨率、不同尺寸和不同Android系統(tǒng)版本手機(jī)的測(cè)試用例的生成。測(cè)試用例自動(dòng)生成工具操作流程圖如圖5所示。
圖5 測(cè)試用例自動(dòng)生成工具操作流程
其中,根據(jù)用戶(hù)的輸入設(shè)置狀態(tài)轉(zhuǎn)移概率用到的方法是2.2節(jié)介紹的狀態(tài)間轉(zhuǎn)移概率設(shè)置算法,遍歷軟件的馬爾科夫鏈模型生成測(cè)試用例用到的方法是2.3節(jié)介紹的測(cè)試用例生成算法。
測(cè)試用例自動(dòng)生成工具主要界面如圖6所示,通過(guò)向?qū)?chuàng)建一個(gè)Android軟件測(cè)試用例自動(dòng)生成工程。
圖6 設(shè)置工程名和測(cè)試功能點(diǎn)對(duì)話(huà)框
通過(guò)鼠標(biāo)右鍵就可以添加下一步操作,如圖7所示。
圖7 Android軟件的原子操作
這里提供了操作Android軟件所需的所有原子操作,點(diǎn)擊不同的選項(xiàng)會(huì)彈出對(duì)應(yīng)的對(duì)話(huà)框,例如圖8是點(diǎn)擊了touch原子操作所彈出的對(duì)話(huà)框。
圖8 配置Touch原子操作對(duì)話(huà)框
在這個(gè)對(duì)話(huà)框中可以直接操作手機(jī),命名操作步驟的名稱(chēng)并自動(dòng)記錄功能按鈕的坐標(biāo)。另加入了findAndTouch操作,在執(zhí)行自動(dòng)化測(cè)試時(shí),在特定位置的矩形方框內(nèi)如果發(fā)現(xiàn)指定的圖片則點(diǎn)擊它,如果發(fā)現(xiàn)不了則就說(shuō)明程序出錯(cuò)了,點(diǎn)擊findAndTouch后出現(xiàn)的對(duì)話(huà)框如圖9所示。
圖9 findAndTouch對(duì)話(huà)框
可以編輯操作步驟的名稱(chēng),自動(dòng)記錄截取的圖片及其坐標(biāo)。最終文件管理器要進(jìn)行測(cè)試的操作步驟如圖10所示。
圖10 文件管理器的功能操作
點(diǎn)擊右上角測(cè)試用例生成按鈕會(huì)彈出如圖11所示設(shè)置操作步驟轉(zhuǎn)移概率對(duì)話(huà)框。
圖11 設(shè)置操作步驟轉(zhuǎn)移概率
可以根據(jù)用戶(hù)的操作習(xí)慣配置操作步驟間的轉(zhuǎn)移概率,并且會(huì)自動(dòng)的檢測(cè)同一操作出邊狀態(tài)的概率之和是否為1。點(diǎn)擊確定按鈕,會(huì)自動(dòng)根據(jù)配置的概率和測(cè)試用例總個(gè)數(shù)生成對(duì)應(yīng)個(gè)數(shù)的測(cè)試用例,如圖12所示。
圖12 測(cè)試用例生成個(gè)數(shù)對(duì)話(huà)框
生成的測(cè)試用例的信息如圖13和圖14所示,最終Android文件管理器測(cè)試用例的自動(dòng)生成工程完成。接下來(lái)就可以將生成的測(cè)試用例導(dǎo)入到自動(dòng)化測(cè)試工具中進(jìn)行可靠性測(cè)試,本文就不做介紹了。
圖13 所有測(cè)試用例的信息
圖14 新建文件夾路徑2測(cè)試用例詳細(xì)信息
4結(jié)語(yǔ)
本文介紹了收集 Android 軟件用戶(hù)操作習(xí)慣數(shù)據(jù)的方法,從馬爾科夫鏈模型出發(fā),提出了設(shè)置馬爾科夫鏈狀態(tài)間轉(zhuǎn)移概率算法和測(cè)試用例生成算法。根據(jù)所提的方法和算法編寫(xiě)了 Android 文件管理器和測(cè)試用例自動(dòng)生成工具,最終利用所開(kāi)發(fā)的工具生成了文件管理器的測(cè)試用例集,節(jié)約了測(cè)試用例生成的時(shí)間和成本,提高了可靠性測(cè)試效率。
對(duì)于其他的Android軟件,都可以通過(guò)本文介紹的方法來(lái)實(shí)現(xiàn)測(cè)試用例的自動(dòng)生成。對(duì)于用戶(hù)操作習(xí)慣數(shù)據(jù)的收集方法來(lái)說(shuō),因?yàn)橛脩?hù)對(duì)軟件的操作都是通過(guò)觸控不同的功能按鈕來(lái)實(shí)現(xiàn)的,只需要對(duì)這些動(dòng)作進(jìn)行監(jiān)聽(tīng)就可以得到用戶(hù)的操作數(shù)據(jù);對(duì)于測(cè)試用例自動(dòng)生成工具的設(shè)計(jì),因?yàn)楸疚脑O(shè)計(jì)的工具是支持Android手機(jī)的所有原子操作,所以可以對(duì)不同的Android應(yīng)用程序進(jìn)行測(cè)試用例的生成。因此本文所介紹的內(nèi)容和方法具有通用性,最終給出了Android軟件測(cè)試用例自動(dòng)生成的一個(gè)新思路。
參考文獻(xiàn)
[1] 孫海濤.軟件可靠性評(píng)價(jià)與輔助測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2010.
[2] 鄭曦.基于組件式軟件系統(tǒng)的可靠性指標(biāo)分配與預(yù)測(cè)模型[D].華南理工大學(xué),2012.
[3] 路曉波.軟件開(kāi)發(fā)過(guò)程中白盒測(cè)試方法和工具的研究及應(yīng)用[D].南京郵電大學(xué),2013.
[4] 李孟庭.軟件測(cè)試用例生成的研究與應(yīng)用[D].北京郵電大學(xué),2013.
[5] 隋磊.面向DB2應(yīng)用的自動(dòng)測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱工業(yè)大學(xué),2012.
[6] 楊治.手機(jī)軟件交互設(shè)計(jì)研究[D].哈爾濱工程大學(xué),2013.
[7] 鄭曦.基于組件式軟件系統(tǒng)的可靠性指標(biāo)分配與預(yù)測(cè)模型[D].華南理工大學(xué),2012.
[8] 尹魯燕.基于UML的軟件可靠性分析模型自動(dòng)轉(zhuǎn)換研究[D].重慶大學(xué),2012.
[9] 孫寶云.軟件測(cè)試用例自動(dòng)生成技術(shù)的應(yīng)用研究[D] .吉林大學(xué),2012.
[10] 伍小薈.面向軟件可靠性的性能測(cè)試方法研究與應(yīng)用[D].上海交通大學(xué),2012.
[11] 于濤.基于動(dòng)態(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
中圖分類(lèi)號(hào)TP311.56
文獻(xiàn)標(biāo)識(shí)碼A
DOI:10.3969/j.issn.1000-386x.2016.01.058
收稿日期:2014-05-28。江蘇高校優(yōu)勢(shì)學(xué)科建設(shè)工程資助項(xiàng)目;江蘇省2012年度企業(yè)博士集聚計(jì)劃;鎮(zhèn)江市第六批“331”計(jì)劃。李震,副教授,主研領(lǐng)域:系統(tǒng)安全性,系統(tǒng)可靠性,軟件測(cè)試。王肖,碩士生。盧超,工程師。王敏,副教授。李陽(yáng),講師。