针对软件构件的自动化测试方法

文档序号:6331130阅读:253来源:国知局
专利名称:针对软件构件的自动化测试方法
技术领域
针对软件构件的自动化测试方法属于网络设备的软件构件的自动化测试方法领 域,
背景技术
构件技术的核心思想是支持开发一种对外提供标准接口的可复用的二进制模块 (称为构件),并用这些模块来组合构造一个完整的软件系统,由于构件接口的标准性,不 同开发商开发的构件能够彼此协作,达到无缝集成的目的,构件技术能够很好地解决当前 的软件系统暴露出的缺乏可伸缩性和互操作性的缺点,并为减轻开发工作量、提高软件复 用率提供了一个很好的解决途径,基于构件(Component-Based)的软件很可能成为未来系 统的建构基础,构件及其相关技术,包括支持构件集成的软件体系结构技术以及特定领域 的构件系统设计技术等成为当前软件领域的研究热点,构件是大粒度、相对独立、可替换的系统构成部分,完成一个定义良好的系统结构 中的某项清晰的功能,它由一组接口来输出其功能,并可支持运行态绑定,构件可以在不同的环境中使用,也可在同一环境中被复合使用,因此构件需要提 供清楚的接口规范与对应环境进行交互,构件的封装、设计与外部表征尽量分离,构件对外 发生作用或构件间的交互,都是通过规范定义的接口进行,构件使用者只需要知道构件的 接口,而不关心其内部实现,利用针对构件的自动化测试方法进行对构件的自动化测试正 是利用构件的这种规范性,实现了对各种构件用归一化的方法进行测试,在这个过程中,可 以极大降低测试过程中人工的劳动量,使整个测试过程在测试人员仅给出入口数据和出口 数据的条件下,系统自动完成。

