以赛促学,实战演练,全面提升学生软件工程综合素质
2019-08-11李志博周刚杨奎武侯雪梅廖琪
李志博 周刚 杨奎武 侯雪梅 廖琪
[摘 要]软件工程学科课程体系建设需要保证学生知识结构完整性与课程知识体系先进性,兼顾学科发展与学生综合素质能力的培养。文章探讨结合软件工程学科课程理论抽象、实践性强的特点,在实施全方位教学方法改革的同时,督促学生积极参与学科相关竞赛,以赛促学,实战演练,全面提升学生软件工程综合素质能力。
[关键词]软件工程学科建设;以赛促学;实战演练;专题培训;软件测试大赛
[中图分类号] G642 [文献标识码] A [文章编号] 2095-3437(2019)08-0066-03
软件工程学科是一门综合性、实践性强的学科,对培养学生的工程思维能力、实践能力、创新能力、沟通能力和团队合作精神具有重要作用[1-2]。软件工程学科课程具有以下特点[3]:(1)理论抽象。因为软件工程中的核心技术和开发原理均来源于实际软件开发,经提炼形成原理和方法并引入课程。(2)实践性强。因为软件工程是从工程的角度讲述软件开发与维护的原理、技术和方法。实践和理解相结合的融会贯通对于学好此类课程非常重要[4]。
一、软件测试课程的教学现状
软件测试是软件工程课程中的一个部分,内容涉及的知识点多而繁杂且概念抽象,测试标准和规范类的教学内容偏多[5]。由于缺乏软件测试经验,学生普遍认为课程内容抽象枯燥,因而学习兴趣不浓[6]。
1.教学内容理论性较强,难以调动学生学习主动性
课程内容抽象,包含大量软件测试的概念、方法、技术和规范,大多数学生没有软件项目的实际开发经验,课程内容的概括性与抽象性增加了学生对课程内容的理解难度。
2.传统教学方法不能充分激发学生的求知欲
基于多媒体的概念、理论和测试方法的讲授会让学生缺乏对课程内容的感性认识[6],从而难以积极思考如何在学习中将理论知识运用到实践当中,这就影响到其学习兴趣。
3.缺乏测试方法和技术案例的应用
软件测试课程具有很强的实践性和灵活性,学生只有充分参与实践才能熟练掌握软件测试的基本方法,了解软件测试的具体流程,锻炼灵活应用知识来解决问题的能力[7]。实践教学在整个课程中占一定比例,内容是较简单的教学案例,但这些实践案例是理想化的,与实际的项目案例相比,在复杂性和规模上还存在很大的差距。
笔者针对教学过程中发现的问题,对软件测试的教学内容及教学方法等方面进行了较为深入的探索与研究,在实施全方位教学方法改革的同时,督促学生积极参与学科相关竞赛,将软件测试理论教学与全国大学生软件测试大赛相结合,以赛促学,实战演练,通过理论强化、大赛专题培训、实战演练等方式,激发学生的学习兴趣,全面提升学生的软件工程综合素质。
二、构建具有完整性与先进性的软件工程课程体系
要系统、规范地培养软件工程人才,首先要保证软件工程课程体系的完整性与先进性。由ACM和IEEE/CS联合工作组制定的“软件工程知识体”SWEBOK(Software Engineering Body of Knowledge)[8],吸引了来自世界七十多个国家和地区的著名大学、软件企业和研究院所参加,集中了软件工程领域众多科学家、教授的智慧和期望。
软件工程知识体把软件工程划分为软件需求、软件设计、软件构造、软件测试、软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量和软件工程职业实践等知识域。
软件工程知识体同时给出了作为软件工程学科知识领域的相关学科,包括认知科学和人的因素、计算机科学、计算机工程、管理和管理科学、项目管理、系统工程和数学。软件工程知识体为确定软件工程的学科地位打下基础,是软件工程教育的里程碑。制定课程体系时遵循软件工程知識体,才能保证课程体系的完整性与先进性,引导学生构建合理、全面的专业知识结构。
三、采取灵活有效的教学方法,打牢学生的理论知识基础
笔者根据软件工程学科特点,对多种教学方法进行了探索,包括研讨分析教学法、项目驱动教学法、激励教学法、岗位实践教学法。
1.研讨分析教学法
为促进学生对专业知识的掌握和深入了解当前国内外专业领域的学术研究情况,教师在实际教学过程中,可在对基本教学内容进行讲解后,在课堂内开展讨论式、分析式教学[8]。教师提前安排学生查找相关研究方向的国内外学术论文和其他资料,学生制作课件并在课堂上讲解,教师和其他学生对学生的讲解内容和过程提出质疑并进行集体讨论。这种研讨式的教学模式,充分调动了学生的主动性和积极性,有利于培养学生发现问题、提出问题、解决问题的能力。
2.项目驱动教学法
为了进一步促进学生对知识的掌握并提升为岗位适应能力,可开展项目驱动教学[9-10]。根据学生的基本情况和个人特点进行分组,各组学生自主选择创新型题目开展实践活动。学生要提交项目实施计划、实施方案及最终的作品。教师对学生项目进行全程跟踪和方向性指导,最后根据成果和组织过程给予评分。项目驱动教学法能够有效促进学生在项目中的交流、合作,培养团队合作能力,提升实践能力和未来岗位的任职能力。
3.激励教学法
教师在教学过程中,请来相关专业的高年级研究生、业务人员开展专题讲座,在职业规划、特长培养、未来发展、行业现状等方面与学生交流,提前为学生讲解单位、生活、工作中遇到的问题和解决方法,对学生学习和能力培养进行激励,传递正能量,促进学生对自身的认知和对未来的把握。激励教学法有助于学生合理剖析自我,提升责任意识、集体意识以及爱岗敬业的主动性,为其走上工作岗位奠定良好的心理基础。
4.岗位实践教学法
在教学过程中,教师可积极鼓励学生到专业对口的用人单位进行实践学习和课题攻关[11],由业务单位的指导老师对学生进行与业务相关的专业指导。通过面向用人单位的岗位实践教学方法,让学生提前适应今后的岗位要求,提升岗位任职能力。在业务单位指导老师的帮助下,学生将理论知识转化成实践能力,填补理论和实践之间的鸿沟,完成从校园学习到岗位工作的平稳过渡。
四、以赛促学,实战演练,全面提升学生软件工程综合素质的实践性探索
软件工程学科课程理论抽象、枯燥,仅通过理论知识的讲授,难以调动学生的学习积极性。通过鼓励学生参与相关学科竞赛[12],用理论知识指导实践应用,让竞赛激发学生的兴趣和挑战其斗志,使其学习由被动变为主动[13]。
我院教师积极组织学生参与学科相关竞赛,如ACM国际大学生程序设计竞赛、全国大学生软件测试大赛、“泰迪杯”全国数据挖掘挑战赛、CCF大数据与计算智能大赛等,通过以赛促学、实战演练的方式,全面提升学生的软件工程综合素质。
随着软件规模的增大、复杂性的增加,软件质量已经成为软件工程行业中的关注点。软件测试是软件质量检测手段。软件测试涉及的内容烦琐,既包括软件测试方法和技术,又包含软件测试规范和体系,而且课程知识抽象,内容覆盖面广,理论知识较枯燥[14]。通过将其与全国大学生软件测试大赛紧密结合,使学生掌握软件测试中的基本理论、方法和技术的同时,培养学生较强的实践动手能力,激发学生学习软件测试的兴趣,增强学生的软件质量意识。
1.软件测试大赛
2016年首届“全国大学生软件测试大赛”[15]由教育部软件工程专业教学指导委员会、中国计算机学会软件工程专业委员会、中国软件测评机构联盟、中国计算机学会系统软件专业委员会和中国计算机学会容错计算专业委员会在南京大学联合举办。大赛旨在提高大学生的软件质量意识,增强其软件测试能力,深化软件工程实践教学改革。大赛个人赛分为以下四个分项赛。
(1)开发者测试:大赛组委会提供来自开源社区的Java程序代码,在慕测WebIDE或者Eclipse客户端完成JUnit测试脚本。以分支覆盖率和Bug检测率作为评分标准。
(2)移动应用测试:大赛组委会提供来自企业的待测移动应用和测试需求,在慕测的WebIDE或者Eclipse客户端完成Appium测试脚本。Appium脚本的测试需求对象覆盖率和众包测试的Bug检测率为评分标准。
(3)嵌入式测试:大赛组委会提供基于互联网的模拟嵌入式测试任务,对模拟嵌入式应用程序进行基于工具的自动化黑盒测试,在慕测WebIDE或者客户端完成ETest测试脚本。使用ETest作为测试环境,被测件为嵌入式教学工具箱中的嵌入式软件。
(4)Web安全测试:大赛组委会提供一系列不同知识点的Web安全测试靶机,参赛选手通过解题获得相应题目中的flag(旗标文件),并提交至评分系统,评分系统审核确认flag正确后自动将积分传递给选手,选手以此获得相应的分值。根据赛题的得分点和得分时间综合计算比赛成绩。
软件测试大赛虽然以软件测试为主题,但仅以软件工程课程中所涉及的软件测试内容来备战是远远不够的。传统课程教学重点在于传授理论知识,是基础部分,比赛考查的是专项的实战能力,是升华部分。因此,要结合学生特点以及软件工程课程的实施情况,制订紧贴竞赛实战、提升学生全面测试能力的方案。可分别从理论强化、专题培训、实战演练等方面开展针对软件测试大赛的专项能力培养,将基础理论与实际比赛案例相结合,以此调动学生对课程的学习兴趣和学习积极性。
2.强化理论
软件测试大赛虽然注重对学生测试实践能力的考查,但软件测试理论知识是基础,因此要强化理论基础,具体包括以下几方面。
(1)基础理论:软件测试基本原理、软件质量模型、验证与确认、错误、失效、缺陷、软件测试、软件调试、测试用例、测试用例集、测试充分性、测试脚本、测试流程(单元测试、集成测试、系统测試、验收测试)。
(2)测试用例设计方法:黑盒测试(等价类划分、边界值分析、错误推测法、场景分析法、因果图法、判定表法、正交试验法、功能图法)、白盒测试(基本路径法、逻辑覆盖法、循环覆盖、Z路径覆盖、控制流覆盖、数据流覆盖)、静态测试、动态测试等。
(3)测试用例编写:测试用例标识、测试用例类别、前置条件、测试步骤、测试输入、预期输出结果等。
软件测试基础理论部分以相应的测试案例为授课背景,增加学生对软件测试的感性认识和学习兴趣,让学生形成分析测试需求、设计测试用例、发现缺陷、分析缺陷并提交内容明确且有效的缺陷报告的思考模式。
3.专题培训
由于软件测试大赛的个人赛由4个分项赛组成,每个分项赛有各自考查的测试类型及对应的测试工具,因此在学生掌握基础的测试理论之后,便可进行每个分项赛的专项练习。每个分项专题主要包含以下知识点。
(1)开发者测试:java基础、junit测试、单元测试、测试用例设计、逻辑覆盖准则、变异测试(用于评估测试用例集测试充分性)、mujava变异测试、PITest变异测试。
(2)移动应用测试:Selenium、Appium自动化测试框架、UIAutomation、众包测试。
(3)嵌入式测试:Python基础、嵌入式操作系统基础、嵌入式硬件基础、嵌入式软件测试基础、ETest测试实战演练——测试环境搭建(新建测试方案、构建仿真模型、编写接口协议、配置规划目录、设计测试脚本、设计测试监控、测试执行及结果分析)、测试需求分析、测试用例设计、测试脚本编写、测试运行与调试、bug报告。
(4)Web安全测试:Web漏洞扫描、SQL注入、程序逆向、漏洞挖掘、Web渗透、加密解密、数据隐藏、远程利用、Appscan、Wvs、Bursuite等。
4.实战演练
软件测试大赛的选题都是来源于真实的企业案例,充分利用大赛预赛及往年赛题,学生可以熟悉比赛环境及赛点,并通过分析赛题测试需求,在慕测平台[15]用慕测WebIDE模拟参赛,进行实战演练。这种实战演练的方式更能激发学生的求知欲,锻炼其测试实战能力。
借助慕测平台的练习题功能,教师从题库中选择相应的分项赛练习题(题库中包含有往届的分区赛与总决赛题目),建立不同分项赛的练习群。学生选择进入对应分项赛的练习群,自主模拟练习。同时,教师可以分析学生的练习情况,并对其中的常见失分点进行分析讲解。
慕测平台可以针对每个分项赛的学生进行模拟出卷,学生需要在模拟答卷时间内下载模拟案例题目,分析测试需求、配置测试环境、设计测试用例、编写测试脚本、执行测试、针对需求判定测试结果、及时发现缺陷,最后还需提交详尽的测试用例设计报告及缺陷报告。学生通过模拟比赛,完整体验了比赛的全部流程,提高了综合测试能力,增强了参赛信心。
五、结语
构建具备完整性与先进性的软件工程课程体系,能使学生建立合理、全面的专业知识结构。根据软件工程学科课程理论抽象、实践性强的特点,提出了全方位教学法,打牢学生软件工程学科课程基础。以赛促学方法,从理论强化、专题培训、实战演练等方面开展针对专项能力的培养,有利于全面提升学生的软件工程综合素质。
软件工程课程体系中的软件测试课程内容丰富、知识量大、实践性强,可结合全国大学生软件测试大赛,将软件测试基础知识灵活应用于比赛项目中。学生通过参赛获得了对软件测试的深层次理解,学习效果显著。
[参考文献]
[1] 王秀珍,汪群山.关于软件工程学科建设的思考[J].中国校外教育,2012(21):157+168.
[2] 罗钟铉.把准双一流建设坐标 推进软件工程学科发展:大连理工大学校长助理罗钟铉教授专访[J].计算机教育,2016(11):1-7.
[3] 岑宇森,熊芳敏.软件工程课程项目教学法研究[J].计算机教育,2009(21):83-85.
[4] 涂飞,张小川,王森.软件工程专业学生职业素养培养研究与实践[J].教育教学论坛,2018(11):136-138.
[5] 郑炜,王文鹏,胡德生,等.基于MOOC的软件测试课程教学建设[J].计算机教育,2017(1):31-37.
[6] 王法胜,熊耀华,康玲,等.TOPCARES-CDIO引导的软件测试课程设计[J].软件工程,2016(10):60-62.
[7] Software Engineering Body of Knowledge(SWEBOK) | IEEE
Computer Society[EB/OL].[2018-09-13].https://www.computer.org/education/bodies-of-knowledge/software-engineering#__NO_LINK_PROXY__.
[8] 李雯睿,张鹏程,杨种学.基于主动学习策略的软件测试教学方法初探[J]. 教育与教学研究,2012(8):54-57.
[9] 林若钦.项目驱动软件测试实验教学改革的意义与方案探讨[J].价值工程,2017(3):226-228.
[10] 陈翔,鞠小林.卓越计划驱动下的软件测试技术课程教学改革[J].计算機教育,2013(13):14-17+21.
[11] 杨秋辉,洪玫,郭兵,等.软件测试课程实践教学改革研究[J].计算机教育,2016(2):106-109.
[12] 蒋湘涛,辛动军,黄辉,等.学科竞赛促进软件工程专业实践教学模式探索[J].软件工程,2018(4):58-60.
[13] 卜令瑞,陈静.基于技能大赛的《软件测试》课程设计[J].信息技术与信息化,2017(11):32-34.
[14] 李绘卓,唐峻,范勇.基于敏捷测试的软件测试实践教学[J].计算机教育,2017(3):155-159.
[15] 2018全国大学生软件测试大赛[EB/OL].[2018-09-13]http://www.mooctest.org.
[责任编辑:庞丹丹]