CN105912470B - 适用于asn.1的测试用例生成方法 - Google Patents
适用于asn.1的测试用例生成方法 Download PDFInfo
- Publication number
- CN105912470B CN105912470B CN201610221184.3A CN201610221184A CN105912470B CN 105912470 B CN105912470 B CN 105912470B CN 201610221184 A CN201610221184 A CN 201610221184A CN 105912470 B CN105912470 B CN 105912470B
- Authority
- CN
- China
- Prior art keywords
- data
- node
- test
- case
- data type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 86
- 238000000034 method Methods 0.000 title claims abstract description 27
- 230000008569 process Effects 0.000 claims description 5
- 239000002775 capsule Substances 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种适用于ASN.1的测试用例生成方法,其特点是:对任意以ASN.1文法定义的测试case,通过分析ASN.1编译器产生的数据类型描述,构成PDU树。并为每一棵PDU树生成结构完全一样的测试用例树。建立一个数据类型容器,使得测试用例树上的每一个节点都可以在其中找到数据类型独一无二的节点。通过对数据类型容器节点的取值分析和取值刷新,可以自动产生完备性的测试用例数据。结合测试用例树和数据类型容器,可以对目标平台上的编码前PDU数据进行自动化赋值以及后续的编解码测试,免除了手工编程,且保证了测试数据的完备性。当ASN.1文法定义的测试case发生修改时,可以自动随之产生新的测试数据。
Description
技术领域
本发明涉及一种测试用例生成方法,尤其涉及一种适用于ASN.1的测试用例生成方法。
背景技术
就现有技术来看,ASN.1文法可以定义基于基本类型的数据结构,在实践时,通信双方的数据会保存在一个码流中,用编解码器对其进行编解码。
并且,编解码器在开发测试时,一般会依据定义好的一系列测试case(以ASN.1文法描述),用编译器对其进行编译,生成数据结构描述数据,然后为每一个case在目标平台产生PDU数据,用编解码器对该PDU数据进行编解码验证。
同时,对一个独立的测试case而言,由于其仅定义了PDU数据的结构,而没有定义其内容,所以在测试过程中必须要尽可能完备地对PDU进行赋值。
例如下面的测试case:
IntType::=INTEGER(10..20)
可以为该类型以C语言定义为:
typedef unsigned short IntType
也就是说,测试case的PDU是一个短整型。那么用该测试case对编解码库进行测试时,则需要声明一个PDU数据变量:IntType test。然后,对该变量进行赋值,将赋值后的变量传递给编解码库进行编解码测试。
问题在于,该变量的取值范围是[10,20],从完备测试角度来说,该测试case可以产生11种PDU数据,所以需要将其赋值并测试11次。然而,实际处理中,不能手动编写这些测试数据。
理由如下:
测试case是会变动的,如果手动编写,一旦测试case修改,那么所有的相关用例必须一起修改。并且,该工作量极其大,而且容易出错,显然在实际实施的时候是不可取的。更为重要的是,PDU并不总是一个简单结构,当其结构复杂时,手动编写测试数据将会变的极为困难,严重增加了人力成本投入。
有鉴于上述的缺陷,本设计人,积极加以研究创新,以期创设一种适用于ASN.1的测试用例生成方法,使其更具有产业上的利用价值。
发明内容
为解决上述技术问题,本发明的目的是提供一种适用于ASN.1的测试用例生成方法。
本发明的适用于ASN.1的测试用例生成方法,其特征在于包括以下步骤:
步骤一,通过分析ASN.1编译器产生的数据类型描述,构成PDU树;
步骤二,生成与PDU树结构完全一样的测试用例树,并新建一个数据类型容器,将测试用例树上的所有数据类型,在数据类型容器中产生一个独一无二的数据类型节点,并将测试用例树的节点和数据类型容器的节点进行链接;
步骤三,进行用例生成;
步骤四,遍历测试用例树,产生目标平台上的编码前PDU数据;
步骤五,对步骤四生成的PDU进行编解码测试;
步骤六,对数据容器中的所有数据类型节点进行完备性判断,如果所有节点的取值均已完备,则结束,否则跳转至步骤三进行下一个用例的生成并测试。
进一步地,上述的适用于ASN.1的测试用例生成方法,其中,步骤二所述数据类型容器其每一个节点包含有,该类型的取值信息、取值状态。
更进一步地,上述的适用于ASN.1的测试用例生成方法,其中,所述取值信息,其内容与该节点的ASN.1数据类型相对应,表述当前用例生成过程中,该类型对应的编码前数据域取值范围和当前取值;
所述取值状态,表示当前数据类型的编码测试用例数据生成是否已经完备。
更进一步地,上述的适用于ASN.1的测试用例生成方法,其中,步骤二所述的测试用例树,其每一个节点包含有,数据类型描述信息引用、编码前数据的位置信息。
更进一步地,上述的适用于ASN.1的测试用例生成方法,其中,所述数据类型描述信息引用为编译器产生的该类型的描述信息,所述编码前数据的位置信息为,该节点与其父节点的相对内存地址偏移,以通过父节点的地址来定位当前节点在编码前数据中的地址。
更进一步地,上述的适用于ASN.1的测试用例生成方法,其中,所述步骤二的数据类型容器节点生成方法为,在用例树的建立过程中,查询数据类型容器,判断该节点对应的数据类型节点是否存在,如不存在,则产生一个新的节点放在容器中并将其关联到该用例节点,如存在,则将查找到的数据类型容器节点关联到用例节点。
更进一步地,上述的适用于ASN.1的测试用例生成方法,其中,所述步骤四中,
首先,生成一个编码前PDU数据变量,并将其地址与用例树的根相对应;
之后,从用例树的根开始,对其进行前序遍历;
接着,对遍历中的每一个节点,用刷新后的值,根据其父节点的地址和当前节点的编码前数据的位置信息,对其编码前的数据域进行定位和赋值;
最终,待遍历完成后,生成编码前的PDU数据。
再进一步地,上述的适用于ASN.1的测试用例生成方法,其中,所述步骤五中,先对用例进行编码,产生ASN.1码流,再对码流进行解码,将解码后的数据内容与测试用例树通过遍历进行比对,若两者一致则编解码正确,否则编解码错误。
借由上述方案,本发明至少具有以下优点:
1、测试过程中仅需要手工定义ASN.1语法描述的测试case,不需要为每一个测试case定义大量的目标平台编码前PDU数据,免除了大量的手工编程。
2、当修改测试case时,会自动生成相应的测试PDU数据,使得开发人员可以将精力集中到测试case定义的完备性上。
3、能够自动产生测试用例的PDU数据变量,拥有完善的关系描述,任意一个节点可以查找到其子节点,便于实现数据追溯。
4、可对编码前数据进行赋值,使得每一个域都尽量覆盖所有的取值,保证了测试用例的完备性。
5、实际应用中会利用ASN.1语法来定义各种通讯数据结构,而在实施编解码库时,则可以将目标通讯数据结构(例如LTE RRC的消息定义)作为测试用例,对其进行完备性测试以保证其正确性。
6、该方法适用于所有ASN.1的编解码方式,所有的目标平台,具有普遍的可实施性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1是PDU树的结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1的适用于ASN.1的测试用例生成方法,其与众不同之处在于包括以下步骤:
首先,生成PDU数据变量,构成PDU树。为了便于实施,可采用通过编译器生成PDU树。同时,考虑到后续数据处理的需要,使得从任意一个节点可以查找到其子节点,对PDU树对应的基本属性、子节点的关系、目标平台环境的数据类型声明进行对应表述。为了便于提高数据处理效率,基本属性包括类型、取值约束、成员中的一种或是多种。
接着,根据PDU树生成一棵节点结构完全一致的测试用例树和一个数据类型容器,并为每一个用例树节点在数据类型容器中查找或建立一个独一无二的数据类型节点。
该测试用例树,包含有,数据类型描述信息引用、编码前数据的位置信息。
具体来说,数据类型描述信息引用为编译器产生的该类型的描述信息位置,以便快速对其进行读取。编码前数据的位置信息为该节点与其父节点相对的内存地址偏移,结合父节点地址即可以定位与该节点对应的编码前数据域。由于目标平台是非唯一的,为此,该位置信息的具体形式取决于目标平台。
数据容器中包含了测试用例树中所有引用到的数据类型,每一个节点唯一表示一种数据类型,该容器包含有,数据类型的取值信息、取值状态。
取值信息放入内容与该节点的ASN.1数据类型相对应。例如INTEGER的值就是一个整数,BIT STRING的取值就是一段bit位等等。取值状态,表示每一个数据类型的编码都处于可被测试状态。
由此可见,每一个节点的取值都应该是一个有限的范围,即便其是一个有无数取值可能的数据类型,也应该根据编解码规则,对取值范围进行划分。例如一个无约束的BITSTRING,它可以容纳无数比特位,但是在ASN.1UPER编码规则中,当其长度为128位、16K位,64K位时,编码方式会产生变化,这样就可以将其长度取值切分为5段,只要将每一段的边界取值与该段内的一个随机值测试到,则可以认为已经覆盖到所有的编码可能。在测试用例生成过程中,需要将每一个数据类型的可能编码都测试到,故可以显式或隐式地在取值信息中将其待测试的取值集合表达出来,而取值状态则表明这个目标是否达成。
接着,进行用例生成。具体来说,采用如下步骤:
1、从用例树的根开始,对其进行前序遍历。
2、对遍历中的每一个节点,根据其数据类型描述,将其取值进行一次刷新,如果在该刷新动作完成后,依然有待测取值,则设置节点的取值状态为0,否则为1。
3、对遍历中的每一个节点,用刷新后的值,对编码前的数据域进行赋值。
4、待遍历完成后,生成编码前的PDU数据。随后,对先前步骤生成的PDU进行编解码测试即可。
最终,对数据类型容器中的每一个节点进行取值状态进行查询,如果所有节点的取值状态均为1,则测试结束,否则应重新生成测试用例数据,并进行编解码测试。
本发明的工作原理如下:
在实践中PDU通常由一组数据结构定义组成,例如:
在这个测试用例中显式定义了A、B、C、D四种数据结构,隐式定义了以下数据结构:
T1:OCTET STRING(CONTAINING D)
T2:INTEGER(1..10)
T3:BIT STRING(SIZE(2..4))
T4:ENUMERATED(red,blue)
T5:INTEGER(3..10)
显然,除了A外,其他每一个类型都被其他定义所引用,所以A是PDU入口,其PDU树的结构可以描述为如图1所示。也就是说,在编译器生成的描述数据中,除了应该描述其一些基本属性(例如类型、取值约束、成员等等)外,还应该描述出这种关系,使得从任意一个节点可以查找到其子节点。编译器除了生成这些数据外,还应该生成与这些数据类型所对应的,目标平台环境的数据类型声明。
举例来说,
可以将其以C语言描述为:
对编解码器来说,一个显而易见的要求就是,需要根据数据描述和目标平台数据类型声明规则,可以对编码前数据进行准确的存取。也就是说,PDU树和编码前的数据是可以通过遍历一一对应起来。所谓编码前数据,根据目标平台的要求不同,其数据形式也不同,对上面的例子来说,就是一片包含了A结构数据的内存。
并且,在实际实施的时候,需要对每一个测试case,不断对用例树用上述方法进行节点取值的刷新,直到用例树的每一个节点的取值状态均为1时,才可以认为所有的用例生成已经完成。
在实践中,往往一个数据类型会被多次引用,例如ASN.1用例:
由此可见,在PDU T9的用例树中,T6出现了两次,所以它将会有两个节点,按照上述方法,每一个节点都会被测试一次,而这种测试是重复的。当测试用例足够复杂时,这种重复的引用出现的几率会大大增加。因此,本发明在实施期间才引入了针对重复引用的修正。
通过上述的文字表述并结合附图可以看出,采用本发明后,拥有如下优点:
1、测试过程中仅需要手工定义ASN.1语法描述的测试case,不需要为每一个测试case定义大量的目标平台编码前PDU数据,免除了大量的手工编程。
2、当修改测试case时,会自动生成相应的测试PDU数据,使得开发人员可以将精力集中到测试case定义的完备性上。
3、能够自动产生测试用例的PDU数据变量,拥有完善的关系描述,任意一个节点可以查找到其子节点,便于实现数据追溯。
4、可对编码前数据进行赋值,使得每一个域都尽量覆盖所有的取值,保证了测试用例的完备性。
5、实际应用中会利用ASN.1语法来定义各种通讯数据结构,而在实施编解码库时,则可以将目标通讯数据结构(例如LTE RRC的消息定义)作为测试用例,对其进行完备性测试以保证其正确性。
6、该方法适用于所有ASN.1的编解码方式,所有的目标平台,具有普遍的可实施性。
以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。
Claims (1)
1.适用于ASN.1的测试用例生成方法,其特征在于包括以下步骤:
步骤一,通过分析ASN.1编译器产生的数据类型描述,构成PDU树;
步骤二,生成与PDU树结构完全一样的测试用例树,并新建一个数据类型容器,将测试用例树上的所有数据类型,在数据类型容器中产生一个独一无二的数据类型节点,并将测试用例树的节点和数据类型容器的节点进行链接,所述数据类型容器其每一个节点包含有,该类型的取值信息、取值状态,所述取值信息,其内容与该节点的ASN.1数据类型相对应,表述当前用例生成过程中,该类型对应的编码前数据域取值范围和当前取值,
所述取值状态,表示当前数据类型的编码测试用例数据生成是否已经完备,所述的测试用例树,其每一个节点包含有,数据类型描述信息引用、编码前数据的位置信息,所述数据类型描述信息引用为编译器产生的该类型的描述信息,所述编码前数据的位置信息为,该节点与其父节点的相对内存地址偏移,以通过父节点的地址来定位当前节点在编码前数据中的地址,
所述数据类型容器节点生成方法为,在用例树的建立过程中,查询数据类型容器,判断该节点对应的数据类型节点是否存在,如不存在,则产生一个新的节点放在容器中并将其关联到该用例节点,如存在,则将查找到的数据类型容器节点关联到用例节点;
步骤三,进行用例生成;
步骤四,遍历测试用例树,产生目标平台上的编码前PDU数据,首先,生成一个编码前PDU数据变量,并将其地址与用例树的根相对应,之后,从用例树的根开始,对其进行前序遍历,接着,对遍历中的每一个节点,用刷新后的值,根据其父节点的地址和当前节点的编码前数据的位置信息,对其编码前的数据域进行定位和赋值,最终,待遍历完成后,生成编码前的PDU数据;
步骤五,对步骤四生成的PDU进行编解码测试,先对用例进行编码,产生ASN.1码流,再对码流进行解码,将解码后的数据内容与测试用例树通过遍历进行比对,若两者一致则编解码正确,否则编解码错误;
步骤六,对数据容器中的所有数据类型节点进行完备性判断,如果所有节点的取值均已完备,则结束,否则跳转至步骤三进行下一个用例的生成并测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610221184.3A CN105912470B (zh) | 2016-04-11 | 2016-04-11 | 适用于asn.1的测试用例生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610221184.3A CN105912470B (zh) | 2016-04-11 | 2016-04-11 | 适用于asn.1的测试用例生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105912470A CN105912470A (zh) | 2016-08-31 |
CN105912470B true CN105912470B (zh) | 2018-09-07 |
Family
ID=56745014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610221184.3A Expired - Fee Related CN105912470B (zh) | 2016-04-11 | 2016-04-11 | 适用于asn.1的测试用例生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105912470B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112100049A (zh) * | 2019-06-18 | 2020-12-18 | 北京数聚鑫云信息技术有限公司 | 一种生成测试数据的方法、装置、介质及设备 |
CN111522959B (zh) * | 2020-07-03 | 2021-05-28 | 科大讯飞(苏州)科技有限公司 | 实体分类方法、系统和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767524A (zh) * | 2004-10-31 | 2006-05-03 | 中兴通讯股份有限公司 | 消息处理系统及其处理方法 |
CN101582815A (zh) * | 2009-06-17 | 2009-11-18 | 北京星网锐捷网络技术有限公司 | 一种协议安全测试方法和装置 |
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8250658B2 (en) * | 2007-09-20 | 2012-08-21 | Mu Dynamics, Inc. | Syntax-based security analysis using dynamically generated test cases |
-
2016
- 2016-04-11 CN CN201610221184.3A patent/CN105912470B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1767524A (zh) * | 2004-10-31 | 2006-05-03 | 中兴通讯股份有限公司 | 消息处理系统及其处理方法 |
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
CN101582815A (zh) * | 2009-06-17 | 2009-11-18 | 北京星网锐捷网络技术有限公司 | 一种协议安全测试方法和装置 |
Non-Patent Citations (1)
Title |
---|
"通用ASN.1应用模型研究与实现";陈国松;《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》;20070615(第06期);文章第3.2.3节,第4.2-4.3节 * |
Also Published As
Publication number | Publication date |
---|---|
CN105912470A (zh) | 2016-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Proulx | Programming patterns and design patterns in the introductory computer science course | |
CN106649103B (zh) | 一种安卓应用程序自动化黑盒测试的方法及系统 | |
JP7237457B2 (ja) | コンピューティング装置 | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
CN105912470B (zh) | 适用于asn.1的测试用例生成方法 | |
Pereira et al. | A mobile app for teaching formal languages and automata | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
Zelikman et al. | Parsel🐍: Algorithmic Reasoning with Language Models by Composing Decompositions | |
Cristea et al. | The LAG grammar for authoring the adaptive web | |
Höller et al. | Compiling HTN plan verification problems into HTN planning problems | |
Ramírez et al. | Evolving smt strategies | |
Bozzelli et al. | Pushdown module checking | |
Luger et al. | AI algorithms, data structures, and idioms in Prolog, Lisp, and Java | |
Fremont | Algorithmic improvisation | |
Xin et al. | Lego-prover: Neural theorem proving with growing libraries | |
Scott et al. | Constraint solving on bounded string variables | |
Grigoryan | Research and development of algorithms and programs of knowledge acquisition and their effective application to resistance problems | |
CN110286891A (zh) | 一种基于代码属性张量的程序源代码编码方法 | |
Perháč et al. | Visualization of syntax and semantics for simple functional language of natural numbers and boolean values | |
Basten | Ambiguity detection for programming language grammars | |
Fu | Verifying probabilistic systems: new algorithms and complexity results | |
CN105867991B (zh) | 适用于asn.1编译器符号表的转换方法 | |
Alrmaih | Korat-API: An API for building constraint solving problems for Korat | |
CN111221532A (zh) | 一种动态链接库的生成方法及装置 | |
Domingue | An Automated Programming Advisor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180724 Address after: 100000 Beijing Haidian District Zhichun Road 6 Jin Qiu International Building B District 1001, 1002 room. Applicant after: BEIJING SIMPLIGHT NANOELECTRONICS Co.,Ltd. Address before: 215000 Jiangsu city Suzhou Suzhou Industrial Park 1211 Jinji Lake Road International Science and Technology Park 4 phase 301 Applicant before: SUZHOU SIMPLIGHT NANOELECTRONICS CO.,LTD. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180907 |
|
CF01 | Termination of patent right due to non-payment of annual fee |