基于云架构的软件测试实验教学平台
2015-05-03李劲华贾冬雪
李劲华,贾冬雪,赵 毅
(青岛大学 信息工程学院,山东 青岛 266071)
软件测试是软件工程学科的一个核心知识域,它是保证和控制软件质量的有效手段。为落实我国教育的发展战略,强化培养学生在软件开发领域的工程实践能力、工程设计能力和工程创新能力,必须加强软件测试的实验教学。目前已有一些高校在加强软件测试的实验教学建设,包括采用云技术搭建软件工程试验环境[1-3]。
青岛大学与某国际著名软件教育机构共建了软件工程(服务外包)专业,软件测试技术是该专业必修的专业基础课程之一。由于该专业2015年计划招收人数已达1 000人,解决大规模的实践教学问题迫在眉睫,但实验指导教师、扩展传统的软件测试实验平台、采用大规模开源在线课程的“慕课”教学方法[4]都不能很好地解决大规模的软件测试实验教学问题。
在线判题系统(online judge,OJ)实现了对程序代码的自动检查,可以应用在解决大规模程序设计的实验教学中,例如浙江大学用于程序设计训练的OJ。也有人尝试运用OJ原理,实现了一个编译程序在线评测系统[5]。
与其他软件类实验课程相比,软件测试实验有如下特点:(1)实验者需要编写软件测试脚本,由平台提供测试数据,执行测试代码,给出实验结果,功能同OJ;(2)实验者根据平台提供的软件测试工具编写自动化软件测试代码;(3)实验者提供测试数据,平台运行给定的待测程序,查找待测程序的错误,验证程序的功能/性能,计算测试数据的覆盖率;(4)实验者根据平台提供的软件测试工具编写测试代码或者测试数据;平台利用工具运行待测程序,实现压力、容量、性能等非功能测试及其评判;(5)实验者交互使用测试工具完成相应的软件测试实验。
各种开源的云计算平台、软件测试工具和自动化测试框架[6-8]为大规模软件测试实验教学提供了可行的解决方案。
1 云技术与云测试
云计算[9]是一种计算和部署模型,用户可以随时随地访问网络上的可配置的共享资源,如计算资源、存储空间、网络通信、应用程序等服务。云计算具有按需自助式服务、访问途径多种多样、共享资源池、可扩展性和高可靠性等特点。
云计算可以提供以下3个层次的服务:(1)底层基础设施即服务(IaaS),是将云计算平台所依赖的计算、存储、网络设备以及操作系统等基础硬件设施以服务的形式提供给用户,使其部署和运行自己开发的应用程序;(2)平台即是服务(PaaS),是将应用软件的开发和运行环境作为一种服务,允许用户通过互联网开发自己的业务应用,开发完成之后还可以在云平台环境中运行和维护;(3)软件即服务(SaaS),是利用互联网、通过客户端向用户提供应用程序功能的服务,应用程序可以是软件供应商提供的商用SaaS,也可以是企业自身定制的SaaS。
云计算的部署模式有3种:(1)私有云——部署的云资源只供某个特定的企业使用,是企业内部构建云平台是最为常见的部署方式;(2)公有云——为所有的云端个人用户或者组织提供服务的云平台,通常由第三方厂商提供;(3)混合云——以上两种云部署模式的组合模式。出于信息安全的考虑,企业不会将所有的企业数据信息放到公有云上,混合云使得企业既可以对外提供服务,又可以保障内部数据的安全性。
Eucalyptus云平台[10](桉树云)是用于搭建私有云和混合云的软件,它和Amazon的 Web服务(AWS)兼容,基本上是AWS的开源实现。它运用虚拟化框架技术向用户提供云资源来满足用户计算、网络和存储方面的需求。桉树云可以分成3层,分别是硬件层、开发管理层和应用层,恰与云计算的3种服务模型IaaS、PaaS和SaaS相对应。
桉树云硬件层对应的服务是IaaS,由IaaS提供商将硬件资源和虚拟化技术相结合,向用户提供各种类型的虚拟机器;开发管理层对应的服务是PaaS,其中经过认证的管理者通过管理界面管理硬件层虚拟出的虚拟资源,开发者则在这些虚拟资源的基础上开发出可以通用的、符合AWS标准并与AWS兼容的API以供应用层用户使用;应用层的用户通过用户界面和桉树云进行交互。
云测试是一种基于云计算技术的新型测试方案[11],它将软件测试或者自动化软件测试工具作为一种服务[12]提供给使用者。云测试平台可以提供多种浏览器作为用户交互的客户端,通过网络接收用户编写的测试脚本,在测试环境中运行用户的软件进行测试,最后,再通过网络将测试结果传输给用户。与很多软件测试方案相比,云测试具有独特的优点,它能有效地解决本文提到的测试方案中亟待解决的问题,特别是包括:相对便宜的价格、提供大规模服务、整合多个测试工具和测试案例等。
2 软件测试实验云平台
笔者基于桉树云设计了用于软件测试实验的私有云平台的解决方案。平台以开源的自动化软件测试框架为基础,整合稳定的、开源的软件测试工具,运用软件测试服务技术,实现软件测试的自动化。该方案借鉴了OJ原理自动评判软件测试实验的结果。作为开放平台,使用者可以为软件测试题库提供类似于编程题目的软件测试题目和结果、评分标准等。同时,该方案也允许实验教师在软件测试工具库中添加(开源的)软件测试工具。为了处理大量的软件测试教学任务,减少各类测试工具安装部署造成的问题,实验平台采用了桉树云来实现软件测试实验的基本活动,主要是测试实验作业的提交、软件测试实验的自动执行、结果记录和评判。有关云计算软件测试的关键技术参阅文献[13]。
2.1 技术架构
图1给出了基于开源软件的软件测试云实验平台的逻辑结构,分为4个层次。
(1)访问管理层。它是云测试服务的使用者和云测试服务进行交互的接口。用户通过Web浏览器提交测试请求到测试云平台。用户请求服务时提交的信息包括测试环境(测试工具、操作系统等)需求、测试用例、测试脚本和控制文件,系统返回给用户软件测试结果。
(2)测试管理层。该层对用户测试环境进行格式转换,转换完成后得到XML格式的统一输出,然后将XML文件存储到云端数据库中。云端资源管理层读取数据库中的内容并根据请求生成虚拟机。该模块要解决的主要问题是将各种格式的请求转换成统一的XML格式,然后和云端虚拟机资源进行匹配。
(3)任务管理层。该层负责测试任务的调度、分配和测试执行的监控,包括实现测试框架和用户间的交互、测试任务的自动安装和运行、监控测试执行、存储测试数据和测试结果。主要功能由一个自动化软件自动化测试框架Autotest[8]实现。
(4)云资源管理层。主要功能是提供IaaS服务。底层框架用的是开源私有桉树云框架Eucalyptus,用于给上层测试用例的执行提供计算资源。另外,虚拟机监控模块和结点监控模块帮助收集虚拟机资源和实体机资源的使用状况。系统监测器用于监测整个云系统的运行状态。
图1中没有显示测试实验云平台的网络、计算和存储的硬件资源,它们要由桉树云提供管理和服务。
图1 软件测试云实验平台的逻辑结构
2.2 测试工具的安装和配置
实验平台提供的服务是软件测试的自动化执行——云测试。SaaS应用软件通常包含数据(库)和完成业务逻辑的程序代码。依据对代码及数据的更改程度,把传统的单租赁软件测试工具(包括测试框架)改造成多租赁的软件,即SaaS应用。主要有下列3种策略[14]。
(1)单数据库、单代码:在一个单一数据库中存储所有租赁客户的数据,需要对数据库中的表添加租赁客户字段、大量改动代码。
(2)多数据库、单代码:为每一个租赁客户创建一个独立的数据库,只需更改为每个客户选择数据库的配置文件,无需改动代码。不足的是,一旦数据模式发生变化,就要更新每一个数据库。
(3)多数据库、多代码:为每一个租赁客户创建一个独立的数据库、拷贝全部代码,无需修改代码,客户的数据不易混淆。显然,一旦数据模式、数据处理发生变化,就要人工为每个客户更新数据库及代码。
软件测试云实验平台的一个设计原则,是尽量快速地为实验者提供多样的软件测试工具,大量地更改软件代码或数据库的方式都不可取。多数据库、单代码策略仅仅更改配置文件就可以迅速复用现有的测试软件,因而是首选策略。
接下来的主要工作是云测试平台的配置和编写测试工具的调用脚本,包括按照桉树云的结构,把软件测试工具、自动化测试框架、数据库、测试库等云测试服务资源安装配置到桉树云不同的节点服务器,建立主从服务器的关联关系,为待测软件、测试工具、测试作业、测试用例及测试结果等配置不同的目录。对每个不同的软件测试工具都需要编写脚本,包括处理工具的调用、测试用例的读入、如何记录并存储测试结果等工作;然后确定配置参数、调用脚本的逻辑顺序,并进行检测和验证。最后将每个测试工具的自动化执行脚本部署到桉树云。
2.3 云测试过程
首先,用户输入测试环境请求和测试任务。系统按照用户是否指定所需云计算环境来为用户选取特定的云计算资源:如果用户指定了特定的云计算资源,则按照用户的指定来调用相应的功能模块;如果用户没有指定,则系统依据当前用户环境请求和云计算资源的匹配程度来替用户选取特定的云计算资源。
然后,根据测试任务匹配和调度云测试资源(如测试代码、测试用例、测试工具和待测程序),执行云测试并分析测试结果,最后系统返回测试判定。
云测试环境请求参数如下:
MACS——机器数量(正整数);
OS——操作系统;
CPU——CPU要求;
MEM——内存大小;
HD——硬盘大小;
Software——所需安装的测试软件;
DL——截止日期;
SerLevel——服务等级(由高到低划分为5个等级);
Pri——优先级(由高到低划分为5个等级)。
笔者设计了基于XML格式的测试环境请求参数格式及其转换程序。平台首先将用户的云测试环境请求转换为XML格式的数据,然后再由桉树云将这些XML数据和云端现有资源进行匹配,以满足用户的环境请求。
3 云测试实验模式
用户在独立的测试开发环境或者云平台上完成测试任务,提交到云实验平台进行测试实验。根据实验者是否使用特定的测试工具、编写测试脚本、提供独立的测试用例,实验平台提供了7种云测试实验模式(见表1)。
表1 云测试实验模式
模式1:软件测试云实验平台运用虚拟技术为用户提供统一的软件测试工具交互式使用环境。用户像使用本地机一样使用测试工具对给定的待测程序进行测试实验,过程和结果存储在云平台上。该模式将软件测试工具虚拟化,实现了软件工具的软件测试即服务(SaaS)。
模式2:实验者对给定的待测程序编写测试脚本进行测试实验,测试脚本包括测试案例,输出按照平台要求的格式给出。平台运行测试脚本,完成测试结果的分析与评定。该模式类似于OJ。测试脚本的编写可以在本地机上完成、也可以在平台上运用虚拟环境完成。该模式使用的是云平台服务(IaaS)。
模式3:实验者对给定待测程序的测试任务,设计测试用例,并按照平台要求的格式提交给云测试平台,云测试平台启动待测程序调用提交的测试用例,完成测试结果分析与评定。
模式4:与模式1和2类似,实验者用指定的测试工具编写测试脚本,平台完成测试、结果分析与评定。测试脚本的编写可以在本地机上完成,也可以使用平台(简单的PaaS模式)。但是并非所有软件测试工具提供了脚本语言及其运行。
模式5:实验者根据测试任务选定的测试工具,设计测试用例。平台完成测试工具的调用,使用用户提供的测试用例运行待测程序。与模式3的区别在于指定了测试工具,要求实验者学习某种特定的软件测试工具,如Web应用的性能测试工具Jmeter[7]。
模式6:与模式2类似,要求实验者将测试脚本和测试用例分离,实现测试复用。实验者可以不同时完成脚本编写和测试数据设计这两项任务,多次、反复地运用各种测试技术生成测试数据,使用同一个脚本测试同一个待测程序。该模式的实验难度大于模式2和模式3。
模式7:综合模式。运用了云计算的一种、两种或三种服务模型的组合。
4 问题和今后的研究方向
软件测试实验云平台对教师和学生都提出了新的挑战。对实验教师,除了要完成传统测试实验的任务,如编写测试任务、测试案例等,还要学习云计算技术、熟悉仍在不断改进的软件测试实验云平台,不断地扩充、编写、优化测试资源(编写测试数据、测试代码、测试结果等),解决软件测试实验类型多样性的需求与测试实验任务完成规范化的矛盾。学生也要花费额外的时间去熟悉软件测试实验云平台,包括有些工作不属于实验本身的任务,比如测试实验的提交格式、平台的使用以及完成实验的方式和流程。教师与学生初期的工作量都较大。
目前,实验教学使用的软件测试云实验平台只是完成了初步搭建,提供了简单的软件测试类型,包括黑盒测试(类似于OJ)的测试设计、冒烟测试、简单的压力/性能测试、基本的Web测试,实现了部分白盒测试(如语句和路径的覆盖率),但尚不能提供条件、逻辑和判定等小于语句单元的白盒测试。
今后需要做的工作主要是:(1)提高软件测试云实验平台的稳定性和可用性;(2)与现有的通用实验教学平台集成,完成软件测试实验周期的所有任务,包括任务布置、进度安排、题目分配、实验评判、结果统计等;(3)把更多的软件测试工具虚拟化并集成到软件测试云实验平台上;(4)通过校企合作等形式,开发更多、更贴近实际的测试案例。
(
)
[1]王志英,蒋宗礼,杨波,等.计算机科学与技术专业实践教学体系与规范研究[J].中国大学教育,2009(2):42-44.
[2]赵翀,高鹏.软件测试课程工程实践教学模式的探索与实施[J].计算机工程与科学,2014,36(增刊1):51-55.
[3]曾明星,王晓波,周清平,等.基于云计算的软件工程专业校企合作实训平台构建研究[J].现代教育技术,2013,23(1):107-112.
[4]周丽涛,刘越,彭立宏,等.探索MOOC在计算机实践教学中的应用[J].计算机工程与科学,2014,36(增刊1):118-121.
[5]尤枫,史晟辉,赵瑞莲.编译程序在线评测系统的实现[J].实验室研究与探索,2010,29(12):69-72.
[6]Junit[EB/OL].http://junit.org.
[7]Apache JMeter[EB/OL].http://jmeter.apache.org.
[8]Autotest[EB/OL].http://autotest.github.io.
[9]陈康,郑纬民.云计算:系统实例与研究现状[J].软件学报,2009,20(5):1337-1348.
[10]李乔,柯栋梁,王小林.云测试研究现状综述[J].计算机应用研究,2012,29(12):4401-4406.
[11]Eucalyptus[EB/OL].http://github.com/eucalyptus/eucalyptus/wiki.
[12]Ciortea L,Zamfir C,Bucur S,et al.Cloud9:a software testing service[J].IEEE Transactions on Operating Systems Review,2009,43(4):5-10.
[13]贾冬雪.基于云计算平台的软件测试关键技术研究[D].青岛:青岛大学,2013.
[14]孟小华,陈传凯.传统软件向SaaS软件转型方案的研究[J].微型机与应用,2012,31(4):7-10.