卓越计划驱动下的软件测试技术课程教学改革

时间:2022-10-28 01:50:23

卓越计划驱动下的软件测试技术课程教学改革

摘要:在卓越工程师教育培养计划的指导思想和基本要求下,提出立足现代并注重学生测试技能培养的教学理念,分别从课堂教学内容、实验教学内容、创新实验项目建设等方面探讨卓越计划驱动下的软件测试技术课程教学改革措施,指出新的教学内容组织主线并对已有教学内容进行修订,注重将企业实践和学术研究的最新成果引入课堂教学。

关键词:卓越工程师;软件测试技术;教学改革;教学方法

0 引言

“卓越工程师教育培养计划”(简称卓越计划)是教育部为贯彻落实《国家中长期教育改革和发展规划纲要(20113—2020年)》和《国家中长期人才发展规划纲要(2010—2020年)》而设立的重大改革项目。该项目旨在培养一批创新能力强、适应经济社会发展需要的高质量工程技术人才。在计算机科学与技术学院软件工程专业卓越T程师的培养计划中,软件测试技术是该专业的一门核心课程。通过该课程的学习,学生需要理解软件测试的基本概念,熟练掌握各种软件测试技术,了解不同测试阶段的测试目标、测试方法和相关测试文档,掌握经典测试工具的使用。为了适应卓越计划的新要求并融合软件测试在工业界的最新发展,培养出符合企业实际需求的软件测试卓越工程师,课程亟须改变传统教学理念,即更新已有教学内容,补充新的知识和技术,同时改进教学方法。笔者结合近些年的教学经历、工程实践和科学研究,分别从课堂教学内容、实验教学内容、创新实验项目建设等方面,论述卓越计划驱动下软件测试技术课程教学改革的措施和体会。

1 软件测试技术课程开设背景

当今软件行业面临复杂性、开放性、演化性等诸多挑战,而软件测试是保障软件质量的一种重要手段。统计数据表明,软件测试所需开销占软件开发总开销的40%,对于一些关键性软件,其占据比例甚至会提升到80%。近些年来,软件测试日益得到工业界、教育界和学术界的广泛关注。在工业界,软件企业对软件测试工作日益重视,因此设置了软件测试部门并招聘大量软件测试工程师,由于软件测试工作本身的高复杂性,使得目前测试人员的地位和待遇逐步提高;在教育界,国内外大学和社会培训机构陆续开设了软件测试技术相关课程,与软件测试相关的专业书籍也日渐增多,计算机技术与软件专业技术资格(水平)考试还增添了软件评测师中级资格;在学术界,软件测试是目前软件工程研究领域中的一个研究热点,每年均有大量的高质量研究,其中一些研究成果已经成功融入到企业的软件测试实践中。

基于上述背景,学院从2007年开始为全日制本科三年级学生开设了软件测试技术这门课程。该课程属于必修课,共48学时,其中理论3时,上机时。课程的先修课程包括离散数学、数据结构、高级编程语言、软件工程、编译原理等。截止到目前,学院先后有4名教师担任过该门课程的教学工作,约900名学生选修了这门课。通过与相关任课教师和听课学生的深入交流,我们发现该课程在卓越计划的新要求下仍存在如下问题:

(1)与软件工程专业的传统课程,如数据结构、操作系统和数据库技术相比,软件测试技术的教学内容并不成熟。该课程作为一门独立课程在国内院校中普遍开设较晚,早期一般作为软件工程课程的一部分进行讲解。通过分析市面上已经出版的一些经典教材,我们发现这些教材关注的知识点较为分散,授课老师普遍反映通过这些教材难以把握授课的重点和难点。同时,与企业目前的需求相比,这些知识点较为陈旧,甚至有的已经不能满足企业的实际需求。

(2)课程涉及的知识点多而繁杂且概念抽象,测试标准和规范类的教学内容偏多。由于听课学生欠缺软件测试经验,他们普遍认为课程内容抽象枯燥,学习兴趣不高,大部分学生存在听课时似懂非懂、考试时死记硬背、考完后全部忘记的现象。

(3)教师偏重理论知识讲解,缺乏实际案例。软件测试技术是一门实践性较强的课程,但目前的课程开设缺乏合理的实验项目设计,因此,老师可以由浅入深、循序渐进地培养并提高学生的软件测试技能,让学生通过实训验证在课堂学到的理论知识。

2 教学改革思路

