软件测试方法及其平台与流程

文档序号:16627931发布日期:2019-01-16 06:17阅读:203来源:国知局
软件测试方法及其平台与流程

本发明主要涉及软件测试领域,尤其涉及一种软件测试方法及其平台。



背景技术:

软件测试平台通常由软件测试平台框架、被测软件部件(如为闭环系统,将被控对象模型视为一个软件部件进行调度但不作为被测件,在本发明中对此不明确区分)、测试输入和测试结果判读共计四部分组成,如图1所示。

软件测试平台方案架构通常由1)用于测试用例注入、解析和缓存的输入模块,2)用于将用例文件中的输入数据(缓冲区)与软件部件外部输入接口建立静态关联的接口关联模块,3)测试执行控制(包含软件部件和被控对象模型的接入)模块和4)测试结果记录和保存模块四大部分组成。被测试部件是将测试对象与测试平台结合在一起,从而组成完整的软件测试平台本体。所有模块紧密耦合在一个软件解决方案中(.sln/.prj),通过编译、链接形成完整的软件测试平台,如图2所示。

在软件测试平台框架实现方案中,被测试部件和软件测试平台通常都是包括初始化和周期执行两部分。其中,被测部件初始化属于软件测试平台初始化的一部分,被测部件周期执行部分是软件测试平台周期执行(主控)模块的一部分,如图3所示。

现有的软件测试平台具有以下缺点:

1.现有的软件测试平台都是针对一个指定软件,构建专用的测试平台,测试平台与被测部件紧密耦合,无法分割,缺乏通用的解决方案。因此,每个软件的测试平台都要单独构建,难以实现周期调度时序控制等功能逻辑在不同软件测试平台之间的移植和复用,造成重复建设,增加了软件研制的整体成本。

2.关于测试用例的注入,现有的软件测试平台主要有两类方案:1)一种方案是通过图形用户界面的控件来接收和处理不同类型的输入数据,各控件与软件部件输入接口直接静态绑定,因多数控件的数据输入通常是以新值覆盖旧值,无法同时保存多组输入数据,难以保证控件输入数据的按时刷新,无法支持测试输入节拍的精确控制。2)另一种方案是将所有的外部可控输入及其输入节拍控制信息以数字形式组织成用例输入文件,统一提供给被测软件,解决了前一种测试输入节拍精确控制的问题;关于用例文件的解析,现有的软件测试平台要求所有用例数据采用相同的数据类型,在与被测软件进行接口关联时通过强制类型转换进行匹配,损失了部分测试输入数据的精度,影响测试结果的准确性。

3.在闭环控制系统中,部分外部输入来源于复杂的被控对象(模型)而非测试用例,测试输出不由用例输入唯一确定,仅根据用例输入无法自动判断测试结果的正确性。因此现有的软件测试平台主要采用测试结果人工判读方案,即直接记录测试结果,通过人工方式对比输入与输出的关系,进行结果判读。但由于测试用例输入和输出未在测试结果中建立关联,导致输入、输出的同步关系难以维护,影响测试结果判读的效率和准确性。



技术实现要素:

本发明要解决的技术问题是提供一种软件测试方法及平台,其具有能够跨软件复用、能够正确地读取测试用例中的多种不同类型的数据、能够保证测试输入输出数据间的事件同步等特点。

为解决上述技术问题,本发明提供了一种软件测试方法,其包括:a.通过测试用例文件注入测试用例,并对所述测试用例进行解析和缓存;b.将所述测试用例中的输入数据与被测软件部件输入接口建立静态关联;c.使用预定义的被测软件部件容器对所述被测软件部件进行封装;d.控制测试周期性地执行;e.将被测软件部件的输入、输出接口通过数据指针与测试结果输出缓冲区进行静态关联,并将测试结果存储至所述测试结果输出缓冲区;以及f.从所述输出缓冲区读取测试结果,并对所述测试结果进行记录和保存。

