基于分类树的多租户系统定制功能测试方法∗
2018-11-28左小凯张海波安韵涵
左小凯 张海波 安韵涵
(武汉数字工程研究所 武汉 430074)
1 引言
软件即服务(Software-as-a-Service,SaaS)是一种通过Internet提供软件服务的模式,一般采用基于web的方式,按照客户定制的内容和使用时间进行付费,对于用户而言,只要按照自己需求定制功能并付费即可使用所需的软件,并且用户不用对硬件和软件进行管理和维护[1]。
1.1 多租户软件即服务系统介绍
多租户软件即服务(Multi—Tenancy Softwareas-a-Service,MTA SaaS)是SaaS系统中常见的模式,随着云计算技术的发展,多租户模式也正在被应用于各种SaaS系统。MTA SaaS系统允许多账号和多个在线用户同时操作使用,用户可以按照自己的需求个性定制所需要的功能。多租户和多用户的区别主要在于多租户系统中租户应用的实例不同而多用户系统中用户共用一个实例[2]。
一般来说,MTA SaaS提供可共享的、可重用的基础数据和基础代码,租户可在公有的基础上定制特定的个性化功能[3],这种形式因为可以大幅度减少系统维护资源,同时满足大多数客户的需求,而受到越来越多云计算服务系统的青睐。国外的Salesforce公司是SaaS系统应用的先驱者,国内的金算盘、800CRM等公司也正在快速发展,随着国内外的软件即服务的不断发展,MTA SaaS也受到人们的重视。
1.2 分类树在软件测试中应用介绍
在软件测试中,分类树是一种特殊的黑盒测试方法,来自范畴划分方法[4]。通过分类树的方法,测试对象的输入域因测试对象的不同特征被划分成与测试相关的多个方面,对于每一个方面都可视作一个分类,由这些分类得到的类有时也能进一步分类,甚至是递归的继续进一步分类。通过分类的方法逐步对输入域划分,用树形图的形式表达划分状况,最后结合不同的分类组成测试用例。
分类树方法是非常有效的黑盒测试方法,分类树方法采用组合方式生成测试数据,越来越多的研究人员采用分类树方法应用到测试中来,并取得了许多成果。文献[5~6]利用分类树对web服务的测试进行了研究,文献[7]提出了一种利用分类树生成随机测试用例的方法;针对分类树方法测试产生冗余测试数据的问题,文献[8~9]将分类树与其他算法结合精简了测试用例。
1.3 MTA SaaS系统测试问题分析
对MTA SaaS系统进行测试时,不仅要面对传统软件的测试问题,还要面对其独有的测试问题。MTA SaaS测试一般包含以下内容:拓展性测试、兼容性测试、多租户使用测试、按需定制测试、持续更新测试等,其中按需定制测试、持续更新测试以及多租户使用测试是MTA SaaS区别于传统软件的重要的测试内容[10~11]。
持续更新状态是由MTA SaaS系统自身特性决定的,由于系统不断有不同的租户加入和退出,不同租户使用权限以及使用时间等有所不同,系统还能发布新的服务、新的功能供租户选择和使用,这种模式使MTA SaaS系统一直处于一种持续更新(持续升级)的状态,这种状态也为测试人员带来新的挑战[12]。
在MTA SaaS系统中,其区别于传统软件的特征之一在于具有定制功能,用户能按照自己的需求包括功能、界面、使用时间甚至投入资金等多方面因素进行定制,定制的特点具体化了软件即服务这一概念。而在这过程中,系统本身的参数和用户选择参数交互形成特定的个性化功能,由于过程实现的复杂和多因素,很容易引起未知的系统质量问题,系统的定制功能测试工作是必不可少的[13~14]。而由于系统处于持续更新的状态,不同的租户的定制功能能否稳定的实现是系统质量的关键问题,因此,在这种持续更新状态的系统中对定制功能的测试尤为重要[15]。
本文针对MTA SaaS系统定制功能在持续更新状态下测试情况复杂和可靠性难以保障的问题,提出了一种基于分类树生成定制功能模型,通过该模型采用多约束的策略生成测试用例的方法,该方法能有效地测试系统在持续更新状态下的定制功能的完备性和可靠性。
2 分类树介绍
2.1 分类树的定义
分类树(classification tree),是一种与流程图类似的树结构,其中每一个内部节点表示一个属性上的测试,每一个分支表示一个测试输入,每一个叶节点表示一个类别。分类树的形式定义如下:
定义(分类树)一颗分类树是一个四元组T=(D,I,C,R)。
D为分类树T的根节点,是测试对象的输入域;
I=(i1,i2,…,im)(m∈Z且m≥1)为分类树的内节点,将输入域划分为若干不相交的子域;
C=(c11…c1n1,c21…c2n2,…,cm1…cmn) 为 分 类树的叶子节点,即测试对象的不同分类im的类;
R=(r1,r2),R为父节点与子节点的关系,r1={<D,Ik>|1≪k≪m},r2={<Ik,Cj>|1≪k≪m,1≪j≪n}。
如图1所示。
图1 分类树结构图
2.2 基于分类树生成测试用例的一般步骤
1)确定测试对象后,识别输入空间D;
2)对输入空间D进行分类,得到分类树内节点I=(i1,i2,…,im)(m∈Z且m≥1);
3)对I进行再次划分,获得叶子节点C= (c11…c1n1,c21…c2n2,…,cm1…cmn);
4)各个分类的不同子类互相结合生成测试数据,测试数据集 ST={c1x1,c2x2…,cmxm} ;
5)对生成的测试数据集ST进行筛选,去除无效的测试数据,得到精简的测试数据集。
3 基于分类树的MTA SaaS系统定制功能测试方法
3.1 基于分类树生成MTA SaaS系统的定制功能模型
基于分类树生成MTA SaaS系统定制功能模型步骤如下:
1)依据MTA SaaS系统的功能说明书提取MTA SaaS系统的定制功能,依据功能说明书确定分类树的输入空间Dm;
2)确定分类树输入空间后,依据MTA SaaS系统各功能的说明,对输入空间进行划分,可以获得Im={租户,基础功能,个性化功能},生成分类树的内部节点;
3)再次对分类树内部节点Im进行划分获取叶子节点 Cm= (t11…t1n1,f21…f2n2,…,s31…s3n),生成完整的分类树;
4)提取分类树生成的叶子节点,即产生的测试数据集,通过该数据集生成MTA SaaS系统的定制功能模型即(ti,fj,sk);
5)依据系统的功能说明书,对定制功能模型确定输入参数,生成具体的测试数据。
通过分类树得到MTA SaaS系统的定制功能模型,如下为该模型的定义:
定义1(MTA SaaS系统定制功能模型),该模型是一个由三个参数组成的三元组T。租户ti对系统进行功能定制后得到由一个三元组T=(ti,fj,sk)。
其中ti包含租户使用权限、使用时间、收费情况等多个信息,
fj表示租户选取的基础功能倾向,以网站类型为例,可以是教学、视频、音乐网站等;
sk表示用户定制的功能参数;
i、j、k的取值范围都由系统产品说明书决定。
3.2 定制功能模型分析
在本模型中,由参数ti代表租户,ti根据系统的约束,可以得到:
ti={租户类型,租户权限,消费类型},其中租户类型一般为个人和团体两种,租户权限包括账户个数、子帐户个数、可使用的SaaS系统功能等,消费类型一般为免费、短期(半年以内)收费、长期(半年以上)收费等。通过对ti参数的设置,可以代表MTA SaaS系统中多租户特性,将租户作为一个参数设计在测试用例中,可以有效地测试系统由于租户的加入、退出导致系统持续更新状态系统的定制功能可靠性。
由参数 fj,sk代表MTA SaaS系统的基础功能和个性化功能,在实际中由于SaaS系统的特性,服务商可以不断地添加各种功能供租户选择,这种功能可以是基础功能也可以是个性化功能,因此参数fj,sk可以依据测试的要求和系统的现状进行设置生成测试用例。通过参数 fj,sk的设置,可以有效地测试系统由于新服务、新功能的发布导致的持续更新状态下的定制功能的稳定性和可靠性。
在设置参数ti,fj,sk时,由于要考虑到系统不同租户的类型、权限、消费类型不同,而租户参数ti可以影响参数 fj,sk的取值范围,基础功能参数 fj和个性化功能参数sk因MTA SaaS系统的设定,存在一定的捆绑设置或者互斥设置,以上的情况称为参数之间的约束。由于这种多约束的关系存在,在设置参数时,根据参数之间的约束情况可以分为满足约束和不满足约束两种策略设置参数。在满足约束的情况下设定参数生成测试用例,可以有效地测试系统定制功能的完备性和可靠性,在不满足约束的情况下设定参数生成测试用例可以有效地测试系统在租户错误的输入下的应对情况,提高系统软件的质量和稳定性。
基于该功能模型设置参数并采用多约束策略生成的测试用例,能有效地抵抗持续更新这一特殊状态下的故障发生,同时有效地测试系统的功能完备性和软件质量,提高了系统的稳定性和可靠性。
3.3 基于定制功能模型生成测试用例方法
由上述分析,可得到基于该定制功能模型生成测试用例方法,在获取具体步骤前,对系统各参数之间的约束关系作如下定义:
定义2(约束)为使系统得到正确运行,软件参数自身或参数之间需要满足一定的条件,该条件通常由系统设计、实际场景中得到,可用s表示。Sw={s1,s2,…sw},其中sl(1≪l≪w)表示某参数受到的第l个约束条件;
定义3(单参数约束条件),约束条件仅为该参数自身的约束,可用S(ap)表示;
定义4(多参数约束条件),约束条件为多个参数相互之间的约束,多参数约束条件又可因参数的个数分为简单约束和复杂约束。
简单约束:仅含有两个参数,其约束条件可表示为 S(ap,aq);
复杂约束:包含了两个或两个以上参数以及常量数据的约束条件。
在考虑系统参数间的多约束关系后,可以得到基于定制功能模型生成测试用例方法,该方法步骤如下:
1)如3.1节所述,提取MTA SaaS系统定制功能模型 TM= (ti,fj,sk);
2)依据系统功能说明书获取参数ti,fj,sk之间的约束关系SM;
3)在约束关系SM的指导下,考虑等价类、边界值等方法,对参数ti,fj,sk进行设置,生成测试用例,并分为满足约束和不满足约束两种测试用例组;
4)再考虑MTA SaaS系统持续更新状态下的系统参数设置,若系统更新,则系统更新后新增基础功能和个性化功能,即扩大参数 fj,sk的取值区间,重复步骤1)、2)、3),对扩大后的取值区间重新取值生成新的测试用例。
4 测试方法应用实例
4.1 实验设置
下面以一个基于MTA SaaS系统的在线网站建立平台为例展示该功能模型的应用实例。该平台可参考文献[16],本文将该平台进行一定程度上的改变,该平台可为租户提供在线建立网站的一站式服务,租户可自行按照自己的需求建立网站,该平台提供论坛、视频、音乐、教育等模板的基础网站,在此基础上,用户可个性化选择邮件服务、会员服务、后台数据分析等功能。
在实际MTA SaaS系统中,租户可以定制多个个性化功能,这里为了分析方便,设定租户只能选择一种个性化功能,由多个个性化功能组合的情况暂不考虑。
依据系统功能说明书,对三个参数的设定有
ti={免费个体,免费团体,收费个体,收费团体},
fj={论坛,视频,音乐,教育},
sk={邮件服务,会员服务,数据分析,建立子帐户,无(即不选择个性化功能)};
考虑参数之间的约束关系,这里设定其约束关系如下:
1)免费租户只能使用基础功能;
2)邮件服务与教育网站捆绑,即租户选择了建立教育网站,必定有邮件服务;
3)租户建立音乐网站不可选择邮件服务;
4)只有教育网站租户可以建立子账户。
在添加约束关系后,设定系统新增功能可以建立天文、医学两种网站,新增个性化功能可以数据备份、在线数据处理两种功能。
4.2 测试用例生成
依据功能模型,在考虑参数之间的约束关系后,再依据等价类、边界值对输入参数进行划分,生成满足约束和不满足约束两类测试数据,在本实验中,其约束关系1)为单参数约束条件,约束关系2)、3)、4)为多参数约束条件中的简单约束条件。
在系统新增功能前,初步生成测试用例个数为i×j×k,在本实验中初步生成用例个数为个4×4×5,即80个;再考虑约束关系:
不满足约束关系1)用例数为2×4×4,即32个;
不满足约束关系2)的用例数为4×1×4,即16个;
不满足约束关系3)的用例数为 4×1×1,即4个;
不满足约束关系4)的用例数为4×3×1,即12个;
同时不满足约束关系1)、2)、3)、4)的有 32+2+2+6,即42个;
剩下38个即为满足系统定制功能说明书的测试用例。
在系统新增功能以及新增用户后,同样依据该定制功能模型生成新增加的测试用例,过程同上。最后,通过不满足约束关系和满足约束关系两种策略对参数进行设置,生成测试用例进行测试。
4.3 实验分析
本实验中,应用定制功能模型到该MTA SaaS系统,然后采用多约束策略生成测试用例。实验中,测试用例对定制功能各实现的覆盖率达到100%,用例数总共80个,对持续更新状态下的MTA SaaS系统而言,其测试有效性更强。
对功能测试一般采用黑盒测试,黑盒测试一般有边界值测试、等价类测试、基于决策表测试等方法。由于MTA SaaS系统具有持续更新的特点,传统的测试手段不完全适用于该系统的定制功能测试。
在本实验中,对MTA SaaS系统的定制功能应用该定制功能模型设计测试用例,由于模型中考虑了系统在不断持续更新前后的定制功能的各种状态,因此依托于该模型设计的测试用例有效地包含了持续更新状态下的定制功能的改变,能有效地对持续更新前后的定制功能的故障进行测试,不仅克服了持续更新状态下定制功能测试的问题,还从整体上提高了系统的稳定性。
从约束关系角度来看,生成的测试用例包含满足约束和不满足约束两种测试用例。满足约束关系的测试用例能有效地测试定制功能的实现,不满足约束关系的测试用例能有效地系统定制功能实现的完备性,避免因系统内部参数设置区间不当和客户误操作等多因素引起的故障。
本实验的测试用例是基于每个租户定制个性化功能时只能选择一个个性化功能的前提下生成测试用例,而某些系统可以选择多个个性化功能进行定制,可以按照以下方式对定制功能模型进行扩充:
设MTA SaaS系统具有定制功能,且定制时租户可选择不只一个个性化功能,MTA SaaS系统的定制功能模型可表示为 T= (ti,fj,sk1…sks),其中sk1…sks为一个或一个以上的个性化功能,该定制功能模型为(s+2)元组,其中s为租户ti选择的个性化功能的个数,其他步骤可对应改变,从而完成测试用例生成。
5 结语
本文针对多租户软件即服务系统持续更新状态下的定制功能可靠性问题,提出了一种基于分类树生成定制功能模型,依据功能模型采用多约束策略生成测试用例的方法。并用实例验证了该方法的可行性,分析了该方法实现的实际效果,验证了该方法产生测试用例能有效克服持续更新状态下定制功能问题,并提高了系统的稳定性,说明了该方法覆盖率高、测试有效性强的优点。以后还将针对测试效率的优化和多租户软件即服务系统的自动化测试方面做进一步研究。