发明内容
在网络设备的软件构件环境下,利用针对构件的自动化测试方法,依据以下步骤 实现本发明的目的在于1、针对软件构件的自动化测试方法,其特征在于,是一种在可重构路由器内用一 个自动化测试模块对路由管理构件进行自动化测试的方法,步骤如下步骤(1),构造模板库,该模板库含有用于向待测试的路由管理构件输入路由信息的路由协议构件候选 模板以及用于接收所述待测试路由构件输出的经筛选路由信息的路由转发构件候选模板, 以下简称输入候选模板和输出候选模板,步骤如下步骤(1. 1),构造候选模板,根据所述路由协议构件和待测试路由管理构件之间以及根据所述待测试路由管 理构件和路由转发构件之间各自外层封装上有限几种构件交互形式,抽象化为函数方法, 作为各自对应的候选模板,
步骤(1. 2),构造模板变量,提取每一个所述候选模板中的参数,经重新命名后,使所选参数在该候选模板中 具有唯一性,并作为模板参数写入所选候选模板内,并保存以便按用户提供的可扩展宏语 言XML文本,以下简称XML文本,以控制对模板变量的填写,步骤(1. 3),把步骤(1. 2)的候选模板保存在文件夹template下,并把对应该候选 模板的模板变量保存在文件模板名称fillin中,步骤(2),生成测试输入代码和测试输出代码,步骤(2. 1),生成测试输入代码测试,测试人员向所述自动化测试模板输入针对所述待测试路由管理构件的XML文件, 在保存后,生成测试输入代码,步骤(2. 1. 1),从所述XML文件中得到用于生成测试输入代码的含有关键字input 及其后部分的input文件部分与该其后部分包括关键字template」!!,lib, inlet和 fillin_in,其中,该关键字templatejn指定要写入的输入候选模板,简称输入模板,该关 键字lib指定在在结构时需要额外添加的库文件,该关键字inlet指定该待测路由管理构 件的接入口,该关键字fillin_in指明要在该输入模板中填入的模板参数,格式由该关键 字templatejn指定的输入模板来决定,步骤(2. 1. 2),用测试输入程序读取所述input文件部分的全部内容,从所选模板 库中读取对应的输入候选模板,填写模板变量,形成作为测试输入代码用的input, c文件, 保存到forTest文件中,步骤(2. 2),生成测试输出代码,步骤(2.2. 1),按步骤(2.1)和步骤(2.1.1)所述方法生成测试输出代码的 output文件部分,所述output文件部分包括关键字output及其后部分,该其后部分包括关 键字template_out,outlet和f illin_out,其中,关键字template_out指明要填写的输出 模板,关键字outlet指明所述待测试路由管理构件的接口,关键字f illin_0ut指明要填写 的输出模板的参数,步骤(2. 2. 2),用测试输出程序读取所述output文件部分的全部内容,从所述模 板库中选择对应的输出模板,填写模板参数形成output. C文件作为测试输出代码保存在 所述forTest文件中,步骤(3),从所述XML文件中判断是否含有关键字result,以进行测试结果与所述 期望测试结果比较,步骤(3. 1),若有关键字result,则依照步骤(3. 1. 1)到(3. 1. 3),步骤(3. 1. 1),从所述关键字result的内容中取得指定的期望测试结果,并保存 到文件夹resultfile下的文件giveresult中,步骤(3. 1.2),把所述输入测试代码输入到所述待测试路由管理器中,经筛选 后,把用所述的测试输出代码中的测试结果存放到内置的缓冲器中,保存到所选文件夹 resultfile 下的文件 testresult 中,步骤(3. 1. 3),把所选测试结果与期望测试结果进行对比,若两者完全相同,则通过测试,若两者不同,则判定未通过测试,
步骤(3. 2),若所述XML文件中无关键字result,则读取该XML文件中所选待测试 路由管理构件接收数据中结构体中的变量的类型,送入所选待测试路由管理构件中,经所 选测试输出代码得到测试结果,然后把所选一系列测试输入参数和对应的测试结果同时返 回所选测试人员,步骤⑷,生成测试入口程序,根据所述的XML,确定待测试构件的入口函数名与出口函数名,查找待测试构 件存放的component文件夹,读取其中的.h文件名,加入到模板中,生成测试入口程序 entrance, c并保存至Ij forTest文件夹下,步骤⑶,生成makefile文件,把已得到的所述测试输入代码,测试输出代码,测试结果对比代码,测试入口程 序的代码以及所述component文件中所述待测试路由管理构件的源代码进行组合,生成 makefile 文件,步骤(5. 1),把步骤(5)中所述所有文件拷贝到所述文件夹forTest下,步骤(5.2),读取步骤(5. 1)中的 input, c,output, c 和 entrance, c 文件,并保存 入一个链表中,步骤(5. 3),从输入的所述XML文件中,判断所述关键字lib后的内容步骤(5.3. 1),若关键字lib后为空,则用shell控制根据步骤(5.2)中所述的 各.c文件的名称执行文件makefile,步骤(5.3.2),若关键字lib后为非空,且为pthread库,在编译时加入由该 pthread 库,步骤(6),根据步骤(5.3)形成的文件makefile,生成对所述待测试路由管理构件 的测试程序,执行并观察给出的测试结果。本发明的优点在于简化了测试过程,使测试工作变得简单,方便,并更高程度上保证了测试的正确 性,


