朱忠旭(安徽工贸职业技术学院 计算机技术系,安徽 淮南232007)
项目驱动的软件工程进化式教学方法
朱忠旭
(安徽工贸职业技术学院 计算机技术系,安徽 淮南232007)
将迭代进化的思想引入软件工程课程的教学中,提出项目驱动的进化式的教学方法。该方法以达到实用程度的软件项目贯穿教学过程的始终,根据该软件开发的三次迭代,将教学过程分为三个阶段,各阶段分别采用“教师引导学习、教师指导实践、学生独立实践”的教学方式,使学生对软件工程原理和方法达到从认知到理解再到应用的进化式掌握。
迭代;进化;项目驱动教学;软件工程教学
项目驱动教学思想起源于德国,是一种行为引导的教学方式,即通过组织学生参加项目设计、实现和管理,在项目实施过程中完成教学任务。①钟增胜,许江:《项目驱动教学的实践与研究》,《重庆工商大学学报》2009年第5期,第159-160页。②姜大源:《基于工作过程的课程观》,《中国职业教育》2005年第8期。软件工程作为计算机软件专业的一门核心课程,主要讲授保证大规模软件开发成功的方法和原理。因此,软件工程课程的教学案例项目应与其他课程(如程序设计语言等)所采用的示例有很大不同。在实施项目教学时,必须选择有实用价值且有较大复杂度的开发项目,否则难以实现教学目标。但当选择复杂的开发项目作为教学案例时,如何将理论知识传授与学生工程实践有机结合,循序渐进地提高学生的软件工程理论水平和实践能力,是一个值得探讨的课题。
笔者将当前主流的软件开发思想——迭代进化式开发③Craig Larman:Agile&Iterative Development:A Manager's Guide,北京:机械工业出版社,2006年。,引入软件工程课程的教学过程,结合主流开发过程,采用从教师主导到教师指导再到学生独立完成的三阶段进化式的教学方式,收到了很好的效果。
当前,软件工程这门课程的教学主要采用传统的教学方式,即以老师课堂讲授为主,学生实验课上练习为辅的方式组织教学。教学内容组织及教学示例的设计等方面与学生的学习能力及该课程的内涵要求不太适应。
(一)理论与实践分离
软件工程课程理论多、内容抽象,教学难度大。当前,软件工程课程的教学内容组织方式多为“原理+示例”的形式,即前面若干章节介绍软件工程的概念、基本原理和方法等理论内容,最后介绍一个示例。开发案例讲解往往一带而过,无法体现软件工程原理的实用价值,更无法达到训练学生软件工程能力的目标。这种理论与实践分离的教学模式使学生普遍感到该课程枯燥乏味,难以理解和应用,因此教学效果较差。
(二)教学案例与实际生产过程脱节
当前的软件工程教学中,虽然也引入了一些案例,但这些教学案例往往是孤立的为阐述某一概念和原理而设计的,没有向学生展示完整的软件生产过程,导致学生无法真正体会到软件生产的实际情境。
(一)思想来源
迭代开发是RUP①Philippe Kruchten:The Rational Unified Process:An Introduction,Edition 3,Addison-Wesley,December 2003.②Per Koll等著:《Rational统一过程:实践者指南》,徐正生等译,北京:中国电力出版社,2004年。和大多数现代方法中的关键实践。在这种方法中,开发过程被组织成一系列短期小项目,称为迭代;每次迭代都具有各自的需求分析、设计、实现和测试活动,产生可执行的局部系统。每次迭代都是对系统的持续扩展和精化,随着时间和一次又一次迭代的递进,系统增量式地发展完善,最终成为适当的系统。
这种迭代进化式地完成任务的思路对改进软件工程的教学有很好的指导意义。首先,它符合学生的学习规律。人们对知识的掌握并不是一步到位的,往往有一个从认知到掌握到熟练应用的逐步深化的过程。我们可以按此规律来组织教学内容,制定学生能力培养目标。其次,这种进化式的软件开发思想使得我们可以将大规模的有实际意义的软件开发项目作为教学案例和学生练习项目引入教学中。软件工程的课程特点决定了以简化的小项目作为教学案例或学生实习项目不能很好地说明软件工程原理,训练学生应用软件工程的能力。教学项目必须有一定的复杂度才能显示软件工程这门课程内容对软件开发活动的指导意义。传统的教学方式下,教学项目复杂度的增加使得教学内容难以组织和实施,也不符合学生的学习习惯和认识规律。以迭代进化的方式组织教学案例可以很好地解决这个矛盾。
迭代和进化式开发是当前大规模软件开发普遍采用的方式。软件工程的核心思想之一是通过软件开发过程的管理来保证软件开发的成功,因此教学过程应符合主流的软件开发过程,必须遵循某一软件开发过程来组织教学案例,并将基本原理的传授溶入其中。
(二)软件工程进化式教学过程的构建
该教学方法将教学过程与案例的迭代式开发过程协同起来,以迭代进化的方式组织教学内容,设置学生的能力增长目标。整个教学过程的完成分三次迭代来实现:即基本原理与方法的传授、教师指导下的学生实践和学生自主学习、独立完成案例项目。每一次进化又可细分为初始、精化、构建和交付四个子阶段③同②。,整个教学过程的组织见图1。
图1 教学过程
第一次进化:案例教学。
本课程教学的第一阶段主要结合具体案例进行软件工程基本理论和方法的讲解。本轮教学初始阶段首先介绍软件工程的基本概念、软件生命周期模型及软件开发过程等,在此基础上探讨软件需求分析,引入用例技术,在所使用的案例中挑选一到两个用例进行详细描述,以此描述作为后继教学的需求分析文档。
本轮教学的精化阶段的主要内容是软件的分析和设计技术,包括概要设计、详细设计、UML建模技术等。本轮教学的难点是面向对象的分析和设计方法,这部分内容比较抽象,因此教学时要紧密结合教学案例,向学生展示从用例文档得到软件模型的详细过程。
构建阶段主要讲解软件的实现技术,包括软件编码、单元测试、数据库设计等。
交付阶段主要讲解软件的综合测试技术,包括测试计划的制定、测试环境的搭建、测试的策略选择、测试用例的设计、测试工具的选择和使用、测试报告的书写等。
通过本轮教学,学生基本掌握了软件工程的基本理论,具备了初步的应用软件工程原理解决实际问题的能力,为下一轮教学打下了基础。
第二次进化:教师指导学生对案例项目进行第二轮迭代开发。
本轮教学的目的是加深学生对软件工程原理的理解和应用能力。教学的主体由教师转移到学生,所采用的教学方式是教师指导学生完成本次迭代开发任务。将学生分为若干个小组,每个小组成员为四到五人。教学过程仍然分为初始、精化、构建和交付,教师规定每个阶段的完成时间点,各阶段完成时,每个小组提交本阶段的成果,由教师统一讲评。
本阶段教学中,教师结合项目进展,补充软件项目管理、配置管理、设计模式等知识,以扩展学生视野,加深学生对现代软件技术的理解。
第三次进化:学生独立完成案例项目的第三轮迭代开发。
通过前二轮的教学,学生在掌握了软件工程基本原理的基础上,具备了应用软件工程原理和方法进行软件开发的能力。因此,本轮教学的目标是实现对案例项目的第三次迭代开发,成果为提交一个完整的具有实用价值的项目。本轮教学任务由各小
组自行完成,教师主要起到督促检查的作用。将学生最后提交的系统质量作为评定学生本门期终成绩的主要依据。
我们在实施该教学方法时,选取图书管理系统作为开发案例。第一轮教学所用时间为9周左右,在初始阶段引导学生识别出该系统的主要用例,见表1。
表1 图书管理系统用例表
选择核心用例借阅图书和归还图书作为本轮教学要实现的示例,进行详细描述,为学生演示用例的编写方法。从这两个用例文本出发,讲解如何进行系统分析和设计。UML已成为面向对象设计的有效工具,因此本部分教学中要加入UML的内容。结合两个用例,详细讲解如何创建系统的领域模型。得出领域模型后,如何创建系统的动态模型,进而得到系统的类模型。得出类模型后,使用编程语言进行系统实现,创建数据库,最后进行部署和测试。此轮教学中结合借阅图书和归还图书两个功能的从分析到实现的全过程,进行原理和方法的讲解,教学路线如图2。
图2 教学路线图
第二轮教学以学生练习为主,教师引导为辅,所需时间为4周。教学过程可概括为“所用知识提示+学生练习+集中点评”。 在图书管理系统中,第一轮迭代完成了系统的基本功能。本次迭代中,学生要从余下的用例中选择若干个用例进行详细定义、设计和实现,以对系统进行扩展。本次迭代的每个子阶段开始前,教师对本阶段所要用到的知识进行简要的回顾,布置本子阶段要完成的目标;然后各小组在规定的时间内完成本阶段的开发任务;各小组提交工作成果后,由教师进行集中点评,以使各小组之间能互相比较,共同提高。
第三轮教学需时3周左右,各小组将作为独立的开发团队进行开发工作。他们需要完成图书管理系统主学习的过程,培养动手能力和解决实际问题的能力。
基于案例的进化式教学方法将抽象的软件工程原理与具体案例相结合,降低了学习难度,提高了学生的学习兴趣。借鉴RUP的迭代式软件开发思想,将具有实际应用价值的复杂的软件案例引入教学中,克服了软件工程教学中示例与实际项目脱节,学生无法体验到实际的软件开发过程的缺憾。通过“教中学”、“练中学”、“做中学”三阶段进化式学习,使学生学习的知识不停留在纸面上,而具备应用这些知识解决实际问题的能力。
A project-driven evolutionary teaching method for software engineering
ZHU Zhong-xu
In this article a project-driven evolutionary teaching method is introduced into the teaching activity of software engineering.The method originates from the thought of iteration and evolution.In this method an actual software project runs through the whole teaching activity which is divided into three periods by the three iterations of the software project developing and adopted leading,guiding and autonomous means respectively.So students can learn the software engineering principles and methods in an evolutionary style which runs from cognition to comprehension and finally to application.
iteration;evolution;project-driven teaching;software engineering teaching
G642
A
1009-9530(2014)02-0136-03
2013-11-10
朱忠旭(1974-),男,安徽工贸职业技术学院计算机技术系教师,硕士,研究方向为软件工程。