一种应用于测试系统的代码重用方法转让专利

申请号 : CN201410400355.X

文献号 : CN104156314A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨顺昆刘斌司维

申请人 : 北京航空航天大学

摘要 :

本发明公开了一种应用于测试系统的代码重用方法,选择在测试框架代码中重用的代码的头文件和相匹配的代码文件;利用正则表达式自动解析头文件并从中获取符合格式要求的函数;在图形界面中显示解析出的信息,在图形界面中为函数配置调用的位置、返回值以及要传递给函数的参数;完成配置后,自动对配置进行合法性检查;自动将函数的调用语句添加到选择的位置,并且将对头文件的包含语句添加到相应的位置、将头文件和代码文件与生成的其他代码文件一起编译并生成可执行程序。本发明根据测试需求自动生成函数调用语句并将其生成到需要的位置;可以自动解析代码并获取函数相关信息以便方便地利用图形化界面操作的方式让测试人员完成代码重用的配置。

权利要求 :

1.一种应用于测试系统的代码重用方法,其特征在于实现步骤如下:

(1)选择要在测试框架代码中重用的代码的头文件和相匹配的代码文件;所述测试框架代码指测试系统为满足代码重用需求而开放出来的描述测试过程的代码,这些代码由测试系统自动生成;

(2)利用正则表达式自动解析头文件并从中获取符合格式要求的函数,并将函数的函数名、返回值、参数信息保存到数据容器中;所述利用正则表达式自动解析头文件并从中获取符合格式要求的函数按照以下步骤进行:(21)打开头文件并且获取一行内容存入字符串,该字符串称为“源字符串”;

(22)利用正则表达式判断“源字符串”的内容是否符合函数的标准形式,所述函数标准形式指测试系统所生成的测试框架代码采用的编程语言中对“函数”的形式所作的规定,随着编程语言的不同,函数的标准形式和应采用的正则表达式不同,但只需能够判断“源字符串”是否符合函数的标准形式即可,对方法本身的实现没有影响;

(23)如果“源字符串”的内容符合格式要求,即符合函数的标准形式,从“源字符串”中获取函数的返回值、函数名以及调用函数需要传递的各参数保存到数据容器中并继续解析直至头文件中的内容全部解析完毕;如果不符合格式要求,则获取下一行内容存入“源字符串”中,直至头文件中的内容全部解析完毕;

(3)在图形界面中显示步骤(2)解析出的函数的信息,在图形界面中为函数配置调用的位置、返回值以及要传递给函数的参数以便完成代码重用的配置,步骤(3)执行的条件是步骤(2)执行完毕且获得了符合格式要求的函数,否则回到步骤(1);

(4)完成代码重用的配置后,自动对测试人员的配置进行合法性检查,检查按照以下步骤进行:(41)所选函数的参数是否全部配置;

(42)所选函数是否有返回值,返回值是否配置;

(43)函数的参数和返回值配置是否正确,类型是否匹配;

(44)函数的调用位置是否正确配置;

(5)测试系统生成测试框架代码的时候自动将函数的调用语句添加到选择的位置,并且将对头文件的包含语句添加到相应的位置、将头文件和代码文件与生成的其他代码文件一起编译并生成可执行程序,函数的调用语句生成的格式为“返回值=函数名(参数1,参数2,……,参数n);”,如果函数不包括返回值则生成的调用语句格式为“函数名(参数

1,参数2,……,参数n);”。

2.根据权利要求1所述的应用于测试系统的代码重用方法,其特征在于:所述步骤(1)中,所述代码文件包括扩展名为.c或.cpp形式的代码文本文件和.o或.lib形式的经过编译的代码库文件。

3.根据权利要求1所述的应用于测试系统的代码重用方法,其特征在于:所述步骤(3)中所述的传递给函数的参数选择多种形式:常量、测试系统中的变量以及测试人员自定义的变量;所述测试系统中的变量是指测试系统为实现测试数据记录、收集和方便区分管理测试过程中测试人员关心的关键数值和物理量所定义的变量,针对不同的测试系统其名称可能不同;自定义变量要以图形界面的形式提供测试人员配置变量作用域、初始值、变量数据类型以及变量名的功能;所述变量作用域指变量是全局变量还是局部变量。

