一种基于组件合约的逐级求解的系统测试用例生成方法与流程

文档序号:24177546发布日期:2021-03-09 10:42阅读:130来源:国知局
一种基于组件合约的逐级求解的系统测试用例生成方法与流程

1.本发明涉及计算机软件领域,特别涉及一种基于组件合约的逐级求解的系统测试用例生成方法。


背景技术:

2.组件是一些可重用的软件单元,通常具备良好的封装性,通过输入输出接口实现其功能,可以跨平台被调用。近年来,随着复用粒度增加,基于组件的软件开发方法被广泛应用于各个领域。核电厂数字化仪控系统(dcs)通常在高安全性应用开发环境(scade)平台上进行开发。该平台采用组件开发的形式,通过集成开发完毕的、具备一定功能的组件来得到软件系统(后续简称系统)。这些组件在集成之前,已经进行了相关测试,并在特定平台上进行开发,因此理论上由组件所搭建的系统具备高可靠性。
3.据权威机构统计数据表明,国外系统测试费用通常会占整个系统开发周期中的30%到50%。为提升系统测试效率、降低系统测试成本,采用自动化的方法生成测试用例集,对系统进行测试。自动化生成测试用例集基于合约化设计理论。合约化设计理论是bertrand meyer于1997年提出。将组件之间的关系形式化为一种合约,即组件之间的交互规则,通常是一些谓词逻辑公式。合约的关键因素有三个:前置条件、后置条件及不变式条件。其中前置条件限定了调用方在调用方法前必须满足的条件;后置条件保证方法执行后得到预期输出;不变式条件则为始终需要遵循的条件。
4.现有方法通过分析系统规格说明书,结合合约化设计理论求得组件合约,再通过求解组件合约,得到系统合约。再通过对系统合约的谓词逻辑公式的求解得到测试用例集。这种方法在应用于集成有众多组件的大型系统时,由于合约的谓词逻辑公式求解困难,因此耗时较大,增加了测试成本。
5.中国专利cn201210564499.x提出了一种通过扩展接口自动机模型来生成嵌入式组件测试用例集的方法。根据建立的扩展接口自动机模型生成状态转移图,通过满足约束条件实现状态转移。将覆盖标准设置为状态覆盖率,提取由初始状态到最终状态的约束表达式集合。根据约束表达式集合,通过约束求解技术,获取测试用例集。将满足约束条件的数据作为功能测试用例集;将不满足约束条件的数据,作为异常测试用例集,即鲁棒性测试用例集。虽然是对逐个状态的前置条件、后置条件及内部变量取值约束进行取“与”操作,即路径条件(path condition,简称pc)表达式的更新,但本质上仍是求解每条路径的合约集,仍未能很好解决合约谓词逻辑公式求解困难的问题。
6.因此如何适应应用背景,解决面临的难题,更高效地生成测试用例集是需要解决的问题。


技术实现要素:

7.本发明所解决的技术问题是,针对现有技术的不足,提供了一种基于组件合约的逐级求解的系统测试用例生成方法,能高效地生成测试用例集。
8.本发明所提供的技术方案为:
9.一种基于组件合约的逐级求解的系统测试用例生成方法,包括如下步骤:
10.步骤1:获取系统的组件合约;
11.步骤2:获取系统各个组件的依赖关系;根据组件的依赖关系生成组件依赖图;
12.步骤3:根据组件依赖图求得系统各个组件合约的求解顺序;
13.步骤4:根据组件合约的求解顺序,使用逐级求解方法,依次对系统各个组件合约进行求解,得到系统测试用例。
14.进一步地,所述步骤3中,使用拓扑排序算法对组件依赖图中的节点,即组件进行排序,得到系统各个组件的排序;将各组件的排序作为其合约的求解顺序,得到系统各个组件合约的求解顺序。
15.进一步地,所述步骤4具体包括以下步骤:
16.1)确定每个组件的输入数据及组件参数值,其中组件的输入数据包括组件的输入参数值和输入参数状态,输入参数状态有fault及no_fault两种:
17.对于每个组件的每项输入数据,若其是从外部获取的数据(外部输入数据),则将其参数源标识为生成(generate),参数内容标记为满足相应前置条件(如该输入数据的取值范围约束条件)的输入参数值区间;随机生成满足相应前置条件的输入数据,并进行存储,输入参数状态在fault和no_fault中随机值;在求解该组件合约的过程中,获取存储的输入数据作为该项输入数据;当求解过程中,获取的输入参数状态为fault时,接收到这个状态下数据的组件,会根据前置条件,对这个数据进行处理,通常情况下,会忽略这个数据;而当前置条件的要求本身就是“判定输入参数状态,输入参数状态为fault的情况下,输出满足后置条件的信号值
‘1’”
的时候,fault状态也会有用;
18.若其是从内部传递过来的数据(内部传递数据,即根据组件依赖关系,接收的其它组件的输出数据),则将其参数源标识为该组件所依赖的组件的名称,参数内容标记为该组件依赖的组件的输出参数名;在求解该组件合约的过程中,获取该组件所依赖的组件相应的输出数据,作为该项输入数据,所述输出数据包括输出参数值和输出参数状态;
19.对于存在组件参数的每个组件,对其每项组件参数,将参数内容标记为满足相应前置条件(如该组件参数的取值范围约束条件)的组件参数值区间;随机生成满足相应前置条件的组件参数值,并进行存储;在求解该组件合约的过程中,获取存储的组件参数值;
20.2)根据系统各个组件合约的求解顺序,根据步骤1)确定的每个组件的输入数据及组件参数值,依次对系统各个组件合约进行求解;
21.在求解过程中,先判断当前组件的输入数据及组件参数值满足该组件中哪一个方法的前置条件,根据该组件的输入数据和组件参数值,求解该组件中相应方法的前置条件所对应的后置条件,得到输出数据;继而对该组件的不变式条件进行判定,若该组件的所有不变式条件都满足,则保留本轮求解过程中的数据(将本轮求解过程中该组件的输入接口获取的输入参数名、输入数据、输出接口输出的输出参数名、输出数据和参数接口获取的组件参数名、组件参数值存入合法数据表),否则删除本轮求解过程中的数据;通过判定是否满足不变式条件,以实现测试用例的约简;
22.根据系统各个组件合约的求解顺序,判断当前组件合约是否为最后一个求解的组件合约:若是则保留该条测试用例,即该轮求解过程中每个组件的输入接口获取的输入参
数名、输入数据、输出接口输出的输出参数名、输出数据和参数接口获取的组件参数名、组件参数值;否则继续对下一个组件合约进行求解。
23.组件的输入数据通过其输入接口获取,组件的输出数据通过其输出接口输出;组件参数值通过组件的参数接口获取。
24.进一步地,根据前置条件生成输入数据及组件参数值时,使用组合测试策略的二维组合覆盖标准,生成多组输入数据及组件参数值,并进行存储;在每一轮求解过程中,利用一组输入数据及组件参数值进行求解,经过多轮求解,得到多条测试用例,自动化生成符合所有合约的测试用例集。
25.有益效果:
26.本发明可以适用于基于任意平台以组件开发形式生成的任意系统的测试用例生成,如基于scade平台以组件开发形式生成的dcs系统的测试用例生成。
27.本发明将传统方法的求解系统合约(一次性构建并求解满足系统中所有组件合约的公式),变为了逐级求解满足单个组件合约的公式,降低了求解的难度。传统方法根据测试人员的经验人为设计测试用例,测试用例会因为客观因素而不具备足够的可信度,而这种自动化生成测试用例方法也规避了此类问题,并提升了测试用例生成效率。
附图说明
28.图1为本发明实施例处理流程图;
29.图2为本发明实施例方框图;
具体实施方式
30.以下结合附图和具体实施方式对本发明进行进一步具体说明。
31.本发明公开了一种基于组件合约的逐级求解的系统测试用例生成方法,包括如下步骤:
32.步骤1:通过分析系统规格说明书,结合合约化设计理论,获取组件合约;
33.系统由多个组件组成,组件是一些可重用的软件单元,通常具备良好的封装性,可以跨平台被调用,组件通过组件的接口实现数据的传递。每个组件拥有多个接口。组件的接口用来传递组件本身及组件之间的数据流。组件合约限制数据流是否可被传递。如果数据流满足了可以被传递的条件,就可以通过接口在组件间传输,通过调用组件中不同的方法,实现组件的功能。
34.组件拥有的接口类型有三种:输入接口、输出接口及参数接口。
35.其中输入接口传递两种数据:1.外部输入数据(非系统中其它组件传递而来的数据),2.内部传递数据(根据组件依赖关系,接收其它组件的输出数据作为输入数据);输出接口输出一种数据:组件执行后得到的数据;参数接口传递一种数据:组件本身的组件参数值。
36.其中输入数据包括:输入参数值、输入参数状态。输出数据包括:输出参数值、输出参数状态。
37.其中输入参数状态及输出参数状态包括fault(故障)及no_fault(无故障)两种状态。组件参数值不存在状态。
38.组件合约即每个组件的布尔断言组成的集合,反应每个组件中数据流的行为约束。组件合约包括前置条件型合约、后置条件型合约和不变式条件型合约三种。
39.其中前置条件型合约包括对输入数据及组件参数值的约束条件。后置条件型合约包括对输出数据的约束条件。不变式型条件合约包括对组件参数值及组件参数值之间的约束条件。
40.其中前置条件型合约分为两部分判定工作:1.初始输入生成:根据比较、确认操作后,可能涵盖组件中所有方法的调用要求的多个区间值,随机生成多组输入数据及组件参数值(即步骤4中的1:确定个组件输入数据及组件参数值);2.数据调用方法:根据每个方法的具体调用要求,判定获取的输入数据及组件参数值满足哪种方法被调用的前置条件,选择不同方法(即步骤4中的2);组件中方法被调用的前置条件判定通常包括输入参数值与组件参数值、输入参数值与输入参数值、输入参数值与固定值、组件参数值与固定值等情况的比较,以及状态确认。
41.步骤2:从系统设计图中获取组件依赖关系;根据组件依赖关系生成组件依赖图;
42.组件依赖关系是指组件之间存在的关系,运行次序靠后的组件接收到运行次序靠前的组件传递而来的信号后,对信号产生应答反应,并产生响应动作。接收信号后,传递来的数据作为接收数据的组件的某一条件所需的数值,进行数据处理。
43.步骤3:根据组件依赖图求得组件合约的求解顺序;
44.使用拓扑排序算法对组件依赖图中的节点,即组件进行排序,得到组件合约的求解顺序;
45.步骤4:根据组件合约的求解顺序,使用逐级求解方法,依次对各个组件合约进行求解(即求解组件的输出接口输出的输出数据),结合组件合约,自动化生成测试用例。
46.进一步地,所述步骤4具体包括以下步骤:
47.1)确定各组件的输入数据及组件参数值:若当前组件是首个求解的组件(求解顺序为第一的组件),对于组件的输入接口获取的外部输入数据,将其获取的输入数据的参数源标记为生成(generate),参数内容标记为满足其前置条件的输入参数值区间,并以其前置条件为依据,随机生成满足其前置条件的输入数据,并进行存储,输入参数状态随机为fault或no_fault状态。在求解该组件合约的过程中,由相应的组件的输入接口获取存储的输入数据;同时若当前组件存在组件参数,则将其参数内容标记为满足其前置条件的组件参数值区间,并以前置条件为依据,随机生成满足其前置条件的组件参数值,并进行存储,在求解该组件合约的过程中,由相应的组件的参数接口获取存储的组件参数值;
48.若当前组件不是首个求解的组件(求解顺序非第一的组件),对于组件的输入接口获取的内部传递数据,将其获取的输入数据的参数源标记为其依赖的组件的名称,参数内容标记为其依赖的组件的输出参数名。在求解过程中,获取其依赖的组件对应输出接口输出的输出数据,作为当前组件的输入接口获取的输入数据;同时若该组件存在获取外部输入数据的输入接口,则将其获取的外部输入数据的参数源标识为生成(generate),参数内容标记为满足其前置条件的输入参数值区间,并以其前置条件为依据,随机生成满足其前置条件的输入数据,并进行存储,输入参数状态随机为fault或no_fault状态。在求解该组件合约的过程中,由相应的组件的输入接口获取存储的输入数据;同时若该组件存在组件参数,则将其参数内容标记为满足其前置条件的组件参数值区间,则以其前置条件为依据,
随机生成满足其前置条件的组件参数值,并进行存储,在求解该组件合约的过程中,由相应的组件的参数接口获取存储的组件参数值;
49.参数源标记为生成(generate)的各个组件的输入数据及所有组件参数值都是一次性生成若干组并存储的,在后续计算过程中被依次取用。在求解过程中,先判断当前组件的输入数据及组件参数值满足当前组件的哪一个方法的前置条件,根据该组件的输入数据和组件参数值,求解该组件中相应方法的前置条件所对应的后置条件,得到的输出数据(例:组件存在组件参数值g1,g1为输入参数值上限值,超出输入参数值上限则输入无效,此时将输出参数状态置为故障状态;输入参数值未超过上限值,则根据后置条件求解输出参数值,此时将输出参数状态置为无故障状态。前置、后置条件表达如下:1.满足前置条件“i1.v>=g
1”,对应后置条件“o1.v=0”,输出参数状态“o1.s=fault”;2.满足前置条件“i1.v<g1”,对应后置条件“o1.v=3*i1.v”,输出参数状态“o1.s=no_fault”);继而对该组件的不变式条件进行判定,若该组件的所有不变式条件都满足,则保留本轮求解过程中的数据,将本轮求解过程中该组件的输入接口获取的输入参数名、输入数据、输出接口输出的输出参数名、输出数据和参数接口获取的组件参数名、组件参数值存入合法数据表;否则删除本轮求解过程中的数据,以实现测试用例的约简(即删除不满足不变式条件的测试用例);组件的方法的前置条件通常为输入参数值与组件参数值、输入参数值与输入参数值、输入参数值与固定值、组件参数值与固定值等情况的比较,以及状态确认;
50.判断当前组件是否为最后一个求解的组件:若不是,则根据组件合约的求解顺序,确定下一个求解的组件合约,并根据上述方法对其进行求解;如果当前组件合约是最后一个求解的组件合约,则保留该条测试用例,即该轮求解过程中每个组件的输入接口获取的输入参数名、输入数据、输出接口输出的输出参数名、输出数据和参数接口获取的组件参数名、组件参数值。进一步地,根据前置条件生成(generate)输入数据及组件参数值时,为充分考虑系统中各种因素之间的相互作用会对系统产生的影响,根据组合测试策略的二维组合覆盖标准(即若假设任意两个因素间均存在相互作用,则必须保证测试用例集覆盖任意两个因素间所有的取值组合),生成多组输入数据及组件参数值,并进行存储;该操作同时减少了初始生成的测试用例的输入的数量;在每一轮求解过程中,利用一组输入数据及组件参数值进行求解,经过多轮求解,得到多条测试用例,自动化生成符合所有合约的测试用例集。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1