在本发明的一实施例中,所述测试用例文件中包括以行或列排列的多个标准数据类型标识,以及与所述多个数据类型标识相对应的以行或列排列的所述输入数据。

在本发明的一实施例中,步骤a中包括:a1.以行或列的方式读取所述输入数据;a2.根据每一输入数据相对应的标准数据类型标识解析所述输入数据的数据类型;以及a3.将所述输入数据缓存至多类型容器式输入数据缓冲区中类型兼容的存储分量中。

在本发明的一实施例中,所述被测软件部件容器为函数指针数组。

在本发明的一实施例中,步骤c包括将不同调度周期的所述被测软件部件封装进不同的被测软件部件容器。

在本发明的一实施例中,步骤e包括为每个被测软件部件分配专用的输入、输出接口容器,所述输入、输出接口容器包括所述数据指针。

在本发明的一实施例中,步骤e包括:当每个所述被测软件部件完成一轮调度执行时,将所述被测软件部件参与计算的所有测试输入当前值与计算产生的测试输出一起,通过所述数据指针,动态地自动匹配正确的数据类型,缓存到所述测试结果输出缓冲区的正确分量中。

在本发明的一实施例中,步骤f包括:当所述测试用例文件中的所有的所述测试用例测试完毕时,一次性地从所述输出缓冲区读取测试结果,并对所述测试结果进行记录和保存。

本发明的另一方面提供了一种软件测试平台,其包括:输入模块,用于通过测试用例文件注入测试用例,并对所述测试用例进行解析和缓存;第一接口关联模块,用于将所述测试用例中的输入数据与被测软件部件输入接口建立静态关联;软件部件接入模块,用于使用预定义的被测软件部件容器对所述被测软件部件进行封装;测试执行控制模块,用于控制测试周期性地执行;第二接口关联模块,用于将被测软件部件的输入、输出接口通过数据指针与测试结果输出缓冲区进行静态关联,并将测试结果存储至所述测试结果输出缓冲区;以及测试结果记录和保存模块,用于从所述输出缓冲区读取测试结果,并对所述测试结果进行记录和保存。

在本发明的一实施例中,所述测试执行控制模块包括时序节拍控制数值,所述时序节拍控制数值为所有被测软件部件调度周期的公约数。

与现有技术相比,本发明具有以下优点:

本发明提供了一种软件测试方法及平台,其能够在保持部件调度时序通用控制模组完全不变的前提下,只要修改初始化模组,并与被测试部件一起创建项目工程(.sln/.prj),就可以方便地生成一个软件全数字仿真部件测试平台,实现了测试平台构建方案基于组件级的复用。如果被测试软件升级,只要其接口不变,就可以覆盖、替换被测试部件,直接重新编译生成新版本软件测试平台,维护成本非常低。如果被测对象发生改变,也可以在原测试平台上直接替换被测试软件部件、重新配置初始化模块达到快速生成新软件测试平台的目的,节省了为每个软件单独开发测试平台的大量成本。

另外,本发明支持以各种标准数据类型分别定义各测试输入,且在向被测试软件部件注入激励时保持相同的数值精度进行数据类型匹配和解析,确保了在软件测试平台上执行的测试结果的准确性和有效性。

最后,本发明将测试输出与产生该输出的测试输入一并按其计算周期记录、缓存,并在测试执行结束时自动记录到测试结果文件中,保证了测试输入和测试的同步,便于快速、准确地判断测试结果的正确性,同时能够保存、积累原始测试数据,以支持软件架构和算法的持续优化。

附图说明

图1是现有的软件测试平台的基本结构图。

图2是现有的软件测试平台方案架构示意图。

图3是现有的软件测试平台框架模块划分示意图。

图4是本发明一实施例的软件测试平台方案架构示意图。

图5是本发明一实施例的多类型数据容器的示意图。

图6是本发明一实施例的软件部件测试记录专用容器格式示意图。

图7是本发明一实施例的软件测试平台主控模块划分示意图。

