吳潔明,李碩征
(北方工業(yè)大學信息工程學院,北京100144)
中國出版物在線信息交換CNONIX(China Online Information Exchange)標準為解決圖書出版整個產(chǎn)業(yè)鏈中,不同實體之間由于數(shù)據(jù)項和數(shù)據(jù)格式的不一致而造成的信息使用效率低下的問題,提供了一個切實可行的方案。該標準是在國外ONIX標準的基礎上結(jié)合我國國情制定的,旨在為我國圖書出版整個產(chǎn)業(yè)鏈各個階段提供標準的圖書信息交換格式,提高信息的質(zhì)量以及使用效率[1]。
CNONIX作為計算機技術(shù)在圖書出版領域的應用,需要大量的軟件進行支撐。對相關(guān)的第三方軟件的標準符合性測試是保證相關(guān)軟件能夠符合CNONIX標準,保證CNONIX規(guī)定的數(shù)據(jù)項和數(shù)據(jù)格式得以正確應用的必要措施。本文首先介紹了CNONIX的數(shù)據(jù)格式;然后討論了CNONIX標準符合性測試的方法;最后通過一個CNONIX消息片段,對測試流程予以說明。
國際上,對軟件產(chǎn)品進行標準符合性測試與確認的工作始于20世紀60年代末,從20世紀70年代初的程序語言的標準符合性測試發(fā)展到20世紀90年代的開發(fā)系統(tǒng)接口標準測試[2]。標準符合性測試已經(jīng)從單純的計算機、通信標準擴展到醫(yī)療機械、電子政務等領域。然而,我國在這方面發(fā)展較慢。普遍認為,國內(nèi)的標準測試開始于90年代,而且多是學術(shù)上的研究,局限于開發(fā)接口類標準上的測試,比如SQL標準符合性測試,還有就是JDBC、ODBC類的規(guī)范測試以及網(wǎng)絡協(xié)議方面的測試。在軟件產(chǎn)業(yè)實際應用中的普及還有待提高。
軟件標準符合性測試大多屬于黑盒測試,廣泛采用“瀑布模型”[2]。本文的測試方法也是建立在這種模型上的。
ONIX于1999年由歐美多個國家共同制定,2000年正式推出。程麗紅、馬蕾等人[3,4]詳細介紹了ONIX,并認為借鑒該標準是解決我國圖書發(fā)行行業(yè)信息不暢問題的一種辦法。2011年,相關(guān)單位參考ONIX開始制定更符合我國國情的CNONIX。
CNONIX屬于數(shù)據(jù)交換標準,它規(guī)定了整個圖書出版、發(fā)行過程中需要用到的所有數(shù)據(jù)元,并將其分為復合元素和元素兩類,它們之間的關(guān)系如圖1所示。
Figure 1 Structure of elements圖1 數(shù)據(jù)元的結(jié)構(gòu)
圖1說明CNONIX中的數(shù)據(jù)形式是從復合元素開始的,復合元素包含元素和更低級別的復合元素。這種形式不斷地遞歸下去,直到某一個復合元素不再包含更低級別的復合元素為止。
CNONIX規(guī)定,采用XML格式的文件進行數(shù)據(jù)交換。每個可用的XML文件應該包含一組消息頭,復合元素以及一組或多組產(chǎn)品記錄復合元素。一條完整的消息格式如例1所示。如果消息中使用字符集,應使用XML聲明的格式。
元素是CNONIX標準中最小的數(shù)據(jù)單元,每個元素都有各自的屬性,包括選擇性、重復性、類型、位數(shù)、CNONIX代碼表編號等,同時還擁有英文標識。復合元素是由若干關(guān)聯(lián)的元素組成的數(shù)據(jù)集合,同樣擁有英文標識,但是只包含選擇性和重復性等屬性。
英文標識用于在XML文件中聲明元素或復合元素(為了方便,下文中如無特殊說明復合元素和元素都統(tǒng)稱為元素),屬性用于規(guī)范開始標簽和結(jié)束標簽之間的內(nèi)容的約束。下面以CNONIX中的CNONIX for Books為代表(以下簡寫為CNONIX)予以說明,具體約束詳見表1。
Table 1 Element attributes constraints表1 元素屬性約束
類型屬性決定元素的輸入類型;長度是輸入的字符的長度;代碼表編號是指元素按照標準需要調(diào)用的代碼表的編號。根據(jù)CNONIX標準,當一個元素的類型為數(shù)字時,位數(shù)為定長,輸入的內(nèi)容必須為CNONIX代碼表的編號;當類型為字符和數(shù)值時,位數(shù)為變長。
根據(jù)元素的選擇性以及使用條件,可以將所有的元素分為基本必備元素、基本擴展元素、條件必備元素和條件擴展元素。其中,基本必備元素是指在消息中應該必須出現(xiàn)的元素;基本擴展元素是指選擇性的、可選的元素;條件必備元素指當某一元素出現(xiàn)時,必須出現(xiàn)的元素;條件擴展元素指當某一元素出現(xiàn)時,可以出現(xiàn)也可以不出現(xiàn)的元素??傮w來說,擴展元素通常用來對必備元素進行補充。
CNONIX的推廣需要一系列的產(chǎn)品來支撐該標準。其中,能夠根據(jù)用戶的需要自動生成相應的XML文件的軟件是必須要在投入使用前進行標準符合性測試的。這是因為CNONIX標準規(guī)范的重點就是用于進行信息交換的元素的屬性及數(shù)據(jù)內(nèi)容。
有些時候需要測試的僅僅只是一個XML文件,例如,用戶自己用記事本編輯一個XML文檔來完成信息交換工作。在這種情況下,信息交換的參與者并不是利用專業(yè)的軟件自動生成XML文件。但是,為了能夠正常地進行信息交換,仍然需要在使用前對該XML文件進行標準符合性驗證,判斷其對于CNONIX標準的符合性。
本文針對這兩種情況分別設計了標準符合性測試方案。
同大多數(shù)的標準符合性測試一樣,對于待測軟件的CNONIX標準符合性測試不需要考慮待測軟件內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及運行邏輯,只需要考慮在合法或非法輸入的情況下是否能夠得到符合標準的XML文件或相應的錯誤信息??梢詤⒖加嘘P(guān)黑盒測試的相關(guān)經(jīng)驗。整個測試的流程如圖2所示。
(1)根據(jù)待測軟件選取相應的輸入項,包括合法輸入及非法輸入,記錄合法輸入。
(2)檢查所有輸入中是否包含了所有的基本必備元素和條件必備元素。
(3)將所有的輸入作為測試用例輸入到待測軟件中,記錄所有可以獲得輸出的輸入。
(4)分析待測軟件的輸出。如果合法輸入沒有得到相應的輸出,則待測軟件不符合CNONIX標準。
(5)除合法輸入外,如果還有其它輸入可以獲得輸出,則待測軟件在處理相應的非法輸入時不符合CNONIX標準。
(6)根據(jù)合法輸入生成標準比對文件a(完全符合CNONIX標準)。
(7)將合法輸入對應的輸出b同a進行比對,如果一致則通過測試,否則不通過測試。
(8)生成測試報告。
Figure 2 Testing process圖2 測試流程
在進行測試之前,需要考慮如何生成測試用例。CNONIX中每個元素的各個屬性對于輸入數(shù)據(jù)的各個方面做了明確的規(guī)定,所以可以采用等價類劃分法來生成測試用例。同時,對于輸入條件中規(guī)定了取值的范圍或者值的個數(shù)這種境況,由測試工作經(jīng)驗得知,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入內(nèi)部[5]。因而,本文在等價類用例的基礎上對某些屬性補充上邊界值,扣除重復的部分。
例如,對于位數(shù)屬性,輸入內(nèi)容的長度可以分為最大長度(max)、大于最大長度(>max)、1和0四種情況。通過表1可以看出,如果單純計算各種屬性的不同情況共有2*2*3*4*2=96種可能,顯然各屬性對于生成測試用例來說存在交集。因此,必然存在更具有代表性的測試用例可以覆蓋多種可能。同時,考慮到實際應用,如此多的可能也帶來了相當大的困擾。
所有屬性中,選擇性和重復性約束的是元素的輸入次數(shù),其它屬性約束的是應該輸入的內(nèi)容。為了便于說明,設每個元素需要的測試用例個數(shù)為N。
首先考慮元素的選擇性和重復性。很明顯,對于每一種元素都有三種可能:不存在、唯一及大于1(重復)。其中,如果測試用例中該元素不存在,表明沒有輸入該元素,顯然其余各屬性不需要考慮。對于重復性,為了最大限度地縮減測試用例,同時不失一般性,考慮重復次數(shù)為2,即將一條符合標準的測試用例,重復輸入兩次。所以,每個元素需要的測試用例個數(shù)為:
N=N′+2
其中,N′為不考慮選擇性和重復性時,每個元素需要的測試用例數(shù)。2是表示考慮重復一次以及不作輸入這兩種情況。
考慮剩下的三種屬性。就位數(shù)屬性來說,對于定長以及未規(guī)定最大長度的元素有三種情況;對于變長且規(guī)定了最大長度的元素,只考慮邊界值,有0、1、max和max+1四種情況。其中,長度為0的情況相當于沒有輸入,在選擇性中已經(jīng)討論。同時,因為長度為1和max都為符合條件的輸入,將這兩種情況合并,取長度為max的輸入作為代表。綜上,針對位數(shù)屬性做如下考慮:
其中,式(1)位數(shù)為變長,n為最大長度;式(2)位數(shù)為定長,n為規(guī)定長度。
就類型來說,字符類型較為特殊,因為輸入內(nèi)容為數(shù)字、數(shù)值或者文字、符號都可以理解為字符。此時需要考慮的就是其它屬性對輸入的約束。數(shù)字類型和數(shù)值類型的區(qū)別是數(shù)字類型的最左側(cè)一位可以為0,數(shù)值類型則不可。例如,表2中所列的兩種元素。對于“最新印次”元素可以選取“999”作為合法輸入,“1000”、“099”及“a99”作為非法輸入,共三個測試用例。而對于“版權(quán)年份”元素可以選取“2012”作為合法輸入,“20120”作為非法輸入,共兩個測試用例。
Table 2 Element attributes(1)表2 部分元素屬性(1)
最后,考慮CNONIX代碼表編號屬性,因為并不是所有元素都包含該屬性。如果,一個元素包含該屬性,那么還需要驗證該元素的輸入是否與對應的CNONIX代碼表中的代碼相匹配。例如,對于正文字符集代碼(〈ScriptCode〉)元素,標準規(guī)定的代碼表中代碼為四位英文字符集,如Syrc(敘利亞文)是一個合法的輸入,而Ssss、Syrcc、Syr等都是與之對應的非法輸入。
另外,通過分析CNONIX標準中各元素的屬性得知,所有類型為數(shù)值型的元素都不含有CNONIX代碼表屬性。
因此,把元素的所有屬性綜合起來考慮,需要測試用例最多的元素的屬性為數(shù)字型、定長且有CNONIX代碼表屬性的元素。例如,對于表3中的元素(List 73規(guī)定輸入為00~39的數(shù)字),在不考慮重復性和選擇性的情況下,需要的測試用例至少有四個。可行的一組為:{01,011,0a,99},其中只有01是合法輸入。
Table 3 Element attributes(2)表3 部分元素屬性(2)
綜上,針對每個元素的測試用例至多有N=4+2=6個。
根據(jù)之前的討論,CNONIX中規(guī)定的所有元素分為基本必備元素、基本擴展元素、條件必備元素、條件擴展元素四類。對于XML的檢測正是基于這四種分類的基礎上。以下是測試的邏輯:
(1)檢查待測文件是否符合XML格式,包括XML的相關(guān)聲明、開始標簽和結(jié)束標簽是否匹配等。
(2)檢查待測文件中的CNONIX的聲明標簽。
(3)檢查基本必備元素。
(4)檢查基本擴展元素。
(5)檢查最外層的條件擴展元素,即產(chǎn)品記錄復合元素下一級別的復合元素,這些通??梢杂脕砺暶髟撐募崿F(xiàn)的是哪一階段的信息交換。
(6)判斷XML文件最外層未驗證元素中條件必備元素的合法性。
(7)判斷XML文件最外層未驗證元素中條件擴展元素的合法性。
(8)重復第(6)步和第(7)步,直到所有元素都完成了驗證。
需要特別說明的是,這里的驗證只能驗證元素格式的合法性,對于數(shù)據(jù)內(nèi)容無法進行檢測。由于部分條件必備元素的條件也許是條件擴展元素(不是必選項),所以只有在同一層所有元素都進行過驗證以后才能對下一級別元素進行驗證。
如果將整個XML文件看作是一棵樹的話,那么CNONIX聲明標簽就是整棵樹的根節(jié)點。
如果僅考慮基本元素的話,第(3)步和第(4)步中對于基本必備元素和基本擴展元素的驗證可以采用深度優(yōu)先遍歷,順序是先頭文件信息后產(chǎn)品記錄信息。
如果砍掉所有基本必備元素的分支(消息頭復合元素和產(chǎn)品記錄復合元素保留),那么對其他元素的驗證類似廣度優(yōu)先遍歷。
下面的例2是一個CNONIX消息的片段:
例2 CNONIX信息片段
現(xiàn)用上節(jié)所述方法予以分析。在這段信息中:
(1)基本必備元素有:Header、ProductSender、SendDateTime、Notification Type;
(2)基本擴展元素有:Sender Identifier、Message Number、CollateralDetail和Cited Content;
(3)條件必備元素有:SenderIDType、Content-DateRole、Cited Content Type;
(4)條件擴展元素有:TextContent、Content Audience。
因此,標準符合性驗證的具體流程如下:
(1)整條信息中包含XML文件的聲明以及CNONIX的聲明,表明這條信息是用于進行CNONIX標準下的信息交換的。
(2)檢查基本必備元素,依次驗證Header、Sender、SendDate Time、Product、Notification-Type。
(3)檢查基本擴展元素,順序是先驗證SenderIdentifier,再驗證MessageNumber、Collateral-Detail,最后驗證Cited Content。
(4)檢查Sender IDType、CitedContent Type。
(5)檢查TextContent、Content Audience,至此最外層的條件元素檢查完畢,下面檢查下一次條件元素。
(6)檢查Content Date,本次迭代中最外層條件元素檢查完畢,進行下一次迭代。
(7)檢查ContentDateRole,至此所有元素檢查完畢。
基于本文的分析,采用JAVA(JDK7.0)作為編程語言,借助于Eclipse 4.2.0和Apache Tomcat 6.0環(huán)境搭建了一個CNONIX標準符合性測試平臺。同時,采用Oracle 10g作為數(shù)據(jù)庫保存標準中對各元素的約束。
因為對于元素的選擇性和重復性的測試只需要重復輸入一次或不輸入,所以這兩個屬性在設計實現(xiàn)過程中沒有考慮,只考慮了類型、位數(shù)以及CNONIX代碼表這三個屬性。仍然是以上文提到的三個元素作為測試實例,重新整理后如表4所示,其中List 73規(guī)定的輸入為00~99的兩位數(shù)字。
Table 4 Element attributes(3)表4 部分元素屬性(3)
生成測試用例的時候,首先根據(jù)數(shù)據(jù)庫中保存的元素全部約束生成一條合法的輸入,然后修改位數(shù)、類型、代碼表等屬性以生成不合法的輸入。每條非法輸入都是通過對合法輸入最小改動得到的。實驗結(jié)果如表5所示。
Table 5 Element attributes(4)表5 部分元素屬性(4)
需要再次強調(diào)的是,表5中的結(jié)果是在不考慮元素的選擇性和重復性的情況下得到的。
對XML文件的驗證,在設計和實現(xiàn)上借助了dom4j API,同時需要使用XSD(XML Schema Definition)語言記錄標準中各元素(及復合元素)的規(guī)則。在進行測試之前需要做些準備工作。首先,根據(jù)4.2節(jié)和4.3節(jié)的分析,按照相應方法生成與待測XML文件對應的XSD文件來保存校驗規(guī)則。其次,為了引入XSD文件,需要修改XML中的標簽,將〈ONIXMessage release="3.0"〉改為〈ONIXMessage release="3.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:no NamespaceSchema Location="XSD文件地址"〉,以便使用dom4j API配合XSD語言來對相應的XML文件進行驗證。
最后,需要再次強調(diào)的是,這一部分里提到的測試和驗證,只是測試信息的結(jié)構(gòu)是否符合CNONIX標準,并不能驗證信息的具體內(nèi)容。
本文針對CNONIX系列標準提出了一個標準符合性測試的設計方案,并以CNONIX for Books為代表討論了作為輸入的測試用例的數(shù)量及生成方案。最后,考慮到CNONIX屬于數(shù)據(jù)交換標準,為了方便信息的流通,設計了一個直接檢驗相關(guān)XML文件的方案,并提供了一個實例片段進行了說明。
通過討論,發(fā)現(xiàn)由于元素量大、每條元素屬性影響明顯,進行覆蓋測試需生成大量的測試用例。雖然在文中了對單個元素的屬性進行了分析,但是以此為依據(jù)進行測試需要的測試用例數(shù)量仍然不小。因而,在未來的工作中,將重點研究元素之間的相關(guān)性,期望可以進一步縮減測試用例數(shù)目。
[1] China online information exchange for books(CNONIX)[S].Beijing:State Administration of Press,Publication,Radio,F(xiàn)ilm and Television of the People’s Republic of China,2013.(in Chinese)
[2] Deng Yi,Liu You-cheng.Test method for measuring a software’s conformance to standards[J].Journal of Beijing University of Aeronautics and Astronautics,1997,23(1):68-73.(in Chinese)
[3] Cheng Li-h(huán)ong.ONIX:The key of book industry information standards in China[EB/OL].[2007-06-18].http://www.360doc.com/content/09/0411/22/81544_3099364.shtml.(in Chinese)
[4] Ma Lei.Metadata standards for electronic publications,ONIX[J].Journal of Modern Information,2003(1):64-66.(in Chinese)
[5] Kan Dan-dan.Several commonly used test case design methods and its applications[J].Computer Knowledge and Technology,2010,6(1):118-120.(in Chinese)
[6] Zhu Hai-yan.An algorithm for software test suite reduction[J].Microelectronics and Computer,2007,24(1):204-206.(in Chinese)
[7] Cui Qi,Ma Nan,Liu Xian-gang.Design and implementation of compliance test on TPM interface command[J].Computer Engineering,2009,35(2):129-132.(in Chinese)
[8] Zhong Rong-h(huán)ua,Huang Jian,Chen Bin,et al.Research on federate compliance test method[C]∥Proc of the 7th International Conference on System Simulation and Scientific Computing,2008:851-856.
[9] Hegde V,Respironics P.Compliance testing is not reliability testing[C]∥Proc of Annual Reliability and Maintainability Symposium(RAMS),2010:1-5.
附中文參考文獻:
[1] 中國出版物在線信息交換(CNONIX)圖書[S].北京:中華人民共和國國家新聞出版廣電總局,2013.
[2] 鄧昳,劉又誠.軟件標準符合性測試[J].北京航空航天大學學報,1997,23(1):68-73.
[3] 程麗紅.ONIX:我國書業(yè)發(fā)行信息標準的鑰匙[EB/OL].[2007-06-18].http://www.360doc.com/content/09/0411/22/81544_3099364.shtml.
[4] 馬蕾.電子出版物元數(shù)據(jù)標準ONIX[J].現(xiàn)代情報,2003(1):64-66.
[5] 闞丹丹.幾個常用測試用例設計方法及應用[J].電腦知識與技術(shù),2010,6(1):118-120.
[6] 朱海燕.軟件測試用例縮減的一個算法[J].微電子學與計算機,2007,24(1):204-206.
[7] 崔奇,馬楠,劉賢剛.TPM接口命令標準符合性測試的設計與實現(xiàn)[J].計算機工程,2009,35(2):129-132.