软件测试课程的问题驱动教学模式探索

2018-01-04 12:09朱少民
中国大学教学 2018年10期
关键词:软件测试问题驱动软件工程

摘 要:软件工程专业课程具有工程特性,需要针对实际的问题进行分析、评估,从而解决问题。如果按传统的教学方式进行该类课程的学习,学生缺乏学习兴趣,而且从课堂上学到的东西主要是相关的软件工程知识,而学生的能力没有得到提高。新时代、新工科,我们的教育侧重培养学生的素质和能力,在这样的思想指导下,作者在“软件测试技术”课程教学中尝试了问题驱动教学模式,获得了良好的教学效果。

关键词:软件工程;软件测试;问题驱动;教学模式;课程改革;新工科

一、探索的背景

软件工程专业课程(如软件测试、软件项目管理、软件过程管理等)的教学工作一直以来是软件工程、计算机相关专业教学的一个难题。一方面,学生缺乏良好工程概念和项目实践经验,甚至教师自身也缺乏工程经验;另一方面,学生对这些专业课不重视,他们更看重所谓的硬实力——“编程能力”的培养,在学习数据结构和语言类课程上投入比较大,这类课程的学习效果也容易显现出来,甚至效果立竿见影,而专业课程的学习效果不容易显现出来,学生学习的成就感不强,从而造成学生不愿意在这些课程上投入。投入越不够,学习效果就越不能显现,从而造成一种错觉,感觉学不学没什么影响。这样的问题,通过在大学上课的场景对比得到部分验证,也从最近两届全国大学生测试大赛的不理想成绩上得到验证。

兴趣是学习的原动力,为了提高学习效果,首先会想到“如何提高学生的学习兴趣”;其次,学习始终是学生自己的事情,讓学生成为学习的主体也势在必行。例如,大学任何一个专业的学生,当初学习的起点是基本一致的,处在相同的学习环境中,教他们的教师也是完全一样的,但到了高年级之后,这些学生之间的差距却很大,这也说明学习主要取决于学生自己。为了改善教学效果,教师们也做了不少尝试,例如:

(1)采用基于案例的教学,让理论不再抽

象,教学更加具体生动,的确能帮助学生理解所学的内容。

(2)通过课程实验,让学生一面学习理论一面结合理论进行实践,帮助学生理解所学的内容,同时也能够提高学生的实际动手能力。

(3)通过加强课堂互动,能够检查部分学生的学习效果,提高部分学生的学习兴趣。

(4)采用MOOC/SPOC等教学方式,让学生提前预习所学内容,在课堂上有更多的交流与讨论,使学生有更多的机会思考,有利于学生更深刻地理解学习内容。

(5)和企业共建课程,或者引入企业师资,加强课程内容的实用性,加强实践环节。

这些尝试都是有益的,有利于提高学生的学习兴趣和学习效果,但是这些方法还没有彻底改变教与学的关系、让学生成为学习的真正主体,课程的实验时间有限,少数学生被点名提问,多数学生的学习能动性没有被调动出来,多数情况下学生还是被动学习、被动做实验,而且教师不是自始至终将学生的“学习能力、分析问题和解决问题的能力”作为教学的核心,侧重知识和方法等讲授,缺少在真实工作环境下训练学生,上述方法受到一定的限制。

二、高级课程需要PBL模式

爱因斯坦曾说过,提出一个问题比解决一个问题更重要。提不出问题也就没有问题需要解决,甚至连思考都没有,更不要说创新能力的培养。相反,通过提问容易创建情境、会话与协作,驱动学生建构有意义的认知,这就是问题驱动学习(Problem-Based Learning,PBL)模式。不像传统教学——先学习理论知识再应用知识来解决问题,PBL模式是以问题为学习起点,以问题为核心规划学习内容,让学生围绕问题寻求解决方案的一种学习方法。PBL模式中,学生是学习的主体,教师成为辅助角色,更像教练,辅导学生学习。PBL教学模式基本操作过程如下:

(1)教师事先完成课程的设计。每次上课,根据课程进度要求,针对知识域提出问题。

(2)让学生以小组的形式去讨论交流,进而完成问题的分析。教师在整个过程中始终关注同学们的讨论,能够引导小组讨论,能够及时发现问题(如偏离主题、对问题理解不正确等)、及时纠正,对共性问题进行统一的补充讲解。

(3)在充分讨论的基础上,让学生通过查资料(包括教材、网络等)找到解决方案。如果有困难,教师给予启示或解决思路的指导。

(4)对结果进行评估,包括小组内每个成员的自我评估、小组作为团队进行整体自我评估和教师对小组进行点评。

问题驱动教学法能够提高学生学习的兴趣和主动性,提高学生在教学过程中的参与程度,活跃其思维,获得良好的教学效果。根据教学效果的实验研究(如图1)[1],课堂讲授的教学效果是最差的,24小时之后所学内容只剩下5%。要达到相对好的效果,就需要分组讨论、亲手实践、学以致用。基于这项研究成果,相对传统的教学,PBL教学模式能够达到更好的教学效果。从学者们对认知研究的历史看,经历了四种认知流派。