图8是本发明一实施例的测试用例示意图。

图9是本发明一实施例的软件测试平台的功能划分示意图。

图10是本发明一实施例的输入输出初始化的基本步骤。

图11是本发明一实施例的测试平台初始化的基本步骤。

图12是本发明一实施例的对用例文件中的混合类型数据输入进行解析的基本步骤。

图13是本发明一实施例的用例注入节拍控制的基本步骤。

图14是本发明一实施例的分时序调度部件及输入输出同步缓存的基本步骤。

图15是本发明一实施例的测试结果自动保存的基本步骤。

图16是本发明一实施例的自动循环执行控制的基本步骤。

图17是本发明一实施例的软件测试方法。

具体实施方式

为让本发明的上述目的、特征和优点能更明显易懂,以下结合附图对本发明的具体实施方式作详细说明。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。

如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。

本发明将软件测试平台分为可变的初始化模组和固定不变的部件调度时序通用控制模组两部分,其中部件调度时序通用控制模组可在不同软件部件仿真测试平台之间实现组件级别的整体复用;初始化模组作为连接部件调度时序通用控制模组和被测试软件部件的纽带,为部件调度时序通用控制模组和被测试软件部件之间架起桥梁,将二者的外部接口进行关联、对接,并将被测软件部件纳入部件调度时序通用控制模组预定义的“被测软件部件容器”中,部件调度时序通用控制模组通过该“被测软件部件容器”实现对被测试部件的间接调度。

图4是本发明一实施例的软件测试平台方案架构示意图。请参考图4,软件测试平台10包括依次连接的输入模块11、第一接口关联模块12、软件部件接入模块13、测试执行控制模块14、第二接口关联模块15和测试结果记录和保存模块16。

输入模块11用于测试用例注入、解析和缓存。在一实施例中,所有测试输入预先保存在用例文本文件中,除首列“时序节拍控制数值”用于定义输入数据变化的时间节点之外,其他每一列数据分别与指定的部件输入接口静态绑定。在用例文件中指定一行来定义每列数据的标准类型(如字符型、整型、长整型、短整型、浮点型、双精度类型等)。在输入模块11解析用例文件时,根据用例文件中识别的每列数据的标准类型(字符串形式),以相应的格式化输入字符串动态地自动匹配正确的数据类型(例如c语言中以格式化输入字符串“%c”匹配字符型,“%d”匹配整型,“%ld”匹配长整型,“%hd”匹配短整型,“%f”匹配浮点型,“%lf”匹配双精度型),将该列数据暂存到多类型容器式输入数据缓冲区、类型兼容的存储分量中,解决了混合类型测试数据的注入问题。为了通用性,软件测试平台10将时序节拍控制数值的量纲统一定义为所有部件调度周期的公约数,并以平台外部接口的形式提供给测试人员修改。多类型容器式输入数据缓冲区中每个分量称为一个“多类型数据容器”(如c语言中用union结构实现),简称“容器”。容器中包含多种类型的分量,所有分量共享存储空间,只是各分量的有效长度不同、表示方式不同而已;每次访问该“容器”时,只有一个分量有效,如图5所示。如此,软件测试平台10实现了对测试用例文件中混合类型数据的解析和缓存。

第一接口关联模块12用于将用例文件中的输入数据(缓冲区)与被测软件部件外部输入接口建立静态关联。优选地,第一接口关联模块12是按照用例文件的列号将将用例文件中的输入数据(缓冲区)与软件部件外部输入接口建立静态关联。

