智能卡操作系統(tǒng)自動(dòng)測(cè)試中的腳本技術(shù)
文章出處:http://www.nyfzw.net 作者:周章慧,王同洋,吳俊軍,張新訪 人氣: 發(fā)表時(shí)間:2011年10月07日
0 引 言
軟件測(cè)試是軟件質(zhì)量保證的關(guān)鍵技術(shù),在軟件生命周期中占有重要的位置,它的重要性是不能期望通過先進(jìn)的開發(fā)技術(shù)來(lái)取代的。近年來(lái)隨著軟件規(guī)模的擴(kuò)大,軟件質(zhì)量要求的提高,各企業(yè)越來(lái)越希望借助于有效的自動(dòng)軟件測(cè)試來(lái)提高測(cè)試效率、縮短周期、減少資金投入和降低測(cè)試難度。腳本技術(shù)的引入是實(shí)現(xiàn)軟件測(cè)試自動(dòng)化的有效手段。測(cè)試腳本對(duì)測(cè)試用例給以形式化的描述,通過腳本代碼的可重用性可以提高測(cè)試的可重復(fù)性,大大減少測(cè)試人員的工作量,提高軟件測(cè)試的質(zhì)量和可維護(hù)性。
智能卡是帶有微處理器和存儲(chǔ)器等微型集成電路芯片的卡片,被廣泛地應(yīng)用于通信、金融、社保、稅務(wù)、安全、公共事業(yè)等領(lǐng)域。智能卡可以理解為一個(gè)微型計(jì)算機(jī),通過內(nèi)部的操作系統(tǒng)可以實(shí)現(xiàn)信息存儲(chǔ)和復(fù)雜運(yùn)算等各樣的功能。智能卡具有標(biāo)準(zhǔn)化、安全性、多樣化、價(jià)格低等特點(diǎn),相對(duì)于一般的軟件產(chǎn)品,智能卡產(chǎn)品的測(cè)試顯得特別重要 ,智能卡的測(cè)試包括卡體、芯片、操作系統(tǒng)的測(cè)試,智能卡操作系統(tǒng)是一種軟件,它由智能卡提供商提供給芯片提供商掩膜到芯片中,芯片的生產(chǎn)具有較長(zhǎng)的周期,而且必須是大規(guī)模的生產(chǎn),芯片封裝到智能卡上發(fā)布后,不可能用任何召回活動(dòng)來(lái)替換或重新發(fā)布已經(jīng)大量發(fā)行的卡,這些活動(dòng)會(huì)對(duì)發(fā)卡商和發(fā)行商的聲譽(yù)造成持久的傷害,代價(jià)無(wú)法估計(jì)。
1 相關(guān)研究
Mark Fewster 指出腳本技術(shù)其實(shí)是一種編程技術(shù),建立可維護(hù)腳本的技術(shù)類似于建立可維護(hù)程序,他提出了判斷腳本好壞的原則:易于使用和易于維護(hù),得出簡(jiǎn)單腳本容易建立但維護(hù)成本巨大,但高級(jí)結(jié)構(gòu)化腳本建立開銷大卻是易于維護(hù)的結(jié)論,指出腳本應(yīng)該遵守的幾個(gè)原則:①有注釋;②可重用;③ 結(jié)構(gòu)上易讀、易理解、易維護(hù);④ 有文檔。根據(jù)采用的技術(shù)不同,腳本可以分為:線性腳本、結(jié)構(gòu)化腳本、共享腳本、數(shù)據(jù)驅(qū)動(dòng)腳本和關(guān)鍵字驅(qū)動(dòng)腳本。
王明蘭將測(cè)試用例描述語(yǔ)言按描述方法分為6類:自然語(yǔ)言、結(jié)構(gòu)化表格、形式化方法、樹表組合符號(hào)(treetabularcorn—bined notation,TTCN)、信號(hào)描述語(yǔ)言、編程語(yǔ)言、腳本語(yǔ)言、廠家自定義語(yǔ)言。文中列出了現(xiàn)有的一些應(yīng)用較廣泛的測(cè)試工具及其使用的測(cè)試腳本。可以看出較好的商業(yè)化測(cè)試工具的測(cè)試腳本是在腳本語(yǔ)言或編程語(yǔ)言的基礎(chǔ)上進(jìn)行擴(kuò)展,添加一些適合于特定應(yīng)用對(duì)象測(cè)試的描述和實(shí)現(xiàn)方法。
智能卡因?yàn)槠錁?biāo)準(zhǔn)性和安全性方面的要求,卡片發(fā)行方會(huì)要求智能卡提供商通過授權(quán)認(rèn)證機(jī)構(gòu)的功能測(cè)試和專業(yè)評(píng)估機(jī)構(gòu)的安全審查,Integri和ICCSolution等公司為專業(yè)的智能卡測(cè)試方案提供商,他們會(huì)為智能卡的特定功能(規(guī)范)提供專業(yè)的測(cè)試包供卡片提供商、卡片發(fā)行方、專業(yè)認(rèn)證機(jī)構(gòu)選擇購(gòu)買,Sun公司也為Java卡的虛擬機(jī)、運(yùn)行環(huán)境、API提供了JCTCK(Javacardtechnologycompatibilitykit)以驗(yàn)證Java卡是否符合Java卡規(guī)范。lntegfi公司的INQ 采用TTCN進(jìn)行標(biāo)準(zhǔn)的形式化描述和組織測(cè)試工程,腳本語(yǔ)言叫IBScript([ntegri’S Scrpt language),它是VBScript的子集同時(shí)又進(jìn)行了擴(kuò)展。ICCSolution公司的ICCSimCT 采用了一種面向自然語(yǔ)言的文本文件來(lái)表示腳本,如執(zhí)行SDA認(rèn)證可以表示為“DO SDA”,系統(tǒng)將會(huì)根據(jù)配置的參數(shù)和規(guī)范指定的流程去執(zhí)行EMV規(guī)范指定的終端靜態(tài)數(shù)據(jù)認(rèn)證。JCTCKt 使用了廣泛應(yīng)用于Java各平臺(tái)測(cè)試的JavaTestHarness,所有的測(cè)試腳本都使用Java語(yǔ)言按照一定接口規(guī)格編寫,把這些測(cè)試Applet安裝到Java卡上,就可以通過卡服務(wù)接口來(lái)按照指定的格式進(jìn)行訪問,根據(jù)是否得到預(yù)期的響應(yīng)來(lái)判斷待測(cè)試的功能是否通過。本文根據(jù)當(dāng)前腳本技術(shù)的研究和發(fā)展,結(jié)合智能卡操作系統(tǒng)的特點(diǎn),提出了測(cè)試腳本描述語(yǔ)言(SCML),并把它應(yīng)用到天喻智能卡測(cè)試軟件智能卡大師(smart card master,SCM)中,得到了很好的應(yīng)用。
2 測(cè)試腳本語(yǔ)言SCML的語(yǔ)法定義
SCML使用是一種類C的腳本語(yǔ)言,支持APDU命令執(zhí)行,變量,表達(dá)式,函數(shù),過程以及條件判斷、循環(huán)、跳轉(zhuǎn)等多種流程控制方式。SCML的主要語(yǔ)法定義如下。
2.1 SCML語(yǔ)句
<SCML語(yǔ)句>::=<注釋行>l<智能卡執(zhí)行語(yǔ)句>l<過程定義>{<過程調(diào)用>{<控制語(yǔ)句>
<注釋行>::=”;”{<字母>l<數(shù)字>)J空
<智能卡執(zhí)行語(yǔ)句>::=<命令標(biāo)識(shí)× 命令參數(shù)>
<命令參數(shù)>::= {<表達(dá)式>l<十六進(jìn)制數(shù)字串>l<變量標(biāo)識(shí)符>}
<過程定義>::=procedure<過程名>
<SCML語(yǔ)句> .
endproc
<過程調(diào)用>::=call<過程名>
<控制語(yǔ)句>::=<賦值語(yǔ)句>j<條件控制語(yǔ)句>j<循環(huán)語(yǔ)句>
l<無(wú)條件跳轉(zhuǎn)語(yǔ)句>l<行標(biāo)識(shí)語(yǔ)句>
<賦值語(yǔ)句>::=<控制前綴× 變量標(biāo)識(shí)符>=<表達(dá)式>
<條件控制語(yǔ)句>:::
<控制前綴>if<條件表達(dá)式>
<SCML語(yǔ)句>
[<控制前綴>else if<條件表達(dá)式>
<SCML語(yǔ)句>]
[<控制前綴>else 、
<SCML語(yǔ)句>]
<控制前綴>endif
<循環(huán)語(yǔ)句>::=<for循環(huán)語(yǔ)句>l<do循環(huán)語(yǔ)句>)<while循環(huán)語(yǔ)句>
<for循環(huán)語(yǔ)句>::=
<控制前綴>for(<任選表達(dá)式>;<任選表達(dá)式>;<任選表達(dá)式>)
<SCML語(yǔ)句>
<控制前綴>next
<do循環(huán)語(yǔ)句>::=
<控制前綴>do
<SCML語(yǔ)句>
<控制前綴>until<條件表達(dá)式>
<while循環(huán)語(yǔ)句>::=
<控制前綴>while<條件表達(dá)式>
<SCML語(yǔ)句>
<控制前綴>wend
<無(wú)條件跳轉(zhuǎn)語(yǔ)句>::=
<控制前綴>goto<行標(biāo)識(shí)>
<行標(biāo)識(shí)語(yǔ)句>::=
<控制前綴><行標(biāo)識(shí)>:
2.2 SCML中的表達(dá)式
<表達(dá)式>::=H一]<項(xiàng)>{<加法運(yùn)算符><項(xiàng)>)
<項(xiàng)>::=<因子>{<乘法運(yùn)算符× 因子>)
<因子>::=<變量標(biāo)識(shí)符>l<常量>l<函數(shù)> ’<表達(dá)式>”)”
<函數(shù)>::=”@”<函數(shù)名>({<表達(dá)式>))
<條件表達(dá)式>::=<單目條件表達(dá)式>l<關(guān)系表達(dá)式>l<邏輯表達(dá)式>
<單目條件表達(dá)式>::=<單目邏輯運(yùn)算符><條件表達(dá)式>
<關(guān)系表達(dá)式>::=<表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式>
<邏輯表達(dá)式>::=<條件表達(dá)式><邏輯運(yùn)算符><條件表達(dá)式>
<常量>::=<數(shù)字>l<字符串>
<變量標(biāo)識(shí)符>::=”%”<字母串>
<數(shù)字>::=OX<十六進(jìn)制數(shù)字串>l<十進(jìn)制數(shù)字串>
<十六進(jìn)制數(shù)字串>::=<十六進(jìn)制數(shù)字>{<十六進(jìn)制數(shù)字>}
<十進(jìn)制數(shù)字串>::=<數(shù)字>{<數(shù)字>}
<十六進(jìn)制數(shù)字>::=<數(shù)字> B|c|D| E|F|a|b|c e|f
<字符串>::=<字母>{<字母>l<數(shù)字>) ·
<行標(biāo)識(shí)>::=<字母串>
<過程名>::=<字母串>
<函數(shù)名2-::=<字母串>
<加法運(yùn)算符>::=” ” ”
<乘法運(yùn)算符2-:::”
<關(guān)系運(yùn)算符>:::”>”f.f<”j>=f<=j!=
<邏輯運(yùn)算符>::=&&|||
<單目邏輯運(yùn)算符>::=”!”
<數(shù)字2-::=0111213141516171819
<字母>::=A|B|C|D|...X|Y|Z|a|b|c|d|...x|Y|z
<控制前綴>::=<-!
3 SCML測(cè)試腳本的解釋執(zhí)行
SCML測(cè)試腳本是通過兩趟掃描來(lái)解釋執(zhí)行的,第一趟掃描完成跳轉(zhuǎn)行號(hào)表和腳本控制結(jié)構(gòu)樹的建立,并實(shí)現(xiàn)詞法和語(yǔ)法的檢查。SCML中把要處理的語(yǔ)句分為兩種:控制語(yǔ)句及智能卡執(zhí)行語(yǔ)句,第一趟掃描針對(duì)的就是控制語(yǔ)句中的行號(hào)標(biāo)識(shí)語(yǔ)句和流程控制語(yǔ)句。流程控制語(yǔ)句包括條件跳轉(zhuǎn)語(yǔ)句和3類循環(huán)語(yǔ)句。一個(gè)流程控制可以用如下的結(jié)構(gòu)來(lái)表示:
class FlowControl{
Private:
int m nMethod;//代表是哪一種流程控制
intm nLevel;//嵌套層次,主流程為0,每嵌套一層加1
boolm bEntered;//執(zhí)行時(shí)使用,用于是否為第一次進(jìn) 入該流程
//對(duì)循環(huán)結(jié)構(gòu)有用,默認(rèn)為false,進(jìn)入后變?yōu)閠rue,退出后改為false
intm nStartPos,nl nEndPos;//該控制流程的起止位置
CList<int,int>m 1PosList;//一個(gè)流程塊中間的各個(gè)其它控制行位置(如else,else if) };
流程控制樹的根節(jié)點(diǎn)為主流程,它代表的是一種順序結(jié)構(gòu),它的起止位置為該腳本的第一行和最后一行。通過對(duì)流程控制樹嵌套結(jié)構(gòu)的檢查可以檢查腳本中控制結(jié)構(gòu)的保留字是否成對(duì)出現(xiàn),是否出現(xiàn)亂嵌套等現(xiàn)象。如for循環(huán)中嵌套條件控制語(yǔ)句,但被嵌套的if和endif尚未成對(duì)出現(xiàn)時(shí),語(yǔ)句中就出現(xiàn)了next, 這樣的控制結(jié)構(gòu)就是不符合語(yǔ)法規(guī)則的。完成第一趟掃描后,當(dāng)前的控制流程應(yīng)該為主流程。
第2趟掃描為解釋執(zhí)行,實(shí)現(xiàn)在SCM程序流程結(jié)構(gòu)的控制下執(zhí)行對(duì)應(yīng)的智能卡操作系統(tǒng)指令達(dá)到預(yù)期的智能卡測(cè)試目的.首先根據(jù)有無(wú)控制前綴判斷當(dāng)前語(yǔ)句是否為控制語(yǔ)句,再根據(jù)流程控制語(yǔ)句的關(guān)鍵字判斷是否為流程控制語(yǔ)句或普通的賦值語(yǔ)句。根據(jù)行號(hào)可以從第一趟掃描的流程控制樹中檢索到當(dāng)前的流程控制結(jié)構(gòu)。對(duì)應(yīng)的4種流程控制結(jié)構(gòu)的處理實(shí)現(xiàn)可以用圖1的流程圖來(lái)表示。nl nPos為流程控制處理后將要執(zhí)行語(yǔ)句的行號(hào),該行可能是智能卡命令也可能是另一個(gè)流程控制語(yǔ)句。
4 scML的擴(kuò)展技術(shù)
SCM中已經(jīng)定義了各類常用的函數(shù)供用戶使用時(shí)調(diào)用,包括:字符串處理,各類加解密算法,通信、金融、社保行業(yè)使用的專用算法等,這些函數(shù)已經(jīng)可以滿足一般的使用要求。因?yàn)橹悄芸óa(chǎn)品的日新月異,一些新的要求會(huì)不斷提出,原有的函數(shù)接口可能無(wú)法滿足要求,在不更改主實(shí)現(xiàn)程序的情況下,使用動(dòng)態(tài)組件技術(shù)可以自由的擴(kuò)充需要的函數(shù),使測(cè)試得以順利進(jìn)行。動(dòng)態(tài)組件是滿足一定的接口規(guī)格的動(dòng)態(tài)庫(kù),它可以動(dòng)態(tài)安裝到主程序中并可以卸載,為了防止非法的組件被使用及組件被非法使用,動(dòng)態(tài)組件采用了授權(quán)技術(shù),安裝和使用過程中,需要對(duì)組件進(jìn)行雙向認(rèn)證授權(quán),否則無(wú)法使用。SCM是一個(gè)通用的智能卡測(cè)試工具,它可以適用于各類智能卡產(chǎn)品的測(cè)試,為了減輕工作人員的負(fù)擔(dān),系統(tǒng)提供了一系列的命令,命令由命令名稱和命令參數(shù)組成,一個(gè)命令包含了一條或多條的APDU,通過命令的執(zhí)行,SCM可以向智能卡發(fā)送預(yù)期的APDU(包括形成APDU的報(bào)文參數(shù))并比較卡是否返回預(yù)期的結(jié)果,并利用已經(jīng)得到的結(jié)果(可能包括更前面的命令返回的結(jié)果)來(lái)形成下一條APDU或判斷整體命令是否執(zhí)行正確,然后返回該條命令的執(zhí)行結(jié)果。不同規(guī)范的智能卡可能使用同一個(gè)命令名稱,但需要執(zhí)行不同的算法和處理流程。為了解決這種問題,采用了面向?qū)ο蠓椒ǖ睦^承和重載思想,子類可以直接使用父類的方法,也可以有自己專用的方法,當(dāng)父類的方法不適用的時(shí)候,子類可以對(duì)該方法進(jìn)行更改。基礎(chǔ)類為一個(gè)通用智能卡類CICCard,它用于處理通用的智能卡測(cè)試命令,如參數(shù)P1、P2、P3的測(cè)試、測(cè)試參數(shù)設(shè)置命令、執(zhí)行結(jié)果比較命令等,其它類型的智能卡都是從此類上派生的,包含了各自的類成員和方法,并對(duì)命令處理方法重載。如GSM 網(wǎng)絡(luò)的通信智能卡類CSim是從類CICCard派生的,CDMA網(wǎng)絡(luò)的通信智能卡類CUim是從類CSim派生的。通過派生和重載可以為各種智能卡標(biāo)準(zhǔn)建立各自的命令集,層次清晰,實(shí)現(xiàn)簡(jiǎn)單。
5 組織SCML測(cè)試腳本實(shí)現(xiàn)測(cè)試自動(dòng)化
通過單個(gè)的SCML~0試腳本可以實(shí)現(xiàn)一項(xiàng)或多項(xiàng)測(cè)試用例的測(cè)試,把多個(gè)測(cè)試腳本按照一定的規(guī)則組合在一起就可以實(shí)現(xiàn)整個(gè)智能卡各項(xiàng)功能的測(cè)試并實(shí)現(xiàn)自動(dòng)化。SCM 中一個(gè)或多個(gè)測(cè)試腳本和其它測(cè)試相關(guān)內(nèi)容(如案例名稱、案例描述等)一起構(gòu)成了一個(gè)測(cè)試案例,測(cè)試案例通過樹狀的結(jié)構(gòu)組合在一起就形成了層次的測(cè)試包,一個(gè)測(cè)試包用以代表一類功能的測(cè)試案例的集合,多個(gè)測(cè)試包再加上測(cè)試的一些配置條件就形成了測(cè)試工程,通過對(duì)測(cè)試工程的執(zhí)行就實(shí)現(xiàn)了對(duì)一類智能卡的完整性測(cè)試。測(cè)試過程中可以自動(dòng)進(jìn)行測(cè)試輪次的管理并自動(dòng)記錄每輪中的測(cè)試細(xì)節(jié)信息,用戶可以查看單個(gè)測(cè)試案例的執(zhí)行歷史情況也可以動(dòng)態(tài)統(tǒng)計(jì)測(cè)試工程中案例的執(zhí)行通過、失敗的情況,并可以對(duì)各類分布情況進(jìn)行匯總。測(cè)試執(zhí)行完成后,用戶就可以同步得到一份內(nèi)容可詳可簡(jiǎn)的測(cè)試報(bào)告。
圖2為利用SCM 進(jìn)行一種中國(guó)移動(dòng)的通信卡測(cè)試過程中的截圖。
6 結(jié)束語(yǔ)
SCML測(cè)試腳本簡(jiǎn)潔易讀、結(jié)構(gòu)清晰、易于維護(hù)、便于擴(kuò)展,此種腳本語(yǔ)言格式及處理機(jī)制已經(jīng)應(yīng)用到武漢天喻信息產(chǎn)業(yè)股份有限公司的智能卡通用測(cè)試工具中,并實(shí)際應(yīng)用到各類智能卡產(chǎn)品的測(cè)試中,實(shí)現(xiàn)了測(cè)試平臺(tái)的統(tǒng)一并實(shí)現(xiàn)了過程自動(dòng)化,為公司的產(chǎn)品質(zhì)量穩(wěn)定、可靠起到了實(shí)際的作用。
(文/華中科技大學(xué)機(jī)械學(xué)院,武漢天喻信息產(chǎn)業(yè)股份有限公司 周章慧,王同洋,吳俊軍,張新訪)