<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > Linux下SANE Driver自動(dòng)化測試工具的設計與實(shí)現

Linux下SANE Driver自動(dòng)化測試工具的設計與實(shí)現

作者: 時(shí)間:2012-03-27 來(lái)源:網(wǎng)絡(luò ) 收藏

(Scanner Access Now Easy)是一個(gè)應用程序接口A(yíng)PI(Application Programming Interface)[1],提供了對光柵圖像掃描硬件的標準訪(fǎng)問(wèn)[2]。對掃描儀的支持就是通過(guò)實(shí)現的。標準中將實(shí)現SANE接口的驅動(dòng)程序稱(chēng)為SANE 或者SANE后端程序;將調用SANE接口的應用程序稱(chēng)為SANE前端程序;將對掃描設備的各種控制抽象為SANE選項,resolution就是其中一個(gè)SANE選項。
 對掃描儀驅動(dòng)程序進(jìn)行測試主要包括功能測試和性能測試。功能測試主要指掃描質(zhì)量、圖像質(zhì)量是否滿(mǎn)足用戶(hù)需求;性能測試主要指掃描效率,也就是掃描一幅圖像所需的時(shí)間。嚴格地說(shuō),由于SANE前端程序與SANE后端程序均遵守SANE標準,任何一個(gè)SANE前端程序都可以用來(lái)測試SANE后端程序。但由于目前下沒(méi)有專(zhuān)門(mén)的SANE 測試工具,通常測試人員將掃描應用程序用于測試SANE ,而在下常用XSANE作為測試工具。XSANE應用程序是基于GTK的sane圖像處理軟件,它可通過(guò)掃描儀和照相機等設備獲得圖像。
 XSANE功能比較強大,但是由于其主要面向用戶(hù)應用,作為測試工具則存在一些不足:(1)功能測試時(shí)效率低下,如果所要測試的選項數目比較多時(shí),測試的工作量很大而且容易出錯,而其所支持的批次掃描生成腳本很復雜,而且腳本很難維護;(2)性能測試時(shí)不能自動(dòng)計算掃描時(shí)間,手工計算工作量大且誤差也較大。此外,還存在一些其他問(wèn)題:如不能顯示選項的詳細信息、不能動(dòng)態(tài)更新可用的掃描設備以及不能選擇其他可用設備等。
 針對以上問(wèn)題,本文通過(guò)引用腳本技術(shù)[3],采用一種高效的遍歷算法工具,有效地解決了上述問(wèn)題。該工具能夠適用所有采用SANE標準的驅動(dòng)程序,且能夠自動(dòng)遍歷所有的選項及其取值。用戶(hù)只需根據測試需要寫(xiě)好測試腳本,該工具就可以根據腳本進(jìn)行多次掃描。因此可以較大程度地減少SANE Driver測試所需的人員及其時(shí)間。
1 整體架構設計
 針對XSANE用作測試工具存在的問(wèn)題以及測試需求,通過(guò)如下設計能得到有效解決。將工具分成5個(gè)功能模塊:更新設備、列出選項、手動(dòng)掃描、腳本掃描以及產(chǎn)生腳本。
?。?)更新設備:支持用戶(hù)隨時(shí)更新設備列表。
?。?)列出選項:可以列出SANE后端所定義的所有選項,且只顯示當前設備所支持選項的相關(guān)信息,還可以根據用戶(hù)的選擇相應地顯示SANE后端的版本號及一些設置沖突的警告信息。
?。?)手動(dòng)掃描:類(lèi)似一般的前端程序,主要實(shí)現單次掃描,只顯示當前設備所支持的選項及其取值。
?。?)腳本掃描:是測試的關(guān)鍵。能夠讀入一個(gè)腳本文件,然后對腳本中各選項的組合值進(jìn)行遍歷,每取到一個(gè)組合,便掃描一次。
?。?)產(chǎn)生腳本:可以將當前設備所支持的選項及其取值范圍記錄在腳本文檔中。該腳本相當于一個(gè)腳本模板,以后的腳本可以只在此基礎上稍作修改即可。
2 工具的實(shí)現
 基于以上架構設計在Linux系統下用GTK+和C語(yǔ)言來(lái)實(shí)現整個(gè)工具。
