软件测试课程教学的问题与思考

2009-06-19 05:53辜萍萍
中国现代教育装备·高教 2009年9期
关键词:软件测试学习方法教学

辜萍萍

摘 要:本文分析并总结了大学本科计算机科学与技术专业和软件工程专业学生在软件工程课程学习中存在的若干问题,提出一些值得尝试的解决方法和建议,对学生提高学习效率及青年教师改进教学质量兼具现实的指导意义。

关键词:软件测试 教学 学习方法

在人们愈加注重质量与效率的当今社会,软件产品的质量自然备受IT行业与所有用户的关注。软件测试虽然只是软件开发工作中的一部分,却是控制软件质量的重要手段,在国内也是逐渐兴起的产业。统计数据表明[1],目前该领域需要大量技术型与管理型人才,由此,越来越多高校在计算机系低年级开设软件工程的基础上,将软件测试独立成一门课程在高年级开设。但是,由于该课程兼具理论性与实践性,加之认识偏差与学习方法存在一些问题,对于计算机专业与软件工程专业的高年级学生而言,要很好地掌握相关原理与技术也并非易事。本文结合笔者的工作实际,讨论了教学过程中发现的问题,并提出相应的解决办法与学习建议,希望能提高学生学习与教师教学的质量和效率。

一、认识上存在偏差

软件测试直到大学三年级才开设,虽然学生在之前的学习中已经接触了软件工程相关理论知识,但是毕竟缺乏对软件测试系统的学习,因此他们对软件测试领域各方面工作的认识难免是模糊不清的,甚至存在误解。这些错误的观点主要可以归纳为以下4类:

1.测试软件不如开发软件重要,很难得到重视,相关的工作岗位相对低等,前途比较渺茫。

2.软件测试就是在高频率使用软件过程中寻找BUG(错误),这样的工作没有编写程序的烦恼,远比开发软件容易地多,如果待测的软件是游戏软件,那就更加其乐无穷。

3.软件测试是软件生命周期中最后一个阶段的工作,在软件开发完成之后才能够测试。

4.既然找错误是软件测试人员的任务,那么如果测试完成的软件在真正用户使用时仍然无法满足他们需求,则说明该软件没有完全测试,应该归咎于测试人员。

对于这些不正确的认识,我们不能完全否定,因为从中可以看出学生对软件测试工作具有一定的积极性和较强的责任心,这正是他们应该具备的且难能可贵的素质。当然,更重要的是在教授相关原理及方法之前就应该澄清他们对软件测试的误解并加以纠正。因此,笔者依据权威网站公布的近几年软件测试从业人员的调查报告[2],在开学的第一堂课上就让学生们及时了解当前的行业动态:软件测试是IT行业新兴领域,越来越得到业界的重视且需要大量技术型与管理型人才,所以,学习该门课程的重要性与必要性毋庸置疑。同时,在第一章节关于软件测试概述的授课中,可以有的放矢地用举例子、摆事实最通俗易懂的方式阐明正确观点。例如,针对他们认为的软件可以完全测试这一说法,就使用如图1所示的反例证明完全测试是不现实的[2]。当然,仅仅利用前几节课的讲解很难让学生完全改变看法,填鸭式的灌输过程必然遭到质疑。所以,完整透彻的纠正过程是贯穿在整个学期的教学之中的。换言之,学生只有通过系统地学习软件测试相关内容之后才会更加正确并深刻地认识软件测试。

二、先行课的掌握不足

学生在之前几年的学习中已经接触了许多基础课程,包括离散数学、程序设计、软件工程等,而这些恰恰是学习软件测试必备的先修课程。但是,从上课的表现来看,学生对这些课程中一些重要的知识掌握不足,导致对新课的学习倍感吃力从而影响学习的兴趣和信心。主要表现为:

1.数学底子薄

软件测试中黑盒测试用例的设计方法大都以数学知识为依据的,例如,其中的等价类划分法与边界值分析法对应着集合论与函数知识、决策表驱动分析法与因果图法对应着命题逻辑知识。学生的数学基础不够扎实,因此,在介绍每一种新方法时需要花费一定时间复习相应的数学知识,否则,学生只能知其然不知其所以然,尽管老师费尽唇舌,学生也难以透彻地理解更难以灵活地运用方法。

2.代码分析能力弱

科学合理的软件测试流程是从软件需求分析阶段开始就一直伴随着软件生命周期而分步骤进行的。在与代码开发并行的单元测试阶段,便需要对代码进行检查和测试。这就要求学生既要懂得测试的技术又要具备分析代码结构的能力,甚至能够自己编写测试驱动程序。所以,当写代码成为学生的绊脚石时,他们就无法轻易地掌握该阶段软件测试的方法。

3.缺乏软件工程背景知识

软件测试是近几年在软件工程这个大环境下成长起来的,因此与软件工程体系有着千丝万缕的联系。例如,软件测试的对象是随着进度的发展而改变的,从需求分析阶段开始一直到软件编写整合完成,测试的重点相应地从软件需求说明书向软件的功能和性能转变。同时,软件测试在不同的软件开发模式下具有不同的特点。所以,如果学生对软件工程背景知识模糊不清,那么将来就很难在软件开发各阶段采用恰当的测试手段。