软件部件接入模块13用于使用软件测试平台预定义的被测软件部件容器(例如函数指针数组)对被调用的软件部件进行封装。如此,软件测试平台10不对软件部件直接进行操作,而是通过函数指针数组对软件测试平台预定义的被测软件部件容器进行操作,使得测试执行控制模块14的执行不再依赖于具体的软件部件,实现了测试执行控制模块14与被测对象之间的解耦合,实现了软件测试平台10核心部件的跨软件复用。需要说明的是,在本发明的上下文中“软件部件”包括被控对象模型。在一非限制性的实施例中,所有软件部件按照调度周期分类,每种调度周期对应于软件测试平台预定义“被测软件部件容器”的不同单元内(软件测试平台以函数指针形式与被测软件部件容器建立关联),“被测软件部件容器”的有效单元个数和存储位置作为平台接口的一部分可配置。在一实施例中,每个软件部件被封装时,先判断其是否为当前测试对象,若是,则在该软件部件执行前调用第一接口关联模块12,通过测试用例中的输入数据来保持或刷新该软件部件的输入接口;若否,则直接使用该软件部件相关的部件的可能输出或静态初始值来保持或刷新该软件部件的输入接口。

测试执行控制模块14用于控制测试的执行,例如周期性地执行。

第二接口关联模块15用于将各软件部件的输入、输出接口通过数据指针与测试结果输出缓冲区进行静态关联。在第二接口关联模块15中,为每个被测试软件部件分配了专用的输入、输出接口“容器”,容器的大小(输入、输出接口的数目)及其与输入、输出接口的关联在初始化过程中静态绑定。因此,在测试结果记录和保存模块16中,只需在被测软件部件每次被调度运行时,通过“部件测试记录专用容器”中的“多类型容器式”部件输入接口索引(c语言中为数据指针)对各部件的输入、输出接口(来源于软件架构设计的结果,含开环系统的输入、输出和闭环反馈系统的输入、输出接口)进行间接操作,实时记录部件输入、输出的最新值,就可以间接作用于被测软件的真实输入、输出接口,实现测试输入、输出数据之间的严格时间同步,实现测试结果记录和保存模块16的通用性及其与被测软件部件外部接口的解耦合。每个软件部件测试记录专用容器格式如图6所示。在软件测试平台初始化过程中,每个部件的输入、输出接口均与该部件测试专用结构体中相应的多类型容器式输入、输出指针静态关联;在测试过程中,每个被测部件完成一轮调度执行,就将该部件参与计算的所有测试输入当前值与计算产生的测试输出一起,通过多类型容器式输入、输出指针,动态地自动匹配正确的数据类型,缓存到测试输出多类型容器式缓冲区的正确分量中,当测试用例文本文件中的所有测试输入处理完毕,再一次性地保存测试结果文件中,解决了测试输入与输出之间的严格同步问题,以便通过测试结果文件直接判断测试执行结果是否正确,减少了因测试结果判读不准确而导致的漏测现象。

测试结果记录和保存模块16用于从测试结果输出缓冲区读取测试结果,并对测试结果进行记录和保存。

软件测试平台10中的输入模块11、第一接口关联模块12、软件部件接入模块13、测试执行控制模块14、第二接口关联模块15和测试结果记录和保存模块16这六个模块与初始化模组和部件调度时序通用控制模组的关系如图7所示。具体而言,1)初始化模组是可变模组,用于配置平台外部接口,其包括第一接口关联模块12、软件部件接入模块13和第二接口关联模块15这三个模块;2)部件调度时序通用控制模组是固定模组,与被测试软件部件之间无耦合,可从一个软件测试平台整体移植到另一个软件测试平台,其包括输入模块11、测试执行控制模块14和测试结果记录和保存模块16这三个模块。

综上,为了支持部件调度时序通用控制模组的通用性,本发明相对于现有的软件测试平台作出了如下的优化设计:

1)输入模块11增加了对测试输入混合数据类型的支持,为用例文件中不同数据类型的测试激励动态匹配格式化输入字符串及测试输入缓冲区中类型相同的存储分量。

