APP下载

CNONIX标准符合性测试研究*

2014-03-23吴洁明李硕征

计算机工程与科学 2014年5期
关键词:测试用例合法代码

吴洁明,李硕征

(北方工业大学信息工程学院,北京100144)

1 引言

中国出版物在线信息交换CNONIX(China Online Information Exchange)标准为解决图书出版整个产业链中,不同实体之间由于数据项和数据格式的不一致而造成的信息使用效率低下的问题,提供了一个切实可行的方案。该标准是在国外ONIX标准的基础上结合我国国情制定的,旨在为我国图书出版整个产业链各个阶段提供标准的图书信息交换格式,提高信息的质量以及使用效率[1]。

CNONIX作为计算机技术在图书出版领域的应用,需要大量的软件进行支撑。对相关的第三方软件的标准符合性测试是保证相关软件能够符合CNONIX标准,保证CNONIX规定的数据项和数据格式得以正确应用的必要措施。本文首先介绍了CNONIX的数据格式;然后讨论了CNONIX标准符合性测试的方法;最后通过一个CNONIX消息片段,对测试流程予以说明。

2 相关工作

国际上,对软件产品进行标准符合性测试与确认的工作始于20世纪60年代末,从20世纪70年代初的程序语言的标准符合性测试发展到20世纪90年代的开发系统接口标准测试[2]。标准符合性测试已经从单纯的计算机、通信标准扩展到医疗机械、电子政务等领域。然而,我国在这方面发展较慢。普遍认为,国内的标准测试开始于90年代,而且多是学术上的研究,局限于开发接口类标准上的测试,比如SQL标准符合性测试,还有就是JDBC、ODBC类的规范测试以及网络协议方面的测试。在软件产业实际应用中的普及还有待提高。

软件标准符合性测试大多属于黑盒测试,广泛采用“瀑布模型”[2]。本文的测试方法也是建立在这种模型上的。

ONIX于1999年由欧美多个国家共同制定,2000年正式推出。程丽红、马蕾等人[3,4]详细介绍了ONIX,并认为借鉴该标准是解决我国图书发行行业信息不畅问题的一种办法。2011年,相关单位参考ONIX开始制定更符合我国国情的CNONIX。

3 CNONIX元素分析

CNONIX属于数据交换标准,它规定了整个图书出版、发行过程中需要用到的所有数据元,并将其分为复合元素和元素两类,它们之间的关系如图1所示。

Figure 1 Structure of elements图1 数据元的结构

图1说明CNONIX中的数据形式是从复合元素开始的,复合元素包含元素和更低级别的复合元素。这种形式不断地递归下去,直到某一个复合元素不再包含更低级别的复合元素为止。

CNONIX规定,采用XML格式的文件进行数据交换。每个可用的XML文件应该包含一组消息头,复合元素以及一组或多组产品记录复合元素。一条完整的消息格式如例1所示。如果消息中使用字符集,应使用XML声明的格式。

元素是CNONIX标准中最小的数据单元,每个元素都有各自的属性,包括选择性、重复性、类型、位数、CNONIX代码表编号等,同时还拥有英文标识。复合元素是由若干关联的元素组成的数据集合,同样拥有英文标识,但是只包含选择性和重复性等属性。

英文标识用于在XML文件中声明元素或复合元素(为了方便,下文中如无特殊说明复合元素和元素都统称为元素),属性用于规范开始标签和结束标签之间的内容的约束。下面以CNONIX中的CNONIX for Books为代表(以下简写为CNONIX)予以说明,具体约束详见表1。

Table 1 Element attributes constraints表1 元素属性约束

类型属性决定元素的输入类型;长度是输入的字符的长度;代码表编号是指元素按照标准需要调用的代码表的编号。根据CNONIX标准,当一个元素的类型为数字时,位数为定长,输入的内容必须为CNONIX代码表的编号;当类型为字符和数值时,位数为变长。

根据元素的选择性以及使用条件,可以将所有的元素分为基本必备元素、基本扩展元素、条件必备元素和条件扩展元素。其中,基本必备元素是指在消息中应该必须出现的元素;基本扩展元素是指选择性的、可选的元素;条件必备元素指当某一元素出现时,必须出现的元素;条件扩展元素指当某一元素出现时,可以出现也可以不出现的元素。总体来说,扩展元素通常用来对必备元素进行补充。

4 测试系统的设计

CNONIX的推广需要一系列的产品来支撑该标准。其中,能够根据用户的需要自动生成相应的XML文件的软件是必须要在投入使用前进行标准符合性测试的。这是因为CNONIX标准规范的重点就是用于进行信息交换的元素的属性及数据内容。

有些时候需要测试的仅仅只是一个XML文件,例如,用户自己用记事本编辑一个XML文档来完成信息交换工作。在这种情况下,信息交换的参与者并不是利用专业的软件自动生成XML文件。但是,为了能够正常地进行信息交换,仍然需要在使用前对该XML文件进行标准符合性验证,判断其对于CNONIX标准的符合性。

本文针对这两种情况分别设计了标准符合性测试方案。

4.1 对待测软件的符合性测试

