多角度下软件测试实践教学改革

作者: 郭继文 郭本俊

[摘 要] 针对软件测试实践课内容缺乏系统、规范的设计,导致实践课训练内容单一、学生对软件测试重视不够的问题,分析了软件测试理论与实践之间的对应关系。依据软件测试技术与工程实践的对应特点调整软件测试的工程实践授课内容与课程安排,优化课程结构。在新工科教育思想的指引下,提出多角度教学方法,以实现软件测试理论与实践映射关系的有机融合。在教学训练过程中引入测试工具对源代码静态审查和分级测试,丰富学生工程实践的训练内容,有效提升教学质量。

[关键词] 软件测试;工程实践;多角度教学方法

[基金项目] 2023年度成都信息工程大学软件工程学院2023专业建设与教育教学改革项目“软件测试方法在工程实践全流程环节中的应用分析研究”(SETRF202303);2021年度成都信息工程大学引进人才项目“基于完备形式化描述的可证明安全工业控制系统研究”(KYTZ202159)

[作者简介] 郭继文(1982—),男,山西晋中人,博士,成都信息工程大学软件工程学院副研究员,主要从事工业软件和工业互联网安全研究;郭本俊(1975—),男,四川简阳人,硕士,成都信息工程大学软件工程学院讲师,主要从事计算机软件、移动计算、物联网与大数据研究。

[中图分类号] G642.0 [文件标识码] A [文章编号] 1674-9324(2024)46-0073-04 [收稿日期] 2023-07-21

引言

软件工程专业具有很强的实践性,是注重培养学生编程素养的特色专业。该专业是计算机学科的重要分支之一,特色是着重培养学生编程能力。随着市场对软件工程专业人才数量需求的增长,对软件工程专业人才的质量要求也在提升[1-2]。通常软件工程专业有两个大类的设计岗位,一是软件设计岗,二是软件测试岗。根据软件工程化过程要求及软件开发模式[3]5-6,软件设计与软件测试贯穿软件开发活动的全生命周期,且设计活动与测试过程相关性非常高,即软件开发什么就要相应地测试什么,软件的开发与测试紧密相关。根据这一特性,软件测试实践课的课程设置、教学方案、教学用例、考核方法、课程评价等教学活动都与软件设计及测试理论课程有很大关联。

CIDO教学模式[4-5]、ASIIN工程教育认证[6]、“卓越计划”教育模式[7]等工程教学方式都非常重视实践教育模式,将提高本科生的工程实践培养的教学要求,然而教学要求提高并不能完全满足当前社会软件开发岗位对软件工程专业人才的需求。

在“中国制造2025”“互联网+”“工业4.0”等重大战略推动下,在支持新经济快速发展的需求下,教育界于2017年实施了新工科发展战略,提出了新工科理念下的工程教育专业方式[8],以培养学生为中心,提高学生软件设计素养,即把握行业发展方向,培养满足当前经济发展需求的工科人才,培育应用型和技术技能型人才[9-10]。新工科理念的教学方式更加注重实践,并将实践中的成果作为目标,同时成果反向推动教学方式、课程设计、教学内容、教学模式等改革,实现教学目标和教学过程的相辅相成。

在新工科教学理念的推动下,社会对人才培养的目标有了更高的要求,我国的工程类教学水平将迈上一个新台阶。以软件工程专业为例,培养的人才既要满足国内对高质量的软件设计人员的需要,又要具有较强的国际竞争力。

一、软件测试工程实践的问题

从国内各高校工程教育发展脉络来看,作为典型工程教育,软件工程越来越注重实践教学方法、课程设置等内容,但目前的工程教育认证理念的执行效果不佳,并不能满足目前新工科理念的教学目标,主要体现在以下3个方面。

(一)工程实践训练内容与理论学习的匹配程度不高

学生在大二或大三学习的软件测试理论内容有白盒测试、黑盒测试、单元测试、集成测试、系统测试、自动化测试等,到大三下半学期学生的实践课内容通常仅体现单元测试、集成测试、系统测试中的一种,不利于学生实践能力的提升。

(二)缺少软件测试工具的辅助