2)将现有的测试执行控制(含软件部件的接入)模块拆分成软件部件接入模块13和测试执行控制模块14两个模块。为了配合测试执行控制模块14的通用化,测试执行控制模块14对软件部件进行的操作被平台定义的“被测软件部件容器”接管,不依赖于具体的软件部件,实现了测试执行控制模块14与被测试软件部件对象之间的解耦合。以不同周期调度执行的“软件部件的接入”分别放置在软件测试平台预置的不同“被测软件部件容器”内,每种调度周期对应一个“被测软件部件容器”(软件测试平台以函数指针形式与容器建立关联),“被测软件部件容器”的有效个数取决于软件部件调度周期的总数目,“被测软件部件容器”的个数和存储位置作为平台接口的一部分可配置。

3)为了实现测试结果记录和保存模块的通用化,增加了第二接口关联模块15,在该新增模块中,为每个被测试软件部件分配了专用的输入、输出接口“容器”,容器的大小(输入、输出接口的数目)及其与输入、输出接口的关联在初始化过程中静态绑定。因此,在测试结果记录和保存模块16中,只需要对各部件的输入、输出接口“容器”进行操作,就可以间接作用于被测软件的真实输入、输出接口,实现了测试结果记录和保存模块16的通用性及其与被测软件部件外部接口的解耦合。

下面从用例文件格式定义、软件测试平台中初始化模组和部件调度时序通用控制模组的关系及各自的构成、各主要模块的设计流程图进行详细说明。

1.所有测试输入预先保存在用例文本文件中:

a)文本文件由多行、多列数据形成的类长方形矩阵组成,分为数据注入节拍控制区21、数据助记符区22、数据类型定义区23和用例输入数据定义区24四大部分,如图8所示。

i.每行不同测试数据之间以指定的单个固定字符(如“,”、“”、“;”等)进行分隔,相同分隔符序号同侧的数据属于同一列,每列代表指定接口测试数据的全部输入,每行、每列的数据个数分别相等;

ii.文件首行内容无意义,是测试人员为所有测试数据定义的助记符,方便用例设计时为各列数据正确赋值;

iii.文件第二行为所有测试数据定义了与输入接口相匹配的标准数据类型(如字符型、整型、长整型、短整型、浮点型、双精度类型等),不同列测试数据代表的数据类型相互独立;软件测试平台解析用例文件时动态地自动匹配正确的数据类型,将该列数据暂存到多类型容器式输入数据缓冲区的正确分量中。此为本发明的创新点之一,实现了混合类型测试数据的注入。

为了匹配不同数据类型的格式化输入输出字符串,如c语言中字符型的“%c”,整型的“%d”,长整型的“%ld”,短整型的“%hd”,浮点型的“%f”,双精度型的“%lf”,定义如下数据类型以便按照正确的数据类型来辅助动态匹配和解析测试输入:

按照c语言的写法,多类型容器式缓冲区分量可参考如下定义:

依据分量数据类型的定义,多类型容器式缓冲区定义如下:

mixtypereadinput[maxfileline][testcase_inputnum];

其中maxfileline代表用例文件的最大行数,testcase_inputnum代表用例文件的列数,这二个参数可配置。

iv.从第三行开始,每一行测试数据代表对所有输入接口的一次完整刷新;

v.不同软件测试平台以可配置参数的形式匹配不同用例文本文件的总列数,对应所有部件输入接口的总和(含不同部件之间的内部接口)加1,除首列之外,每一列的列号在软件测试平台初始化模组中与指定的部件输入接口静态绑定。

b)输入数据变化的时间节点由首列“时序节拍控制数值”决定,时序节拍控制数值无固定量纲,其实际量纲由被测软件信号采样周期、总线通信周期等输入接口刷新的时间性能决定;为了通用性,软件测试平台10将时序节拍控制数值的量纲统一定义为所有部件调度周期的公约数,并以平台外部接口的形式提供给测试人员修改。