图1.根据用户的输入文件产生测试的输入与输出代码;图2.进行结果与期望输出的对比;图 3.生成 makefile 文件;图4.针对构件的自动化测试方法结构具体实施例方式针对在可重构路由器软件开发环境下,为验证由第三方提供的构件的正确性,提 出的一种规范、简化的测试方法,此方法可以达到简化测试过程的目的,针对构件的自动化测试方法,在具体的实施过程中,分为由人完成的工作和由自 动化测试工具完成的工作,共两个部分自动化测试工具为将一部分自动化测试方法抽象 出来,并用C语言实现的测试工具,自动化测试工具的内部实现逻辑为自动化测试方法的 一部分,
我们针对在可重构路由器软件开发环境下的路由管理软件,按照“针对构件的自 动化测试方法”,即本发明中提出的测试方法,指出由人完成的工作,和自动化测试工具实 现内部逻辑完成的工作,完成对路由管理构件的测试,路由管理构件是这样的构件它接受由路由协议构件产生的路由信息,保存并筛 选路由信息,从得到的路由信息中选出最适合信息,发送给路由转发构件。针对路由管理构件,具体测试过程如下1.针对路由管理构件,自动生成测试输入和测试输出代码,为了达到自动生成测试输入代码和测试输出代码的目的,需要测试人员提供XML, 利用自动化测试工具分析XML,从中获得相关信息,这些信息根据关键字分成三部分,包括 用来生成测试输入代码的input文本部分,用来生成测试输出代码的output文本部分,自 动化测试工具根据关键字input及其后部分,从模板库中选择适合做路由管理构件input 部分的模板,用测试人员提供的XML中提供的信息填充模板,生成测试输入代码input, c,自动化测试工具根据关键字output及其后部分,从模板库中选择适合做路由管理构件 output部分的模板,用测试人员提供的XML中提供的信息填充模板,生成测试输出代码 output, c,将生成的input, c以及output, c保存在名为forTest的文件夹下,以备后续使 用;2.进行结果与期望输出的对比,在这一步骤中,将以两种方式进行结果的比对,方式一如果在测试人员提供的XML中使用了关键字result,方法如下测试工具需要重新读取测试人员输入的XML,将测试人员输入的XML中关键字 为input后的输入数据,经测试输入代码传入路由管理构件,经过路由管理构件的逻辑, 经测试输出代码,最终生成测试结果,保存在接收缓冲区中,重新读取XML,读取关键字为 result其后的部分,此部分的内容为测试人员提供的期望输出,将测试缓冲区中的内容与 期望输出进行比较,如果缓冲区中的内容与期望输出结果内容完全相同,则提示路由管理 构件通过测试,如果内容不相同,则提示路由管理构件没有通过测试,方式二 如果在测试人员提供的XML中没有使用关键字result,方法如下读取XML中的待测试构件的接收数据的结构体定义,根据结构体中变量的类型, 随机产生一系列的测试数据,将这些测试数据经测试输入代码传入路由管理构件,经过路 由管理构件的逻辑,经测试输出代码,最终得到结果,将随机产生的测试数据与得到的对应 结果同时返回给测试人员,供测试人员自行推断测试通过与否;3.生成测试入口程序,重新读取测试人员提供的XML,在关键字input后找到关键字inlet,以及在关键 字output后找到关键字outlet,确定为待测试构件,即路由管理构件指定的入口函数和出 口函数,将两个函数名填入构件测试入口模板,生成测试入口程序entrance, c,并保存到 forTest文件夹下;4.生成 makefile 文件,至此,在forTest文件夹下已经保存了由步骤1生成的input, c,output, c,文件, 由步骤3生成的entrance, c文件,路由管理构件的源代码保存在名为component的文件夹 下(待测试构件的存放位置),将在component文件夹下的路由管理构件的源代码拷贝到forTest文件夹下,读取forTest文件夹信息,得到forTest文件夹下所有文件的信息,这 些信息包括文件input, c, input, h, output, c, output, h, entrance, c以及路由管理构件源 文件,提取所有.c文件的名称,用shell脚本根据提取的.c文件的名称,生成makefile文 件,在生成makefile文件的过程中,需要再次读取测试人员提供的XML,寻找关键字lib后 面的内容,如果需要在编译时加入特殊的库,则在关键字lib后指定,如果需要多个库,则 用逗号分隔,在路由管理构件中,需要在编译时加入Pthread库,所以在关键字lib后指定 库名为pthread,生成编译时加入pthread库编译的makefile文件;5.生成测试用例执行程序并得到测试结果,运行makefile,编译文件,生成针对路由管理构件的测试程序,替换到当前的进 程,并执行测试程序,观察给出的测试结果;这样就完成了针对路由管理构件的自动化测试;在网络设备的软件构件环境下,针对构件的自动化测试,依据以下设计步骤实 现步骤(1),构造模板库由于在网络设备的软件构件环境下,在实现构件功能段代码的外层对构件实现了 一层封装,提供了几个知名接口,这层封装为用socket方式实现,并在此基础上完成了构 件间的交互,所以构件的接口类型可归纳为实现封装的类型,步骤(1. 1),构造候选模板,由于在实现构件功能段代码的外层,使用了知名接口的方式,采用有限的几种构 件间交互的形式完成了构件的交互,所以可以将这几种交互形式作为候选模板,步骤(1. 2),构造模板变量,针对每一个模板,将其中参数部分提取出来,并进行重新命名,使参数名在模板中 唯一,并作为模板变量重新写入模板,将每个模板中的模板变量保存到一个新文件中,以用 来根据用户提供的XML,控制对模板变量的填写,步骤(1.3),命名与存放,将候选模板保存到名为template的文件夹下,并将对应每个模板的,保存模板变 量的文件命名为模板名_fillin,以用来和模板对应,保存到fillin文件夹下,步骤(2),生成测试输入和测试输出,在实现构件功能段代码的外层对构件实现了一层封装,提供了几个知名接口,这 层封装为用socket方式实现,并在此基础上完成了构件间的交互,所以构件的接口类型可 归纳为实现封装的类型,步骤(2. 1),生成测试输入代码,在这一步,测试人员需要针对待测试的构件,提供XML,在XML中,在关键字input 下的内容即为测试人员针对此构件,在此步骤中提供的内容,在input关键字后,继续提供 了几个关键字,分别为 template_in,lib, inlet, fillin_in.其中 template_in 关键字指 定要填写的模板,lib关键字指定在编译时需要添加的库文件,inlet关键字指定待测试构 件入接口的名称,fillin_in关键字指明其下内容为要在模板中填入模板参数的内容,具体 填写内容的格式根据templatejn指定的要填写的模板名决定,所有模板保存在fillin_ in文件夹下,以供程序选择,生成测试输入程序读取这些关键字及其后的内容,籍此选择相应的模板,并填写其中的模板变量,最终生成input, c文件,此文件为测试输入代码,将 input, c文件保存到forTest文件夹下,步骤(2. 2),生成测试输出代码,在这一步,测试人员需要针对待测试的构件,提供XML,在XML中,在关键字output 下的内容即为测试人员针对此构件,在此步骤中提供的内容,在output关键字下,继续提 供了几个关键字,分别为template_out,outlet, fllin_out.其中outlet关键字指明待测 试构件的名称,template_out关键字指明要填写模板的模板名,fillin_out关键字指明它 之下内容为要填写输出模板的参数。具体如何填写方法同填写输入文本相应部分内容相 同,最终生成output, c文件,此文件为测试输出代码,将output, c文件保存到forTest文 件夹下,步骤(3),进行结果与期望输出的对比,在这一步骤中,将以两种方式进行结果对比,步骤(3. 1),在测试人员提供的XML中含有result关键字,在这种方式中,针对构件的自动化测试方法期待测试人员提供给定的输入与输入 数据对应的输出结果,并将两者进行比较,步骤(3. 1. 1),取得用户提供的期望输出,测试人员针对待测试构件,提供XML,在XML中,在input关键字下的内容中提供测 试人员的输入数据,在result关键字下的内容中,提供对应于输入数据给出的期望输出数 据,读取这个期望输出数据,并保存到resultfile文件夹下名为giveresult的文件中,步骤(3. 1. 2),取得真实输出结果,将关键字input下测试人员给出的输入数据,通过测试输入代码传入待测试构 件,经过待测试构件的逻辑,存储到测试输出的缓冲区中,读取缓冲区的内容,将结果保存 到resultfile文件夹下名为testresult的文件中,步骤(3. 1. 3),对比测试结果与期望结果,将测试人员提供的期望输出结果与真实输出结果分别保存在两个容器中,对两个 容器中的内容进行比较,如果两个容器中的内容完全相同,则说明真实输出结果与测试人 员提供的期望输出结果相同,说明构件通过测试,如果两个容器中的内容不完全相同,则说 明真实输出结果与测试人员提供的期望输出结果不相同,说明构件没有通过测试,步骤(3. 2),在测试人员提供的XML中不含有result关键字,在这种方式中,测试人员没有提供测试输入程序,也没有给出测试输出程序,在测 试人员提供的XML中不含有result关键字时,读取XML中的待测试构件的接收数据的结构 体定义,根据结构体中变量的类型,随机产生一系列的测试数据,将这些测试数据经测试输 入代码传入路由管理构件,经过路由管理构件的逻辑,经测试输出代码,最终得到结果,将 随机产生的测试数据与得到的对应结果同时返回给测试人员,供测试人员自行推断测试通 过与否,步骤(4),生成测试入口程序,在这一步骤中,需要重新读取测试人员提供的XML,在input关键字后找到关键 字inlet,确定其后参数名为待测试构件的入口函数名,在output关键字后找到关键字 outlet,确定其后参数名为待测试构件的出口函数名,查找待测试构件存放的component文件夹,读取其中的.h文件名,加入到入口函数模板的#include “... ”中,把入口函数名 和出口函数名添加入到测试入口模板的模板变量中,生成测试入口程序entrance, c.并保 存到forTest文件夹下,步骤(δ),生成makefile 文件,在此步骤中,将把步骤2产生的测试输入代码,测试输出代码,步骤3产生的结果 对比代码,步骤4产生的测试入口程序代码以及待测试构件源代码,进行组合,为它们生成 makefile 文件,步骤(5. 1),拷贝所有需要文件至forTest文件夹下,在此步骤中,步骤2产生的测试输入代码,测试输出代码,与步骤3产生的结果比 对代码以及步骤4生成的测试入口程序代码均已保存到forTest文件夹下,还需要拷贝的 仅为待测试构件代码,将待测试构件代码从component文件夹下拷贝至forTest文件夹下,步骤(5. 2),得到待测试文件夹下所有的*. c源文件名称,在进行此步骤前,已经由步骤5. 1保证了在forTest文件夹下存放了所有需要进 行编译的代码。读取文件夹信息,得到这个文件夹下所有文件的名称。提取并保存所有*. c 文件的名称到链表中,步骤(5. 3),根据得到的源文件名称自动生成makefile,按照makefile的格式,根据步骤5. 2中保存的链表中的内容,自动生成makefile. 这个过程由shell脚本完成,在生成makefile的过程中,如果测试人员需要在编译过程中 加入特定的库,再会在提供的XML中以关键字lib指定要加入的库,读取XML中lib后的相 关内容,即可了解编译过程中的特殊需要,自动完成makefile的编写工作,步骤(6),生成测试用例执行代码,利用在步骤5中生成的makefile文件,执行make,生成测试用例可执行程序,替 换当前进程,执行测试用例程序。完成将测试输入数据通过测试输入代码,执行待测试构件 逻辑,经过测试输出代码,保存到测试输出缓冲区中的过程,如果在测试人员提供的XML中 含有result关键字,则比对给定的测试输出与实际测试输出结果,给出测试是否通过的提 示,如果不含有result关键字,则给出测试输入数据与测试输出数据,让测试人员自行判 断输出结果,至此,完成了利用针对构件的自动测试方法,测试构件的过程。
权利要求
针对软件构件的自动化测试方法,其特征在于,是一种在可重构路由器内用一个自动化测试模块对路由管理构件进行自动化测试的方法,步骤如下步骤(1),构造模板库,该模板库含有用于向待测试的路由管理构件输入路由信息的路由协议构件候选模板以及用于接收所述待测试路由构件输出的经筛选路由信息的路由转发构件候选模板,以下简称输入候选模板和输出候选模板,步骤如下步骤(1.1),构造候选模板,根据所述路由协议构件和待测试路由管理构件之间以及根据所述待测试路由管理构件和路由转发构件之间各自外层封装上有限几种构件交互形式,抽象化为函数方法,作为各自对应的候选模板,步骤(1.2),构造模板变量,提取每一个所述候选模板中的参数,经重新命名后,使所选参数在该候选模板中具有唯一性,并作为模板参数写入所选候选模板内,并保存以便按用户提供的可扩展宏语言XML文本,以下简称XML文本,以控制对模板变量的填写,步骤(1.3),把步骤(1.2)的候选模板保存在文件夹template下,并把对应该候选模板的模板变量保存在文件模板名称fillin中,步骤(2),生成测试输入代码和测试输出代码,步骤(2.1),生成测试输入代码测试,测试人员向所述自动化测试模板输入针对所述待测试路由管理构件的XML文件,在保存后,生成测试输入代码,步骤(2.1.1),从所述XML文件中得到用于生成测试输入代码的含有关键字input及其后部分的input文件部分与该其后部分包括关键字template_in,lib,inlet和fillin_in,其中,该关键字template_in指定要写入的输入候选模板,简称输入模板,该关键字lib指定在在结构时需要额外添加的库文件,该关键字inlet指定该待测路由管理构件的接入口,该关键字fillin_in指明要在该输入模板中填入的模板参数,格式由该关键字template_in指定的输入模板来决定,步骤(2.1.2),用测试输入程序读取所述input文件部分的全部内容,从所选模板库中读取对应的输入候选模板,填写模板变量,形成作为测试输入代码用的input.c文件,保存到forTest文件中,步骤(2.2),生成测试输出代码,步骤(2.2.1),按步骤(2.1)和步骤(2.1.1)所述方法生成测试输出代码的output文件部分,所述output文件部分包括关键字output及其后部分,该其后部分包括关键字template_out,outlet和fillin_out,其中,关键字template_out指明要填写的输出模板,关键字outlet指明所述待测试路由管理构件的接口,关键字fillin_out指明要填写的输出模板的参数,步骤(2.2.2),用测试输出程序读取所述output文件部分的全部内容,从所述模板库中选择对应的输出模板,填写模板参数形成output.c文件作为测试输出代码保存在所述forTest文件中,步骤(3),从所述XML文件中判断是否含有关键字result,以进行测试结果与所述期望测试结果比较,步骤(3.1),若有关键字result,则依照步骤(3.1.1)到(3.1.3),步骤(3.1.1),从所述关键字result的内容中取得指定的期望测试结果,并保存到文件夹resultfile下的文件giveresult中,步骤(3.1.2),把所述输入测试代码输入到所述待测试路由管理器中,经筛选后,把用所述的测试输出代码中的测试结果存放到内置的缓冲器中,保存到所选文件夹resultfile下的文件testresult中,步骤(3.1.3),把所选测试结果与期望测试结果进行对比,若两者完全相同,则通过测试,若两者不同,则判定未通过测试,步骤(3.2),若所述XML文件中无关键字result,则读取该XML文件中所选待测试路由管理构件接收数据中结构体中的变量的类型,送入所选待测试路由管理构件中,经所选测试输出代码得到测试结果,然后把所选一系列测试输入参数和对应的测试结果同时返回所选测试人员,步骤(4),生成测试入口程序,根据所述的XML,确定待测试构件的入口函数名与出口函数名,查找待测试构件存放的component文件夹,读取其中的.h文件名,加入到模板中,生成测试入口程序entrance.c并保存到forTest文件夹下,步骤(5),生成makefile文件,把已得到的所述测试输入代码,测试输出代码,测试结果对比代码,测试入口程序的代码以及所述component文件中所述待测试路由管理构件的源代码进行组合,生成makefile文件,步骤(5.1),把步骤(5)中所述所有文件拷贝到所述文件夹forTest下,步骤(5.2),读取步骤(5.1)中的input.c,output.c和entrance.c文件,并保存入一个链表中,步骤(5.3),从输入的所述XML文件中,判断所述关键字lib后的内容步骤(5.3.1),若关键字lib后为空,则用shell控制根据步骤(5.2)中所述的各c文件的名称执行文件makefile,步骤(5.3.2),若关键字lib后为非空,且为pthread库,在编译时加入由该pthread库,步骤(6),根据步骤(5.3)形成的文件makefile,生成对所述待测试路由管理构件的测试程序,执行并观察给出的测试结果。
全文摘要
针对软件构件的自动化测试方法属于可重构网络技术的领域,其特征在于,是一种规范的测试构件的方法,含有以下的步骤生成测试输入和测试输出,进行结果与期望输出的对比,自动生成makefile文件,生成测试用例执行代码,执行并观察测试结果。本发明是具有简化了测试过程,使测试工作变得简单,方便,并更高程度上保证了测试的正确性的优点。
文档编号G06F11/36GK101950269SQ201010266770
公开日2011年1月19日 申请日期2010年8月30日 优先权日2010年8月30日
发明者徐恪, 贾鸳鸳, 马东超 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1