4.根据权利要求1所述的应用于测试系统的代码重用方法,其特征在于:所述步骤(3)中所述的函数调用的位置对应于测试系统中的变量的各个阶段,可以选择变量传输前和变量传输后、以及变量的初始化和销毁阶段;函数调用位置的选择按照以下原则进行:(31)如果函数本身对调用位置有明确的要求,按照要求选择;

(32)如果函数本身对调用位置没有明确的要求,按照函数的功能选择。

5.根据权利要求1所述的应用于测试系统的代码重用方法,其特征在于:所述步骤(5)中所述的将对头文件的包含语句添加到相应的位置,将头文件和代码文件与生成的其他代码文件一起编译包括自动解析测试人员选择重用的头文件和代码文件,找出文件中对其他头文件的引用并进一步查找这些头文件中对其他头文件的引用,将这些直接、间接引用的头文件自动拷贝到生成的测试框架代码的路径下以保证编译正常进行。

说明书 :

一种应用于测试系统的代码重用方法

技术领域

[0001] 本发明涉及一种应用于测试系统的代码重用方法,属于嵌入式软件测试技术领域。

背景技术

[0002] 在测试过程中,测试人员经常希望能够重用以前的代码。重用代码一方面可以节省大量的时间和成本,以便在最短的时间内完成测试工作,另一方面利用经过验证的算法和代码模型进行测试,可以提高测试过程本身的可靠性和安全性。
[0003] 当前很多的测试系统都不具备完善的代码重用功能,例如ADS2、dSPACE等等,或者如GESTE、TestShell等测试系统虽然提供了部分代码重用功能,但还有一定的缺陷。常用的代码重用方法有以下几种:有的测试系统开放全部的测试框架代码,可供测试人员修改,测试人员可以通过手动修改代码来完成代码重用操作;有的测试系统只开放了一部分关键代码,例如,测试系统进行数据传输之前和之后的代码,以便测试人员在这些位置添加自己的函数调用和代码重用操作;有的测试系统能够调用动态链接库里的函数,这也是代码重用功能的另一种体现。
[0004] 但是,这些实现代码重用的方法都有一些缺陷。首先,如果测试系统重用的代码是以动态链接库形式添加到系统中调用的,那么必然要损失一定的灵活性,重用的代码必须使用编译器编译好然后再由测试系统进行调用,但是一般作为测试系统运行载体的计算机不一定配备编译器和开发环境,如果需要对重用的代码做出修改需要到别的机器上修改代码并编译完成后再将编译好的动态链接库拷贝到测试系统中,出于保密性的考虑这种方法不可取。
[0005] 对于开放部分或全部测试框架代码实现代码重用的测试系统,通常这些系统的测试框架代码都是提前编写好或者是根据测试活动的要求自动生成的,这种测试系统一定会配备代码编辑器和编译器,如果需要修改重用的代码,测试人员只要在测试系统里直接修改再进行编译即可。然而,这种实现代码重用的方法也有自己的缺陷:首先,测试人员必须打开要重用的代码文件进行阅读才能了解其中代码的特性;其次,测试人员手动修改、编写代码不仅效率低而且易出错,严重影响测试效率;再次,测试人员手动修改的代码很难被测试系统识别出来,测试人员对测试框架代码做出修改后,如果因为某些原因必须重新生成测试框架代码,则必须在生成代码后重新进行代码修改;最重要的是,测试人员必须对测试系统生成的测试框架代码足够熟悉才可以通过修改代码完成代码重用操作,提高了测试人员的技术门槛和测试成本。
[0006] 因此,需要一种方法,一方面可以根据测试需求自动生成函数调用语句并将其生成到需要的位置,另一方面可以自动解析代码并获取函数相关信息以便方便地利用图形化界面操作的方式让测试人员完成代码重用的配置,并且在重新生成测试框架代码后不需要重新进行代码重用的配置或修改工作。

发明内容

