张正金 石宝金
(1 巢湖学院,安徽 巢湖 238000)(2 蚌埠学院,安徽 蚌埠 233000)
随着软件规模的不断发展,软件基本支撑已经深入到各行各业的核心业务,软件的结构也变得日益复杂,因此软件测试作为保证软件质量最直接的一种手段,在软件开发过程中也显得尤为重要,对软件工程师的需求量也日益增加。软件测试在高校教学中是一门理论性和实践性都很强的专业课,它是软件工程专业的必修课程。该课程对于人才培养的目标是:掌握软件测试的基本理论和基本方法,常用的软件测试方法以及自动化测试工具的使用,能够设计测试用例,编写测试用例,执行测试用例,完成软件的基本测试的能力[1-2]。
目前,软件测试类人才需求量很大,企业迫切需要专门的软件测试类人才。为了适应行业人才需要,各大高校相继开设了软件测试类的相关课程。但软件测试是一门新兴的课程,传统的教学方式往往是将理论知识与实践环节分开教学,造成学生缺乏对软件测试过程的完整认识;对于理论知识讲述过程中,用一些简单的案例来加以说明,没有专门介绍测试的整个过程,学生缺乏在软件测试过程中对项目的整体理解。因而导致学生学习软件测试的积极性不高。如何在软件测试的教学过程中调整和改进传统的教学方法,已经是一个迫切需要解决的问题[3-4]。
问题一:教材。对于软件测试这门课程,每个学校都有不同的行情,工具书种类繁多,但真正适合高校有关软件测试的教材偏少,而且内容偏向于通用型指导,基本都是过多的强调于理论知识,没有将理论知识与实际应用相联系,实践效果较差。其次教材对于软件测试工具的介绍都是泛泛而谈,可操作性差,案例简单,难以让学生产生兴趣。
问题二:缺乏项目经验。软件测试是理论与实践相综合的一门课程,是一项需要实际项目开发经验和基础的工作。高校教师通常没有企业开发经验,更没有软件测试的经验,而软件测试是一门实践性极强的课程,没有开发经验的教师来讲授这门课程时,只能停留在理论知识层面,很难让学生对项目有整体认识,让学生很难理解将测试作为一个项目来完成。
问题三:缺乏案例教学。软件测试在教学过程中需要丰富的案例来讲述各个知识点。案例多种多样,规模大小不一,难度也不同,从而使得在真正的教学中案例难求。在实际教学中往往就是列举一些小程序或者简单的项目,案例在整个教学中是孤立的,很难与软件测试的基本知识点紧密联系到一起,从而造成学生难以将掌握的知识应用到实际的案例中去,对测试项目的整体把握能力也有所欠缺。
基于以上所述问题,以及结合在实践教学中的经验,提出了以项目驱动的方式来开展软件测试的教学工作,同时结合学生的专业特点,将构建主义作为学生学习的理论基础,以学生学习为中心;在实际的教学过程中,教师仅仅是知识的构建者,不是知识的灌输者,学生成为知识信息加工的主体,学生学习由被动的接受变成主动的探寻[2]。基于项目驱动式的教学模式,将软件测试课程的内容进行整合与优化,提炼出知识点,对于实际项目也需分成不同部分,从而达到教学形式的多样化,具体的思路如下:
(1)项目资源的建设。课程的开展最终是以项目为核心,因此整个教学活动也是始终围绕项目展开,在讲述软件测试的基本知识的时候以项目中的实际案例来开展教学。项目来源可以通过教师的专业课程设计,高校教师指导学生的孵化项目,也可以是历年来毕业设计中的经典作品,同时还可以是教师参加企业的挂职锻炼时参与企业接洽的实际项目,并经企业同意后可以作为学生的教学案例来教学。本文主要以项目:微信扫码app(皖维孵化项目)和电子商务网站(团购商城网站开发—基于ssm框架,由本校协同创新中心教师团队成员开发)为例加以讲述。
(2)教学环节设计。在实际教学中,需要将项目的知识点划分成一个个具体的、易于理解和掌握的任务,以提出问题或者分发任务的形式来组织课堂教学过程,调动起学生学习的兴趣和动力,变被动为主动。
(3)教学过程设计如表1所示。
表1 软件测试各阶段教学过程
因此,项目驱动方式下的课程教学,有利于提高教学效果,激发学生学习的积极性,有利于学生主动地去学习和探索软件测试技术。由实践经验来促进对基本理论知识的学习,在实际项目中有效地锻炼了遇到问题解决问题的能力,极大地提高了学生的动手能力。
项目驱动方式需要学生有一定的编程基础,需有Java和C语言基础。将学生进行分组,每个小组选出一名项目组长,成员构成为一个测试组长和若干成员。每位成员都需负责一个模块的开发与设计,同时还要负责另外一个学生的模块测试工作,将课程教学分成多个层次来进行。
以团购商城项目为例,项目包括登录模块,用户订单管理,购物模块,订单处理,购物车模块等构成。
第一个阶段:课程导入。
第一阶段以理论知识为先导,在接触真正的项目之前,需要有一定的测试理论为基础。
教学重点:涵盖软件测试的定义,介绍软件测试人才的现状,列举相关经典案例,如微软发布的最新操作系统,其测试人员的需求要远远多于开发人员;介绍文档测试的相关知识点,为学生进行初期的软件测试做准备,激发出学生的动手能力。
教学内容:讲述软件测试的基本原则,测试文档的规范性要求,制定测试用例,设计测试用例以及执行测试用例等。结合微信扫码app项目,验证测试文档规范性的重要性,在该项目中抽出文档规范要点,并进行重点分析。
第二阶段:基础知识。
教学重点:针对具体的项目分模块化开发,引出软件测试基础理论,包括白盒测试技术:如程序结构分析、逻辑覆盖、独立路径、循环测试、程序插装等方法;对于微信app项目,利用项目执行流程可以应用白盒测试方法中的场景法去模拟学生签到的过程,得出基本流与备选流,构建出场景图,同时对于程序段进行逻辑覆盖,分别进行语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、路径覆盖等方法。黑盒测试技术:如等价类划分、边界值测试、因果图与判定表法、正交实验设计法、场景法以及错误推测法等方法。在电子商务网站项目中,如登录模块中利用黑盒测试中的等价类方法和边界值方法对用户名、密码进行等价类划分和边界值等进行测试,并汇总测试用例集合。
案例结果分析如表2所示,通过表2的分析与实际上课过程中将项目与理论知识相结合,从而实现以项目引导讲授课程理论知识部分。
表2 测试案例结果分析表
教学内容:扩展如下部分:程序静态测试与动态测试相结合,程序走读与静态分析;介绍单元测试工具:如对于各个模块的测试使用JUnit4测试框架进行单元测试、C++Test测试框架等,以引入自动化测试做准备工作。
第三阶段:知识凝练。
教学重点:对开发好的模块之间根据程序结构进行集成操作,引出集成测试相关知识。集成测试方法:基于分解集成,基于调用图集成以及基于MM路径集成等方法,同时须介绍典型的测试 工 具 LoadRunner,QuickTest,TestDirector 等 的使用。如电子商务网站登录模块、用户管理模块、订单管理模块、购物车模块、修改注册资料模块等进行组装测试分别按基于分解集成中的自顶向下和自底向上集成方法,基于MM路径集成方法进行测试,并汇总测试用例集合。
教学内容:扩展如下部分:对功能测试进行设计与实施,测试管理:强调对测试进行有效管理的重要性,对软件测试需求、测试用例、测试计划的实施与执行和缺陷管理等进行计划和实施。
第四阶段:综合考核
教学重点:如何组织测试工作,对于整个项目实施的过程中,使学生对软件测试中的各种测试技术进行熟练的掌握后,组织各个团队进行项目展示和答辩,并完成验收测试,撰写测试总结报告,提高实践能力。
考核方式:对于以上每个阶段需提交相关的文档说明,包括测试计划、测试方案、测试方法、设计与执行测试用例,完成缺陷统计与分析,以及项目测试报告书。对学生的工作进行评定,提出优点和不足的地方,激发学生热情。
根据具体的项目合理安排工作量,合理分配人员及设置时间节点,
工作过程如表3所示:
表3 测试任务进度安排
用项目驱动的方式来实施整个教学过程,学生作为项目的主体,提高了学生的参与热情,激励了学生主动参与到实际教学活动中,在实际的实践中掌握了测试技能。
从实际效果来看,以项目驱动的方式在软件测试课程中加以实践与运用,更符合专业技能课程的学习形式,有利于激发学生的学习兴趣以及对软件测试形成整体认识,符合软件工程专业培养的目标。在具体的实施过程中,需要教师加以控制,能有效的组织整个项目的实施及把握进度,并将测试的相关理论知识融入到项目的各个阶段。同时也需要教师有着丰富的项目测试经验,关注培养学生的创新意识和创新能力。这也需要不断的在教学过程中加以学习、探索和总结。