按照卓越计划的指导思想、基本思路和基本要求,卓越计划驱动下软件测试技术课程的教学改革需要按企业测试部门的通用标准和行业标准来培养软件测试人才,同时,培养学生在完成软件测试任务时的工程能力和创新能力。基于课程的重要地位和特点,我们在教学改革时提出如下教学理念:

(1)教学内容要立足现代。立足现代是指对传统教学内容进行更新,即在原有的基本教学内容基础上,通过分析该领域在企业实践和学术研究上的最新进展,将一些操作性和实用性强的测试技术引入到教学中去。

(2)注重学生测试技能的培养。教学不仅要让学生知其然,而且还要让他们知其所以然,即不仅要掌握软件测试的基本概念和方法,而且在软件测试过程中,能够借助已有工具或自己开发工具来解决测试过程中出现的疑难问题,真正做到将所学知识灵活应用到实际软件测试工作中。

3 课堂教学内容改革

我们以上述教学理念为指导,分别从课堂教学内容、实验教学内容和创新实验项目建设上对课程教学进行改革,主要改革措施包括:

(1)教材选择上,力求教材更加贴近企业实际需求,同时在理论上具有一定的深度。在中国互动出版网、京东网、当当网和亚马逊网上输入关键词“软件测试”或“软件质量保障”,通过筛选,我们最终在一百多本教材中确定了两本英文教材和一本中文教材。两本英文教材分别是美国乔治·梅森大学Ammann教授等编写的《Introduction to Software Testing》和普渡大学Mathur教授编写的《Foundations of SoftwareTesting》。中文教材是同济大学朱少民教授编写的《软件测试方法和技术(第二版)》。前两本教材对软件测试的基本理论给出清晰的讲解,后一本教材则更加贴近企业的实际测试实践。

(2)以“基本概念一测试方法一测试流程一测试工具”为主线组织教学内容。针对卓越计划,我们对已有的教学内容进行重新设定,没定后的教学内容见表1。其中,基本概念模块是教学的核心,构成后续模块学习的基础,而软件测试技术(包括白盒测试技术和黑盒测试技术)模块、测试流程模块和测试工具模块则三者相互依赖。具体来讲,不同测试技术有不同的测试工具支撑,测试流程中的不同阶段借助不同的测试技术。例如,测试阶段以白盒测试技术为主,而集成测试和系统测试阶段则以黑盒测试技术为主。通过这条主线,可以将软件测试中的知识点有机融合并相互贯通。

(3)结合科研和企业实践,我们将软件测试技术的最新进展融入到教学内容中。在传统教学内容基础上,我们引入了很多具有较强使用价值的软件测试技术,具体包括:黑盒测试技术模块教学在正交实验法基础上引入组合测试(combinatorial testing)方法;在白盒测试技术模块教学中,不仅讲解了传统控制流覆盖准则(包括语句覆盖准则、判定覆盖准则、条件覆盖准则等),还深入介绍了数据流覆盖准则(包括all-defs覆盖准则、a11-uses覆盖准则和all-du-paths覆盖准则等);在高级技术教学中,讲解了一种用于评估测试用例集测试充分性的变异测试(mutation testing)技术,并介绍了相关开源工具;在回归测试中,介绍了一系列测试用例维护技术,包括测试用例选择、测试用例集缩减和测试用例优先排序等。通过引入这些契合企业需求且可操作性强的新兴技术,学生提高了学习兴趣,丰富了自己的知识,锻炼了动手能力,有效满足了教学内容要立足现代的教学理念。

(4)提高学生的自学能力。在企业实践和学术研究的推动下,新的测试技术和理念不断被推出,所以提高学生的自学能力构成培养软件测试卓越工程师的一个重要目标。我们在日常授课时应注重学生自学能力的培养,对一些新的测试方法,要着重讲解方法的动机和核心思想;对方法的实现细节,则通过读书报告或创新实验项目方式,鼓励学生充分利用课余时间,自己查找相关文献予以完成。例如在讲解组合测试方法时,我们仅讲解了两种经典算法AETG和IPO的核心思想,对于具体的实现细节,我们鼓励学生用自己熟悉的编程语言去实现这两种算法。通过这种教学方式,可以培养良好的自学意识和高效的自学方法,最终有助于将学生培养为合格的软件测试卓越工程师。

4 实验教学内容改革

