国产精品成人网站,日韩视频二区,亚洲成人手机电影,怡红院国产

產(chǎn)品推薦:水表|流量計(jì)|壓力變送器|熱電偶|液位計(jì)|冷熱沖擊試驗(yàn)箱|水質(zhì)分析|光譜儀|試驗(yàn)機(jī)|試驗(yàn)箱


儀表網(wǎng)>技術(shù)中心>應(yīng)用設(shè)計(jì)>正文

歡迎聯(lián)系我

有什么可以幫您? 在線咨詢

自動(dòng)化測(cè)試工具的設(shè)計(jì)與實(shí)現(xiàn)

   2012年03月28日 17:34  
  SANE(ScannerAccessNowEasy)是一個(gè)應(yīng)用程序接口API(ApplicationProgrammingInterface)[1],提供了對(duì)光柵圖像掃描硬件的標(biāo)準(zhǔn)訪問[2]。Linux對(duì)掃描儀的支持就是通過SANE實(shí)現(xiàn)的。SANE標(biāo)準(zhǔn)中將實(shí)現(xiàn)SANE接口的驅(qū)動(dòng)程序稱為SANEDriver或者SANE后端程序;將調(diào)用SANE接口的應(yīng)用程序稱為SANE前端程序;將對(duì)掃描設(shè)備的各種控制抽象為SANE選項(xiàng),resolution就是其中一個(gè)SANE選項(xiàng)。
  
  對(duì)掃描儀驅(qū)動(dòng)程序進(jìn)行測(cè)試主要包括功能測(cè)試和性能測(cè)試。功能測(cè)試主要指掃描質(zhì)量、圖像質(zhì)量是否滿足用戶需求;性能測(cè)試主要指掃描效率,也就是掃描一幅圖像所需的時(shí)間。嚴(yán)格地說,由于SANE前端程序與SANE后端程序均遵守SANE標(biāo)準(zhǔn),任何一個(gè)SANE前端程序都可以用來測(cè)試SANE后端程序。但由于目前Linux下沒有專門的SANEDriver測(cè)試工具,通常測(cè)試人員將掃描應(yīng)用程序用于測(cè)試SANEDriver,而在Linux下常用XSANE作為測(cè)試工具。XSANE應(yīng)用程序是基于GTK的sane圖像處理軟件,它可通過掃描儀和照相機(jī)等設(shè)備獲得圖像。
  
  XSANE功能比較強(qiáng)大,但是由于其主要面向用戶應(yīng)用,作為測(cè)試工具則存在一些不足:(1)功能測(cè)試時(shí)效率低下,如果所要測(cè)試的選項(xiàng)數(shù)目比較多時(shí),測(cè)試的工作量很大而且容易出錯(cuò),而其所支持的批次掃描生成腳本很復(fù)雜,而且腳本很難維護(hù);(2)性能測(cè)試時(shí)不能自動(dòng)計(jì)算掃描時(shí)間,手工計(jì)算工作量大且誤差也較大。此外,還存在一些其他問題:如不能顯示選項(xiàng)的詳細(xì)信息、不能動(dòng)態(tài)更新可用的掃描設(shè)備以及不能選擇其他可用設(shè)備等。
  
  針對(duì)以上問題,本文通過引用腳本技術(shù),采用一種的遍歷算法工具,有效地解決了上述問題。該工具能夠適用所有采用SANE標(biāo)準(zhǔn)的驅(qū)動(dòng)程序,且能夠自動(dòng)遍歷所有的選項(xiàng)及其取值。用戶只需根據(jù)測(cè)試需要寫好測(cè)試腳本,該工具就可以根據(jù)腳本進(jìn)行多次掃描。因此可以較大程度地減少SANEDriver測(cè)試所需的人員及其時(shí)間。
  
  1、整體架構(gòu)設(shè)計(jì)
  
  針對(duì)XSANE用作測(cè)試工具存在的問題以及測(cè)試需求,通過如下設(shè)計(jì)能得到有效解決。將工具分成5個(gè)功能模塊:更新設(shè)備、列出選項(xiàng)、手動(dòng)掃描、腳本掃描以及產(chǎn)生腳本。
  
 ?。?)更新設(shè)備:支持用戶隨時(shí)更新設(shè)備列表。
  
  (2)列出選項(xiàng):可以列出SANE后端所定義的所有選項(xiàng),且只顯示當(dāng)前設(shè)備所支持選項(xiàng)的相關(guān)信息,還可以根據(jù)用戶的選擇相應(yīng)地顯示SANE后端的版本號(hào)及一些設(shè)置沖突的警告信息。
  
 ?。?)手動(dòng)掃描:類似一般的前端程序,主要實(shí)現(xiàn)單次掃描,只顯示當(dāng)前設(shè)備所支持的選項(xiàng)及其取值。
  
 ?。?)腳本掃描:是自動(dòng)化測(cè)試的關(guān)鍵。能夠讀入一個(gè)腳本文件,然后對(duì)腳本中各選項(xiàng)的組合值進(jìn)行遍歷,每取到一個(gè)組合,便掃描一次。
  
 ?。?)產(chǎn)生腳本:可以將當(dāng)前設(shè)備所支持的選項(xiàng)及其取值范圍記錄在腳本文檔中。該腳本相當(dāng)于一個(gè)腳本模板,以后的腳本可以只在此基礎(chǔ)上稍作修改即可。
  
  2、工具的實(shí)現(xiàn)
  
  基于以上架構(gòu)設(shè)計(jì)在Linux系統(tǒng)下用GTK+和C語言來實(shí)現(xiàn)整個(gè)工具。
  
  2.1更新設(shè)備
  
  在用戶掃描過程中,可能會(huì)有新的掃描設(shè)備打開,也可能現(xiàn)有的掃描設(shè)備關(guān)閉,因此,有必要讓用戶隨時(shí)知道可用的設(shè)備列表。其設(shè)計(jì)思路是:在選擇更新設(shè)備后,調(diào)用sane_get_devices來獲得可用的設(shè)備列表。實(shí)現(xiàn)時(shí),為了允許用戶在更新設(shè)備時(shí)進(jìn)行其他操作,可將更新的操作放至一個(gè)新的線程中去實(shí)現(xiàn)。當(dāng)可用設(shè)備為0時(shí),應(yīng)給用戶相應(yīng)的提示。
  
  2.2列出選項(xiàng)
  
  根據(jù)測(cè)試需要,這里要求給出SANE后端的版本號(hào),可用選項(xiàng)的詳細(xì)信息以及警告信息。關(guān)于版本號(hào),SANE標(biāo)準(zhǔn)中給出了5個(gè)宏,該工具主要直接調(diào)用后面的3個(gè)宏:即SANE_VERSION_MAJOR、SANE_VERSION_MINOR、SANE_VERSION_BUILD,分別獲得SANE后端zui大、zui小以及編譯版本號(hào)。
  
  對(duì)于選項(xiàng)的詳細(xì)信息,SANE標(biāo)準(zhǔn)中有一個(gè)專門用來描述的結(jié)構(gòu)即SANE_Option_Descriptor。調(diào)用SANE標(biāo)準(zhǔn)中的sane_get_option_descriptor后便會(huì)返回這個(gè)結(jié)構(gòu)體,記錄這個(gè)選項(xiàng)的詳細(xì)信息。
  
  警告信息主要通過分析結(jié)構(gòu)體SANE_Option_Descriptor中的cap值。由SANE標(biāo)準(zhǔn)可知,當(dāng)SANE_CAP_SOFT_SELECT被設(shè)置時(shí),SANE_CAP_SOFT_DETECT也會(huì)被設(shè)置,故cap值不能為5;SANE_CAP_SOFT_SELECT和SANE_CAP_HARD_SELECT不能同時(shí)被設(shè)置,故cap值不能為3。當(dāng)某一個(gè)選項(xiàng)的cap值不為3或5時(shí),可認(rèn)為這個(gè)選項(xiàng)設(shè)置是正確的。
  
  實(shí)現(xiàn)時(shí),可以將版本信息、選項(xiàng)信息及警告信息分別寫至三個(gè)文件中,然后根據(jù)用戶的操作讀入相應(yīng)的文件。
  
  2.3手動(dòng)掃描
  
  一次完整的掃描過程包括兩個(gè)部分:配置設(shè)備和獲取圖像。配置設(shè)備主要通過sane_control_option來完成。sane_control_option可以用于獲取選項(xiàng)的當(dāng)前參數(shù),也可以用于設(shè)置選項(xiàng)的參數(shù)。設(shè)置完參數(shù)后,先調(diào)用sane_start,然后一直調(diào)用sane_read讀圖像數(shù)據(jù)直至sane_read返回狀態(tài)為SANE_STATUS_EOF,zui后不管讀圖像是否成功均要調(diào)用sane_cancel。
  
  實(shí)現(xiàn)時(shí),當(dāng)用戶選擇手動(dòng)掃描后會(huì)創(chuàng)建一個(gè)新的線程去執(zhí)行,配置設(shè)備和獲取圖像均包含在新的線程中。每進(jìn)行一次用戶掃描,都會(huì)新建一個(gè)線程。同時(shí)為了方便測(cè)試人員,工具在手動(dòng)掃描和后面的腳本掃描中均會(huì)記錄一些重要信息:如圖像的原始大小及實(shí)際獲得的大小、sane_start和sane_read的時(shí)間、一些操作的返回信息及圖片保存目錄和名字等。
  
  2.4腳本掃描
  
  腳本掃描與手動(dòng)掃描是相互獨(dú)立的。用戶可以只選擇手動(dòng)掃描,也可以只選擇腳本掃描。不過,它們之間有著緊密的,其掃描流程都是一樣的。手動(dòng)掃描與腳本掃描的結(jié)構(gòu)體系如圖1所示。腳本掃描可以看作是多次的手動(dòng)掃描,所不同的是,手動(dòng)掃描是從界面獲得選項(xiàng)值,而腳本掃描是從文本獲得選項(xiàng)值。
  
  腳本掃描的流程是:首先檢查腳本的語法正確性,然后分析腳本,遍歷各個(gè)選項(xiàng)值的組合,每得到一個(gè)組合,便掃描一次,當(dāng)掃描完成時(shí),再取下一組合掃描直至遍歷完所有的組合。
  
  實(shí)現(xiàn)時(shí),每掃描一次,均創(chuàng)建一個(gè)新線程,下一次掃描要等上一線程結(jié)束后才開始。
  
  2.5產(chǎn)生腳本
  
  產(chǎn)生的腳本主要列出設(shè)備所支持的選項(xiàng)名字及其取值范圍,然后以特定的格式寫入腳本中[4]。由于結(jié)構(gòu)體SANE_Option_Descriptor中包括選項(xiàng)的各種信息,因此結(jié)構(gòu)體中的元素title可作為該選項(xiàng)的名字,而選項(xiàng)取值范圍可從結(jié)構(gòu)體中的聯(lián)合體constraint得到。實(shí)現(xiàn)時(shí),應(yīng)允許用戶選擇保存路徑。
  
  2.6遍歷算法研究
  
  在對(duì)SANEDriver測(cè)試時(shí),一般會(huì)選中一些選項(xiàng)進(jìn)行全組合或部分組合進(jìn)行測(cè)試。以兩個(gè)選項(xiàng)為例:mode值為Color和Gray,resolution值為75和100,測(cè)試時(shí)就用Color75、Color100,Gray75、Gray100四種組合掃描4次。xsane中的批次掃描采用了類似的方法,它將所要掃描的每種組合記錄在文本中,然后通過讀文本進(jìn)行掃描。當(dāng)掃描次數(shù)較多時(shí),文本就非常冗長(zhǎng)而且很難維護(hù)。
  
  測(cè)試工具中采用的腳本使用了鍵值對(duì)的形式:
  
  mode=Color,Gray,Binary
  
  resolution=75,100,150,200,300,400,500,600,1200,2400,4800,9600,19200
  
  對(duì)于上面的腳本,通常會(huì)采用直接循環(huán)法:用下面一個(gè)結(jié)構(gòu)體:
  
  structoption{
  
  charnames[15];
  
  charvalues[10][20];
  
  }options[MAXOPTIONSNUMBER];
  
  來存儲(chǔ)每一種組合,用一個(gè)數(shù)組size保存各個(gè)選項(xiàng)值的個(gè)數(shù)。比如上例中,*個(gè)選項(xiàng)mode有3個(gè)值,故size[0]=3;然后用一個(gè)數(shù)組index來存儲(chǔ)選項(xiàng)的當(dāng)前值,如mode*個(gè)值為Color,則可表示為index[0]=Color。假如只有mode和resolution兩個(gè)選項(xiàng),那么只需2個(gè)for循環(huán)即可遍歷選項(xiàng)的取值。其代碼如下:
  
  for(index[0]=0;index[0]<size[0];index[0]++)
  
  for(index[1]=0;index[1]<size[1];index[1]++)
  
  {
  
  for(inti=0;i<2;i++)
  
  pass_option_setting_to_dev
  
 ?。╫ptions[i].names,options[i].values[indexs[i]]);
  
  //pass_option_setting_to_dev為傳遞參數(shù)給設(shè)備的函數(shù)
  
  ...
  
  }
  
  本文介紹的算法思路簡(jiǎn)單,容易理解。針對(duì)上例中的兩個(gè)選項(xiàng),采用上述的方法可以很好地解決問題。但是上述的算法中有多少個(gè)選項(xiàng)就有多少個(gè)for循環(huán),而且該方法只適用于選項(xiàng)個(gè)數(shù)一定的情況下。因?yàn)楫?dāng)選項(xiàng)個(gè)數(shù)有變動(dòng)時(shí),都要增加或刪除相應(yīng)的for循環(huán)數(shù)。而現(xiàn)實(shí)中的腳本其選項(xiàng)的個(gè)數(shù)是不定的,因此上述的算法可擴(kuò)展性較差,不適合用于腳本掃描。但只要對(duì)上述算法稍作修改即可成為一種簡(jiǎn)單的遍歷算法[5]。該算法的腳本仍采用鍵值對(duì)這種簡(jiǎn)潔的腳本格式,并且可以很好地適應(yīng)選項(xiàng)個(gè)數(shù)或者選項(xiàng)值個(gè)數(shù)的變化。假設(shè)變量OPT_NUM代表選項(xiàng)的個(gè)數(shù),其代碼如下:
  
  while(1){
  
  for(inti=0;i<OPT_NUM;i++){
  
  pass_option_setting_to_dev
  
 ?。╫ptions[i].names,options[i].values[indexs[i]]);
  
  ...
  
  }
  
  intk=OPT_NUM-1;
  
  while(1){
  
  if(index[k]<size[k]-1){
  
  index[k]++;break;
  
  }
  
  else{
  
  index[k]=0;k--;
  
  }
  
  }
  
  if(k<0)
  
  break;
  
  }
  
  3、測(cè)試工具對(duì)比
    
  本文以SANE標(biāo)準(zhǔn)為基礎(chǔ),針對(duì)xsane存在的不足,結(jié)合測(cè)試需求,實(shí)現(xiàn)了SANEDriver自動(dòng)化測(cè)試工具。實(shí)際應(yīng)用結(jié)果表明,與原有的測(cè)試工具相比,大大提高了測(cè)試效率,極大地減少了測(cè)試人員的工作量。
  

免責(zé)聲明

  • 凡本網(wǎng)注明“來源:儀表網(wǎng)”的所有作品,均為浙江興旺寶明通網(wǎng)絡(luò)有限公司-儀表網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,未經(jīng)本網(wǎng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明“來源:儀表網(wǎng)”。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
  • 本網(wǎng)轉(zhuǎn)載并注明自其它來源(非儀表網(wǎng))的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或和對(duì)其真實(shí)性負(fù)責(zé),不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品第一來源,并自負(fù)版權(quán)等法律責(zé)任。
  • 如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
聯(lián)系我們

客服熱線: 15267989561

加盟熱線: 15267989561

媒體合作: 0571-87759945

投訴熱線: 0571-87759942

關(guān)注我們
  • 下載儀表站APP

  • Ybzhan手機(jī)版

  • Ybzhan公眾號(hào)

  • Ybzhan小程序

企業(yè)未開通此功能
詳詢客服 : 0571-87759942