自主学习驱动的软件测试课程双语研究性教学方法
2014-05-04孙小兵朱俊武李斌章永龙
孙小兵 朱俊武 李斌 章永龙
摘要:软件测试课程是软件工程专业的一门必修课程,但传统的以教师为主的教学方式所产生的教学效果并不是很好,学生学完该课程后感觉比较空洞。文章提出一种双语研究性教学方法并介绍该教学方法的实施过程,说明其特色和教学效果。
关键词:自主学习;外文文献研读;软件测试;双语研究性教学
0、引言
软件测试是从事计算机软件开发和维护专业的人员应该掌握的一门技术。软件测试是软件工程中的关键活动之一,是保证软件质量的重要手段,其工作量通常占软件开发总工作量的50%以上,而对于某些可靠性要求极高的软件系统,如航天、银行等领域的软件系统,软件测试占软件开发总工作量的比例甚至达到60%~80%。软件测试的目的是发现软件中的错误,并及时修正这些软件错误,以减少软件在发布后出现错误,提高软件产品质量。软件测试是一项需要专业技能的工作,它包含许多理论和实践。如果缺少这些理论知识和实践经验,测试的深度和广度就不够,测试质量也就无法保证,从而导致软件质量达不到要求,影响软件的可信性。
由于国内软件产业的现状所致,很多的软件公司属于软件外包型公司,这些公司以软件开发为主。这样,软件工程专业很大一部分学生毕业后通常从事软件开发或者程序员工作,这也影响着学校对软件工程专业的设置。因此,当前高校在软件工程专业课程设置上往往将很大一部分精力放在软件开发课程的设置上,如各种语言的学习、软件开发方法的学习等。但是,软件工程不仅包括软件开发,还包括软件测试以及软件维护。大部分国外大型软件公司,如微软、IBM等公司,这些公司对软件测试非常重视。在这些公司内部,软件测试人员数量并不比软件开发人员少,因为一个优秀的软件产品最终是通过不断的软件测试进行验证和评价的。随着软件工程课程的不断完善,当前软件测试的重要性已逐渐得到重视,很多高校已将软件测试课程作为软件工程专业课程中的必修课程。该课程是软件工程的核心组成部分,是连接软件开发和软件发布的纽带。通过本课程的学习,学生要了解软件测试及其管理的重要性,掌握软件测试基本理论、技术和方法,具备研究设计测试用例和使用自动化测试工具的基本方法和实践能力,能将测试驱动的理念融入软件开发、维护的研究与应用中,从工程化角度提高和培养学生从事大型软件的测试技术和能力。
尽管软件测试课程已作为软件工程专业的必修课程,但从教师和学生两个角度对该课程的调查反馈发现,教师觉得该课程不好教,教学效果不好;而学生感觉该课程较空洞,没有发现其在实际软件开发中有多大的应用。这主要因为在传统的软件测试教学中,学生只是被动地参与,听教师授课,听教师讲授各种软件测试概念和方法,但学生并没有真正学到这些理念,并没有对这些方法进行应用。所以这种传统的软件测试教学方法效果很难令人满意。
扬州大学信息工程学院将软件测试课程作为一门双语研究性课程进行试点改革,探讨如何更好地进行软件测试课程的教与学。本文将以该学院软件工程专业软件测试课程为例,探讨学生自主学习的软件测试双语研究性教学方法。笔者作为该课程的授课人实施了本文的软件测试教学方法,其目的是研究如何促进学生进行双语研究性教学,促进学生主动学习软件测试新技术,从而让学生学到软件测试课程中的一些测试理念,让他们了解软件测试在整个软件开发过程中的重要性。
1、软件测试双语研究性教学
软件测试双语研究性教学主要包括三方面内容:教学、研究、实践。这三者在软件测试双语研究性教学中的关系是:以教学为本学习,以研究为重点突破,以实践为辅助训练。下面分别介绍这三方面的内容:
1)教学方面。
软件测试双语研究性教学和传统的软件测试教学一样,根据软件测试教学大纲进行教学,主要包括软件测试基本概念、软件测试基本方法、白盒测试、黑盒测试等。由于研究性教学过程中加入了研究,所以教学是以基本的测试理论和技术为主。另外,在教学过程中,由于本课程属于双语课程,所以教学过程中采用英文PPT,中文授课方式进行教学。另外,教学主要以启发式教学为主,让学生更多参与课堂讨论,由于本文主要讨论研究方面,所以这里对教学不做详细讨论。
2)研究方面。
本课程采用的是研究性教学,因此研究是本课程的重点和特色。本课程所采取的研究方式主要以学生自主学习为主,采用阅读文献的方式。由于本课程是双语教学,研究过程中所提供的文献材料全部是英文论文,这些材料都是从当年软件工程领域顶级国际会议中选取的有关软件测试方面的最新技术和方法,这样有助于学生开阔视野,了解最新的软件测试技术、方法,及软件测试发展的方向。这一部分的实施方法将在第3节进行详细介绍。
3)实践方面。
软件工程是实践性很强的专业,同样,软件测试也是如此。需要通过不断的实践才能理解和掌握软件测试技术,将测试理念贯穿到软件工程项目中。本课程软件测试实践主要包括三方面内容:一是验证性实践,熟悉已有测试工具,学会使用这些工具,并利用已有测试工具生成测试用例;二是自己开发软件测试工具,主要根据研读的论文进行工具的设计和开发;三是软件测试工具的验证和评估,主要是对自己开发的工具进行验证和评估。一方面利用已有测试工具来验证当前软件测试工具,另一方面,利用已有软件测试知识评估测试工具在故障识别方面的效率,这有助于学生更深地掌握软件测试技术,了解什么样的测试技术是好的测试技术或者方法,是有效的测试工具。这一部分也不是本文的重点,因此不详细展开讨论。
2、软件测试双语研究性教学特色
本课程作为扬州大学软件工程专业的试点课程,采用双语研究性教学方式进行课程的授课和学习。对于双语性教学,主要采用英文材料,中文授课;而对于研究性教学,主要是让学生进行自主学习最新的软件测试技术和方法,研读相关的英文论文,进行专题报告和讨论,并鼓励学生开发实现这些技术。因此,在本课程的教学过程中,主要体现了5个特性。endprint
(1)自主性:让学生从给定的英文材料中自主选择学习材料,自主组建团队,自主与英文材料作者联系、沟通、交流和讨论。
(2)协作性:学生必须要组建团队,团队成员数量由2~4人构成,团队之间相互协作、配合,共同完成整个研究性学习过程。
(3)互动性:在学习过程中,必须要与论文作者沟通和交流,真正把握论文作者的真正意图,并尝试提出自己的见解,与论文作者进行讨论。
(4)实践性:要能够实现论文材料中的软件测试方法,在工具开发过程中,鼓励学生采取测试驱动的开发方法,并利用所掌握的软件测试技术去测试自己的工具。
(5)研究性:在研读论文过程中,要对论文进行深入的讨论和研究,特别是对作者的思想以及未来工作、论文中的不足进行研究,提出可能的解决方案。
3、软件测试双语研究性教学实施
笔者主要针对软件测试双语研究性教学过程中的研究过程的实施进行讨论。在本课程中,研究主要是采用学生阅读文献的方式进行自主学习的研究,主要针对当前最新的软件测试技术进行学习和研究。研究性教学具体的实施过程如图1所示。
首先,教师从当年软件工程顶级国际会议中选取软件测试相关的研究技术论文放入文献库中。这样的文献库主要用于学生对当前软件测试的学习和研究。对于本科学生来说,独立地去研读这些最新技术还有一些难度,而且时间上也紧张。因此,研究性学习主要采取团队方式一起研究,这样学生进行自由分组,并且每个小组指派一名学生作为小组组长负责该小组的研究性学习进展。
有了文献库以及学生分组后,就进入自由选题阶段,即各个小组从文献库中选取自己感兴趣的论文。在各小组确定自己的研究论文后,进行论文的研读。在论文研读过程中,要求每个小组每周至少讨论一次,讨论各小组的分工任务完成情况,对原文的理解情况,以及对遇到的问题进行讨论,并且项目小组要及时记录这些讨论记录,每周发送给任课教师。另外,在研读论文过程中,每个小组要用英文与论文作者进行沟通与交流(如果作者没有回复,可以选择与课程教师进行交流),并将交流过程中的对话记录下来作为课程成绩考核的依据。
在论文研读后,需专门安排几节课进行专题报告和讨论,主要用于检查各小组对原文的理解情况。专题讨论内容包括三方面:一是学生对论文内容的理解;二是学生需要提出对论文的见解和观点,挖掘论文可能存在的问题或对论文中的未来工作部分提出见解;三是本小组研读论文的体会分享。在专题报告中,我们还邀请了学院的一些其他教师参与进来与学生们一起讨论,一方面,教师对各个论文本身进行点评;另一方面,教师对各个小组的表现进行点评。另外,在专题报告中,强调学生的参与,就是大家要多提问,多讨论。
专题讨论后,各小组要对原文中软件测试技术进行实现。其中,在软件测试技术实现过程中,鼓励采用测试驱动的软件开发方法;另外,需使用已有的软件测试技术和工具进行测试。在完成开发软件测试工具后,需要选择一些例子进行软件测试技术的验证。最后,各个小组需要提交一份总结报告,主要是关于技术实现进行总结,包括这几方面内容:对论文原文的理解或技术改进,采用的测试技术和工具,技术改进效果的验证和评估。
4、实施效果
该课程已在2012-2013年秋学期的扬州大学软件工程专业的一个班按照本文教学方式进行实践。该班学生40人,我们从2012年ICSE(International Conference on Software Engineering)、FSE(Symposium on the Foundations of Software)、ISSTA(Symposium on the Foundations of Soft-ware)、ICST(Intemational Conference on Sottware Testing,Verification and Validation)、ICSM(Inter-national Conference on Software Maintenance)等国际顶级会议上选取了44篇软件测试相关的论文作为学生学习的资料库。然后让学生自由组队,每组2~4人一起研读论文。最后组队15组,选择了15篇论文进行学习和讨论。在研读论文过程中,建议学生自己与论文作者用英文进行交流和讨论,讨论论文中不能理解的内容;在研读完论文后,我们组织了专题报告,报告主要包括三方面:一是论文主要内容;二是学生对论文的看法以及学生自己的想法;最后就是分享研读过程中的体会。另外,我们鼓励学生用英文进行报告(其中一组采用英文进行报告)。专题报告过程中我们还邀请软件工程系相关教师一起进行点评。
通过这样的学习,大部分小组完成得较好,基本能理解论文内容,也提出一些想法和改进措施。在研读论文后,学生对论文内容和自己的想法进行实践,实现相关技术并进行实验验证。几个月的学习后,大部分学生对这门课的研究性教学方式比较认可。我们以问卷的方式对学生进行了调查分析,调查主要包括对课程教学方式的认可,对自己收获的认可等。发放调查问卷40份,收回有效调查结果28份。该调查问卷由11个问题组成。前10个是选择题,如表1所示,是对当前教学方式和教学效果的同意或支持程度,由1~5这5个选项构成,其中1表示非常支持(同意),2表示支持,3表示无所谓,4表示不支持,5表示严重不支持。统计结果如表1所示。最后一个调查问题是关于这门课程的建议。从表1中可见,学生还是比较渴望学习新的知识,比较认可这种学习方式;另外,学生对自己的学习效果也比较认可。最后,无论从考试效果,还是学生的反响来看,这门课所采用的教学和学习方式是比较成功的。该教学方式也得到学院的认可,所采用的教学方式也得到科技日报、新华报业网等主流媒体的广泛关注和报道。
5、结语
软件测试课程是软件工程专业的必修课之一,如何让这样一门课程不再停留在基本理论上的填鸭式教育是该课程教师必须要解决的问题。通过让学生合作、自主阅读和研究当前最新的软件测试技术论文,并尝试实现和应用这些测试技术,可调动学生的主动性,让学生更好地协作、沟通,从而提高对软件测试的理解和把握。endprint