[0007] 本发明技术解决问题:克服现有技术的不足,提供一种应用于测试系统的代码重用方法,一方面可以根据测试需求自动生成函数调用语句并将其生成到需要的位置;另一方面可以自动解析代码并获取函数相关信息,以便方便地利用图形化界面操作的方式让测试人员完成代码重用的配置,并且在重新生成测试框架代码后不需要重新进行代码重用的配置或修改工作。
[0008] 本发明技术方案如下:
[0009] 一种应用于测试系统的代码重用方法,能够自动解析代码的头文件并且将头文件中的函数提取出来供测试人员通过图形界面进行配置并自动完成函数的调用:
[0010] 具体实现步骤:
[0011] (1)测试人员选择要在测试框架代码中重用的代码的头文件和相匹配的代码文件;所述测试框架代码指测试系统为满足代码重用需求而开放出来的描述测试过程的代码,这些代码由测试系统自动生成;
[0012] (2)利用正则表达式自动解析头文件并从中获取符合格式要求的函数,并将函数的函数名、返回值、参数等信息保存到数据容器中,数据容器可以使用数组、链表、容器、哈希表等各种类型的数据容器,对方法本身的实现没有影响;所述自动解析头文件并从中获取符合格式要求的函数按照以下步骤进行:
[0013] a)打开头文件并且获取一行内容存入字符串,该字符串称为“源字符串”;
[0014] b)利用正则表达式判断“源字符串”的内容是否符合函数的标准形式,所述“函数标准形式”指应用本方法的测试系统所生成的测试框架代码采用的编程语言中对“函数”的形式所作的规定,随着编程语言的不同,函数的标准形式和应采用的正则表达式不同,但只需能够判断“源字符串”是否符合函数的标准形式即可,对方法本身的实现没有影响;
[0015] c)如果“源字符串”的内容符合格式要求,也就是说,符合函数的标准形式,从其中获取函数的返回值、函数名以及调用函数需要传递的各参数保存到数据容器中并继续解析直至头文件中的内容全部解析完毕;如果不符合格式要求,获取下一行内容存入“源字符串”中直至头文件中的内容全部解析完毕;
[0016] (3)在图形界面中显示步骤2)解析出的函数的信息,测试人员在图形界面中为函数配置调用的位置、返回值以及要传递给函数的参数以便完成代码重用的配置,步骤(3)执行的条件是步骤(2)执行完毕且获得了符合格式要求的函数,否则回到步骤1);
[0017] (4)完成代码重用配置后,自动对测试人员的配置进行合法性检查,检查按照以下步骤进行:
[0018] a)所选函数的参数是否全部配置;
[0019] b)所选函数是否有返回值,返回值是否配置;
[0020] c)函数的参数和返回值配置是否正确,类型是否匹配;
[0021] d)函数的调用位置是否正确配置;
[0022] (5)测试系统生成测试框架代码的时候自动将函数的调用语句添加到测试人员选择的位置,并且将对头文件的包含语句添加到相应的位置、将头文件和代码文件与生成的其他代码文件一起编译并生成可执行程序;函数的调用语句生成的格式为“返回值=函数名(参数1,参数2,……,参数n);”,如果函数不包括返回值则生成的调用语句格式为“函数名(参数1,参数2,……,参数n);”;
[0023] 步骤(1)中所述的代码文件,包括扩展名为.c或.cpp等形式的代码文本文件和.o或.lib等形式的经过编译的代码库文件。
[0024] 步骤(3)中所述的传递给函数的参数,可以选择多种形式:常量、测试系统中的变量以及测试人员自定义的变量;所述“测试系统中的变量”是指测试系统为实现测试数据记录、收集和方便区分管理测试过程中测试人员关心的关键数值和物理量所定义的变量,针对不同的测试系统其名称可能不同;自定义变量要以图形界面的形式提供测试人员配置变量作用域、初始值、变量数据类型以及变量名的功能;所述变量作用域指变量是全局变量还是局部变量。
[0025] 步骤(3)中所述的函数调用的位置对应于测试系统中的变量的各个阶段,可以选择变量传输前和变量传输后、以及变量的初始化和销毁阶段;函数调用位置的选择按照以下原则进行:
[0026] a)如果函数本身对调用位置有明确的要求,按照要求选择;例如,函数要对变量值进行操作,则必须在变量初始化完成后调用;
[0027] b)如果函数本身对调用位置没有明确的要求,按照函数的功能选择;例如,测试系统中的变量通常分为发送变量和接收变量,某函数的功能为按照某种算法计算校验位,则应该在发送变量开始传输前调用;
[0028] 步骤(5)中所述的将对头文件的包含语句添加到相应的位置,将头文件和代码文件与生成的其他代码文件一起编译包括自动解析测试人员选择重用的头文件和代码文件,找出文件中对其他头文件的引用并进一步查找这些头文件中对其他头文件的引用,将这些直接、间接引用的头文件自动拷贝到生成的测试框架代码的路径下以保证编译正常进行。
[0029] 本发明与现有技术相比的优点在于:通过自动解析重用代码中的函数,测试系统能够将函数的结构通过图形界面表达给测试人员且测试人员能够方便地利用图形化界面操作的方式完成代码重用的配置,一方面对重用的代码进行了更好的封装、测试人员不必打开代码文件即可完成代码重用的相关操作,另一方面利用图形界面提高测试人员工作的效率并对测试人员的配置进行合法性检查,可以在对代码进行编译之前就检查出测试系统中存在的错误,提高测试过程本身的可靠性;此外,本发明所述的代码重用方法支持将编译完成的库文件重用到测试系统中,可以满足有保密要求的测试活动。本发明所述方法可以根据测试需求自动生成函数调用语句并将其生成到需要的位置,测试人员不必了解测试框架代码就可以完成代码重用的配置工作,并且测试人员不需要手动修改测试框架代码,避免了由于人为原因造成错误;代码重用的配置信息不受重新生成测试框架代码的影响,所以在重新生成测试框架代码后不需要重新进行代码重用的配置或修改工作。

