“产教研”融合的软件测试课程案例库构建
2019-04-01鞠小林文万志张艳梅
鞠小林,陈 翔,文万志,张艳梅
(1. 南通大学 计算机科学与技术学院, 江苏 南通226019;2. 中国矿业大学 计算机科学与技术学院,江苏 徐州221116)
0 引言
人类社会正进入信息时代,软件成为社会信息化转型的第一推动力。软件质量逐渐成为保障社会生产生活健康运行的核心要素。保障软件质量的重要手段是软件测试。探索如何培养大量优秀的软件测试人才是我国信息化建设过程中亟待解决的问题。
目前,国内高校计算机相关学院已经将软件测试作为计算机专业的一门重要专业基础课程,面向本科生、研究生讲授软件测试理论、方法和技术[1]。由于软件测试课程开设起步较晚,课程的理论教学和实践环节常常与产业界对软件测试人员的素质培养需求脱节[1,2],尤其是用于实训环节的教学案例项目,往往是教科书中示例程序的翻版,这导致了学生机械地记住课程介绍的测试理论知识及方法,在课程实践环节中也只是机械地照搬应用,而不能掌握软件测试相关知识的本质,进而导致在实际的软件开发环节不能灵活地运用所学理论和方法。最近,《国务院办公厅关于深化产教融合的若干意见》提出[3]:“大力支持应用型本科和行业特色类高校建设,紧密围绕产业需求,强化实践教学,完善以应用型人才为主的培养体系。”本文探讨了“产教研”融合的软件测试课程案例库构建思想。
1 教学案例库建设现状及存在问题分析
在多年的软件测试课程教学过程中,不少教师致力于构建一个用于实践教学的案例库,取得了一定的效果。深入调研后我们发现,目前已有的软件测试教学案例库现状如下:①案例来源多样。案例库中的素材或者改编自教材中的示例程序,或者由任课老师自己构造设计,或者来自同行的贡献。②案例覆盖知识面狭窄。这些案例大多仅覆盖了软件测试领域的部分知识点,且可选案例数量较少。③案例与科学研究关系松散。很难从案例中提炼出科学问题,供任课老师深入开展研究。④案例很少迭代改进。案例库在教学过程中及每轮教学结束之后被束之高阁,下一轮软件测试课程教学大多还是基于同样的案例。
分析课程教学中的案例可以发现,这些案例虽然可以初步满足部分知识点的实践教学需要,但结合知行合一的教学目的及新工科的专业建设要求,普遍存在如下问题。
(1)案例库覆盖的知识点零散,缺乏系统性。国内高校开设软件测试课程起步较晚,课程使用的案例建设尚处于初级阶段。在实践环节,教师和学生缺乏统一的案例库建设指导框架,只能采用分散的案例以覆盖各部分知识点。这种实践教学方式不利于学生领会软件测试的核心理论和方法,也不利于培养学生实践中的系统化思维能力。
(2)案例教学目的单一,案例内容与企业实际测试需求脱节。多数高校的软件测试教师是博士毕业后直接到高校工作,这部分教师有坚实的理论基础,但普遍缺乏IT企业工作背景[1]。这导致教师在软件测试课程的教学上表现为两种倾向:一是侧重讲授课程基础理论知识以及传统的软件测试方法;二是在课程实践安排上侧重于已有的代码案例。这些案例主要来源于教材或参考资料的示例程序,尽管这些重复使用的案例具有一定的代表性,但由于教材及参考资料的滞后性,多数案例已与现阶段的企业实际软件项目测试需求大不相同,学生很难得到身临其境的实践体验。
(3)案例教学组织与教师的科学研究关联松散。软件测试课程致力于向学生传授测试方法和技术,这些方法和技术能直接解决现实软件开发过程当中的问题。实践这些方法和技术的过程本身便是软件开发(即测试脚本开发),同样面临软件质量保障问题,同样需要满足测试脚本的质量保障需求。高校中普遍存在着重视科研、轻视教学的现象。建设教学案例库需要耗费大量人力,而教师面临着科研压力,因此在课程教学的案例建设上投入的精力就受到制约。
2 课程教学案例库设计思路
科学地选取企业界的软件开发数据作为软件测试案例素材并开展教学设计,合理组织案例教学过程,提出科学问题,然后结合教学过程数据,探求科学问题的答案,形成一套行之有效的“产学研”融合的案例教学方案。设计思路如图1所示。
图1 “产学研”融合的案例教学方法
图1中,来自IT企业的软件源代码、测试用例集、缺陷报告等构成软件测试课程教学的第一手素材。这些来自产业一线的真实素材,反映了软件质量保障中的真实需求。基于这些真实素材加以抽象建模,构建出教学案例库,从而便于开展案例教学。在教学过程中,以“软件工程知识体系指南(SWEBOK V3.0)” 中与软件测试紧密相关的两个知识域( “软件测试”“软件质量保证”)为理论基础[4],以软件测试思维导图为教学路线图[5],结合新工科背景下软件实践能力培养要求,组织实践教学[6]。教师在教学的同时,对实践教学进程进行跟踪。组织学生作为测试用户,度量学生的行为数据,学生的活动轨迹,敏锐地发现具备挑战的科研问题,包括产业实践问题、理论学术问题、实验科学问题等,并利用这些数据更好地解决科研难题,做到IT产业、软件教学和教师科研的“产业、教学、科研” 融会贯通,从而更好地带领学生通过实践接触到一线IT企业,理解企业的需求;另一方面,教师可以根据在教学中发掘的科学问题,进一步设计教学组织并收集教学运行数据,深入探索并解决上述研究问题。
2.1 产业界觅素材
软件测试技术重在实践。将来自IT产业的软件项目作为测试课程教学的实际案例,同时选用目前软件企业的测试人员使用的主流软件测试工具搭建测试环境。学生们在学习软件测试理论的同时,借助课程搭建的实践环境,运用常用的测试工具,针对现实的测试需求,基于来自企业的真实案例,开展习得性训练,切实掌握软件测试方法和技术,从而真正理解和认可软件测试的价值。
为了获得好的产业素材,教师平时要注意建立和加强与软件企业的联系。途径如下:首先,教师可以参与软件企业的软件开发过程,特别是参与软件项目测试环节;其次,教师也可以以技术顾问的身份,参加到软件企业的测试团队中去。通过这两种方式,教师可以获取到企业当前正在开发的软件项目的资料,征得企业同意,脱敏后作为教学案例使用;第三,如果教师从身边的企业获取素材有困难,还可以从开源网站(如GitHub等)下载一些已有的开源软件作为案例库建设素材。
此外,我们目前正尝试探索一条更为有效的IT企业与学校合作道路。通过与IT企业合作,引入企业正在开发的软件项目,并将部分测试任务打包,在测试教学实践环节,交由在校大学生完成相关测试任务。通过这种校企合作,巧妙化解测试教学案例库建设的素材来源困境。
2.2 教学设计与组织优化
软件测试是一门实践性很强的课程,这决定了课程教学的实践环节设计极具挑战性。一方面,软件测试的研究对象是软件,另一方面,测试人员设计的测试脚本也是软件,测试用例也需要测试人员另外设计。此外,测试过程还需要构建测试运行环境。例如,可能会使用到一些测试工具,这些工具同样需要配置。
一般而言,来自IT企业的素材并不能直接作为教学案例使用,需要脱敏后根据教学要求加以抽象、提炼。一般而言,实际的软件项目往往规模巨大,学生要在短时间内完整理解软件非常困难,更不必说去测试该软件项目。此时,教师可以选择实际软件项目的一部分代码,辅助相关说明文档,并进一步描述测试需求。学生在文档资料的帮助下,理解待测软件功能、性能等情况,依据测试需求开展实践训练。特别是对于一些企业正在开发的软件项目,教师可以引导学生同步地参与到软件项目的开发过程中去,分解部分测试需求,让学生在真实项目背景下,通过实践练习,掌握软件测试的实战方法和技巧。
对于课程实践环境使用到的软件测试工具,则建立工具仓库,辅助相关的工具教学文档、教学视频和简单练习素材等,让学生可以在最短的时间内,通过自学掌握软件测试工具的使用方法。
2.3 教学过程发现研究问题
软件测试的教学目的是让学生掌握已有的知识,包括软件测试理论、方法和技术。这些知识往往是研究人员在解决软件开发实践问题的过程中不断总结提升获得的。高校教师一方面承担着教书育人的重任,另一方面还承担着学科前沿的科学研究任务。因此,高校教师应具备敏锐的学术敏感性和洞察力,要擅长从日常教学工作中,发现、提炼学术研究问题,最终为所在学科的学术科研服务。
在教学过程中,将学生视为软件案例的用户,收集学生实践活动的数据,观察和分析学生的行为,提出更高层次的学术研究问题作为研究目标。并据研究目标,调整和组织学生参加新的实践活动,同样收集用户行为数据,分析这些数据,探索、研究问题的答案。
通过上述办法,从产业界获取案例素材,加工整理后作为实践教学案例库,在教学过程中及时发现新的研究问题,并调整或优化已有的教学案例教学方案,收集学生的实践活动数据,探寻科研问题的答案,从而形成一条“产学研”融合的软件测试教学实践之路。
3 课程教学实训平台构建
与普通初等教育目标不同,高等教育专业课程教学具备两个特征:一方面是教会学生掌握已知的专业知识。一般通过老师讲解,学生实践去掌握这些知识;另一方面,高等教育还有一项更为重要的目标,就是引导师生共同发现专业问题,并共同探索科学问题的解决之道。这两个特征决定了在设计软件测试专业课程实践环节时,既要考虑让学生掌握基础的软件测试理论、方法和技术,又要考虑便于教师和学生利用实践平台,开展专业问题研究。图2展示了软件测试课程的实训平台的设计要素。
图2 软件测试案例实训教学平台架构
图2从数据层、工具层和用户层描述了软件测试实训平台的架构。其中①数据层主要解决案例库的构建和教学进程数据的跟踪记录。实训案例主要来自IT企业开源或共享的项目代码、测试用例集、缺陷报告等;教学进程数据主要来自工具层收集的用户行为、软件行为数据等。软件测试知识及项目领域知识主要用于为工具层的数据分析过程提供理论依据。②工具层主要提供了软件测试各阶段的常用工具及测试脚本,还提供用于跟踪用户行为、软件行为的工具,此外,为了探索软件测试相关的科研和教学问题,还提供了一组数据分析工具。③用户层主要面向3类用户的需求。IT企业提出测试任务需求、技术支持需求等;教师和学生一方面需要学习专业课程的理论和实践知识,另一方面,需要就教学过程中产生的科研和教学问题展开探索。
4 “产教研”融合的案例库构建实践
4.1 收集的产业素材
根据上述案例库构建思路,可以选择学生熟悉和容易理解的软件产品作为测试对象,随后对实际的软件产品进行改造,以方便测试课程的实践教学。此外,为了让学生更容易使用,有必要编写相应的说明文档,如软件介绍、测试需求规格说明等。
例如,我们在构建移动应用测试案例库的时候,选择“去哪儿”“途牛”“驴妈妈” 等移动应用,下载了安装包之后,对其进行插桩,然后根据课程实践环节的不同目标,如功能测试、性能测试等,人工编写相应的测试需求文档;对于要编写测试脚本的任务,事先给出脚本模板和脚本规则说明文档。需要说明的是,对安装包的插桩是为了收集数据用于后续的科学研究使用,对移动应用测试任务本身并无影响。此外,除了插桩可以自动进行之外,软件介绍、测试需求两个文档需要教师实现针对每个案例分别编写,这些工作需要耗费大量的人力。
4.2 教学的组织
教学组织以MoocTest平台为基础,集成了开发者测试(单元测试)、移动应用测试、Web功能测试、性能测试等教学任务。教师按照教学进度需要,有计划地布置学生练习或考试。目前,开发者测试作业或考试可以实现全自动的评分,后几种类型的测试可以实现自动脚本判分和人工阅读测试报告结合的组合判分。
例如,在开发者测试练习或考试中,教师事先设置判分准则,如计算分支覆盖率作为评分依据,则若学生设计的测试用例达到分支覆盖90%,则学生可以得90分。教师还可以将缺陷检出率、缺陷检出速度等作为评分准则,更科学地综合评判学生的实践能力。此外,还可以在考试的过程中,给学生实时的反馈信息:如已经覆盖的分支,已经检出的缺陷,依据统计错误定位技术预测出的可疑语句等,从而可以跟踪学生在这些引导信息下的软件测试行为、程序调试行为等。
4.3 研究问题提出及解决办法
高校教师普遍存在科研的压力,需要不断提出学术研究问题并通过理论分析和实验探索予以回答。在教学过程中,及时发现研究问题,并在组织教学的过程中安排相应的实验、收集相应的数据,可以将科研和教学更好地融合。
例如,在开发者测试练习或考试中,我们发现机器自动生成的测试用例初期可以很快地达到约70%的覆盖,而人工设计测试用例初期得分普遍不如机器。我们就可以跟踪分析测试人员设计测试用例随时间变化的特征,并将这些用例与机器自动生成的用例进行对比,从而研究人工设计测试用例特征;此外,还可以研究测试用例覆盖随模块分布特征。除此之外,在移动应用测试中,我们可以对学生提交的测试用例(包括测试脚本)进行分析,研究对于移动应用而言,测试用例覆盖率与缺陷检出率的关系。
5 结语
软件测试作为一门专业基础课程,在实践教学组织上注重实践性,通过选择IT企业的真实项目作为实践素材,加工整理后作为教学案例;同时,在教学组织上重视实践平台建设,注重提高教学反馈自动化程度。此外,重视科研和教学的结合,注重在教学中发现学术问题,在教学中收集学生的实验数据以分析回答上述科研问题。下一步的工作是改进课程案例库的组建方式,应用版本管理等工具提高自动化程度,同时对课程实验平台进行改进,完善数据跟踪能力及提高平台的兼容性和灵活性,进一步融合“产教研”3个环节,最终实现更有效地培养软件测试人才。