同大多数的标准符合性测试一样,对于待测软件的CNONIX标准符合性测试不需要考虑待测软件内部的数据结构及运行逻辑,只需要考虑在合法或非法输入的情况下是否能够得到符合标准的XML文件或相应的错误信息。可以参考有关黑盒测试的相关经验。整个测试的流程如图2所示。

(1)根据待测软件选取相应的输入项,包括合法输入及非法输入,记录合法输入。

(2)检查所有输入中是否包含了所有的基本必备元素和条件必备元素。

(3)将所有的输入作为测试用例输入到待测软件中,记录所有可以获得输出的输入。

(4)分析待测软件的输出。如果合法输入没有得到相应的输出,则待测软件不符合CNONIX标准。

(5)除合法输入外,如果还有其它输入可以获得输出,则待测软件在处理相应的非法输入时不符合CNONIX标准。

(6)根据合法输入生成标准比对文件a(完全符合CNONIX标准)。

(7)将合法输入对应的输出b同a进行比对,如果一致则通过测试,否则不通过测试。

(8)生成测试报告。

Figure 2 Testing process图2 测试流程

4.2 测试用例分析

在进行测试之前,需要考虑如何生成测试用例。CNONIX中每个元素的各个属性对于输入数据的各个方面做了明确的规定,所以可以采用等价类划分法来生成测试用例。同时,对于输入条件中规定了取值的范围或者值的个数这种境况,由测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入内部[5]。因而,本文在等价类用例的基础上对某些属性补充上边界值,扣除重复的部分。

例如,对于位数属性,输入内容的长度可以分为最大长度(max)、大于最大长度(>max)、1和0四种情况。通过表1可以看出,如果单纯计算各种属性的不同情况共有2*2*3*4*2=96种可能,显然各属性对于生成测试用例来说存在交集。因此,必然存在更具有代表性的测试用例可以覆盖多种可能。同时,考虑到实际应用,如此多的可能也带来了相当大的困扰。

所有属性中,选择性和重复性约束的是元素的输入次数,其它属性约束的是应该输入的内容。为了便于说明,设每个元素需要的测试用例个数为N。

首先考虑元素的选择性和重复性。很明显,对于每一种元素都有三种可能:不存在、唯一及大于1(重复)。其中,如果测试用例中该元素不存在,表明没有输入该元素,显然其余各属性不需要考虑。对于重复性,为了最大限度地缩减测试用例,同时不失一般性,考虑重复次数为2,即将一条符合标准的测试用例,重复输入两次。所以,每个元素需要的测试用例个数为:

N=N′+2

其中,N′为不考虑选择性和重复性时,每个元素需要的测试用例数。2是表示考虑重复一次以及不作输入这两种情况。

考虑剩下的三种属性。就位数属性来说,对于定长以及未规定最大长度的元素有三种情况;对于变长且规定了最大长度的元素,只考虑边界值,有0、1、max和max+1四种情况。其中,长度为0的情况相当于没有输入,在选择性中已经讨论。同时,因为长度为1和max都为符合条件的输入,将这两种情况合并,取长度为max的输入作为代表。综上,针对位数属性做如下考虑:

其中,式(1)位数为变长,n为最大长度;式(2)位数为定长,n为规定长度。

就类型来说,字符类型较为特殊,因为输入内容为数字、数值或者文字、符号都可以理解为字符。此时需要考虑的就是其它属性对输入的约束。数字类型和数值类型的区别是数字类型的最左侧一位可以为0,数值类型则不可。例如,表2中所列的两种元素。对于“最新印次”元素可以选取“999”作为合法输入,“1000”、“099”及“a99”作为非法输入,共三个测试用例。而对于“版权年份”元素可以选取“2012”作为合法输入,“20120”作为非法输入,共两个测试用例。

Table 2 Element attributes(1)表2 部分元素属性(1)

最后,考虑CNONIX代码表编号属性,因为并不是所有元素都包含该属性。如果,一个元素包含该属性,那么还需要验证该元素的输入是否与对应的CNONIX代码表中的代码相匹配。例如,对于正文字符集代码(〈ScriptCode〉)元素,标准规定的代码表中代码为四位英文字符集,如Syrc(叙利亚文)是一个合法的输入,而Ssss、Syrcc、Syr等都是与之对应的非法输入。

另外,通过分析CNONIX标准中各元素的属性得知,所有类型为数值型的元素都不含有CNONIX代码表属性。

因此,把元素的所有属性综合起来考虑,需要测试用例最多的元素的属性为数字型、定长且有CNONIX代码表属性的元素。例如,对于表3中的元素(List 73规定输入为00~39的数字),在不考虑重复性和选择性的情况下,需要的测试用例至少有四个。可行的一组为:{01,011,0a,99},其中只有01是合法输入。

Table 3 Element attributes(2)表3 部分元素属性(2)

综上,针对每个元素的测试用例至多有N=4+2=6个。

4.3 XML文件的标准符合性

根据之前的讨论,CNONIX中规定的所有元素分为基本必备元素、基本扩展元素、条件必备元素、条件扩展元素四类。对于XML的检测正是基于这四种分类的基础上。以下是测试的逻辑:

(1)检查待测文件是否符合XML格式,包括XML的相关声明、开始标签和结束标签是否匹配等。

(2)检查待测文件中的CNONIX的声明标签。

(3)检查基本必备元素。

(4)检查基本扩展元素。

(5)检查最外层的条件扩展元素,即产品记录复合元素下一级别的复合元素,这些通常可以用来声明该文件实现的是哪一阶段的信息交换。

(6)判断XML文件最外层未验证元素中条件必备元素的合法性。

(7)判断XML文件最外层未验证元素中条件扩展元素的合法性。

(8)重复第(6)步和第(7)步,直到所有元素都完成了验证。

需要特别说明的是,这里的验证只能验证元素格式的合法性,对于数据内容无法进行检测。由于部分条件必备元素的条件也许是条件扩展元素(不是必选项),所以只有在同一层所有元素都进行过验证以后才能对下一级别元素进行验证。

如果将整个XML文件看作是一棵树的话,那么CNONIX声明标签就是整棵树的根节点。

如果仅考虑基本元素的话,第(3)步和第(4)步中对于基本必备元素和基本扩展元素的验证可以采用深度优先遍历,顺序是先头文件信息后产品记录信息。

如果砍掉所有基本必备元素的分支(消息头复合元素和产品记录复合元素保留),那么对其他元素的验证类似广度优先遍历。

4.4 实例分析

下面的例2是一个CNONIX消息的片段:

例2 CNONIX信息片段

现用上节所述方法予以分析。在这段信息中:

(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,至此所有元素检查完毕。

5 设计与实现

基于本文的分析,采用JAVA(JDK7.0)作为编程语言,借助于Eclipse 4.2.0和Apache Tomcat 6.0环境搭建了一个CNONIX标准符合性测试平台。同时,采用Oracle 10g作为数据库保存标准中对各元素的约束。

5.1 测试用例生成

因为对于元素的选择性和重复性的测试只需要重复输入一次或不输入,所以这两个属性在设计实现过程中没有考虑,只考虑了类型、位数以及CNONIX代码表这三个属性。仍然是以上文提到的三个元素作为测试实例,重新整理后如表4所示,其中List 73规定的输入为00~99的两位数字。

Table 4 Element attributes(3)表4 部分元素属性(3)

生成测试用例的时候,首先根据数据库中保存的元素全部约束生成一条合法的输入,然后修改位数、类型、代码表等属性以生成不合法的输入。每条非法输入都是通过对合法输入最小改动得到的。实验结果如表5所示。

Table 5 Element attributes(4)表5 部分元素属性(4)

需要再次强调的是,表5中的结果是在不考虑元素的选择性和重复性的情况下得到的。

5.2 XML文件的验证

对XML文件的验证,在设计和实现上借助了dom4j API,同时需要使用XSD(XML Schema Definition)语言记录标准中各元素(及复合元素)的规则。在进行测试之前需要做些准备工作。首先,根据4.2节和4.3节的分析,按照相应方法生成与待测XML文件对应的XSD文件来保存校验规则。其次,为了引入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文件进行验证。

最后,需要再次强调的是,这一部分里提到的测试和验证,只是测试信息的结构是否符合CNONIX标准,并不能验证信息的具体内容。

6 结束语

本文针对CNONIX系列标准提出了一个标准符合性测试的设计方案,并以CNONIX for Books为代表讨论了作为输入的测试用例的数量及生成方案。最后,考虑到CNONIX属于数据交换标准,为了方便信息的流通,设计了一个直接检验相关XML文件的方案,并提供了一个实例片段进行了说明。

通过讨论,发现由于元素量大、每条元素属性影响明显,进行覆盖测试需生成大量的测试用例。虽然在文中了对单个元素的属性进行了分析,但是以此为依据进行测试需要的测试用例数量仍然不小。因而,在未来的工作中,将重点研究元素之间的相关性,期望可以进一步缩减测试用例数目。

[1] China online information exchange for books(CNONIX)[S].Beijing:State Administration of Press,Publication,Radio,Film 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-hong.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-hua,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:我国书业发行信息标准的钥匙[EB/OL].[2007-06-18].http://www.360doc.com/content/09/0411/22/81544_3099364.shtml.

[4] 马蕾.电子出版物元数据标准ONIX[J].现代情报,2003(1):64-66.

[5] 阚丹丹.几个常用测试用例设计方法及应用[J].电脑知识与技术,2010,6(1):118-120.

[6] 朱海燕.软件测试用例缩减的一个算法[J].微电子学与计算机,2007,24(1):204-206.

[7] 崔奇,马楠,刘贤刚.TPM接口命令标准符合性测试的设计与实现[J].计算机工程,2009,35(2):129-132.

猜你喜欢

测试用例合法代码
合法兼职受保护
基于SmartUnit的安全通信系统单元测试用例自动生成
被赖账讨薪要合法
合法外衣下的多重阻挠
创世代码
创世代码
创世代码
创世代码
基于混合遗传算法的回归测试用例集最小化研究
找个人来替我怀孕一一代孕该合法吗?