附图说明

[0030] 图1为本发明所述的一种应用于测试系统的代码重用方法的实现过程;
[0031] 图2为本发明所述方法的实施例中代码重用信息管理类的结构;
[0032] 图3为本发明所述方法的实施例中函数信息管理类的结构;
[0033] 图4为本发明所述方法的实施例中自定义变量信息管理类的结构。

具体实施方式

[0034] 为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
[0035] 本发明涉及一种应用于测试系统的代码重用方法,这种方法一方面可以根据测试需求自动生成函数调用语句并将其生成到需要的位置;另一方面可以自动解析代码并获取函数相关信息以便方便地利用图形化界面操作的方式让测试人员完成代码重用的配置,并且在重新生成测试框架代码后不需要重新进行代码重用的配置或修改工作。
[0036] 如图1所示,本发明在实施例中的具体步骤如下:
[0037] 步骤一:测试人员选择要在测试框架代码中重用的代码的头文件和相匹配的代码文件。所述的代码文件,包括扩展名为.c或.cpp等形式的代码文本文件和.o或.lib等形式的经过编译的代码库文件。在本实施例中,在测试系统中提供图形界面以便测试人员设置代码重用文件的路径和文件名,本实施例中应用方法的系统基于VxWorks系统,故测试系统的支持添加.c和.o形式的代码文件。
[0038] 步骤二:利用正则表达式自动解析头文件并从中获取符合格式要求的函数,并将函数的函数名、返回值、参数等信息保存到数据容器中,数据容器可以使用数组、链表、容器、哈希表等各种类型的数据容器,对方法本身的实现没有影响。本发明所述方法自动解析头文件并从中获取符合格式要求的函数按照以下步骤进行:
[0039] a)打开头文件并且获取一行内容存入字符串,该字符串称为“源字符串”;
[0040] b)利用正则表达式判断“源字符串”的内容是否符合函数的标准形式,所述“函数标准形式”指应用本方法的测试系统所生成的测试框架代码采用的编程语言中对“函数”的形式所作的规定,随着编程语言的不同,函数的标准形式和应采用的正则表达式不同,但只需能够判断“源字符串”是否符合函数的标准形式即可,对方法本身的实现没有影响;
[0041] c)如果“源字符串”的内容符合格式要求,也就是说,符合函数的标准形式,从其中获取函数的返回值、函数名以及调用函数需要传递的各参数保存到数据容器中并继续解析直至头文件中的内容全部解析完毕;如果不符合格式要求,获取下一行内容存入“源字符串”中直至头文件中的内容全部解析完毕;
[0042] 在本实施例中,使用类CCodeReUseInfo来管理代码重用信息,类CCodeReUseInfo的类图见附图2,它包含CHeadFileInfo类的对象和CCodeFileInfo类的对象,这两个对象分别用来记录和管理测试人员选择的头文件的相关信息和代码文件相关信息,其中,CCodeFileInfo类中包含STRING类型的成员变量m_strCodeFilePath,该变量用于记录测试人员选择的代码文件的路径;CHeadFileInfo包含STRING类型的成员变量m_strHeadFilePath,该变量用于记录测试人员选择的头文件的路径;CHeadFileInfo类还包含一个key为STRING型,value为CFunctionInfo类对象的map,用于记录解析出的各函数的信息以及测试人员对函数的配置信息,函数名作为key。CCodeReUseInfo类还包含一个key为STRING型,value为CUserVariableInfo类对象的map,用于记录测试人员定义的各自定义变量的信息,其中,key为变量名。
[0043] 步骤三:在图形界面中显示步骤二解析出的函数的信息,测试人员在图形界面中为函数配置调用的位置、返回值以及要传递给函数的参数,步骤三执行的条件是步骤二执行完毕且获得了符合格式要求的函数,否则回到步骤一。
[0044] 所述的传递给函数的参数,可以选择多种形式:常量、测试系统中的变量以及测试人员自定义的变量;所述“测试系统中的变量”是指测试系统为实现测试数据记录、收集和方便区分管理测试过程中测试人员关心的关键数值和物理量所定义的变量,针对不同的测试系统其名称可能不同;自定义变量要以图形界面的形式提供测试人员配置变量作用域、初始值、变量数据类型以及变量名的功能;所述变量作用域指变量是全局变量还是局部变量。
[0045] 在本发明实施例中,函数的各项配置保存在类CFunctionInfo类的对象中,该类类图如附图3,CFunctionInfo类含有三个STRING类的成员变量:m_strName、m_strReturnType和m_strReturnValue,分别用于记录函数的名称、返回值类型和测试人员实际配置的接收返回值的变量;CFunctionInfo类还包含一个CCallPosition类型的数组,用于记录函数的调用位置,CCallPosition类的两个成员变量m_strBindingVar和m_pos分别用于记录函数的调用位置与哪个变量绑定以及函数的调用语句应该生成在变量相关代码的哪个位置;CFunctionInfo类还包含两个STRING类型的数组,分别用于记录函数参数的类型以及测试人员实际配置的传递给函数的参数,并且两个数组里的内容是一一对应的。
[0046] 测试人员自定义变量的各项配置信息保存在类CUserVariableInfo当中,该类类图如附图4,CUserVariableInfo包含四个STRING类型的成员变量:m_strVarName、m_strDataType、m_Type、m_DefValue,分别用于记录测试人员自定义的变量的名称、数据类型、变量作用域、变量的初值。
[0047] 所述的函数调用的位置对应于测试系统中的变量的各个阶段,可以选择变量传输前和变量传输后、以及变量的初始化和销毁阶段。
[0048] 步骤四:完成配置后,自动对测试人员的配置进行合法性检查,检查按照以下步骤进行:
[0049] a)所选函数的参数是否全部配置;
[0050] b)所选函数是否有返回值,返回值是否配置;
[0051] c)函数的参数和返回值配置是否正确,类型是否匹配;
[0052] d)函数的调用位置是否正确配置;
[0053] 步骤五:测试系统生成测试框架代码的时候自动将函数的调用语句添加到测试人员选择的位置,并且将对头文件的包含语句添加到相应的位置、将头文件和代码文件与生成的其他代码文件一起编译并生成可执行程序。函数的调用语句生成的格式为“返回值=函数名(参数1,参数2,……,参数n);”,如果函数不包括返回值则生成的调用语句格式为“函数名(参数1,参数2,……,参数n);”。
[0054] 本发明未详细阐述部分属于本领域公知技术。
[0055] 以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。