杨彬 吕刚 陈圣兵
摘 要:针对应用型大学学生软件测试能力难以满足企业实际需求这一情况,分析当前国内软件测试人才需求现状,指出导致高校人才培养与企业需求脱节的原因。以软件测试课程为例,从教学内容、教学方法、课程实践安排等层面,阐述软件测试课程教学改革思路,给出具体方法和实施途径,探讨能力导向的软件测试应用型人才培养模式。
关键词:应用型大学;软件测试;教学改革;能力导向
0 引 言
软件测试作为软件质量保证的一种重要手段,受到学术界、企业和教育界的高度重视[1]。作为当前计算机领域的一个热点研究方向,软件测试理论不断丰富和发展;作为一门课程,国内外众多高校都将软件测试作为计算机专业的一门专业核心课程;作为一种职业,软件测试工程师的需求缺口巨大。各大IT公司都设立了软件测试与质量保证部门,并设置专门的职业晋升通道。据国内各大人才招聘网站数据显示,目前国内软件测试人才的需求缺口在30万人以上。软件测试工程师的职业价值、发展前景得到了前所未有的提升。
尽管各大高校都开设了软件测试及质量保证相关课程,但培养出的学生普遍难以适应企业对软件测试岗位的能力需求[2-4],高校人才培养与企业实际需求脱节严重。究其原因,传统的软件测试课程重理论知识讲授,轻测试实践和能力培养,导致学生动手能力较弱,软件测试能力素养不足;而软件企业要求测试人员除了具备软件测试基本理论外,还要具备一定的软件开发、测试用例设计、测试管理和测试文档撰写等能力,熟悉软件开发和软件测试流程,具有快速学习、快速掌握新技术和应用新工具的能力。
1 软件测试课程教学存在的问题
1)存在认识误区。
受传统观念影响,学生存在“重开发,轻测试”的认识误区,认为只有学习成绩差或编程能力差的人才会选择软件测试,甚至部分计算机专业的教师也持有同样观点,在教学过程中未能正确引导学生认识软件测试课程,导致学生未能正确对待本课程的学习。
2)教师教学重理论讲授,轻实践能力培养,理论与实践的最后一公里尚未打通。
理论课程教学侧重软件测试理论、方法、技术和体系的讲授,贪图理论体系的完整性,实践教学占比較少。由于理论与实践无法有效衔接,学生的测试能力存在严重欠缺。
3)实验环境欠缺。
软件测试能力的培养需要学生熟练掌握常见的自动化测试工具,否则很难胜任软件企业的测试工程师工作。目前,高校在自动化测试工具的选择上存在困境,如何购买和选择当前的主流自动化测试工具,使用实际工程项目,培养学生的实践动手能力,对高校而言是一个很大的挑战。此外,随着Web技术的飞速发展,重要的业务系统需要进行压力测试、容量测试、负载测试等性能测试,对测试环境提出了更高的要求。
4)实际工程案例缺乏。
课程讲授的理论知识只有经过实际工程项目的应用才能实现理论与实践的融会贯通。尽管公开出版的有关软件测试的教材很多,但翔实的、适用于课程教学的实际工程项目案例还未多见。仅仅使用教材上的实验案例无法让学生掌握软件测试的基本技术和技能,传统的基础性和验证性实验项目,难以培养学生的分析问题能力与解决问题能力,无法适应学生实践能力培养的需要。
5)缺乏具有工程实践背景的师资。
具有较强理论知识和丰富项目经验的师资队伍,是保障软件测试课程教学质量的前提。尽管高校教师大部分都具有博士学位,具有较深的理论知识,但由于缺乏企业工作经历和实际工程背景,导致软件测试课程教学质量无法得到保证,学生的动手实践能力无法得到有效提高。
2 能力导向的软件测试课程教学改革
针对传统软件测试课程教学存在的问题,软件测试课程教学改革应该理论与实践并重。传统的软件测试课程通常侧重测试理论内容的讲授,注重测试理论体系的完整性,强调基础宽泛、覆盖知识面广。这种课程内容组织比较适合学术型和研究型人才的培养,不能满足应用型人才培养的需要。为了提高学生的测试能力,软件测试课程内容重组的基本思路应该是以企业实际需求为导向,结合学校办学定位和专业人才培养目标,注重测试技术、自动化测试工具、测试流程、测试文档撰写和测试管理等内容的讲授,使用实际企业工程项目,让学生在实践过程中贯通理论知识,培养软件测试能力。
下面以合肥学院为例,从教学内容重组、教学方法改革、实践教学设计等方面,阐述软件测试课程教学改革举措。
2.1 教学内容重组
合肥学院自成立以来,坚持“地方性、应用型、国际化”的办学定位,借鉴德国应用科学大学办学经验,构建了具有鲜明特色的应用型人才培养体系,从传统的知识输入为导向的课程体系转变为以能力输出为导向的模块化教学体系[5]。
软件测试作为软件工程专业的一门专业核心课程,自2010年起开展了模块化教学改革,围绕应用型人才培养的关键要素,重组课程教学内容,由“以知识为本位”过渡到“以能力为导向” 的课程教学,变“知识输入”为“知识输出”。软件测试课程教学内容重组基本思路见图1。
学校软件测试模块课程构建的指导思想是“以企业岗位能力需求为导向,以专业工程认证标准为纲,基本覆盖教指委标准”,注重学生软件测试工程实践能力的培养,实现高校人才培养与企业需求的无缝衔接。通过走访科大讯飞、科大国创、文思海辉等80余家软件企业,了解企业实际需求,明确了测试工程师、高级测试工程师、测试经理等相关岗位的能力要求;通过实地参观和深入座谈,了解测试执行、测试设计、测试分析等不同岗位职责要求;通过调研走访国内外兄弟院校,并与德、英、美等国合作院校及专家进行交流,最终确定了软件测试各岗位需要的专业能力,包括设计测试用例的能力、自动化测试工具能力、静态代码分析能力、实施软件测试能力、测试文档撰写能力、测试管理和测试改进能力以及质量分析和软件过程改进能力等九大一级能力;在此基础上,依据专业人才培养标准和毕业要求,确定了本模块课程对毕业要求各指标点的支撑,根据能力要求和课程的前后关系,结合软件工程专业教指委标准的SE-VAV、SE-QUA和SE-MGT等知识领域要求,对每个专业能力进行要素分解,最终落实到具体的知识点,实现课程教学知识的重组,确定本模块课程对毕业要求有所支撑。重组后的教学内容知识点及其与专业能力、毕业要求达成度指标点的对应关系见图2。endprint
2.2 教学方法改革
应改变传统的教学方法,综合运用项目驱动式、任务驱动式和翻转课堂式多种教学方法,使学生掌握软件测试的整个过程,将理论与实际密切结合,加深学生对知识的理解。在教学过程中,注重与学生的交流、沟通和互动,激发学生的学习兴趣。教学使用的项目均来自教师亲自参与的企业生产实践、教师产学研课题以及我校历年来校内企业工程实训使用的工程项目。项目规模包括小、中、大各种类型,每个项目都有从需求分析、系统设计、编码实现和系统测试等各个阶段的过程文档及源代码,以及最终部署的软件系统。教师在教学过程中,针对具体的理论知识,选择规模和难度适宜的项目,采用项目驱动式教学方法,引出具体知识点的介绍。例如,在讲授动态白盒测试技术时,教师选用“学生成绩管理系统”这一学生易理解的项目作为切入点,介绍项目需求和系统设计,展示该系统V1.0版本的源代码,引导学生思考如何设计测试用例进行充分测试,随后讲授不同的白盒测试用例技术,并逐一在课堂上操作演示。在讲授静态白盒测试方法时,教师提供源代码和评审规程,模拟非正式代码评审会议,让学生依据评审指南和核对表,有针对性地发现代码中存在的数据声明、计算、引用、参数等错误,加深对评审方法的理解。通过“项目引入—诱发思考—知识点讲授—教师现场演示”的方式,极大地激发了学生的学习兴趣。
此外,在教学过程中,适当引入任务驱动式教学方法,以任务为主线,以学生为主体,教师提供有缺陷的程序代码,要求学生依据需求和设计文档,设计测试用例,使用自动化测试工具对提供的代码进行测试,发现其中存在的缺陷,并提交测试报告。教师对学生提交的测试报告进行点评,结合学生发现的缺陷数量、类型、测试时间耗费等引入测试成本管理概念,实现理论与实践的平滑过渡。
除了普遍使用的项目驱动式和任务驱动式教学方法外,在本模块教学过程中也穿插采用翻转课堂式教学方法。例如,教师要求学生课后自主学习测试驱动的软件开发方法,课堂上教师列举使用测试驱动开发方法求解斐波那契数列的例子,与学生展开充分讨论,解答学生的疑惑,对学生遇到的学习困难,给予有效的指导,帮助学生促进知识的消化吸收。
2.3 实践教学设计
软件测试是一门实践性非常强的课程,实践教学是培养学生测试能力的核心环节。因此,在实验项目设置上,尽可能使用设计型、综合型和创新型实验,减少验证性实验项目。软件测试课程所有的实验项目均选自实际工程项目,由教师从项目库中选取。教师提供项目需求规格说明、需求跟踪矩阵、概要设计、详细设计文档及多版本的程序源代码,依据理论课程进度和学生自主学习进度情况进行合理安排,采取循序渐进的方式,让学生理解问题、思考问题,综合运用所学知识解决问题,完成从测试计划制定、测试用例设计、自动化测试工具使用、测试缺陷管理和测试报告撰写等全过程,将所学知识贯穿整个项目过程中,培养学生的实践动手能力、自主学习能力和创新能力。
学校软件测试模块课程的实验环节为32学时,其中课内实验16学时,课外自主学习16学时。实验设置学生成绩管理系统、员工信息管理系统、网上花店电子商务系统等5个实验项目,依据项目规模和任务要求合理分配实验学时。针对实验项目具体情况,允许学生采用分组的形式完成实验任务,每组1~3人,明确项目小组长,要求分工明确,任务分配合理,杜绝滥竽充数的情况发生。对学生提交的实验报告及各种过程文档,教师会进行集中点评,指出其中存在的问题。
为提高学生的测试能力,学校购买了IMB Rational Quality Manager、IMB Rational Functional Tester、IMB Rational Performance Tester、IMB Rational AppScan等自动化测试工具。本模块课程使用的自动化测试工具见表1。
3 对软件测试课程教学改革的几点思考
3.1 加强师资队伍建设
能力导向的应用型软件测试人才培养对高校师资队伍提出了更高的要求。高校教师只有具备工程实践背景,理解企业需求和软件测试工程师的岗位能力要求,才能更好地培养学生的软件测试能力,指导学生做好测试工作。因此,高校教师既要具备软件测试的理论知识,又要具備软件测试及质量保证的工程化背景。近年来,学校大力加强双能型教师队伍建设,采用“引进来”——从企业引进具备工程化实战背景的高素质人才和“走出去”——鼓励教师去软件企业挂职,深入软件开发、软件测试和质量保证的一线,培养教师的工程素养;同时,学校与合作企业,如科大讯飞、文思海辉、科大国创等软件企业密切合作,聘请企业的资深工程师走入课堂,指导学生做好项目测试工作。
3.2 教学过程评价方式改革
借鉴德国FH模块化教学改革理念,学校软件测试课程打破了传统的课程评价体系,采取“N+2”考核方式。软件测试模块课程的“N”指考核次数,具体为1次过程考核(测验)、1次学习报告和1次项目实验考核;“2”指学习笔记和期末考试。学生的模块课程成绩由课程实验成绩(20%)、学习笔记(5%)、过程考核(25%)和期末考试(50%)组成。对于学生提交的学习报告,采用一对一答辩的方式,由学生介绍学习内容,教师提问,督促学生高质量完成自主学习,避免学习报告流于形式、学习效果不佳的现象。通过采用综合评价的方式,注重学生平时的学习过程和动手操作,有助于更加全面地评价学生的学习效果和能力培养。
3.3 课程持续改进
为最终实现应用型人才培养的目的,学校软件工程专业借鉴卡内基·梅隆大学软件工程研究所的软件过程能力成熟度模型集成CMMI的思想,构建了各模块课程的持续教学改革评价机制。通过跟踪评价教学过程、教学效果考核、实践能力培养以及用人单位反馈等全过程,分析本模块课程对毕业要求达成度各指标点的支持情况,发现教学中存在的不足,形成“自评价、自改进、自成长”螺旋形改进机制,最终实现课程的持续优化改进,为应用型软件测试人才培养提供支撑。endprint
4 效果及评价
通过近几年的课程模块化教学改革实践,学生的学习兴趣和动手能力得到了显著提高,教学效果良好。学生普遍意识到软件测试工作的重要性,对软件测试作为一门职业也有着更深刻的认识。
表2列举了近几年软件工程专业学生对软件测试课程的教学评价情况,表中的数据来自于我校教务处教学质量管理系统。课程结束后,学生登录教务系统,依据教务处制定的各项评价指标,对授课教师的教学进行评价打分。评价阶段结束后,系统依据学生的各项打分情况自动进行加权计算得出。
从学校近几年软件工程专业毕业生就业统计及跟踪回访情况来看,软件工程专业每年有20%左右的学生在相关软件企业从事软件测试工作,绝大部分从事软件测试岗位的学生,经过短暂的业务熟悉之后,能够快速进入岗位角色,表现出良好的职业素养,胜任测试工程师岗位,深受用人单位的好评。
5 结 语
经过近几年的模块化教学改革,学校软件测试模块化课程以能力培养为导向,对课程教学内容进行了重组,综合运用项目驱动式、任务驱动式和翻转课堂式教学方法,重视实践课程教学,改革课程评价体系,注重学生的实践能力培养,取得了良好的教学效果。今后,拟进一步收集教学反馈,对本模块课程进行持续改进。
参考文献:
[1] 聂长海. 关于软件测试的几点思考[J]. 计算机科学, 2011, 38(2): 1-3.
[2] 向军, 王晓芳, 李超. 应用型高校计算机类专业软件测试课程教学改革[J]. 计算机教育, 2016(6): 147-150.
[3] 郭晓梅. 以就业为导向的软件测试教学改革研究[J]. 湖南科技学院学报, 2016, 37(10): 116-117.
[4] 刘敬勇, 黄雪夏, 廖朝辉, 等. 基于“卓越计划”的软件测试课程教学改革研究[J]. 教育教学论坛, 2016 (28): 115-116.
[5] 王晓峰, 许强, 陈圣兵. 基于模块化的软件工程专业教学改革与实践[J]. 电脑与电信, 2015(1): 29-32.
[6] 陳圣兵, 许强, 吴晓琴. 计算机应用型人才培养过程中的模块化教学[J]. 计算机教育, 2012 (9): 52-54.
(编辑:孙怡铭)endprint