高校软件测试技术课程的教学改革实践
2022-03-24杨秀红
杨秀红
摘 要:“软件测试技术”课程是计算机科学与技术(本科)专业的核心专业课程,对学生的理论及实际测试能力均有较高要求。课程需要系统讲授软件测试的基本原则和方法技巧、软件测试过程的计划和实施、软件工具的选择和使用方法以及缺陷管理方法等。本文分析了当前软件测试课程在教学及实验环节中存在的一系列问题,从培养学生行业协作精神、丰富课堂授课形式、合理设置课程内容、增加综合实验以提高学生实际测试能力等方面对软件测试课程实践教学改革相关问题进行了探讨。
关键词:软件工程;软件测试技术;教学改革
中图分类号:G642.0 文献标识码:A 文章编号:1673-7164(2022)05-0149-04
一、背景
近几年,软件产业迅速发展,软件系统的规模也越来越大,软件交付后经常伴随着软件质量问题。为了保证交付产品的质量,提高软件的可靠性,避免因软件质量问题导致经济损失,软件测试越来越受到软件企业的重视。
软件测试是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程。软件测试技术是一门讲授软件测试的基础理论、测试用例设计方法、测试工具使用方法、软件测试管理等知识的课程,通过对用户需求以及开发代码的分析,根据测试策略,自主设计测试用例,利用测试工具和测试技术进行静态测试、单元测试、功能测试和性能测试,以培养学生独立进行软件测试设计、测试代码开发和缺陷分析的能力[1-2]。
软件测试课程的目的是培养学生尽快尽早地发现软件产品中存在的问题,避免后期因软件缺陷导致的巨大经济损失,包括检查软件产品与用户需求、预先定义的不一致性、检查软件产品的bug、撰写测试报告并交于开发人员进行修改等。
软件测试行业日渐规模化和规范化,软件企业对软件测试人员的需求量与日俱增。大量软件教育和培训行业将培养软件测试人才作为一个重要部分,与此同时,高校也积极开设软件测试专业课程以满足企业招聘需求。一般来说,高校的软件测试课程一般分为课堂教学和实验教学两大部分。
(一)课堂教学
通过课堂教学,使学生掌握软件测试原理、静态测试技术、单元测试技术、功能测试技术、性能测试技术、自动化测试技术、软件测试管理和软件缺陷管理方法,培养学生根据需求制订测试策略,编写测试代码,撰写测试文档的能力。
(二)实验教学
通过实验环节,让学生独立设计测试用例,选择单元测试工具、功能测试工具、性能测试工具编写测试代码,运行测试并记录缺陷,根据缺陷的类型分析问题出现的原因,培养其理论联系实践、独立发现问题和解決问题的能力。
教学目标具体要求。(1)要求学生掌握软件测试的基本理论、测试缺陷和测试过程的管理、测试文档的编写。(2)要求学生掌握常用测试技术的适用范围、用例设计、测试开发和执行、测试工具的使用。(3)要求学生掌握基于测试的代码重构和系统的性能优化方法。
软件测试课程将课堂教学和实验教学相结合,能够很好地实现教学目标,使学生理解软件测试的理论知识,培养学生的软件测试能力和系统性优化能力。但是,由于传统课程教学模式存在一定的局限性,高校的软件测试课程对测试人才的培养水平与软件企业的实际需求还存在一定差距。本文针对目前高校软件测试课程教学中存在的一系列问题,结合课堂教学和实验教学中的实际情况,提出相应的软件测试课程教学改革措施,提高该专业课程的教学质量,以适应软件测试行业的发展和需求。
二、软件测试技术课程教学中存在的问题
(一)缺乏行业协作精神的培养
在全球化背景下,软件工程技术迅速发展,多数软件企业依赖于开发和测试两个部门,这两个部门属于企业价值链中有交互但又独立的节点。一方面,软件测试人员发现软件缺陷的数量和严重程度与其绩效有着紧密关联;另一方面,缺陷数量同样可以作为开发工程师的考核指标以衡量其开发水平的高低。软件工程专业大学生在毕业后大多投身于软件工程行业,软件测试技术作为一门测试方向的专业课,课堂教学内容更加侧重于讲授测试技术及测试工具的使用,较少提及对学生毕业后协作精神的培养[3],包括是从事开发岗位还是测试岗位,如何看待今后工作中的团队合作和竞争问题、如何正确看待部门之间的考核评价矛盾、如何发挥团队意识和互相协作精神获得质量更高的软件成果,学生在今后行业工作中的爱国热情、敬业奉献精神以及法治观念的思想建设等。
(二)授课形式单一
以往的软件测试技术课程教学主要采用的是教师结合PPT展示进行讲解以及课堂实际操作演示的传统教学形式,更多的时间是教师在讲台上讲,学生在下面听,师生之间缺少必要的互动。软件测试是软件工程知识体系中理论性较强的一个知识领域,教师课堂讲解的理论知识具有一定抽象性,如白盒测试中的逻辑覆盖准则、测试成熟度模型等,这些抽象内容增加了学生对课程内容的理解难度。因此,单一的教学形式很难激起学生的学习兴趣,尤其在讲解抽象内容时,甚至会让学生感到枯燥、乏味,教学效果有待提高。
(三)教学内容碎片化、随意化
按照软件开发的要求,软件测试应贯穿整个开发过程的始末。为了保证软件质量,软件测试应当是一个综合考虑各个方面的整体性活动。在教学过程中,为了合理安排教学内容、按课时组织教学活动,只能将不同的测试理论和方法分割,这就必然造成教学内容的碎片化问题,导致学生难以形成一个统一的测试理论框架,在实际开发与测试过程中难以灵活运用所学到的理论与方法。由于软件测试技术课程的教学时数较少,所以很难找到完全合适的教材,以至于授课教师对授课内容的选择较为随意[4],有的侧重于软件用例的设计及实施,有的侧重于软件测试方向毕业生的就业选择和职业生涯规划的介绍。教学内容的不固定容易导致教学重难点不突出,使学生对专业课程产生怀疑,认为毕业后实用性不强,进而导致学习兴趣不高。
(四)实验课程内容单一
相比于介绍软件测试理论知识和测试方法的课堂教学,大多数高校分配给实验课程的课时数一般较少,在实验内容的安排上大多比较紧凑。软件测试是一门新兴的专业课程,实验教学材料非常有限,一般倾向于对各种测试工具的单独介绍,这就导致实验教学的重点比较分散,从而忽略学生实践动手能力的综合培养。如单元测试、自动化功能测试和性能测试的测试工具的使用,较少涉及一个实际大型项目的综合测试操作,无法将测试理论、测试进度安排、测试用例的自主设计、测试小组协作以及测试管理的整个流程完成,这就导致学生怀疑课程的实践意义,降低了学生实际动手操作的积极性。
三、软件测试技术课程教学改革措施
(一)培养学生行业协作精神
作为软件开发行业中最为活跃的年轻群体,软件工程专业的学生毕业后大多进入软件企业工作,而开发和测试是软件生产过程中两个主要的部门,这两个部门要互相协作才能产出有质量有保证的软件产品。软件测试不仅是专业课程体系中的一个重要环节,而且直接对口软件企业中的“测试”部门。教师在课堂上不仅应该向学生传授专业的测试技能,还应向学生具体阐述企业开发岗和测试岗的分工,让学生有明确的行业规划。使其切实理解开发和测试之间相辅相成的关系。明白代码是开发人员的产出,而bug是测试人员的产出。测试人员就是世界的验证者,要以挑剔的眼光审视眼前需要验证的对象;而开发人员则应该合理看待测试人员在专业上的挑剔,秉持包容之心和平淡之心。使学生明白不管以后从事开发还是测试行业,都要明确软件开发和软件测试都是软件生命周期中的重要组成部分,在以后的工作中应互相协作、有效配合,以保证软件出产的质量。
(二)改变传统授课形式
为了克服单一授课形式的缺点,吸引学生真正参与到课堂教学中来,可以采用线上线下相结合的授课方法[5]。比如授课教师可以利用现代教育技术,将混合式教学理念引入软件测试课程的教学过程中。以西安理工大学为例,学校已经建成了先进的录播教室,引进了“MOOC(慕课)在线教学平台”以及“云课堂”教学平台。授课教师除了可以在课前通过录播教室录制教学视频,提供给学生进行线上自主学习;学生还可以在MOOC平台上自主观看其他相关的课程视频、参与课堂讨论、在线提交作业等,使学生能够学习到更加感兴趣的内容;在云课堂上,教师还可以发布一些测试习题,方便学生在课后进行课程内容的回顾,查漏补缺。在线下教学环节,授课教师可以准备一些学生感兴趣的话题进行分组讨论,比如“你通过哪些途径了解软件测试行业的相关就业信息?”“你认为从事软件测试行业的工作前景和待遇如何”等,再将讨论的结果以小组为单位进行统一汇报。授课教师可以根据学生的讨论结果进行针对性地讲授、引导,从而使学生真正喜爱这门课程,自发地掌握这门非常实用的技术。这种线上线下相结合的混合式教学模式,克服了传统授课形式枯燥、单一的弊端,激发了学生的自主学习兴趣,让学生由过去的被动接受知识转变为主动汲取知识。
多样化的授课形式必然需要多样化的考核形式加以支撑,单靠期末考试的试卷成绩必然无法客观评估多样化授课模式的教学效果。最终考核成绩一般以平时成绩、实验成绩和卷面成绩组成,各个方面的效果测评则应根据具体的教学模式来确定,如因为增加了课堂讨论和小组汇报的授课形式,在最终考核的平时成绩部分可增加课堂讨论表现情况和小组讨论完成度的测评;由于增加了授课平台的相关习题内容,在最终考核成绩里可增加在线作业情况和测试习题分数的成绩。还可以考虑增加一个期末大作业,考查学生对测试过程以及测试方法的掌握程度、是否建立了正确的测试思维以及是否可以从各个角度对交付软件的性能进行全面测试。这样,多种考核方式相结合配合课堂上多樣化授课形式,能够及时跟踪学生的学习动态,全面了解学生对测试内容的掌握情况,及时、灵活地调整授课内容及课程重难点,最终取得更好的教学效果。
(三)合理设置课程教学内容
就软件工程专业而言,软件测试课程应包含以下内容。
1. 理论知识体系与行业发展前景
在理论知识体系方面,首先划分软件测试的知识区块,为不同的知识区块合理分配基础理论知识,形成一个区块关联式的软件测试理论知识体系。课堂讲授以“区块关联式理论知识体系—测试代码开发—测试过程管理”为主线,先指出软件测试的重要性,再通过实例讲述白盒和黑盒测试用例的设计方法,比较优缺点,根据测试需求选择不同的测试策略,学生根据测试用例学习各个知识区块内容,包括单元测试、自动化功能测试、自动化性能测试等的测试代码开发和运行,记录软件缺陷,最后从整体上讲述软件测试的管理方式,完成整体教学目标[6]。在行业发展前景方面,授课教师可以搜集近几年测试行业的就业前景等相关资料,向学生介绍软件测试技术在软件开发行业的地位与作用,软件测试发展情况及就业前景,相关岗位职责要求和任职条件、薪资待遇、上升途径等,如图1所示,笔者总结了软件测试行业近几年的薪资占比情况。从图1可以看出软件测试人员近几年的薪资变化情况,教师可以在课堂上根据这些实际情况向学生大致介绍测试岗位的相关情况,使学生对测试岗位更加感兴趣,从而激发学生对软件测试课程的学习热情和主动性。
2. 专业人才培养方案
专业人才培养方案是进行专业人才培养的依据和大纲。授课教师应以专业人才培养方案为基准,向学生详细介绍本专业的人才培养目标以及专业课程体系等内容,尤其是专业基础课与专业核心课、专业选修课之间的关系,引导学生制定大学阶段的学习目标,避免学生盲目地学习。
3. 大学阶段有效的学习方法和正确的行业追求
授课教师应向学生阐述软件工程专业的课程体系,为了达到本专业教学目标,对本课程所采取的课堂教学以及学生管理方式向学生进行剖析,让学生认识到自己要找到更有针对性的学习方法,树立正确的行业追求,具备自主追求和独立思考的能力,始终保有对行业的批判性思维。
(四)增加更合理的综合实验
企业招聘测试人员时通常希望毕业生能够掌握尽可能多的测试工具,但软件测试的课程目的不能只是简单掌握一些测试工具,软件测试实验课的安排不能简单落实到测试工具的培训上,而应该让学生了解测试工具所体现的测试理论。因此,软件测试实验课程不仅应该增加实际动手操作的部分,更应该增加实际大型项目的综合测试内容,让学生从自主设计测试用例、选择合适的测试方法、测试代码自主开发、测试代码运行,最终记录软件缺陷。要求学生能够自主选择测试模式,针对不同测试要求和测试场景熟练操作各种测试工具,自主组织测试团队,合理分工、团结协作,自主安排测试进度,最终交付实際软件项目的测试报告[7]。这就需要适当增加软件测试技术的实验课时量,对评价学生能力的达成效果提出了更高的要求。这样才能增加学生的团队意识,使其对该课程的实际动手测试能力的提高有切实的体会,对学生在毕业后直接进入测试岗位有巨大的现实意义。
四、结语
软件测试课程作为软件工程专业学生非常重要的一门专业课,在增强学生的专业意识、提高学生专业认同感、引导学生确立正确的学习目标并制定专业学习规划方面起着非常重要的作用。针对软件测试课程课堂教学和实验过程中存在的问题,笔者认为可以通过培养学生行业协作精神、采用多样化授课方式、合理设置课程教学内容以及将综合实验融入到软件测试课的实验教学中等手段对软件测试技术课程教学进行改革。
参考文献:
[1] Patton,R.. 软件测试[M]. 北京:机械工业出版社,2006.
[2] Myers,G.J.,Badgett,T.. 软件测试的艺术[M]. 北京:机械工业出版社,2012.
[3] 朱郑州,钟将. 融合理论和实践的软件工程课程思政建设[J]. 计算机教育,2021(09):23-26.
[4] 刘婷. 软件测试课程教学建设初探[J]. 信息与电脑,2021,33(02):244-246.
[5] 王坤昊. 慕课背景下软件测试课程教学改革探索[J]. 考试周刊,2017(78):35.
[6] 朱少民. 软件测试方法和技术[M]. 北京:清华大学出版社,2014.
[7] 臧艳辉. 基于项目导向、任务驱动的软件测试课程开发研究[J]. 计算机光盘软件与应用,2014,17(10):238.
(荐稿人:石程,西安理工大学副教授)
(责任编辑:汪旦旦)