在学生学习软件测试过程中,自动化测试方法是一项重要的必备技能,要求学生使用测试工具完成测试任务。例如,在进行单元测试时,学生要使用白盒测试技术,其中白盒测试就需要学生应用测试工具实现测试用例的设计。另外,在静态测试中,也要使用测试工具对软件源代码规则进行审查,并将扫描后的问题整理、判断、上报至软件设计方。

(三)缺乏搭建测试环境的环节

搭建软件测试环境是重要的测试环节,无论是集成测试还是系统测试,学生都非常有必要搭建测试环境验证软件模块接口或测试软件系统功能性能是否满足设计要求。在此过程中,既体现团队合作精神,也要求团队成员各司其职,学生要考虑测试人员、测试软件、硬件环境、测试进度、测试覆盖性、测试效果分析等相关问题。

上述问题导致学生工程实践课程训练的效果不佳,学生无法很好地理解软件测试理论如何应用到实际工作中,导致工程实践课程流于形式。软件测试理论与软件实践之间的区分模糊,影响了培养工程应用型人才的教学目标的实现,甚至严重影响新工科教学理念的教学思路的实施。

二、多层次下软件测试方法分析

根据软件测试理论课设计要求,学生将从不同角度学习软件测试理论。通常,软件测试方法分为静态测试和动态测试[3]16;根据软件测试的对象不同,软件测试方法分为白盒测试、灰盒测试、黑盒测试[3]18;根据软件工程化及软件测试过程,软件测试方法又分为单元测试、集成测试、确认测试、系统测试、验收测试等[3]28;根据软件应用特点,软件测试方法可分为嵌入式软件测试、应用系统软件测试、手机App软件测试等[3]29。无论以什么样的角度进行软件测试,其工作任务一直伴随着软件设计过程,软件代码设计的颗粒度有多细,软件测试方法就应该有多细。例如,在软件测试实践课上,学生要测试一套基于构件方法设计的软件系统,无需测试每个构件的内部结构是否满足设计要求,只要测试构件与构件、构件与模块、模块与模块之间的调用关系是否正确即可。软件测试实践课的训练方法大致分为代码级测试、模块级测试和系统级测试3个层面,且3个层级的测试方法可覆盖现有软件测试的方法。

(一)代码级测试对标单元测试过程

课程大纲要求学生能够使用测试工具完成代码规则的检查,并对测试工具扫描的代码问题进行整理、甄别,然后编写测试报告,提交测试问题。除训练静态测试外,学生还可测试软件中每个函数或每个最小模块,动态验证软件单元功能是否满足设计要求。在此过程中,学生从不同角度思考静态测试和动态测试的区别、白盒测试与黑盒测试的区别及单元测试中工具使用的技巧,有效提高学生对源代码的测试能力。

(二)模块级测试对标集成测试、确认测试过程

课程大纲要求学生搭建半实物或真实环境下的实验平台,验证模块之间的调用关系是否正确,以及模块输入、输出、约束条件等关键要素的设计是否正确、合理。通过训练模块级测试,学生可深刻理解灰盒测试与黑盒测试之间的异同。另外,学生充分理解集成测试和确认测试之间的异同,对于认知模块设计思想在软件测试中的重要影响非常有用。

(三)系统级测试对标确认测试、系统测试和验证测试

课题大纲要求学生充分验证软件功能、性能,确保其满足设计要求,学生可通过搭建真实环境下实验平台,验证软件功能、系统接口、性能指标、运行可靠性等一系列指标。学生也可从用户的角度考虑软件可用性、有效性等情况,这对于学生从系统思维角度思考软件测试方法具有重要意义。

三、软件测试理论与实践教学课程映射

通常软件测试的实践课程包括以单元测试、集成测试、确认测试、系统测试、验证测试为重点的5个专题训练项[4]。从软件工程化角度来看,学生通过单元测试、集成测试、确认测试和系统测试训练符合软件工程化要求,但因课程时间、课程设置、讲授方法的影响,每名学生的实践课训练内容只能完成部分,训练不完整,训练效果会受到很大影响。另外,无论以“V”字形开发还是以“W”字形开发模式,软件测试各阶段之间是有内在联系的,即它们之间的递进关系充分体现在软件工程化过程中。

