基于测试驱动和迭代开发的程序设计教学
2016-06-15邢如意
邢 如 意
(江苏联合职业技术学院 徐州财经分院,江苏 徐州 221008)
基于测试驱动和迭代开发的程序设计教学
邢 如 意
(江苏联合职业技术学院 徐州财经分院,江苏 徐州221008)
摘要:从分析当前程序设计类课堂教学存在的问题入手,阐述测试驱动和迭代开发的相关理论,按照功能演示和需求分析,任务实现技术性分析,制订测试计划,编码实现,功能测试和版本化提交教学过程,讨论了基于这两种程序开发的课程实施方法,通过课堂教学评估曲线来实现课堂教学效果的评价.
关键词:测试驱动;迭代开发;课堂教学
高职软件技术专业程序设计开发类课程的人才培养目标是培养具有一定程序设计理论基础、以实践为主的高级技术应用型人才.教育的重点在于学生的程序设计实践,着重培养学生的分析设计能力和动手能力.因此,在高职程序设计类课程的安排上应先以程序设计基础入手,然后开设实训项目类课程,让学生能通过一门课程的学习实践完成一个完整的项目,进而巩固知识和提高项目开发的经验.
1程序设计类课程教学中存在的问题
程序设计类课程在讲授的同时需要让学生进行实践练习,因此大部分会安排在机房授课,学生虽然能够每堂课认真听讲、作笔记和上机练习,但由于知识点配套练习任务在设计上不够连贯,导致学生对知识点的认知和理解不能形成整体,最终不能达到较好的教学效果.例如,学生在学习C#程序设计课程中“数据访问技术ADO.NET”一章时,由于ADO.NET技术的多样性,大部分教材在编排时通常为每个知识点单独设计练习任务,学生在学习完理论后进行上机练习,如,某教材在编排“增删改”操作时设计了“添加学生信息”的任务,在编排“数据查询”时设计了“查询图书信息”的任务,这种设计导致各知识点的任务较为分散,各任务在知识点和技能点上没有形成联系和连贯性,导致学生在学习时知识不系统,从而影响学生的积极性.
2测试驱动与迭代开发的相关理论
测试驱动和迭代开发是目前常用的软件开发方法.测试驱动开发是指在编写功能代码前先制定测试计划、编写测试代码,通过测试来推动整个开发的进行[1].采用测试驱动开发有助于提高代码编写的质量和提高开发的进度.测试计划和测试代码是编写功能代码的基准,开发者应编写可以通过测试的代码[2].图1展示了常规软件开发和采用测试驱动开发流程的区别.
图1 常规软件开发和测试驱动开发流程
迭代开发也称为迭代增量式开发[3].采用迭代开发方法时,将一个项目的开发工作划分为多个小项目(开发周期),每一个小的项目称为一次迭代.在每一次迭代中都包括问题定义、需求分析、概要设计、详细设计、编码和测试,是一个完整的软件工程生命周期.采用迭代开发可以降低软件开发的风险、快速响应产品需求的变更、保证开发进度和提升软件质量.
本文针对目前程序设计类课程教学中存在的问题,结合测试驱动开发方法和迭代开发方法,以“数据访问技术ADO.NET”章节为例,阐述基于测试驱动和迭代开发在程序设计课堂教学中的实施方法.
3基于测试驱动和迭代开发的程序设计类课程的课堂实施方法
C#程序设计课程中“数据访问技术ADO.NET”在讲解时知识点分为三部分:使用ADO.NET实现数据更新操作、使用ADO.NET实现数据查询操作和数据集DataSet技术.这些知识点之间的连续性不强,彼此之间较为独立.因此在设计各知识点练习案例时以“学生信息管理系统”为例,将三个知识点与“添加学生信息”“查询单个学生信息”和“搜索学生信息”三个业务功能对应,学生每学习完一个知识点即完成对应的功能.采用迭代开发方法要求在每次迭代时都从需求分析入手,一直到上线交付为止.在课堂教学中共分为5个环节,实施过程见表1所示.
表1 课堂实施过程
(1)功能演示,需求分析
以任务驱动方式组织教学,每次课设计完成一个独立的任务.首次讲解知识点前,先演示事先设计的章节贯穿案例——“学生信息管理系统”,向学生讲解系统功能,帮助学生进行功能需求分析,向学生阐述迭代开发思想,让学生明确系统开发的过程将拆分为多个迭代,在学习新知识的过程中逐步开发并完成各个功能模块的设计.
(2)任务实现技术分析
在任务需求分析结束后,采用提问引导方式让学生思考案例任务中关于数据的操作有哪些,继而引出数据表的定义,分析数据表结构.引导学生思考如何将数据更新至数据表,如何查询数据表中数据并显示在界面上.本步骤主要是引出当堂课所讲技能点,引导学生积级思考任务实现的原理,帮助学生理清知识点.
(3)制定测试计划
依据测试驱动的开发方法,在编码实现前编写测试计划.测试计划根据功能需求编写,预先设计好测试路径、测试数据、预期测试结果,并编写测试计划文档.学生编写测试计划的过程也是再次梳理功能需求的过程.
(4)编码实现
每堂课的知识点讲解及学生练习在此阶段完成.迭代开发方法在应用中推荐敏捷开发和极限编程相结合方法,结对编程是极限编程中的一种,因此在教学中可采取结对编程形式并组织学生上机练习.在教学实践中采用结对编程和测试驱动开发模式,学生每两人为一组,编码时一人负责代码录入,一人负责代码设计和错误查找,这种安排方式可有效减少学生在代码编写时的错误及提高代码编写的质量.
(5)功能测试和版本化提交
采用结对方式进行编码.在进行功能测试时,两人进行角色互换,即之前负责监督和代码设计、错误查找的学生负责根据测试计划文档进行测试,另一位学生则辅助测试,填写测试结果.
测试通过后,将本次任务进行版本化提交至教师端.迭代化开发在软件发布上的体现为将每一次发布独立标记版本.在进行“数据访问技术ADO.NET”授课时,将三次任务的版本化分别标记为0.1~0.3,在全部任务完成且经过系统测试后,最终发布为1.0版本.
4课堂教学效果分析
传统的程序设计类课程课堂教学效果和实训类课堂教学效果以学生上机完成率为主要评价方式,学生上机完成率高则表明课堂教学效果好.但在实际教学中发现,单纯依靠学生上机完成率不能较准确地说明学生对知识点的掌握程度,在教学中经常发现学生有拷贝其他同学成果的现象,而这在最后提交内容上教师并不容易区分.
在实施基于测试驱动和迭代开发的程序设计类课程课堂案例教学中总结发现,将学生的上机完成率和学生的参与度结合能够较好地表明课堂的整体教学效果,并且参与度与上机完成率这两个因素是互相关联的,即学生参与程度越高,其上机完成率也越高,反之亦然.
基于测试驱动和迭代开发的课堂教学[4],在实施中学生活动包括:学生编写测试计划文档、编码实现、进行程序测试、完善测试计划文档、补充测试结果、程序版本化提交,每一个活动都需要学生全部投入,因此,根据学生提交的测试计划文档的详细与否、提交代码审查、测试结果的正确性和准确性、程序版本化提交结果等多个因素对学生的参与度进行量化,最终将全班学生的数据汇总取其平均值,并根据数据曲线进行教学效果评估,分析学生在各环节执行上存在的问题.图2是实践教学中获取到的数据形成曲线图,即课堂教学效果评估曲线图.图中的曲线说明了测试计划编写得越详细,测试数据设计越准确、准备越充分,在测试上出现的错误就越少,且大多数学生能够达到此要求.少部分同学偏离了主要曲线路径,说明在课堂上参与和投入程度不足,需要在以后教学中多加关注.
图2 课堂教学效果评估曲线图
5结语
测试驱动和迭代开发在软件开发理论上虽然已经发展成熟,但在软件专业教学上的应用还需进一步尝试和总结.笔者虽经过两个学期的教学和实践获得了较好的教学效果,收获了一些经验,但分析学生接受能力、课堂教学环境等多个内外部因素发现,软件工程理论在软件开发教学的应用实践还有很多地方需要调整.软件技术人才的培养需要结合企业实际需求、开发环境和场景进行改革和完善,广大的教育工作者应该在教学中不断探索软件工程理论与教学的结合点,以便于学生在毕业前能够熟知企业开发场景和流程,提高学生在日益激烈的IT市场中的竞争力.
参考文献:
[1]伍鹏,谢凯.基于测试驱动开发的C语言教学研究[J].软件,2012,33(5):103-104.
[2]陈翔,鞠小林,顾卫江,等.测试驱动开发思想指导下的C++程序设计教学改革[J].计算机教育,2015(1):109-113.
[3]陆悠,奚雪峰,华泽,等.一种项目迭代开发驱动的计算机实践类课程教学方法[J].大学教育,2013(8):55-56.
[4]季一木,刘允,宗平,等.软件迭代开发模型在软件人才培养中的应用研究[J].计算机教育,2013(3):89-92.
责任编辑:吴瑞红
Test-driven and iteractive development-bawed tyeaching of programming designing
XING Ru-yi
(Xuzhou Finance Branch, Jiangsu Union Vocational and Technical Institute, Xuzhou, Jiangsu 221008, China)
Abstract:This study begins with the existing problems in the teaching of programming designing, and describes the test-driven, iterative development and related theories, functional demonstration, requirement analysis, task achieved technical analysis, test planning, coding, function testing and version teaching that should be applied to teaching methodologies. Moreover, the evaluation may be achieved through classroom teaching assessment curves.
Key words:test-driven; iterative development; classroom teaching
收稿日期:2015-10-12
作者简介:邢如意(1982-),男,江苏徐州人,江苏联合职业技术学院讲师,硕士,研究方向:软件工程.
文章编号:1009-4873(2016)02-0057-04
中图分类号:TP312
文献标志码:A