卓越计划对课程的实验教学环节提出了新的要求。如何在有限的实验时间内,最大限度地加深学生对软件测试基本理论的理解,为后续的专业学习和工作打好基础,是实验教学的首要任务。

在实验项目设计上有两种方案,一种方案是使用商用测试工具,另一种是使用基于开源软件的测试工具。对这两种方案进行可行性分析后,我们认为,如果采用商用测试工具,则存在投入高、适用面窄等问题;而采用开源软件,一方面投入较低,另一方面因开源软件可以获取源代码,将提高实验设计的灵活性。

在完成上述可行性分析后,我们基于Java编程语言,充分利用了一些经典开源软件,设计出如下三个难度适宜的实验项目。

1)单元测试工具JUnit的使用。

项目要求:掌握Eclipse、JUnit和Ant工具的使用。

项目内容:首先编码实现三角形类型判断程序,该程序的输入是三条边的大小,输出是三角形的类型(需要考虑等边三角形、等腰三角形、其他种类三角形、不能构成三角形等情况);然后基于JUnit编写测试用例,在设计测试用例时需要采用等价类划分、边界值分析等测试技术;最后编写Ant脚本驱动测试用例并生成测试报告。

2)代码覆盖工具EclEmma的使用。

项目要求:掌握Eclipse、JUnit、Ant和EclEmma工具的使用。

项目内容:首先在Eclipse开发工具内安装EclEmma工具并完成配置工作,然后在项目1的基础上,通过使用EclEmma工具分析出测试用例集的条件覆盖情况。若出现测试用例尚未覆盖的条件,则通过修改被测程序或添加测试用例来确保所有条件均被充分覆盖到。

3)单元测试工具EasyMock的使用。

项目要求:掌握Eclipse、JUnit、EclEmma和EasyMock工具的使用。

项目内容:首先完成一个简单自动取款机(ATM)系统的设计和开发,该系统包括存款、取款、账户余额查询等功能;随后借助EasyMock工具来模拟ATM系统常用功能从而完成ATM系统的测试;最后借助EclEmma工具对测试用例的代码覆盖率进行分析。

上述二个实验项目在实际设定时,可以根据被测程序特征和学生自身技能特点,采用其他开源软件予以替代。例如,若测试cH编程语言实现的程序,可以考虑采用CPPUnit工具或gTest工具等。代码覆盖工具可以考虑gcov工具或Clover工具等。Mock工具可以考虑JMock等。

通过这三个实验项目的依次完成,逐渐增强了学生对软件测试知识的感性认识,使抽象枯燥的教学内容变得形象具体,从而培养了课程学习的兴趣,也使学生进一步加深了对Java编程语言的理解。

5 创新实验项目建设

在课程教学过程中,我们也加强了对优秀学生的培养。对于基础知识较为扎实、实践动手能力较强、创新思维和批判性思维较为活跃的学生,在完成课堂教学和实验教学阶段后,我们对他们增加了创新实践阶段。创新实践中的实验项目可以来自企业的实践需求,也可以来自教师平时的科研工作。例如,我们曾经组织2010级的若干拔尖学生组成一个小组,在有经验教师的指导下,通过研读相关论文,开发出一个错误定位(fault localization)工具。该工具以Tarantula方法为基础,通过搜集通过测试用例和未通过测试用例的语句覆盖信息,借助启发式公式将包含缺陷可能性高的语句用红色进行特别标记,实践表明该工具可以有效辅助程序员的软件调试工作。目前我们以该工具为基础,组织学生考虑更多的错误定位方法。

通过创新实验项目的建设,我们认为这些项目可以有效培养学生的实际动手能力和创新意识。在我们培养的学生中,有的学生在毕业后进入软件测试部门并得到用人单位的好评,有的学生在考取研究生之后选择了软件测试作为自己的研究方向。

6 结语

软件测试技术是软件工程专业的核心课程。近些年来,在卓越计划的驱动下,我们围绕立足现代和注重学生软件测试技能的培养进行了相应的教学研究和教学改革实践。通过借鉴国内外先进理念,采用科学合理的教学方式,优化教学内容和实验教学设计,教学团队在课程建设上取得了一些教学成果。我们将继续对本课程的课堂教学进行扩充,不断添加具有趣味性和挑战性的实验项目,最终使本课程的教学质量水平得到进一步提高,为企业培养更多的软件测试卓越工程师。

上一篇:信息安全专业开放式实践教学模式探讨 下一篇:月山,千年廊桥古村