(1)行为主义(Behaviorism):如华生的“刺激反应说”、斯金纳的“操作条件说”等;

(2)认知主义(Cognitivism):如加涅的信息加工理论、布鲁纳的学科结构论等;

(3)建构主义(Constructivism):如皮亚杰的“认知发展”理论、杜威的“做中学”理论等;

(4)连接主义(Connectivism):维果茨基的最近发展区、恩格斯特伦的活动理论等。

传统的教学属于早期的行为主义、认知主义,侧重讲授知识、作业练习等,要求学生记忆与理解、应用,学生学习往往处在被动过程中,教师则靠测验、考试等来驱动学生来学习。PBL教学模式则属于建构主义和连接主义,强调学生自我引导学习、做中学,而且借助发达的网络资源自主寻求内容来分析问题、解决问题。如图2所示。

三个臭皮匠顶一个诸葛亮,过程中遇到困难,小组可以讨论、协商,借助集体的智慧来解决困难,而且这种过程可以培养学生的团队意识。PBL教学模式更适合软件工程专业课程(如“软件测试”)的“高级”学习。

(1)这类课程是交叉学科构成的复杂问题。软件工程不仅是计算机科学、管理科学、数学、系统工程学等构成的交叉学科,而且软件系统本身、作用于系统的上下文、输入和输出,今天也变得越来越复杂。特别是在云服务、大数据的背景下这种复杂性更为显著,导致像测试预言这类问题更具有不确定性,如图3所示。

(2)学生的认知能力不仅仅停留在“记忆、理解、应用”之上,还需要“分析、评价和创造”等更高层的能力。

(3)基于教材和教师的指导,丰富的软件工程网络资源能够满足问题分析和解决的需求。

(4)软件工程的知识更新很快,教材和教师都很难做到及时更新过时的知识,但互联网资源能及时弥补这一缺陷。换句话说,学习将会是软件工程专业的毕业生持续一辈子的事情。

从第(1)和(4)这两点看,采用这种PBL模式也是必要的。

三、PBL在软件测试课程中的应用

PBL教学模式的课程问题设计服务于课程的教学目标,从教学实际情况出发,由浅入深,激发每一个学生的学习积极性、分析问题和解决问题的潜力,更有效地达到教学目标。这里以“软件测试”课程为背景进行讲解,对其他专业课程同样具有很好的借鉴作用。

(1)课程问题设计。课程设计具有系统性,覆盖课程全部的关键知识点,可以采用思维导图方式来设计,见参考文献[2]最后附的“全书内容及教学指导概览”。虽然软件开发与测试的新技术层出不穷,研发环境变化也快,但是关键的知识点是相对稳定的,基于关键知识点的问题也就相对稳定,学生在分析问题和解决问题时只是需要考虑技术和环境的变化。这样,每学年课程设计改动不大,教师工作量不太大,而上下文的变化驱使学生思考更多,更加积极采用新技术,这样的场景更适合问题驱动,进一步凸显“学生是学习的中心”。同时,虽然问题设计要尽可能照顾到全班同学,但还是要设定相对偏高的难度,对大多数学生要具有挑战性,有挑战,才有锻炼。这部分難度设计和难点的选择,可以从业界调查数据和相关分析中获得。

(2)可以通过场景设计导入问题。我们常采用“讲故事、提问、做游戏、现场演示”等方式来完成场景设计以导入问题。像软件测试,往往就可以从质量事故开始,如奔腾芯片浮点计算缺陷、欧洲阿丽亚娜5型火箭发射后40秒钟火箭爆炸、1999年火星探测器在试图登陆火星表面时坠毁等。故事背后就隐藏着未解决好的问题,从而引导出问题。现场演示精选的某款软件(带特定缺陷的),让学生观察整个运行过程,引导学生捕捉异常现象,然后自然呈现出问题。软件测试的提问(questions)设计相对简单一些,可以直接提出一系列问题(如图4所示):为什么要测它?测什么?哪些要重点测?如何测?如何评估测试效果……

(3)如何引导学生讨论问题。首先要让学生清楚“问题是什么”,如果问题不清楚,鼓励学生提出来,教师再换一种方式重新阐述问题。其次,让学生了解这个过程,先讨论什么后讨论什么。例如,开始讨论时,学生主要采用“头脑风暴”方法来收集影响问题的各种因素。任何一个学生有想法,不管对错与否,都可以大胆地提出来,相互碰撞、相互启发,产生新的想法。在讨论过程中也要注意倾听,等其他同学说完再发言,鼓励学生采用举手方式进行有序的讨论,避免无序讨论,杜绝出现混乱的争吵局面。