2.软件测试平台分为部件调度时序通用控制模组和初始化模组两部分。部件调度时序通用控制模组是本发明的基础和核心,可不加改动地直接应用于多个不同软件部件测试平台的构建;初始化模组用于配置平台外部接口,将用例文件中的输入数据(缓冲区)与软件部件外部输入接口进行关联,将各部件的输入、输出接口与测试结果输出缓冲区进行关联,同时调用各软件部件初始化模块,确保执行部件测试前各部件处于确定的状态。初始化模组和部件调度时序通用控制模组的关系及各自组成如图9所示。

具体而言,初始化模组由部件初始化31、输入输出关联初始化32和平台初始化33三部分功能组成。下面详细说明实现部件初始化31、输入输出关联初始化32和平台初始化33这三部分功能的具体步骤:

(1)首先调用被测软件部件初始化模块(部件初始化31)。

(2)然后进行输入、输出关联初始化,即每个软件部件的输入、输出接口均与该软件部件测试专用结构体中相应的多类型容器式输入、输出指针静态建立关联(输入输出关联初始化32)。请参考图10,在输入输出关联初始化32中可以包括:

步骤32a:定义多类型容器式输入、输出数据缓冲区数组;

步骤32b:定义部件结构体数组,每个部件作为数组的一个分量,并对代表每个部件的结构体数组分量进行初始化。该初始化步骤可以包括:1)为部件分配全局唯一的编号;2)设置部件外部输入数据数目;3)设置部件输入结构体数组每个分量作为指针,指向对应的输入接口变量;4)设置部件外部输出数据数目;5)设置部件输出结构体数组每个分量作为指针,指向对应的输出接口变量。

(3)最后进行测试平台初始化,包括对程序控制执行的相关变量和数组等数据元素进行初始化(平台初始化33)。该部分主要在于将所有部件按调度周期分类,为每类部件调度周期创建一个处理函数,该函数作为容器来调用相应调度周期的所有部件;将所有部件调度周期处理函数赋值给部件调度专用的函数指针数组:void(*funcptrperiod[numofparts])(void),其中numofparts代表所有部件的总数,该函数指针数组的每个分量指向一个部件调度周期处理函数。请参考图11,在平台初始化33中可以包括:

步骤33a:初始化程序循环计数cnt为0;初始化部件调度计数tskcnt为0;初始化时序节拍数组timesec[]各分量为0;初始化用例数据总数目line为0。

步骤33b:将所有部件按调度周期分类,为每类部件调度周期创建一个处理函数,该函数作为容器调用相应调度周期的所有部件。在一实施例中,每个软件部件被封装时,先判断其是否为当前测试对象,若是,则在该软件部件执行前调用第一接口关联模块12,通过测试用例中的输入数据来保持或刷新该软件部件的输入接口;若否,则直接使用该软件部件相关的部件的可能输出或静态初始值来保持或刷新该软件部件的输入接口。

步骤33c:将所有部件调度周期处理函数赋值给部件调度专用的函数指针数组:void(*funcptrperiod[numofparts])(void)。

步骤33d:1)提示并接收终端输入待测试部件;2)提示并接收终端输入测试用例文件名。

步骤33e:1)调用输入模块11,将测试输入保存到多类型容器式输入数据缓冲区;2)从上述输入数据缓冲区中取出用例中的时序控制数值,并使用首组数据作为测试激励。

在平台初始化过程中,需要调用输入模块11是对用例文件中的混合类型数据输入进行解析,并按照用例文件为每列测试数据定义的类型,动态匹配适当的文件输入格式化字符串,并将其正确存入多类型容器式输入数据缓冲区readinput[maxfileline][testcase_inputnum]中的正确分量内。请参考图12,其实现流程如下:

步骤33e1:定义并打开指向用例文件的文件指针fileinput。

步骤33e2:判断用例文件是否存在,若存在,则执行步骤33e3;若不存在,则结束执行。

步骤33e3:1)获取文件长度inputfilestreamlen;2)读取文件首行,获取用例文件的各列数据名称;3)读取文件第二行,获取用例文件的各列数据类型,为输入的用例文件各行数据设置正确的数据类型格式化输入字符,并存入testinputmode数组中;4)从第三行开始循环读取用例文件中的具体数据,将用例文件中的数据按照正确的类型进行解析,并存储到多类型容器式输入数据缓冲区中readinput[最大行数][最大列数]。

