基于开源测试工具构建软件测试实践教学

2020-08-21 01:01:16宋玮李敏欧毓毅
现代计算机 2020年20期
关键词:测试工具软件测试开源

宋玮,李敏,欧毓毅

(广东工业大学计算机学院,广州510006)

0 引言

软件测试是一门对工程实践要求极高,对学生动手能力要求极强的软件工程核心课程。目前我们计算机学院已经开设了这门课程,并配套有大量学时的实验课程,课程设计以及综合性的测试实践,但根据学生完成的情况来看效果并不理想,表现在下面几个方面:

(1)测试基本理论和方法与实践脱节:学生虽然可以完成测试课堂教学上给出的测试练习题以及通过课程考试,但面对实际项目的测试却无从下手,无法将学到的测试技术应用在具体的软件项目中。具体表现在毕业设计论文中相应的测试章节描述含糊不清,毕业设计演示时许多分支功能实现不完整,这说明学生不重视项目的测试环节,也不懂得如何将学过的测试技术应用于实际项目中。

(2)实践教学设计缺乏系统性。课程教学-实验-课程设计-综合测试实践4 个环节,是一个对技术使用逐层加深的过程。但在具体实施中,实践教学往往各自为政,缺乏关联性,这种“拼盘式”、碎片化的实践教学,不仅难以达到应有的深度、复杂度,也难以激发学生的学习兴趣,从学生的实践过程和实践报告中也看到,学生的工作只是简单重复前一次实践环节的内容,并未得到知识和技能上的提升。

(3)全面配置商用软件测试工具开展软件测试的实践教学,除了面太窄、投入太高外,主要是很难对在这方面取得的实践教学成果进行推广和普及[1]。

在这种背景下,如何选择和利用开源测试工具来构建软件测试实践教学的实验方案设计、测试工具配备、以及测试活动开展等就成为目前亟待解决的问题。本文以笔者承担的软件卓越班14 级与17 级的软件测试综合实践为例,研究如何将开源测试工具引入到软件测试综合实践中,使学生在经历了理论教学-实验-课程设计的训练后,如何不重复的获得综合性的训练,加强学生对软件测试一整套知识体系的全面掌握,丰富课堂教学的内容,提高课堂教学的质量和效果,最终提高软件工程类课程的质量。

1 基于开源测试工具构建软件测试实践教学的实施实例

1.1 测试案例项目的选择依据

被测试的软件项目来源于学生的软件工程课程设计,数据库课程设计或是其他学生的毕业设计。选取这类项目的优点是项目需求和软件实现简单,有益于学生快速熟悉项目需求和设计测试用例以及有利于测试工具的引入。需求和设计过于复杂的项目将使学生花费太多的精力在项目的熟悉与理解上,这在时间上不具有可行性,并会给一部分能力较弱的学生带来挫败感。

1.2 开源测试工具的选择

目前开源测试工具众多,每一种开源测试工具面向的测试阶段,开发平台各不相同,也各具特色,但不是每一种工具都适合于初学者以及实践教学。在选择开源测试工具时考虑了下面的三个因素:第一、尽量选择与学生熟悉的开发语言和软件生态环境一致的开源测试工具,这样容易将新工具引入到教学,提高学生对新技术的接受程度,降低挫败感。第二、减少与前期测试训练的重复性,弥补某些方面训练的不足。第三、保证知识体系的完整性,每种测试工具只侧重测试的某一阶段,不能因为使用某一特定的工具而忽略了其他阶段的测试训练。表1 给出了测试案例项目以及测试工具的具体说明。

1.3 具体训练方案

(1)基于JUnit 的训练方案

14 级软件测试综合实践时间4 个星期,一个阶段一个星期。训练目的包括:第一、掌握JUnit 的基本使用:普通对象测试;第二、掌握Mock 的概念,学会Easy⁃mock 测试Servlet 与Service 的基本步骤和操作方法;第三、掌握DbUnit 测试DAO 的基本步骤和操作方法。具体训练内容如下。

第一阶段:①整理需求及设计文档,安装被测项目,各小组分析被测项目除了基本的增删改查,是否有其它的业务逻辑。②安装及配置JUnit。③学习JUnit的基本使用:普通对象测试。④分析项目中是否存在这类具有一定业务逻辑的普通Java 对象并进行测试。

第二阶段:①学习Mock 的概念。②学习Easy⁃mock 测试Servlet,基本步骤:使用EasyMock 生成Mock对象;设定Mock 对象的预期行为和输出;将Mock 对象切换到Replay 状态;调用Mock 对象方法进行单元测试;对Mock 对象的行为进行验证。③实际的测试报告中需要测试2/3 个Servlet。

第三阶段:①学习用Easymock 测试Service。②实际的测试报告中需要测试2/3 个Service。

第四阶段:①学习DbUnit 测试DAO,基本步骤:将测试用的准备数据和预想结果数据,准备成XML 格式文件;在setUp()方法里备份数据库中的关联表;在set⁃Up()方法里读入准备数据;对测试类的对应测试方法进行实装,执行对象方法,把数据库的实际执行结果和预想结果进行比较;在tearDown()方法里边,把数据库还原到测试前状态。②实际的测试报告中需要测试2/3个DAO。

表1 测试案例项目以及测试工具

(2)基于JMeter 的训练方案