(4)分析问题。分析问题的能力是大学培养的核心能力,PBL教学模式不仅使学生主动参与分析,而且提供了更多的时间和空间来训练学生这方面能力。通过头脑风暴等收集到的信息、数据需要整理、归纳与分类;归纳后可能发现之前头脑风暴的结构缺失,要求学生演绎出所缺失部分;借助因果图、亲和图、系统图、矩阵图等定性地分析问题;借助抽样调查、概率统计、散布图、直方图等定量地分析问题。

(5)解决问题。对学生来说,要正确运用一些正在学习的新知识、新方法,的确有较大的挑战。所幸的是,教师、教材还依旧在那里,学生可以参考教材的方法、获取网络资源以来解决问题,解决过程中遇到困难时可以寻求教师的指导和帮助,也可以向专业社区求助,以得到相应的解决方案。教师摆出的问题是特定的,学生可以参考通用的方法,但无法抄袭,不能作弊;教师也要注意提醒学生们不要生搬硬套。在解决问题过程中,会碰到新的问题,促使学生持续的探索和研究。新的问题,可能会超出教材,这时又会促使学生寻找新的资源,不断提高自我学习能力。

(6)评估与反思。当某个小组上台(或站起来)介绍分析和解决问题过程时,了解自己做得好、做得不好的地方,相当于完成了自我评估;然后,教师进行点评,并让其他各个小组(选一个代表)对该组进行评估、打分,类似360度评估方法。这个过程,学生容易相互示好,但教师在现场,就能及时纠正这样不正之风,引导学生积极、正确地评估对方小组。评估过程中,重点要让学生反思过去做得不够好的地方,讨论如何改进。

(7)由浅入深。PBL教学模式更要强调由浅入深、循序渐进,逐步深入各个难点。这样做,避免PBL教学实施一开始就搁浅,同时学生的能力逐步得到提升与检验。例如单元测试(UT)从一段代码、一个函数开始,然后到一个类、完整的包(package),再从动态测试到静态测试、从传统的UT到测试驱动开发实践(TDD、ATDD或BDD),逐步深入下去,直到覆盖关键知识点。

概括起来,PBL教学模式体现了以下几项要素:具有挑战的且为真实的问题、持续探究的学生、作为学习主体的学生(认真听取他们的声音,给予反馈和评估)、不断反思的自我评估、可共享/分享的成果等。一个最小的、完整的PBL教学过程就是一个问题的分析和解决的过程。

四、教学效果与结论

从2012年就开始尝试问题驱动的教学模式,至今已有6年,取得了良好的教学效果。从出勤率看,同专业班级,一般只有70%的出勤率;而采用PBL教学模式,出勤率高达95%,深受学生欢迎。从课程成绩看,学生的平均成绩逐年提高、均分差逐步缩小。从用人单位反馈看,学生对软件测试的掌握更加扎实,到了公司熟悉业务后就基本能独立工作。

PBL教学模式实施时,不要完全固化于形式,而是改变过去的教学思维,教师重新定位自己的角色——教练式导师,在问题驱动下帮助学生完成“做中学”。在问题分析与解决过程中,教师在旁边观察,发现问题可以记下来,不一定需要及时指出来,让学生犯错,从错误中吸取教训,印象深刻,学生更能学到东西。等学生完成之后,教师再点评——指出学生犯了什么错误、为什么会犯这类错误、如何纠正错误、如何预防错误等。如果需要,再让学生重做一次,观察改进的效果。

PBL教学模式可以让每个学习者参与(学习)其中,提高学习者的学习积极性,着重构建积极的、上下文驱动的、开放的、协作的学习环境。对于像软件测试这样的“高级”课程,正需要这样的学习环境,才能使学生获得“分析、评估和创造”的能力。不断鼓励学生质疑假定,摸清环境,分析所处的各种条件,加强推理分析,提高学生批判性思维、系统性思维能力。

问题来自于他人的实际工作,但可以让学生将书本上的知识和现实世界中的问题连接起来,明晰所学方法的应用场景,真正做到学以致用。问题不是用来学习的,而是用于模拟真实的工作环境,构建实实在在的分析和解决问题的过程,从而让学生获得真实体验,构建自己的软件工程技能。这种技能也不局限于本课程的知识和能力,还包括沟通能力、表达能力和自学能力。问题成为纽带,促进学习者之间的强有力的合作,培养团队的协作能力。

参考文献:

[1] David A. Sousa. How the brain Learns[M]. National Training Laboratories of Alexandria, Corwin Press, 2005.

[2] 朱少民. 软件测试——基于问题驱动模式[M]. 北京: 高等教育出版社,2017.

[责任编辑:余大品]

猜你喜欢
软件测试问题驱动软件工程
软件测试方向人才培养“1+X”融合研究
大数据背景下软件测试技术的发展
关于 Web 应用系统的软件测试的研究
以问题驱动改进随机变量分布的教学
以计算思维为中心的数据结构教学方法探讨
“问题驱动式”生物高效课堂打造的做法
“问题驱动+能力提升”卓越课程建设与实践
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