2.1 更新設備
 在用戶(hù)掃描過(guò)程中,可能會(huì )有新的掃描設備打開(kāi),也可能現有的掃描設備關(guān)閉,因此,有必要讓用戶(hù)隨時(shí)知道可用的設備列表。其設計思路是:在選擇更新設備后,調用sane_get_devices來(lái)獲得可用的設備列表。實(shí)現時(shí),為了允許用戶(hù)在更新設備時(shí)進(jìn)行其他操作,可將更新的操作放至一個(gè)新的線(xiàn)程中去實(shí)現。當可用設備為0時(shí),應給用戶(hù)相應的提示。
2.2 列出選項
 根據測試需要,這里要求給出SANE后端的版本號,可用選項的詳細信息以及警告信息。關(guān)于版本號,SANE標準中給出了5個(gè)宏,該工具主要直接調用后面的3個(gè)宏:即SANE_VERSION_MAJOR、SANE_VERSION_MINOR、SANE_VERSION_BUILD,分別獲得SANE后端最大、最小以及編譯版本號。
對于選項的詳細信息,SANE標準中有一個(gè)專(zhuān)門(mén)用來(lái)描述的結構即SANE_Option_ Descriptor。調用SANE標準中的sane_get_option_descriptor后便會(huì )返回這個(gè)結構體,記錄這個(gè)選項的詳細信息。
 警告信息主要通過(guò)分析結構體SANE_Option_ Descriptor中的cap值。由SANE標準可知,當SANE_CAP_ SOFT_SELECT被設置時(shí),SANE_CAP_SOFT_DETECT也會(huì )被設置,故cap值不能為5;SANE_CAP_SOFT_SELECT和SANE_CAP_HARD_SELECT不能同時(shí)被設置,故cap值不能為3。當某一個(gè)選項的cap值不為3或5時(shí),可認為這個(gè)選項設置是正確的。
 實(shí)現時(shí),可以將版本信息、選項信息及警告信息分別寫(xiě)至三個(gè)文件中,然后根據用戶(hù)的操作讀入相應的文件。
2.3 手動(dòng)掃描
 一次完整的掃描過(guò)程包括兩個(gè)部分:配置設備和獲取圖像。配置設備主要通過(guò)sane_control_option來(lái)完成。sane_control_option可以用于獲取選項的當前參數,也可以用于設置選項的參數。設置完參數后,先調用sane_start,然后一直調用sane_read讀圖像數據直至sane_read返回狀態(tài)為SANE_STATUS_EOF,最后不管讀圖像是否成功均要調用sane_cancel。
 實(shí)現時(shí),當用戶(hù)選擇手動(dòng)掃描后會(huì )創(chuàng )建一個(gè)新的線(xiàn)程去執行,配置設備和獲取圖像均包含在新的線(xiàn)程中。每進(jìn)行一次用戶(hù)掃描,都會(huì )新建一個(gè)線(xiàn)程。同時(shí)為了方便測試人員,工具在手動(dòng)掃描和后面的腳本掃描中均會(huì )記錄一些重要信息:如圖像的原始大小及實(shí)際獲得的大小、 sane_start和sane_read的時(shí)間、一些操作的返回信息及圖片保存目錄和名字等。
2.4 腳本掃描
 腳本掃描與手動(dòng)掃描是相互獨立的。用戶(hù)可以只選擇手動(dòng)掃描,也可以只選擇腳本掃描。不過(guò),它們之間有著(zhù)緊密的聯(lián)系,其掃描流程都是一樣的。手動(dòng)掃描與腳本掃描的結構體系如圖1所示。腳本掃描可以看作是多次的手動(dòng)掃描,所不同的是,手動(dòng)掃描是從界面獲得選項值,而腳本掃描是從文本獲得選項值。
腳本掃描的流程是:首先檢查腳本的語(yǔ)法正確性,然后分析腳本,遍歷各個(gè)選項值的組合,每得到一個(gè)組合,便掃描一次,當掃描完成時(shí),再取下一組合掃描直至遍歷完所有的組合。

本文引用地址:http://dyxdggzs.com/article/194216.htm

 實(shí)現時(shí),每掃描一次,均創(chuàng )建一個(gè)新線(xiàn)程,下一次掃描要等上一線(xiàn)程結束后才開(kāi)始。
