郑志勇 王丹
[摘 要]课程团队分析了当前软件测试行业对人才需求的趋势,指出一些高校软件测试课程在培养学生解决复杂工程问题方面能力不足的现状,并在提升培养目标、“产学研”融合、构建校企合作的教学实训平台、采用科学的考核模式和评价方式等方面进行了实践。近三年毕业生对课程教学效果的反馈表明,该课程培养学生解决复杂工程问题能力的效果良好。
[关键词]软件测试;解决复杂工程问题能力培养;教学案例
[中图分类号]G642[文献标识码]A[文章编号]2095-3437(2024)04-0061-04
随着信息技术高速发展,线上银行、办公、购物、约车、社交和短视频等软件,已经深入国民经济和社会生活中的每一个角落,改变了人们的生产、生活方式。大家对这些软件的依赖性越来越强,软件质量成为能否保障社会生产生活正常运转的重要因素之一。软件测试作为软件质量保障的重要手段,贯穿软件的全生命周期,需要软件测试的从业人员具备较强的专业技能和职业素养。目前绝大多数高校的计算机类专业都开设了软件工程课程,其中软件测试学时占比较大,有的学校甚至直接开设了软件测试课程。然而,培养的一些毕业生仍然不能满足企业的要求,尤其在面对复杂工程问题的时候,一些学生无从下手,解决问题能力不足[1]。《工程教育认证标准》提出,复杂工程问题应以“综合性、深度性、冲突性”为核心[2]。朱露等将解决复杂工程问题的过程分为发现问题、表征问题、设计方案、实施方案、反思與评价五阶段[3]。目前软件测试课程教学主要讲授软件测试基本理论和方法,难以在教学中构建复杂问题场景,故很难发现复杂问题,表征问题方法的运用也只能停留在很浅的层次,设计方案、实施方案、反思与评价的过程也只能简单进行教学,学生体会不深刻,影响了学生软件测试能力的培养。软件测试的实践性很强,技术也在不断更新,但一些教师没有接受过专门的软件测试技术训练,工程实践经验不足,也没有办法构建“综合性、深度性、冲突性”的复杂工程问题场景,培养学生解决复杂工程问题的能力更无从谈起。因此,有必要对软件测试课程的教学内容、实践环节以及考核方式进行改进。
一、国内外研究现状分析
目前,很多教师根据软件测试课程的特点,针对学生解决复杂工程问题能力培养的方法,探索了诸多路径,并在教学中进行了实践,取得了一些不错的成果。鞠小林等针对软件测试课程案例库构建任务,分析其在案例选择、实践环境组建和教学方案实施过程方面存在的问题,探讨软件测试课程实践环节融合“产业”“教学”“学术研究”三个维度的教学思想,阐述测试案例库的构建要素以及实践环境搭建方法[4]。王鑫便等针对目前软件测试课程教学中学生学习目的性不强、教学考核方式单一等问题,提出采用OBE教育模式对软件测试课程进行教学改革,阐述对软件测试课程的整个教学方案进行反向设计的过程,从课程的教学目标、内容设计、考核方式等方面进行了改革探索和实践[5]。向尕等以产出为导向,分析目前软件工程课程实践教学中存在的问题与不足,从用人单位对毕业生核心能力的要求出发,聚焦解决复杂工程问题能力培养,提出基于项目驱动的软件工程实践教学改进方法[6]。吕友波等基于工程教育认证背景下实践教学环节改革发展趋势,从培养学生解决复杂工程问题的能力入手,提出了课程设计改革实施方案[7]。
培养学生解决复杂工程问题的能力,是工科专业的核心培养目标。该能力的培养需要多门课程的理论教学和工程实践有机结合,通过形成知识图谱的实践培养路径来形成合力。软件测试作为软件工程专业的基础课程,在培养学生解决复杂工程问题的能力中,更应扛起重担。
二、改革内容
软件测试理论不仅用于具体的软件测试工作,还应用于软件开发过程和质量管理。通过软件测试理论课程的学习,学生应能够综合运用本门和其他课程的理论知识和技术对软件的缺陷进行查找和追踪,能运用一定深度的理论、方法以及工具对问题进行推理、分析,并最终将其有效解决。复杂工程问题场景的呈现,是培养学生能力的关键。本课程主要在以下四方面进行了改革。
(一)提升培养目标
第一,要跳出课程看专业。将培养软件测试工程师的目标转变为培养高级软件工程师的目标,扭转学生对这门课“重开发,轻测试”的思想认识,使其从思想上重视这门课程在专业中的地位。
第二,要进行多视角下的课堂教学。同一个教学案例,可以从软件测试的角度去介绍,也可以从软件开发或基于不同需求对软件项目管理要求的角度去讲解,组织小组讨论,提高学生的参与度,实现多视角下的软件测试课堂教学。
第三,在案例教学过程中,除了让学生找出软件的bug(漏洞),还要让学生总结和分析bug产生的原因、bug的解决方案,以及程序员思考问题的习惯导致的在其开发的其他模块中也出现类似缺陷的风险。
(二)“产学研”融合
在实际的软件开发、管理过程中会出现很多复杂工程问题,从中精选符合学生认知、适合教学的案例素材融入教学内容的设计,精心地组织教学过程,启发学生提出复杂的问题,并引导学生结合所学内容,尝试性地寻求问题的答案,形成一条龙的“产学研”实践案例。教师在教学的同时,对实践教学进程进行跟踪,结合学生的行为数据、活动轨迹,也能够发现很具体的、较复杂的工程问题场景,这些问题的解决过程和方式方法,反过来也能够为企业和科研中出现的问题作参考,做到产业、教学、科研互通,真正地培养学生解决实际复杂工程问题的能力。下面介绍两个教学案例,案例一为优秀毕业生分享的解决软件测试复杂工程问题的场景,案例二为教师本人科研当中出现的解决复杂问题的场景。
案例一:某知名互联网大厂的酒店业务高性能网关优化实践。近年来,酒店采用DDD技术架构,一直在对以往的业务进行调整。其中核心领域的团队将各自的“应用层”统一交给下游网关团队,组成统一的应用层。这种由多个网关合并成大前台(酒店业务网关)的模式带来的好处是核心系统边界清晰明了,但是在实际业务运转中,出现了业务网关吞吐性能变差的问题。对问题进行详细分析发现:Servlet与业务逻辑虽说是同一个线程,但高峰期流量上涨,尤其到流量尖峰的时候,Servlet 容器线程被阻塞,服务的吞吐量就会明显下降,由此得到问题的根源所在:(1)CPU 资源大量浪费在阻塞等待上,资源利用率低;(2)为了增加并发度,会引入更多额外的线程池,随着 CPU 调度线程数的增加,会导致更严重的资源争用,上下文切换占用 CPU 资源;(3)线程池中的线程都是阻塞的,硬件资源无法充分利用,系统吞吐量容易达到瓶颈。
有效的解决方案:基于响应式编程模型,使用异步非阻塞式 I/O,可以更高效地处理并发请求,提高应用程序的吞吐量和响应速度。解决后的效果:单机可支持 QPS上限从100提升至200,吞吐量性能上限提升100%,资源成本下降一半。
案例二:飞机地面试验429总线信号出现“毛刺现象”的问题案例。在某北方飞机试验场所的地面铁鸟台某项试验中,大气仿真计算机通过ARINC429总线输出的信号“间断性”不正确,通过大量的软件测试定位并用示波器对信号进行抓取,发现信号是不规则的方波信号,噪声很大,毛刺现象非常明显,导致接收信号的设备无法对信号“高”“零”“低”三种电平状态进行识别。经长时间的观察发现,该问题在白天进行的试验中几乎不出现,而是通常在晚上加班进行的试验中出现,测试人员的解决方法通常是暂时搁置出现问题的试验,下班后关掉设备,第二天上班再完成这一部分的试验。参与飞机地面铁鸟台试验的系统设计单位以及各个飞机成品厂各有二三十家,所涉及的各个子系统也有七八种,有很多成品厂在别的机型(设计单位在不同城市)都没有出现该问题,而且该问题在秋冬季节出现的概率大。有一天某测试人员与一个研究电磁波的人探讨起这个问题,后者分析认为,北方在供暖期间空气干燥,容易产生静电,参与试验的设备经过一天运转,到了晚上尤其容易产生信號干扰。测试人员最终将各参试设备共同接地,并加大信号传输线的屏蔽保护层后,问题成功解决。通过学习该案例,学生了解了解决实际复杂工程问题的全过程,培养了表达能力、发散性思维和与他人沟通寻求帮助的能力。
(三)构建校企合作的教学实训平台
学院引进上海泽众软件科技有限公司的软件测试平台,成立企业级软件测试实验室,聘请企业导师,组织教师参与行业内权威企业在全国范围内主办的师资培训活动,获得相应的资格培训证书。课程实验、实践教学也通过该平台实施,帮助学生对复杂工程问题的解决过程有更深、更直接的体会。
(四)采用科学的考核模式和评价方式
课程考核除了期末考试,还将过程性考核纳入考核成绩中,并适当增加比重。课程考核成绩由平时成绩和期末考核成绩共同决定,其中平时成绩由课后作业、课堂表现、实验、大作业等综合评定。
大作业是模拟公司项目组的工作模式,将3~4名学生组成一个小组,组长按照岗位角色分配任务、进度控制和质量监督。大作业安排在期末前两周进行,此时正好是学生毕业设计答辩结束准备离校的时间,选取学生的毕业设计作品作为被测的软件,通过对作品进行测试发现其中的缺陷,把这些缺陷正确表征出来并设计实施解决方案,最后再进行反思与评价。
该作业将任务分配到各组,对学生成绩考核需考虑整个小组任务完成情况、学生的态度和表现,以及组内每个人发挥的作用、组内互评和集体答辩表现等方面对学生进行综合评价。
三、课程改革效果
为了培养学生解决复杂工程问题的能力,软件测试课程团队自2018年进行教学改革以来,一直在征集优秀毕业生在研发软件产品过程中出现的复杂问题案例,结合教师研究或开发的项目凝练出适合用于教学的复杂问题案例[8],用来支持课程教学。课程改革效果良好,学生连续五年评价教师的教学水平为优秀,课程负责人被学生评为校级“我最喜爱的任课教师”。
对软件工程专业近三年毕业生进行线上问卷调查,设置如下问题:(1)软件测试课程对当前从事的工作是否有帮助?(2)课程案例对理解复杂工程问题是否有帮助?(3)软件测试课程对解决实际复杂工程问题能力培养是否有帮助?
一共收到152名毕业生的反馈,结果见图1。
从调查结果来看,94%以上的学生认为软件测试课程对当前从事的工作有帮助,讲授的课程案例对他们理解复杂工程问题有很大的帮助,对培养他们解决实际工程复杂问题的能力很有好处。
四、结语
学生解决复杂工程问题能力的培养,本身就是一个复杂的问题,需要整个专业课程群进行联动,才有可能形成合力。专业课教师,除了进行正常的教学内容的设计之外,还要了解行业发展趋势、紧跟专业技术的步伐,要将自己的研究成果融入课程教学中,与本专业优秀毕业生保持紧密联系,不断地征集他们在生产或研发过程中出现的适合教学用的复杂问题场景,从中凝练出特色的教学案例,并将其充实到课程教学中,为螺旋式培养学生解决复杂工程问题能力提供支撑。
[ 参 考 文 献 ]
[1] 林健.如何理解和解决复杂工程问题:基于《华盛顿协议》的界定和要求[J].高等工程教育研究,2016(5):17-26.
[2] 中国工程教育专业认证协会.工程教育认证标准:T/CEEAA 001—2022[S].北京:中国标准出版社,2023.
[3] 朱露,唐浩兴,胡德鑫,等.工科本科生解决复杂工程问题能力评价模型[J].高等工程教育研究,2023(4):86-99.
[4] 鞠小林,陈翔,文万志,等.“产教研”融合的软件测试课程案例库构建[J].计算机教育,2019(3):121-125.
[5] 王鑫便,刘仰光,程萍,等.基于OBE的软件测试课程教学改革探索[J].计算机教育,2020(5):97-101.
[6] 向尕,康海燕,孙璇.面向解决复杂工程问题能力培养的软件工程实践教学探索[J].计算机教育,2021(10):161-165.
[7] 吕友波,苏晓东,秦相林,等.面向解决复杂工程问题能力培养的计算机课程设计改革[J].黑龙江科学,2022,13(11):162-164.
[8] 郑志勇,张翼飞,王丹.注入航空特色的软件测试课程改革与实践[J].高教学刊,2021,7(28):145-148.
[责任编辑:雷 艳]