17 级软件测试综合实践时间4 个星期,一个阶段一个星期。训练目的包括:第一、掌握性能测试的需求分析,明确性能需求指标,设计测试场景用例。第二、掌握JMeter 进行性能测试的基本步骤和操作方法。第三、掌握从测试报告中分析性能测试指标达成度的方法。具体训练内容如下。

第一阶段:①整理需求及设计文档,安装被测项目。②安装及配置JMeter。

第二阶段:①性能测试需求分析:确定业务测试点。考虑到学生的能力,要求至少测试用户登录;其他功能选测。②明确性能需求指标:针对业务测试点形成指标表(参考图1)。③测试场景用例设计:要求完成并发测试场景及业务量测试场景(参考图2)。④为测试场景设计脚本用例(参考图3)。图均取自学生的实践报告。

图1 登录模块业务量性能测试需求指标表

图2 登录业务量测试场景用例

第三阶段:①构建测试数据(以登录为例):利用BadBoy 测试工具录制用户注册,导出为JMeter 脚本;使用JMeter 迭代生成用户账号。②测试脚本开发:利用BadBoy 录制用户登录过程,生成JMeter 脚本;对登录用户名进行参数化;设置计时器;设置断言;添加“察看结果树”、“聚合报告”。③设置测试场景,如,用户登录并发基准场景设置:2000 个用户并发同时登录系统,无须考虑持续时间;用户登录业务量基准场景设置:设置30 个线程数,持续时间需30 分钟。

第四阶段:结果分析与报告输出。学会生成JMeter测试报告,并从测试报告中分析性能测试指标的达成度,逐一判断是否存在性能风险。

图3 登录脚本用例

2 基于开源测试工具构建软件测试实践教学的总结

经过两届的教学探索,采用热门开源工具开展软件测试实践教学切实有效的提高了教学效果。具体如下:

第一、丰富了软件测试实践教学的内容,弥补了原有的实践教学的不足。在14 级的训练中,实践过程完整覆盖了多层体系结构中Servlet、Service、DAO 的测试。这种训练方案加深了学生对单元测试的认识,也让学生更充分的理解了软件分层结构。在17 级的训练中,使学生对性能测试的认知从理论转到了实际的并且是自己设计的软件项目中,促使学生今后在设计软件项目时能切实的考虑性能需求。

第二、训练方案中保留了传统的人工测试阶段的训练,既能满足一部分能力较低的学生的训练需求,也保证了知识体系的完整性,避免了特定测试工具只能测试某一阶段的不足。

第三、训练过程需要学生进行主动探索,即发现问题,解决问题,促进了学生对新技术生态环境的兴趣。考虑到独立解决问题的能力是综合实践教学训练的一个目的,因此,在教师只讲解基本步骤和方法,这样学生必然会遇到很多问题。在训练过程中有如下两个案例。案例1:14 级学生在测试Servlet 时发现doGet 方法为无返回值的方法,无法对方法的返回值进行断言,通过探索学习掌握了两种解决方案:通过方法产生的副作用来进行断言或修改生产代码设置全局标志,并根据自己的项目特点选择其一完成测试。案例2:17级学生进行性能测试时,发现登录功能发送的请求带有token,JMeter 的基本使用方式失效,通过探索学习获得了解决方案:使用后置处理器中的正则表达式提取token,然后用BeanShell 设置成全局变量,并成功应用在性能测试中。每个人测试的项目不同,除了一些共性问题外还会遇到个人特有的问题,主动探索是解决问题的唯一途径。通过这种综合训练的方式,极大的增强了学生综合解决问题的能力,对今后他们在生产环境下的工作不无裨益。

如上所述,开源测试工具的引入确实带来了好的教学效果,但在具体的实施过程中也发现了一些问题,仍然有改进空间。学校的实践教学与社会上的职业培训不同,学生的知识储备和工作经验对于实践训练始终是个制约因素。在组织14 级和17 级的实践训练中保留了传统的测试手段来适应能力较弱的学生,并且在每次实训前对基本的概念和步骤做了详细的讲解和演示,但部分学生仍然具有畏难思想,不愿意尝试新事物。表现在,14 级采用分组方案时,学生更倾向于选择功能测试;而对17 级,让一个学生独立完成整个项目测试包括功能测试、流程测试、性能测试,从课堂检查与实训报告中看出性能测试部分做的不尽人意,还出现了抄袭的现象,调查发现主要原因是环境配置不成功,运行时出错,觉得太难等。在后续的教学设计中,将进一步细化学生的能力和偏好,必要时引入Java 生态环境外的其他测试工具,以适应不同学生的情况。

3 结语

本文对基于开源测试工具构建软件测试实践教学进行了探索,以14 级与17 级软件卓越班的软件测试综合实践教学设计为例,讨论基于开源测试工具构建软件测试实践教学的内容设计。实践表明在软件工程测试中引入开源测试工具,有助于丰富实践教学的内容,避免了对前一次实践环节的简单重复,增强了学生的探索和创新兴趣。

猜你喜欢
测试工具软件测试开源
边缘智力儿童及其智力测试工具的研究进展
基于OBE的软件测试课程教学改革探索
计算机教育(2020年5期)2020-07-24 08:53:20
五毛钱能买多少头牛
Http并发连接测试工具
EXCEL和VBA实现软件测试记录管理
电子制作(2018年16期)2018-09-26 03:27:18
关于软件测试技术应用与发展趋势研究
电子测试(2017年15期)2017-12-18 07:19:20
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
软件测试工程化模型及应用研究
开源计算机辅助翻译工具研究