2.5 產(chǎn)生腳本
 產(chǎn)生的腳本主要列出設備所支持的選項名字及其取值范圍,然后以特定的格式寫(xiě)入腳本中[4]。由于結構體SANE_Option_Descriptor中包括選項的各種信息,因此結構體中的元素title可作為該選項的名字,而選項取值范圍可從結構體中的聯(lián)合體constraint得到。實(shí)現時(shí),應允許用戶(hù)選擇保存路徑。
2.6 遍歷算法研究
 在對SANE Driver測試時(shí),一般會(huì )選中一些選項進(jìn)行全組合或部分組合進(jìn)行測試。以?xún)蓚€(gè)選項為例:mode值為 Color和Gray,resolution值為75和100,測試時(shí)就用Color 75、Color 100, Gray 75、 Gray 100四種組合掃描4次。xsane中的批次掃描采用了類(lèi)似的方法,它將所要掃描的每種組合記錄在文本中,然后通過(guò)讀文本進(jìn)行掃描。當掃描次數較多時(shí),文本就非常冗長(cháng)而且很難維護。
 測試工具中采用的腳本使用了鍵值對的形式:
 mode=Color,Gray,Binary
 resolution=75,100,150,200,300,400,500,600,1 200,2 400,4 800,9 600,19 200
 對于上面的腳本,通常會(huì )采用直接循環(huán)法:用下面一個(gè)結構體:
struct option {
char names[15];
char values[10][20];
} options[MAXOPTIONSNUMBER];
來(lái)存儲每一種組合,用一個(gè)數組size保存各個(gè)選項值的個(gè)數。比如上例中,第一個(gè)選項mode有3個(gè)值,故size[0]=3;然后用一個(gè)數組index來(lái)存儲選項的當前值,如mode第一個(gè)值為Color,則可表示為index[0]=Color。假如只有mode和resolution兩個(gè)選項,那么只需2個(gè)for循環(huán)即可遍歷選項的取值。其代碼如下:
for(index[0]=0;index[0]size[0];index[0]++)
for(index[1]=0;index[1]size[1];index[1]++)
{
for(int i=0;i2;i++)
pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
// pass_option_setting_to_dev為傳遞參數給設備的函數
...
}
 本文介紹的算法思路簡(jiǎn)單,容易理解。針對上例中的兩個(gè)選項,采用上述的方法可以很好地解決問(wèn)題。但是上述的算法中有多少個(gè)選項就有多少個(gè)for循環(huán),而且該方法只適用于選項個(gè)數一定的情況下。因為當選項個(gè)數有變動(dòng)時(shí),都要增加或刪除相應的for循環(huán)數。而現實(shí)中的腳本其選項的個(gè)數是不定的,因此上述的算法可擴展性較差,不適合用于腳本掃描。但只要對上述算法稍作修改即可成為一種簡(jiǎn)單高效的遍歷算法[5]。該算法的腳本仍采用鍵值對這種簡(jiǎn)潔的腳本格式,并且可以很好地適應選項個(gè)數或者選項值個(gè)數的變化。假設變量OPT_NUM代表選項的個(gè)數,其代碼如下:
while(1){
for( int i=0;iOPT_NUM;i++){
  pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
...
}
int k= OPT_NUM-1;
while(1){
if(index[k]size[k]-1) {
index[k]++;break;
}
else{
index[k]=0; k--;
}
}
if(k0)
break;
}
3 測試工具對比
 XSANE與測試工具對比如表1所示。
 本文以SANE標準為基礎,針對xsane存在的不足,結合測試需求,實(shí)現了SANE Driver測試工具。實(shí)際應用結果表明,與原有的測試工具相比,大大提高了測試效率,極大地減少了測試人員的工作量。
參考文獻
[1] SANE home page[DB/OL].http://www.sane-project.org, 2001.
[2] 張安清.基于SANE標準的光柵掃描設備應用程序的開(kāi)發(fā)[J].小型微型計算機系統,2001,22(10):1216-1218.
[3] 凌永發(fā),張云生,郭秀萍.軟件自動(dòng)化測試中的腳本技術(shù)[J].云南民族學(xué)院學(xué)報(自然科學(xué)版),2002,11(1):544-548.
[4] 蔣云,趙佳寶.自動(dòng)化測試腳本自動(dòng)生成技術(shù)的研究[J].計算機技術(shù)與發(fā)展,2007,17(7):4-7.
[5] 《編程之美》小組.編程之美:微軟技術(shù)面試心得[M].北京:電子工業(yè)出版社,2008.

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: Driver Linux SANE 自動(dòng)化

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>