步骤33e4:关闭文件指针fileinput。

部件调度时序通用控制模组由用例注入节拍控制34、分时序调度部件及输入输出同步缓存35、测试结果自动保存36和自动循环执行控制37四部分功能组成。下面详细说明实现用例注入节拍控制34、分时序调度部件及输入输出同步缓存35、测试结果自动保存36和自动循环执行控制37这四部分功能的具体步骤:

(4)在测试过程中,需要对用例注入的节拍进行控制(用例注入节拍控制34)。由于时序节拍控制数值的量纲定义为所有部件调度时序的公约数,因此以“时序节拍数组index分量的值*所有部件调度时序的公约数commondivisor”与当前程序循环计数cnt值是否相等作为是否刷新输入数据的判据。时序节拍控制数值到达刷新节点时使用新值;否则保持前值。请参考图13,用例注入节拍控制34可以包括:

步骤34a:用例数据索引index初始化为1。

步骤34b:判断index是否小于用例数据总数目line,若是,则执行步骤34c;若否,则跳转到测试结果自动保存36。

步骤34c:判断时序节拍数组index分量的值*所有部件调度时序的公约数commondivisor是否等于程序循环计数cnt,若是,则执行步骤34d;若否,则结束执行。

步骤34d:1)使用分量索引为index的用例数据;2)index加1。

(5)被测试部件之间的调度时序关系通过分时序调度部件及输入输出同步缓存模块进行控制(分时序调度部件及输入输出同步缓存35)。以各部件调度周期的最小公倍数minmultiple作为所有部件全部完成循环调度的基准;该模块的每一次调度运行的周期,等价于所有部件运行周期的公约数,与用例文件中时序节拍控制数值代表的时间量纲等同。以模块执行计数tskcnt与各部件i的调度周期的比值作为判断部件是否调度执行的判据。在当前调度周期,如果被调度执行的部件恰好是当前被测试的软件部件,则调用测试结果自动保存模块,将该部件输入输出接口的当前值追加到测试结果输出缓冲区中。请参考图14,分时序调度部件及输入输出同步缓存35可以包括:

步骤35a:判断调度计数tskcnt是否小于所有部件调度周期的最小公倍数minmultiple,若是,则执行步骤35b;若否,则执行步骤35c。

步骤35b:将调度计数tskcnt设置为0,而后执行步骤35d。

步骤35c:对调度计数tskcnt执行自加操作,而后执行步骤35d。

步骤35d:判断当前部件编号i是否小于部件总数numofparts,若是,则执行步骤35e;若否,则结束执行。

步骤35e:判断tskcnt是否当前部件i调度周期的整数倍,若是,则执行步骤35f;若否,则执行步骤35h。

步骤35f:当前部件i调度执行。

步骤35g:判断当前部件i是否为测试部件,若是,则跳转至测试结果自动保存36,并在测试结果自动保存36执行完毕后跳转回步骤35h;若否,则执行步骤35h。

步骤35h:部件编号i加1,并跳转至步骤35d。

(6)利用测试结果自动保存36,每个被测部件完成一轮调度执行,就将该部件参与计算的所有测试输入当前值与计算产生的测试输出一起,通过多类型容器式输入、输出指针,动态地自动匹配正确的数据类型,确定其格式化输入输出字符串(“%c”、“%d”、“%f”等),并缓存到测试输出多类型容器式缓冲区的正确分量中,当测试用例文本文件中的所有测试输入处理完毕,再一次性地保存到测试结果文件中。如此,解决了测试输入与输出之间的严格同步问题,以便通过测试结果文件直接判断测试执行是否正确,减少了因测试结果判读不准确而导致的漏测现象。请参考图15,测试结果自动保存36可以包括:

步骤36a:1)根据被测部件编号设置结果文件存储路径,结合用例文件名定义测试结果文件名;2)定义并打开指向测试结果文件的文件指针fid。

步骤36b:判断结果文件是否存在,若存在,则执行步骤36c;若不存在,则结束执行。

步骤36c:设置部件测试输入i、输出j来源于部件输入、输出数据结构体指针数组分量。

步骤36d:获取输入、输出数据数目m、n。

步骤36e:根据第i<m(j<n)个输入(输出)数组分量的数据类型(字符型、整型、浮点型等)编号,确定其格式化输入输出字符串(“%c”、“%d”、“%f”等),及相应输出数据缓冲区testoutputtestdata[tstbuflen]的容器式存储分量mixtype的适当类型并将相应的输入输出数据写入测试结果文件中。

步骤36f:关闭文件指针fileinput。

(7)当测试用例文件的所有输入数据处理完毕,通过自动循环执行控制37与测试人员进行交互,确定退出系统(结束测试)还是继续执行新的部件测试。如果要继续执行测试,则自动重新执行部件初始化,重复以上过程。请参考图16,自动循环执行控制37可以包括:

步骤37a:重新初始化相关变量。

步骤37b:向终端输出测试用例执行结束的信息,并提示选择是否继续执行测试。

步骤37c:判断是否继续执行,若否,则执行步骤37d;若是,则执行步骤37e。

步骤37d:退出系统。

步骤37e:重新执行平台初始化。

基于上述公开的软件测试平台10,本发明还提出了一种软件测试方法。请参考图17,软件测试方法40包括:

步骤41:通过测试用例文件注入测试用例,并对所述测试用例进行解析和缓存。

步骤42:将所述测试用例中的输入数据与被测软件部件输入接口建立静态关联。

步骤43:使用预定义的被测软件部件容器对所述被测软件部件进行封装。

步骤44:控制测试周期性地执行。

步骤45:将被测软件部件的输入、输出接口通过数据指针与测试结果输出缓冲区进行静态关联,并将测试结果存储至所述测试结果输出缓冲区。

步骤46:从所述输出缓冲区读取测试结果,并对所述测试结果进行记录和保存。

在一实施例中,测试用例文件中可以包括以行或列排列的多个标准数据类型标识,以及与多个数据类型标识相对应的以行或列排列的输入数据。步骤41可以包括如下子步骤:

步骤41a:以行或列的方式读取输入数据。

步骤41b:根据每一输入数据相对应的标准数据类型标识解析输入数据的数据类型。

步骤41c:将输入数据缓存至多类型容器式输入数据缓冲区中类型兼容的存储分量中。

在步骤43中,优选地包括将不同调度周期的被测软件部件封装进不同的被测软件部件容器。优选地,被测软件测试容器为函数指针数组。

在一实施例中,步骤45中还可以包括为每个被测软件部件分配专用的输入、输出接口容器,输入、输出接口容器包括数据指针。在另一实施例中,步骤45中还可以包括当每个被测软件部件完成一轮调度执行时,将被测软件部件参与计算的所有测试输入当前值与计算产生的测试输出一起,通过数据指针,动态地自动匹配正确的数据类型,缓存到测试结果输出缓冲区的正确分量中。

在步骤46中,可以包括当测试用例文件中的所有的测试用例测试完毕时,一次性地从输出缓冲区读取测试结果,并对测试结果进行记录和保存。

上述的测试方法的一些细节可以参考前述软件测试平台的描述,在此不再展开描述。

本发明一实施例的软件测试方法可以在计算机系统中实施。例如计算机系统可包括存储器、处理器和储存在存储器上的计算机指令,处理器执行该计算机指令时实施本发明所描述的方法。

虽然本发明已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,在没有脱离本发明精神的情况下还可做出各种等效的变化或替换,因此,只要在本发明的实质精神范围内对上述实施例的变化、变型都将落在本申请的权利要求书的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1