根据软件测试颗粒度的不同,将软件测试工程化过程映射到不同的测试阶段中,即代码级、模块级和系统级,实现了软件测试技术与工程化过程的匹配关系。

四、多角度下软件测试实践教学改革

(一)多角度教学改革思路

工程化教育的目的是使学生既能充分理解软件工程化的各个环节,又能系统学习软件测试的相关知识。通过修改软件测试实践课教学大纲,规范学生的学习过程和教师的教学活动,使学生在理解软件工程化内涵的同时,教师有目的、有计划地完成教学目标,稳步提升学生的自主学习能力、团队协作能力、独立思考能力、解决问题能力。

1.培养学生自主学习能力。从教师分配任务开始,学生将按照任务要求,完成相关的测试计划、测试说明、测试用例和测试报告,在此期间需要学生自主查阅资料,学习如何编制测试文档、如何搭建测试环境,充分训练了学生自主学习的能力。

2.培养学生团队协作能力。团队协作能力是每一工科实践课程必备要求之一,软件工程专业更是如此。从软件工程化的角度,软件开发任务都是由多个角色协作完成,其中软件测试环节也是由多人分工合作完成,大型系统软件测试的测试任务则分工更细。根据软件测试实践大纲要求,教师布置一项软件测试任务,在有限时间和资源的前提下完成任务,协同工作无疑是最好的选择,由此培养学生的团队协作能力。

3.培养学生独立思考能力。为完成软件测试实践任务,学生按小组协同完成任务固然重要,但每名学生均有相对独立的任务,需进行独立思考解决具体问题,体现了协同工作与独立分工的有机统一,小组中组织者可调动团队成员力量,充分锻炼其组织管理的能力,团队成员认真完成本职工作,训练其精益求精的职业精神。

4.培养学生解决问题能力。根据软件测试任务培养学生在有限时间、有限资源的前提下,完成软件测试任务。教师给学生布置实例测试任务,学生以团队合作的方式完成测试任务。在此过程中,学生通过解决一系列具体的实际问题,如人员安排、时间安排、任务目标、测试环境搭建、测试文档编制、合作交流、任务终止等不同阶段的关键点思考,培养解决实际问题的能力。

(二)多角度教学改革方法

根据软件工程实践现状的不足,采用多角度教学培养方式,即代码级测试学习、模块级测试学习和系统级测试学习,不但能够解决测试软件理论与实践不匹配的现状,而且通过测试环境的搭建和测试工具的使用,学生可以充分理解软件工程化测试过程,实现新工科教育要求下的教学质量的提升。

1.教师环节。(1)测试文档介绍。在软件测试实践课中,教师的作用主要是引导、督促学生完成软件测试的实践课程相关文档编制任务。首先要向学生讲解软件文档编制的国标要求,例如《计算机软件测试文档编制规范(GB/T 9386—2008)》《软件工程 软件产品质量要求与评价(SQuaRE)SQuaRE指南(GB/T 25000.1—2010/ISO/IEC25000:2005)》等,然后以软件测试项目为例具体介绍软件测试计划、软件测试说明、软件测试缺陷和软件测试报告编写要求及评分标准,培养学生正确、规范完成软件测试的素养。(2)测试过程讲解。在教师主导下,学生要选择测试对象。然后在软件工程化过程中,教师讲解软件测试环节流程,包括搭建测试环境、工具使用方法、分工测试任务、协作编制文档、提交测试文档等一系列要求,规范学生软件测试过程,实现学生对软件工程化过程的正确理解。(3)协助分组。软件测试实践课程的学生分组也是重要的内容。根据课程培养效果,一般每个小组为4~6人,再根据分组后学生的兴趣爱好分配每组对应的测试级别,即代码级测试、模块级测试或系统级测试中的其中一种。最后,团队成员将协同完成测试计划、测试说明、缺陷报告和测试报告,达到培养协作意识及发现、分析问题能力的目标。

2.学生环节。学生将按照教师分配的测试任务和国标要求开展软件测试任务。学生通过完成软件测试任务,着重理解软件工程化过程中软件测试环节的要求。学生除了完成测试文档外,还需通过两次答辩展示其对软件工程化的测试阶段的理解。

经典小说推荐

杂志订阅