《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Linux下SANE Driver自動化測試工具的設計與實現
Linux下SANE Driver自動化測試工具的設計與實現
來源:微型機與應用2012年第1期
翁省輝1,喻武龍2
(1.北京理工大學 珠海學院 計算機學院,廣東 珠海 519088;2.北京理工大學 珠海學院 信息
摘要: 目前Linux下沒有專門的SANE Driver測試工具。為解決此問題,以SANE標準為基礎,結合對SANE Driver測試工具的具體需求,提出了一種基于腳本技術的設計和實現方案。該方案采用一種高效的遍歷算法,降低了腳本的維護開銷,提高了測試的自動化程度。
Abstract:
Key words :

摘  要: 目前Linux下沒有專門的SANE Driver測試工具。為解決此問題,以SANE標準為基礎,結合對SANE Driver測試工具的具體需求,提出了一種基于腳本技術的設計和實現方案。該方案采用一種高效的遍歷算法,降低了腳本的維護開銷,提高了測試的自動化程度。
關鍵詞: Linux;SANE Driver;自動化測試;腳本技術

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

 實現時,每掃描一次,均創建一個新線程,下一次掃描要等上一線程結束后才開始。
2.5 產生腳本
 產生的腳本主要列出設備所支持的選項名字及其取值范圍,然后以特定的格式寫入腳本中[4]。由于結構體SANE_Option_Descriptor中包括選項的各種信息,因此結構體中的元素title可作為該選項的名字,而選項取值范圍可從結構體中的聯合體constraint得到。實現時,應允許用戶選擇保存路徑。
2.6 遍歷算法研究
 在對SANE Driver測試時,一般會選中一些選項進行全組合或部分組合進行測試。以兩個選項為例:mode值為 Color和Gray,resolution值為75和100,測試時就用Color 75、Color 100, Gray 75、 Gray 100四種組合掃描4次。xsane中的批次掃描采用了類似的方法,它將所要掃描的每種組合記錄在文本中,然后通過讀文本進行掃描。當掃描次數較多時,文本就非常冗長而且很難維護。
 測試工具中采用的腳本使用了鍵值對的形式:
 mode=Color,Gray,Binary
 resolution=75,100,150,200,300,400,500,600,1 200,2 400,4 800,9 600,19 200
 對于上面的腳本,通常會采用直接循環法:用下面一個結構體:
struct option {
        char names[15];
        char values[10][20];
} options[MAXOPTIONSNUMBER];
來存儲每一種組合,用一個數組size保存各個選項值的個數。比如上例中,第一個選項mode有3個值,故size[0]=3;然后用一個數組index來存儲選項的當前值,如mode第一個值為Color,則可表示為index[0]=Color。假如只有mode和resolution兩個選項,那么只需2個for循環即可遍歷選項的取值。其代碼如下:
for(index[0]=0;index[0]<size[0];index[0]++)
  for(index[1]=0;index[1]<size[1];index[1]++)
  {
    for(int i=0;i<2;i++)
    pass_option_setting_to_dev
(options[i].names,options[i].values[indexs[i]] );
 // pass_option_setting_to_dev為傳遞參數給設備的函數
  ...
   }
 本文介紹的算法思路簡單,容易理解。針對上例中的兩個選項,采用上述的方法可以很好地解決問題。但是上述的算法中有多少個選項就有多少個for循環,而且該方法只適用于選項個數一定的情況下。因為當選項個數有變動時,都要增加或刪除相應的for循環數。而現實中的腳本其選項的個數是不定的,因此上述的算法可擴展性較差,不適合用于腳本掃描。但只要對上述算法稍作修改即可成為一種簡單高效的遍歷算法[5]。該算法的腳本仍采用鍵值對這種簡潔的腳本格式,并且可以很好地適應選項個數或者選項值個數的變化。假設變量OPT_NUM代表選項的個數,其代碼如下:
 while(1){
         for( int i=0;i<OPT_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(k<0)
       break;
}
3 測試工具對比
 XSANE與自動化測試工具對比如表1所示。

 


 本文以SANE標準為基礎,針對xsane存在的不足,結合測試需求,實現了SANE Driver自動化測試工具。實際應用結果表明,與原有的測試工具相比,大大提高了測試效率,極大地減少了測試人員的工作量。
參考文獻
[1] SANE home page[DB/OL].http://www.sane-project.org, 2001.
[2] 張安清.基于SANE標準的光柵掃描設備應用程序的開發[J].小型微型計算機系統,2001,22(10):1216-1218.
[3] 凌永發,張云生,郭秀萍.軟件自動化測試中的腳本技術[J].云南民族學院學報(自然科學版),2002,11(1):544-548.
[4] 蔣云,趙佳寶.自動化測試腳本自動生成技術的研究[J].計算機技術與發展,2007,17(7):4-7.
[5] 《編程之美》小組.編程之美:微軟技術面試心得[M].北京:電子工業出版社,2008.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产一区二区三区黄| 久久精品国产欧美亚洲人人爽| 久久久久国产精品午夜一区| 亚洲欧洲日韩综合二区| 一区二区三区在线观看欧美| 亚洲女人天堂av| 久久福利影视| 亚洲欧美日韩电影| 欧美精品在线观看播放| 国产精品国产三级国产专播精品人| 久久久www免费人成黑人精品| 久久裸体视频| 亚洲性感激情| 亚洲级视频在线观看免费1级| 久久天天躁狠狠躁夜夜爽蜜月| 日韩视频免费大全中文字幕| 国产精品色午夜在线观看| 国产亚洲精品aa午夜观看| 99精品99久久久久久宅男| 99精品热6080yy久久| 一区二区三区av| 性欧美长视频| 亚洲高清123| 欧美精品久久一区| 亚洲欧美一区二区在线观看| 亚洲激情视频网站| 欧美亚一区二区| 影音先锋亚洲精品| 亚洲欧美精品在线| 国产精品午夜电影| 狠狠综合久久av一区二区小说| 久久久久久国产精品mv| 免费一级欧美在线大片| 免费欧美日韩国产三级电影| 一区二区日韩欧美| 亚洲国产精品久久久久秋霞影院| 亚洲精品视频在线观看免费| 尤物九九久久国产精品的分类| 亚洲色在线视频| 亚洲精品在线一区二区| 久久一区二区三区超碰国产精品| 在线天堂一区av电影| 免费视频一区二区三区在线观看| 欧美日韩亚洲不卡| 欧美岛国在线观看| 免费久久99精品国产| 国产精品久久久爽爽爽麻豆色哟哟| 久久久国产一区二区| 欧美母乳在线| aa级大片欧美| 欧美电影免费观看| 欧美高清视频免费观看| 亚洲精品国产日韩| 久久免费观看视频| 香蕉精品999视频一区二区| 欧美精品在线播放| 久久久国产一区二区| 国产精品一区二区久激情瑜伽| 欧美日韩精品一区二区天天拍小说| 国外成人在线视频网站| 欧美成人午夜激情视频| 国产精品成人观看视频免费| 亚洲激情电影在线| 国产视频综合在线| 国产精品羞羞答答xxdd| 欧美在线视频观看免费网站| 国产精品午夜久久| 欧美日韩一区不卡| 激情综合色丁香一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 永久91嫩草亚洲精品人人| 久久久精品免费视频| 欧美顶级少妇做爰| 国产日韩欧美精品一区| 国内精品一区二区三区| aa国产精品| 欧美中文在线视频| 欧美三级午夜理伦三级中视频| 欧美精品色综合| 国产午夜亚洲精品理论片色戒| 国产伦精品一区二区三区四区免费| 亚洲日本一区二区| 欧美大片免费观看在线观看网站推荐| 国内精品福利| 欧美在线三级| 国内精品久久久久久久影视麻豆| 午夜宅男久久久| 久久国产主播精品| 美腿丝袜亚洲色图| 99视频国产精品免费观看| 性欧美xxxx视频在线观看| 欧美日韩精品在线播放| 亚洲国产成人精品女人久久久| 欧美电影在线观看| 欧美 日韩 国产在线| 美女视频一区免费观看| 欧美久久久久中文字幕| 亚洲免费观看高清在线观看| 有码中文亚洲精品| 国产精品专区一| 最新69国产成人精品视频免费| 女生裸体视频一区二区三区| 久久久亚洲欧洲日产国码αv| 欧美日韩免费精品| 香蕉久久久久久久av网站| 国产精品午夜春色av| 国产女人精品视频| 欧美国产高潮xxxx1819| 欧美一区在线视频| 国产精品三级久久久久久电影| 欧美一区影院| 久久精品一区二区三区不卡牛牛| 亚洲第一精品夜夜躁人人躁| 欧美大成色www永久网站婷| 亚洲九九爱视频| 伊伊综合在线| 国内外成人在线| 韩日精品中文字幕| 亚洲破处大片| 国产婷婷色一区二区三区在线| 91久久精品日日躁夜夜躁欧美| 亚洲大片在线观看| 久久综合五月天婷婷伊人| 亚洲一区精品电影| 中日韩美女免费视频网站在线观看| 一区二区三区精品国产| 久久精品动漫| 国产精品久久久久久久久久久久久| 久久久久国产精品厨房| 国产精品观看| 欧美在线观看视频在线| 国产精品伦子伦免费视频| 欧美日韩国产一级片| 欧美不卡视频一区发布| 国产精品扒开腿做爽爽爽视频| 亚洲欧美在线另类| 好男人免费精品视频| 久久亚洲不卡| 久久亚洲二区| 欧美日韩国产美女| 亚洲精品在线电影| 国产精自产拍久久久久久| 亚洲一区二区三区精品在线观看| 日韩网站免费观看| 亚洲二区视频在线| 国产在线播精品第三| 洋洋av久久久久久久一区| 亚洲欧美伊人| 一本大道久久精品懂色aⅴ| 黄色亚洲大片免费在线观看| 久久久久国产精品一区| 欧美日韩1区| 国产精品久久二区| 性欧美xxxx大乳国产app| 伊人精品视频| 国产情人综合久久777777| 亚洲成人影音| 亚洲精品视频中文字幕| 国产精品99一区二区| 欧美体内she精视频在线观看| 欧美性一区二区| 亚洲综合久久久久| 欧美亚洲尤物久久| 在线精品国精品国产尤物884a| 欧美精选在线| 国产色视频一区| 亚洲国产精品精华液2区45| 欧美一级成年大片在线观看| 欧美日韩综合在线| 亚洲视频电影图片偷拍一区| 欧美精品一区二区三区很污很色的| 美玉足脚交一区二区三区图片| 亚洲精品美女| 亚洲电影免费观看高清完整版| 久久久av毛片精品| 蜜臀久久99精品久久久久久9| 欧美在线观看网站| 黄色一区二区三区四区| 一区在线免费| 欧美日本成人| 欧美黄网免费在线观看| 亚洲精选大片| 亚洲免费av片| 欧美午夜一区| 久久免费一区| 日韩午夜电影| 亚洲一区视频| 欧美激情免费在线| 久久国产精品亚洲77777| 国内精品久久久久久久97牛牛| 一区二区三区在线免费播放| 国产精品美女久久久久av超清| 国产婷婷色综合av蜜臀av| 国产综合视频在线观看| 欧美啪啪一区| 亚洲在线成人精品| 亚洲欧美中文在线视频| 欧美视频中文字幕在线| 欧美日韩在线三级| 亚洲精品人人| 一区二区三区视频在线看| 欧美国产亚洲视频| 一区二区欧美在线观看| 亚洲欧美日韩一区二区| 一区二区激情视频| 激情五月综合色婷婷一区二区| 久久久在线视频| 欧美系列电影免费观看| 欧美日韩一区二区高清| 极品尤物久久久av免费看| 国产一区二区丝袜高跟鞋图片| 久久嫩草精品久久久久| 黄网动漫久久久| 国产日产欧产精品推荐色| 欧美在线高清视频| 国产日韩精品电影| 中日韩午夜理伦电影免费| 欧美成人中文字幕在线| 国产一二精品视频| 亚洲成人自拍视频| 久久综合成人精品亚洲另类欧美| 99这里有精品| 娇妻被交换粗又大又硬视频欧美| 中日韩男男gay无套| 欧美国产视频在线观看| 香蕉久久a毛片| 欧美精品一区二区三区很污很色的| 国精品一区二区三区| 欧美日韩精品在线观看| 精品成人一区二区三区四区| 久久亚洲综合网| 在线看不卡av| 欧美黑人多人双交| 久久久久九九视频| 一区二区日韩| 欧美人交a欧美精品| 欧美在线三级| 亚洲永久免费| 欧美精品综合| 国产视频一区在线观看| 久久国产免费看| 亚洲国产精品一区二区www| 日韩午夜高潮| 欧美在现视频| 国产精品久久久久久久9999| 香蕉久久夜色| 国产精品久久午夜夜伦鲁鲁| 久久综合影视| 韩国一区二区在线观看| 久久频这里精品99香蕉| 欧美91精品| 美国十次成人| 亚洲欧美精品suv| 欧美日韩国产综合一区二区| 欧美超级免费视 在线| 久久综合色播五月| 欧美三级视频| 亚洲一区二区三区在线播放| 一区二区免费看| 久久精品一区二区三区四区| 亚洲特级毛片| 亚洲欧美色婷婷| 伊人久久大香线| 国产精品久久久91| 国产日韩一区二区三区在线播放| 久久久999| 国产精品一香蕉国产线看观看| 欧美国产在线电影| 欧美日韩国产欧| 裸体丰满少妇做受久久99精品| 欧美一区二区三区成人| 亚洲精品社区| 欧美日韩一区在线观看视频| 亚洲国产综合在线看不卡| 国产精品无码专区在线观看| 中文av一区特黄| 久久免费高清视频| 欧美一区二区在线观看| 亚洲午夜精品| 黄色亚洲大片免费在线观看| 欧美视频亚洲视频| 欧美三级午夜理伦三级中视频| 欧美精品日韩| 亚洲乱码国产乱码精品精| 在线一区免费观看| 亚洲国产美女精品久久久久∴| 亚洲精品永久免费精品| 国产精品ⅴa在线观看h| 午夜精品久久99蜜桃的功能介绍| 亚洲一区二区视频在线观看| 欧美日韩在线观看视频| 午夜影院日韩| 亚洲激情一区| 老司机凹凸av亚洲导航| 欧美日韩国产123| 亚洲精品乱码久久久久久蜜桃91| 欧美一区二区三区四区在线观看地址| 黄色精品一区二区| 在线视频欧美精品| 亚洲夜晚福利在线观看| 亚洲福利视频一区| 亚洲美女福利视频网站| 久久成人免费日本黄色| 国产亚洲欧洲一区高清在线观看| 欧美顶级少妇做爰| 国产精品入口| 中文在线一区| 亚洲欧美自拍偷拍| 亚洲欧洲日本一区二区三区| 亚洲欧洲一区二区在线播放| 国产嫩草一区二区三区在线观看| 久久精品人人做人人综合| 国产精品每日更新| 国产一区二区三区四区三区四| 久久精品色图| 国产欧美日韩亚洲| 亚洲激情欧美激情| 亚洲图片你懂的| 欧美日韩一二三四五区| 国产精品网站在线观看| 亚洲一区二区精品视频| 一本一本大道香蕉久在线精品| 欧美激情视频给我| 欧美激情一二三区| 久久精品在线视频| 国产精品香蕉在线观看| 极品尤物av久久免费看| 久久久久久9|