因此,鉴于学生的这种情况,为了让他们更易于接受新方法新知识,必须在上新课前给他们做适当的复习,可这样势必直接影响教学进度。所以,笔者认为,这个温故而知新的过程应该留给学生在课前自行完成,即每次在结束一个知识点的教学时,提前将下一节新课内容所涉及的基础知识布置给学生作为预习的内容,从而提高每一堂新课的听课效率。

三、缺乏对工程化知识的学习兴趣

高年级的同学对技术的学习往往是摩拳擦掌的,而对于理论性较强的工程化知识就有些无动于衷了。因为,具体的技术往往可以是现学现用的,比如对具体的软件功能可以练习编写适当的测试用例,而教材中关于软件测试流程、软件测试团队等工程化内容的描述难免让学生觉得抽象且教条化,但是,这些知识无不是前人根据多年的工作经验总结得出的心得和体会,确是一笔宝贵的财富。而且,以往手工作坊式的软件开发已逐步被规范的工程化运作模式所替代,只有在这些工程化知识的指导下才能更有效地发挥所学技术以适应当代的工作需求。所以,如何重新点燃学生对这些内容的学习热情便是我们作老师必须思考的一个问题。笔者在教学中尝试采用以下两种方法提高学生学习积极性:

1.结合多媒体使用的引导式教学

始终采用课堂讲授的方式,势必效果欠佳。若适当采用引导式教学,设计“提问——解决方法——再提问”的方式让学生参与,用问题去激发学生思考,启发他们如何解决问题,以此加深他们对经验方法的理解程度。例如,在讲解软件测试的第一个步骤——制定测试计划的过程中,先给学生设定一个情境,假设他们要准备一场认证考试,或是展开一次远足旅行,那么要做哪些准备工作。这样的问题很容易促使学生畅所欲言,也活跃课堂气氛。当学生提到在制定计划时要对意料不到的事有所准备时,正好可以引出在制定测试计划中同样要识别和防范风险的问题,接下来就可以顺水推舟进一步提问他们,在测试过程中又会有哪些风险,如果学生无法马上找到问题的突破口的话,就先给出部分参考答案开阔他们的思路,再让他们继续补充,由此也可以锻炼他们举一反三的能力。最后,再给出完整的参考答案。同时,采用幻灯片动画效果动态地演示该过程,如图2所示。

2.设计实践项目

为了让学生能切身体验工程化知识的指导作用,笔者根据学生总体的能力水平,设计了规模适中的实践项目,要求他们现学现用,完成从制定测试计划到评估测试的全过程。例如,在制定测试计划中,除了上述的识别风险问题,学生还需要承担资源规划与进度安排等实际问题。同时,对于所有提交的文档结果都要求他们按照工程化的模版撰写,从而养成良好的学习和工作习惯。通过项目的锻炼,学生分析问题和解决问题的能力会逐渐得到提高。

四、团队意识较薄弱

一般情况下,软件项目的开发并非个人独立可以完成的,而是需要软件开发团队中每个成员的沟通与协作来共同作业。同样,软件测试也需要团队分工合作。在单元测试阶段,常常由编写代码的人员本身动态测试自己的代码段,但是之后的集成测试、系统测试就应该由专业的测试人员来完成,而最后的验收测试则由软件的最终用户来实施。因此,团队协作意识是软件测试人员必备的基本素质。然而,当代学生身上存在着一个普遍问题,就是以自我为中心,缺乏集体观念,在团体中出现离群现象的也不少,这样对自身将来参加软件开发工作特别不利。因此,要培养出高素质的软件测试人员,就应该在课程教学中融入团队意识教育,设置一些必要的环节来提高学生的团队协作能力及人际沟通与交流能力。

所以,在布置实践项目时,并不要求学生独立完成任务,而是以双人或多人组队搭档的方式共同合作。从开发代码开始就明确分工,除了单元代码段的动态测试由各自独立完成,其余的部分由队员交换检查。这样势必增加学生在团队中相互沟通与协作的机会,培养学生情感领域的品质,也遵从了软件测试中应避免只由本人检查自己的程序的原则从而高效地执行软件测试过程。

参考文献

[1]2007首届中国软件测试从业人员调查报告[DB/OL].www.51testing.com,2007

[2]陈文滨,朱小梅.软件测试技术基础[M].北京:清华大学出版社,2008. 7-8

猜你喜欢
软件测试学习方法教学
软件测试方向人才培养“1+X”融合研究
大数据背景下软件测试技术的发展
“自我诊断表”在高中数学教学中的应用
关于 Web 应用系统的软件测试的研究
在遗憾的教学中前行
小学音乐快乐学习的三种方法
高中数学教学方法浅析
论高中物理电路知识的学习方法及解题思路
小学语文低段识字教学的意义及学习方法
计算教学要做到“五个重视”