时间:2022-08-11 00:55:08
导言:作为写作爱好者,不可错过为您精心挑选的10篇软件工程课程设计总结,它们将为您的写作提供全新的视角,我们衷心期待您的阅读,并希望这些内容能为您提供灵感和参考。
一、引言
软件工程是计算机科学、信息技术、软件工程等专业的教学计划中一门重要专业必修课[1],而软件工程课程设计是针对软件工程这门课程展开的一项理论与实践相结合的重要教学活动;它不同于毕业设计,更不同于简单的实验过程。它是软件工程教学的一个重要实践环节,为学生综合能力的运用、技术思维的形成、创造能力的培养搭建了一个平台,使学生除了掌握软件工程理论和方法外,还能够综合运用已学过的程序设计、数据结构、计算机网络、管理学和经济学等课程的技能、工具解决与其相关的理论或实际问题。
在软件工程课程设计中,很多本学科的学者与施教者总结了不错的经验,比如“激励机制”[2]、面向对象的自主实验教学[3]、课程相关体系研究[4]及相关的案例法教学实践设计[5]等,这些方法各有所长。我取其所长,结合亲身教学实践,从课程设计的目标要求,设计内容,设计的具体实施,学生成绩评价体系等方面,对软件工程课程设计教学模式作了系统的探讨。
二、软件工程课程设计的教学现状
长期以来,很多高校培养的学生存在着“什么都学过,却什么都不会”的尴尬局面,专业教育、教材与实际应用需求严重脱节[6]。传统的软件工程课程设计虽然也有设计的要求,但一般只是停留在组织学生编写软件项目若干设计文档这个单一环节上,忽略了对教学方法和内容的更新。目前,大多数院校软件工程课程设计课程教学中普遍存在的问题有以下几点。
1.课程设计目标不够明确,实验和设计不加区别。把软件工程实验和设计的要求同等对待,从而使设计内容偏少,验证性实验内容和方法偏多,实验过程变成了重复的复制和操作的过程,实验教学效果不理想,达不到培养学生独立思考和创新能力的目的。
2.课程设计内容比较陈旧,不能与时俱进。很多从事软件工程课程设计教学的教师本身缺乏项目开发的实战经验,对课程设计的内容往往从一些参考书籍的实例中拿过来让学生去做,有的甚至多年不更新设计内容,这样很容易给学生抄袭的机会,达不到课程设计的要求;同时,很多学生对设计的内容也不一定感兴趣,因此也容易扼杀学生的积极性和创新能力。
3.在项目组划分确定方面,缺乏对学生专业基础,性格和技能的分析与匹配,导致没有凝聚整组成员的合作精神和团队的开发能力。组长的核心作用很重要,但在具体的设计中,一般就是简单的按学号自然的分化,或者学生的自由组合分组,前者失去了团队能力的柔化组合与应用,后者导致少数技能较差的学生不能分到组中去而处于孤军作战的局面。
4.教师制定课程设计的指导要求目的不明确、不详细,监管力度不到位,导致项目开发团队在执行的过程中出现安排任务不合理,出现某些成员任务过重或者过轻的情况。
5.学生成绩的评分结果过于单一,评价体系不够科学合理。对学生的设计成绩的评价往往是指导老师根据学生提交的报告和设计结果来评分,这样容易忽略对学生综合能力(包括学生的口头表达能力,组织能力,团队协调能力等各方面)的评价。
因此,为了培养高素质的综合型软件人才,高等学校探索良好的软件工程课程设计教学模式就显得十分必要。
三、软件工程课程设计教学模式的探讨
针对当前多数院校软件工程课程设计课程教学中普遍存在的一些问题,我根据多年的教学经验,对该课程的教学模式作了如下探讨。
1.指导老师根据软件工程教学的特点,制定出软件工程课程设计的目标与通过该课程设计后可取得预期的收获。下面是我对软件工程课程设计制定的目标和可能的预期收获。
(1)通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用软件工程课堂上所学的软件开发方法和知识,比如,软件项目的完整设计与开发过程、结构化技术、快速原型法和面向对象方法,等等。
(2)为学生适应毕业后团队合作开发规模稍大项目和综合应用本专业所学习的多门课程知识(例如,软件工程、程序设计语言、操作系统、数据库、网络编程等)创造实践机会。为学生提供主动学习(比如,对Web网页设计、或ASP交互网页技术、Java开发环境、网站构架如Struts,Hibernate,Spring,商用数据库应用、电子商务、客户机/服务器技术、Visio与Rational Rose,Sybase powerdesigner软件工具等内容的学习)、积极探索与大胆创新的机会。
(3)使学生通过参加小组团队的开发实践,了解项目管理、团队协作、与客户交流、文档编写、口头与书面表达的重要性。
(4)使每个学生了解软件工具与环境对于项目开发的重要性,并且重点深入掌握好一、两种较新或较流行的软件工具或计算机应用技术、技能。
(5)通过“稍大的”富有挑战性的软件设计项目开发实践,提高学生的自学能力、书面与口头表达能力、创造能力和与团队其他成员交往和协作开发软件的能力,提高学生今后参与开发稍大规模实际软件项目和探索未知领域的能力和自信心。
2.课程设计内容选择应该具有科学性和与时俱进性。课程设计内容选择十分重要,既要体现时代性,又要体现科学性和难度的适当性,因此要求指导老师对当前软件开发领域的整个动态有总体掌握。下面是我对当前软件开发领域进行的大致归类。
(1)网站开发类:包括休闲娱乐(音乐,影视,聊天,休闲运动,旅游景点等)网站;工商经济网站(摄影,日用家居,玩具等);文学网站(诗词/韵文,港台文学,民间文学,科幻文学等);体育与健身网站(极限运动,球类,健美/健身,运动常识,网球,乒乓球等);卫生与健康网站(医学理论,医疗器械,保健/养生,论坛等);国家地区网站(北京,上海,广东,江苏,天津等);教育培训网站(小学/中学教育,职业教育,高等教育,教育软件,培训机构等);其他等类型网站。
(2)应用软件类:如信息管理系统,汉字输入,转换翻译,文字处理,压缩解压,电子阅读,文档管理,字体工具,数据恢复等。
(3)系统软件类:如系统管理,内存管理,文件管理,系统测试工具等。
(4)游戏娱乐类:如网络游戏,Flash游戏,牌和棋游戏等。
(5)其他:如安全病毒,桌面工具等。
这样,课程设计的内容可以根据学生的兴趣和爱好从以上几方面进行选择,也可以由学生自己选择设计内容,指导老师把握学生选择的项目难易程度,同时提出所要达到的要求(包括完成日期,演示时间,学生所要提交的成果,文档资料,等等)。
3.课程设计项目具体实施
(1)确定开发团队。指导老师在班长和学习委员的协助下充分了解学生的兴趣、爱好、基本技能和未来学生的就业意向,学生在教师的指导下,有选择性地进行分组,一般3至5人为一组,并选定好组长。
(2)确定开发项目。指导老师给小组成员分配好开发任务,组长写好开发计划进程安排并提交指导老师检查以便及时修进。
(3)中期检查与指导。指导老师根据各个团队提交的开发计划,对各团队开发项目进程定期进行中期检查,检查各团队的项目进展情况,包括各个小组的开会记录,所查阅的资料,当前所遇到的困难,协助与指导小组面对困难所要采取的解决方法等。
(4)成果提交与演示。课程设计结束时指导老师要求按时提交项目的相关成果,并组织小组团队进行演示与简短的答辩。演示过程要求学生用5―10分钟时间叙述设计原理、过程、系统运行的情况和体会,叙述完毕后由指导老师或其他小组成员提问,指导老师和小组成员记录该学生演示情况和回答问题的情况,并以此作为下一阶段评定该学生成绩的一部分。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
4.建立合理,科学公正的评价体系。为了对每个开发团队中的成员成绩有个公正、公平和合理的成绩,因此必须建立合理、科学、公正的评价体系,本文建立的评价体系包括:学生提交成果,学生演示与答辩,学生自评与互评,教师评分。学生提交成果根据表1学生所承担的角色来交付;学生演示与答辩重点体现对系统的原理、过程、结论,以及开发体会进行表述;学生自评和互评体现了学生的自我认同和互相认同感;最后是教师的评分,教师的评定从以下几方面全面考虑:(1)学习态度是否端正,总体表现;(2)项目组织是否有条理,协作程度;(3)软件系统文档资料表达格式是否规范、符合要求,表达是否准确、完整、简单明了;(4)系统结构是否合理,功能是否正确,人机界面是否友好;除了符合上列基本要求具体评定可以参见下表1。最后学生的总评定成绩为:0.4×教师评定分+0.2×学生互评分+0.2×学生演示与答辩评分+0.2×学生自评分。
表1 评定标准
四、结语
软件工程课程设计是一门理论与实践相结合的应用性很强课程,我结合自身从事软件开发的经验和多年的教学,从以上几个方面探索了该课程的教学模式,在实践工作中虽然取得了一定的成效,获得了学生的认可与好评,但仍处于尝试和探索阶段。在实际指导过程中还存在不少问题,例如:个别学生的积极主动性不够,存在抄袭设计成果现象,等等。这些都需要继续努力,尤其是随着软件产业的飞速发展,如何培养高素质软件人才,对教师来说更是一种挑战。因此,教师应不断学习新的知识,提升自身的能力,把握学科的最新发展动态,探索新的教学模式,深化实践教学改革,为我国教育事业作出更大的贡献。
参考文献:
[1]张海藩.软件工程导论(第5版)[M].北京:清华大学出版社,2008:55-73.
[2]张引,杨小虎,陈越.“软件工程”课程实践中激励机制的探索[J].计算机教育,2007,(5):30-32.
[3]江颉,石晓耀.面向对象的软件工程自主实验教学改革[J].实验技术与管理,2007,24(7):112-114.
[4]王薇.软件工程课程体系研究[J].计算机教育,2007,(8):31-32.
[5]巫华芳.软件工程教学案例设计初探[J].教育与职业,2007,(11):139-140.
1背景
中国信息产业部的数据显示,2008年中国软件产业整体保持快速增长态势,累计完成软件业务收入7572.9亿元,同比增长29.8%。与此同时,我国软件出口142亿美元,同比增长39%。企业对软件人才需求量在增大,估计人才缺口达到20万,而且这个需求将以每年20%左右的速度增长[1]。但另一方面,多数软件类应届毕业生在面临就业时却难以感受到这些数字所带来的欣慰,很多毕业生并没有顺利找到对口的工作。虽然这些学生身份上属于工程技术类的应用型人才,在目前IT产业蓬勃发展的大环境下理应有自己的一席之地,但结果却是“毕业即失业”表现得愈加突出。
软件工程专业具有巨大的发展潜力,但如何建设好软件工程专业?长期以来,国内高校软件专业主要以培养研究型人才为重点,以软件基础理论和系统软件设计为主干,目标是培养面向计算机与系统软件领域的研究型人才[2]。因此如何建立保证软件工程专业本科学生既具有可持续发展潜力又适应当前产业需求的新型知识体系,如何建立与企业应用紧密结合的先进课程体系、教学理念和教学方法,从而提高学生的综合能力,使毕业生在跨出校门时具备必需的素质,缩短从学生到企业员工的角色转换所需的时间,实现就业的“零适应期”是软件工程专业努力的目标。
国外高校在软件工程教育方面的一个共同点就是:根据各自国家和学校的特点,立足学生长远发展,培养适应社会需要与变化的人才。从软件教育的特点来看,西方著名大学有较完善的教育理念、教学手段和实验条件,有较长时间的实施经验,与企业有密切的合作关系,有一大批专家在从事计算机与软件的教育研究。这些大学的课程与我国现行的计算机和软件课程体系相比,理论更深,与新技术的接轨更快,实验和职业实践的比重更大,通过实验让学生掌握基本概念、提高分析问题与解决问题能力的力度更大。
国内高校软件专业主要以培养研究型人才为重点,以软件基础理论和系统软件设计为主干,目标是培养面向计算机与系统软件领域的研究型人才。软件专业学生在学生学科知识与实际运用有一定的距离。因此探讨如何建立符合国情,既面向当前产业需要又兼顾本专业学生发展潜力的知识体系、课程体系,是我们研究的主要内容。
2模块化的课程体系
我校软件工程专业申办于2004年,并于2008年开始招生。该专业成立的宗旨是培养高层次、实用型、复合型、具有国际竞争力的软件人才,要求学生在思维创新的基础上,提高技术创新和工程创新能力,提高软件工程实践和软件工程管理能力。我校在设置软件工程专业课程体系方面学习全国名牌大学如复旦、浙大等,并结合自己硬件及师资条件的实际,提出了如下几个设想:
(1) 合理设置课程模块,突出核心基础。
在软件工程领域,最新的、先进的软件技术文档、技术文献、发展研究等都是英文撰写的资料;合资、外资公司中的软件工程人员所使用的工作语言也是英语。因此在第一至第四学期我们对学生的英语能力进行强化训练,通过阅读、听力、写作和口语交流等方式提高其英语运用能力;在第二学期开始的所有专业基础课程、专业核心课程和专业选修课程中加入一定比例的专业英语训练,将英语融入到专业理论知识学习的过程中;同时开设几门专业课采用全英文教材,实行双语教学,达到巩固和不断提高的目的,为学生动手编写英文程序代码,查阅英文技术文献、文档扫除语言障碍。
(2) 合理设置专业入门基础课程模块,以引导为主。
以计算机导论为主,并以设置类型多样、专业覆盖面广的专业基础知识讲座或新生研讨课为辅,学生学习了计算机最基本的概念后,通过生动有趣的讲座获得更广的认识和了解。
(3) 合理设置专业核心课程模块,以应用为主。
专业核心课程关系到培养出来的软件工程人才质量。针对计算机学科需要,应设置相应的软件系统类课程、软件实现类课程、软件工程类课程以及相应课程的课程设计、实际项目开发为核心的软件设计及实现类的实践类课程。
(4) 设置专业方向选修课程,突出个性化发展。
结合时代需求,结合学生个性化发展需求,设置多个专业方向的模块化课程。设置跨大类专业选修课程,如计算机组成原理、编译原理和软件体系结构等;设置专业方向选修课程,如软件开发案例分析、软件开发新技术、软件文档写作等课程。学生可按需选修1~2个专业方向,有利于其发挥专业创新能力和专业个性化发展。
目前,我校软件工程专业课程体系架构如图1所示。
3实践教学体系
我院除设置模块化的课程体系外,还非常注重实践教学,并且构建了以项目为支撑的实践教学体系,具体开设与实践教学有关的课程如下:
第二个学期开设认识实习;
第三个学期开设面向对象程序设计课程设计;
第四个学期开设数据库原理课程设计以及.NET程序开发技术课程设计;
第五个学期开设Java语言课程设计以及UML建模工具及应用课程设计;
第六个学期开设J2EE技术课程设计及大型数据库课程设计;
第七个学期开设软件开发新技术课程设计;
第八个学期毕业设计。
针对合格的工程化软件人才所应具备的个人开发能力、团队开发能力、系统研发能力和设备应用能力,我们设计了以下4类阶梯状的工程实践课程。
程序设计实践课程:培养个人级工程项目开发能力,如面向过程程序设计(C语言),面向对象程序设计(C++语言)等课程设计。
软件工程实践课程:培养团队合作级工程项目研发能力,如.NET程序开发技术、J2EE技术、嵌入式软件开发(J2ME)等课程设计。
信息系统实践课程:培养系统级工程项目研发能力,如软件开发案例分析、面向对象系统分析与设计、大型数据库应用等课程设计。
毕业设计实践课程:培养开发软件所必备的设备应用能力,如软件开发新技术课程设计、毕业设计实践等。
我们感觉软件方面的技术五花八门,因此在专业核心课程设置上,注意其侧重点。我们将Java网络程序开发定为主要的教学方向,其中包括Java程序设计语言、网络软件开发技术、J2EE技术、以J2ME为主的嵌入式软件开发技术等。当然,我们兼顾企业实际用人的情况,开设了.NET程序开发技术等核心课程,详细的专业课程体系请参见图1。
4探索式学习
软件工程的理论和方法是从众多软件开发实践中总结出来的,但是对于缺乏软件开发实际经验的本科生来说,单纯地讲授理论知识往往使学生感到枯燥无味且难以理解。因此,我们收集和总结了一些软件开发案例,将这些案例贯穿于理论知识的讲解中,使学生真正理解这些理论知识,建立软件开发的系统化与工程化观念和质量意识。
(1) 从分析历史上的经典案例入手,诸如爱国者导弹、网络病毒攻击等。深入剖析导致软件失败的根本原因,从而引出软件开发的工程化发展方向,即以软件工程的原理和方法为指导,严格遵循软件过程规范和步骤。通过这些实例的分析,学生们逐渐改变软件开发等于编写程序代码的错误观念,开始认识到软件工程的重要性,有利于培养工程化的意识和观念。
(2) 软件过程是软件工程课程中的一个重要内容,但是对于开发经验有限的本科生来说,很难在头脑中将软件过程的抽象模型与实际开发联系起来,容易产生枯燥乏味的感觉。在教学过程中,我们从软件开发的实际案例中总结出5个不同的软件系统,结合这些系统的特点和开发策略,讲解瀑布模型、原型化方法、增量模型、形式化方法和基于组件的开发模型等。学生在思考、分析和讨论过程中更好地理解和体会软件过程的基本概念,有利于在实际开发中运用这些过程模型组织开发过程。
(3) 研究软件工程的实践特点,课程实验结合实际开发因素和参与乐趣。实践教学是本课程的一个重要的组成部分,它要求学生以开发团队(一个团队通常由3~5人组成)的方式开发一个具有一定规模的软件系统,侧重培养学生发现问题、独立分析问题和解决问题的能力以及团队合作精神,使学生初步体会到一个软件开发项目全过程。
(4) 研究和建立适合小组式开发的软件工程环境。在小组式的软件工程环境中,使学生真正体验到一种有序的、可控的、协作的软件开发过程,在分析问题、解决问题、协调冲突、消除矛盾的过程中享受软件开发成功的最终结果。软件工程实验要求学生采用“项目小组”的形式,结合具体的开发项目进行设计,班级按项目小组进行分组,每组不得超过4人。每个项目小组选出项目负责人或项目经理,由其召集项目组成员讨论、选定开发项目。学生分工合作,学习软件开发小组的组织和管理,将项目开发各阶段的任务明确,熟悉软件开发环境,培养团队精神,共同完成该项目的设计任务。项目中的每项任务要落实到个人,实验在规定的时间内,由学生独立完成。
在整个教学过程中,我们也十分注重鼓励和引导探索式学习,学生通过文献查阅以及与软件企业人员的接触交流,真正体会当前软件工程业界的真实案例和最佳实践。课堂讲解避免“一言谈”的死板方式,采取课堂互动讨论,营造活跃、宽松的课堂气氛,鼓励学生结合课程实践中的问题进行专题报告和软件演示。
在常规的课堂教学之外,我们辅之以网络课程和扩展资源,鼓励学生根据个人兴趣和需要进行自主式的学习。同时,充分利用网络教学平台,加强师生之间的交流和学生之间的协作,引导学生积极思考和参与讨论,教师由知识的灌输者成为学习的引导者,学生由被动地接受教育变成主动地探索知识。
5改革目标
我校软件工程专业以培养掌握计算机科学基础理论、软件工程的知识和技能,具有软件开发能力、软件开发实践和项目组织的初步经验,具有竞争和团队精神,能在计算机公司及相关企事业单位从事软件开发、适应软件技术发展和社会需求的软件工程应用型高级专门人才为目标。我校在人才培养坚持遵循以下原则。
(1) 坚持通识教育与专业教育结合原则,即通识教育课程要着眼于加强学生的基础知识教育,着眼于培养学生的科学素养和人文精神[3]。
(2) 坚持以人为本,因材施教原则,即在保证人才培养目标和质量规格要求的基础上,充分考虑因材施教,注重学生个性的发展,扩大学生自主学习、自主发展的时空,面向社会和学生多样化需求,提供多样化的课程体系和教育指导,为不同志向、不同能力和不同潜质的学生创造相应的培养环境和条件。通过柔性设置专业方向模块,让学生结合自身兴趣、就业志向和人才市场需求,灵活地选择发展方向,以增强专业方向优势、职业适应性建立完善的、与课程体系配套的实训、培训的“双训”教学体系,使培养的人才更加适应社会和企业的需求。
(3) 坚持应用为本,学以致用原则,即以学校办学定位和服务面向为指南,立足于培养应用型高级专门人才的目标,强化理论与实践的结合,着力培养学生的创新精神和实践能力。在实践教学体系的设计上,按照基础、提高、综合3个层次和基本实验、技能训练、专业实习、科研训练、综合实习、社会实践6大模块构建创新精神和实践能力培养体系。
(4) 建立一套以软件工程为主线的教学、实训评估标准,以确保人才培养目标的实现。
6结语
我们认为,计算机科学技术的快速发展以及企业对人才的多元化需求要求我们将新的知识单元及时引进课程体系中,使课程体系的设置要有超前和发展的眼光,随时将一些新兴的、成熟的内容吸收进课堂教学,做到对课程体系、教学计划动态调整,保持课程体系的动态性、前瞻性。
软件工程专业课程体系必须建立在对软件工程专业人才的知识结构和综合素质的全面研究之上。按照软件工程专业人才培养目标和国内外软件工程人才的需求,培养出的人才的知识结构域应该包括软件开发新技术、现代软件工程、工程领域背景技术3个主要部分[4]。我们还将在课程体系设置、教学方法、教材编写等诸多方面,充分学习、借鉴和吸收发达国家计算机教育教学的先进经验。
注:本文受“以社会需求为导向的软件工程专业课程体系改革的研究”(校级重点教改课题)支持。
参考文献:
[1] 王晴. 印度软件业崛起原因及其对我国产业结构升级的启示[J]. 生产力研究,2007(3):104-106.
[2] 吴爱华. 全国高校软件工程专业教育年会论文集(2007)[M]// 适应时展 推进高等理工科教育改革. 北京:高等教育出版社,2008.
[3] 杨芙清. 全国高校软件工程专业教育年会论文集(2007)[M]// 软件工程教育的思索与实践. 北京:高等教育出版社,2008.
[4] 李彤. 软件工程人才培养的实践与思考[J]. 计算机教育,2004(10):15-17.
Research on Professional Curriculum Reform of Software Engineering
about Social Requirement-oriented
WEN Zhi-cheng1, CAO Chun-li2
(1.College of Computer and Communication, Hunan University of Technology, Zhuzhou 412008, China;
课堂案例,用于教师理论授课使用,软件工程课程通常讲授两种软件开发方法:面向对象的软件开发方法和面向过程的软件开发方法,教学中采用一至两个案例(如:学生学籍管理系统、校园信息服务平台系统等)贯穿软件需求到软件实现每个阶段。讲面向过程软件设计方法时,采用Visio、ER-WIN、PowerDesigner等工具,使学生在案例中明白数据流图、数据字典、E-R图、软件模块图如何正确、规范的绘制以及它们所起的作用。当讲面向对象软件开发方法时,使用当前工业界公认的最佳软件开发方法,即UML建模语言与RUP统一过程,采用RationalRose、Star-UML、Eclipse等CASE工具,绘制用例图、活动图、分析阶段类图、时序图(协作图)、设计阶段的类图、数据库的逻辑结构图、构件图和部署图。通过一个案例的两种实现方法,不仅使学生知道它们间的区别和联系,而且学生更清楚在软件的生命周期的各个阶段建立哪种模型,为何要建立,而不是将所有的图堆积起来就是为系统分析建模、不是为了画图而画图,即不仅要知其然,更要知其所以然。
小组项目案例,是在课程的第一节课要求学生以4-5人的规模按照自愿或兴趣进行分组,每个小组按照教师布置或自选身边的、有实际应用价值、可调研的项目,进行分析、设计和实现。小组项目案例是与课堂案例穿行的,即学生在课堂每学完一种软件开发方法后,课后利用所学的知识(特别强调CASE工具的使用)对本课题小组的项目进行实践,例如:在课堂上学习了面向对象方法学对“学生学籍管理系统”案例进行规范的需求分析、设计的建模后,要求学生同步完成自己项目相应的内容,即利用CASE工具画用例图、类图等完成系统的需求、设计文档,其他内容均依此方法开展教学。为了更好激发学生的学习积极性和主动性,同时为了避免学生抄袭现象,利用我们自己开发的随机选组软件,让学生以小组的形式在课堂上进行现场答辩,组长作为该项目的经理,组员作为开发人员,教师和其余学生作为用户,首先组长介绍项目的开发背景、意义,项目的分工,需求调研的单位、调研对象,与客户的交流并记录情况,然后小组成员依次介绍自己的工作,最后由组长总结,并回答用户提出的问题。通过上述的“实战”,让学生加入到评价的行列中来,不仅活跃了课堂气氛,调动了他们的积极性,强化学生间的竞争意识,而且通过了解其他同学项目完成情况,并与自己做的进行比对,找出差距和不足,同时也挖掘学生的创新能力,提高了教学效果。正像学生事后的总结中这样写道:“在小组项目开发期间,我们对软件工程有了新的理解,软件开发不仅仅是单一的编程过程,它包括了需求分析,概要设计,详细设计,编码,测试,维护,编程只是其中的一小部分……;使我们深深地体会到,理论源于实践,实践见真知……;只有真正明白用户的需求,才能开发出能用,有价值的产品,如果开发出来的产品不能满足用户的需求,那么这个产品也就失去了存在的价值……;软件开发,重在团队合作,单独一个人是完成不了任务的,我们真正体会到什么是团队协作,真正的了解到团队合作的有利之处,真正感受到团队成员为了共同的目标联合在一起时的强大的力量,只有互相之间默契融洽的配合才能换来最终完美的结果”。CDIO所倡导的团队协作能力、交流能力,创新能力,在小组项目案例实施中得到了很好的锻炼。
CDIO模式下课程设计的实施
作为宏观、全局性的教育策略CDIO工程教育理念,强调知识的关联性,着重培养学生实际问题的解决能力和个人工程素质。软件工程专业人才培养要求之一就是工程型专业人才培养,教育部的“质量工程”也提出改革与创新实践教学与人才培养模式。为期2周的软件工程课程设计是软件工程课程的延续,是强化实践环节、培养学生工程素质以及加强学生所学知识的前后关联的重要举措。软件工程课程设计,需要学生能将所学的面向对象的软件开发方法、开发过程RUP、CASE工具、软件项目管理CMM、面向对象编程语言和数据库管理系统SQLServer/Oracle结合起来进行软件开发,为学生毕业后从事软件开发和管理工作打下坚实的基础。
1.课程设计的内容软件工程课程设计的实施方案见表1-1所示。2.基于CDIO的考核方式CDIO教育模式主要培养学生的八种能力:工程能力、职业道德、学术知识和运用知识解决问题能力、终生学习能力、团队协作能力、交流能力和大系统掌控能力。
软件工程课程设计为检测学生的上述能力搭建了平台,教师在软件开发的各阶段提出目标和任务,促使学生独立分析思考、相互交流讨论,敢于实践创新和探索解决问题的途径,提高了学生工程应用能力,在实践中理解软件工程师应该具有的职业道德,较好避免传统的考试只能单一测试学生对知识的记忆程度。软件工程课程设计的最终成绩评定是:平时成绩20%(重点考察学生的职业素养、交流、独立分析思考能力),设计成绩30%(重点考察学生的工程能力、运用知识解决问题能力),答辩成绩50%(重点考查学生的团队协作能力、表达能力、创新能力)。
软件工程专业在我国高等院校还是一个很不成熟的专业,比起传统的工科专业来说,软件工程专业有更多的技术成分,因此,我们的教学体系和模式就要有别于传统的教学体系和模式。实践教学体系是否合适将直接影响软件工程专业毕业生的质量。对于重点院校软件专业和软件学院实践教学体系已有很多专家学者进行了研究与实践[1-3],而普通院校无论是师资,还是其他教学资源,都不能与重点院校相比[4-5],应该有一套有别于重点院校的实践教学体系。本文将对普通院校软件工程专业实践教学体系的构建进行探讨,并结合我院软件工程专业实践教学体系进行总结。
1实践教学体系构建原则
软件工程专业实践教学体系构建原则可以从4个方面考虑:软件工程专业特点、教指委的软件工程专业规范、软件工程专业的职业定位、人类认识事物的规律。
1) 软件工程专业是一个综合性学科,既有科学的要求,又有技术的要求。从学生的培养目标来看,普通院校软件工程专业含有更多的技术要求。目前国内大多数普通院校软件工程专业还是按照传统的理工科人才培养方式进行学生的培养,忽视软件工程专业知识体系的特点,从而导致学校的学生大多数随能按照培养计划完成学业,成为一名合格的软件工程专业的毕业生,但与企业的要求相差甚远,企业找不到合适的人才的现状。
2) 软件工程专业规范给定的软件工程专业知识体系包括:计算机科学与技术知识、软件工程知识和领域知识。计算机科学与技术专业、软件工程专业是实践性、应用性非常强的学科,要使学生掌握好计算机科学与技术的基础理论知识,应用软件工程技术的基本技巧与方法,就必须确保实践教学的教学质量。
3) 按照现在职场流行的说法,人才分为3类:白领、灰领、蓝领。根据本地区和学校的特色,我院软件工程专业的定位是培养“灰领”人才,因此,学生除了学习传统的计算机科学与技术知识、软件工程知识外,还要学习管理学知识,同时根据我校的特色与定位,把汽车设计与制造过程中信息结构作为应掌握的领域知识。管理学知识将用于团队管理、软件开发过程管理以及信息结构建模等开发活动;汽车设计与制造过程中的信息作为软件开发实践的应用对象,是软件的加工对象。
4) 人类对事物的认识是一个由简单到复杂,由具体到一般的过程,是一个分析与综合的过程,将随着知识的积累逐步深入。这就要求实践教学要按照培养计划进度设置不同的实践内容,而且可以根据学生的个体情况进行少量的调整。
2实践教学体系构建方案
现在高等教育的教育方式正在从以教师为中心转变为以学生为中心,既以学生的目的需要为中心、以学生的能力拓展为中心、以学生的知识结构为中心开展实践教学。因此,我们在设计实践教学体系时,始终注重按照学生理论学习的进度和学生能力提高的需求,依据软件开发过程的特点,分层次开设不同的实践内容。
按照学生能力培养的路线图,实践教学体系始终围绕着培养知识应用能力和创新能力进行构建。能力培养方面分为3个方面,即程序设计能力、软件开发能力、工程实践能力。实践教学课程体系由5个层次的实验构成:课程实验、课程设计、项目实训、开发实践、毕业设计,如图1所示。
2.1课程实验
本类实验主要是加强学生对所学知识的理解,“听过的会忘记,看过的会记住,做过的会理解”。实验内容分为3类。第1类:掌握和运用工具,包括语言类,软件开发工具类等;第2类:理解所学知识,包括操作系统、编译原理、设计模式、计算机网络、数据结构与算法等;第3类:同时兼顾工具学习和知识理解,如数据库原理。这类实验主要是学生按照实验指导书完成规定的实验内容,但也有一部分内容只给出实验目的,让学生自己设计实验内容(设计型),以兼顾学生的不同层次与兴趣。
2.2课程设计
本类实验的目的就是培养和训练学生对所学知识的综合运用能力和学习新技术、新知识的能力,属于规范中的设计型与综合型实验。教师给出课程设计题目、相应的背景描述和课程设计要求,学生在教师的指导下独立完成课程设计项目,时间一般为1~2周。实验内容和要求根据学生的理论课进程安排,如VC++课程在数据结构与算法设计之前开设,因此VC++课程设计要求学生做好类的设计、界面设计,数据存储用文件形式,对软件的效率不做要求;数据结构与算法设计课程设计,除了VC++课程设计的要求外,要增加对算法的效率和存储空间的要求;设计模式与UML建模课程设计除了VC++课程设计和数据结构与算法设计课程设计的要求外,增加软件可靠性与高效的要求等。所有的课程设计都要求界面美观。同时鼓励优秀学生应用一些还没有开设的课程内容。
2.3项目实训
本类实验的目的主要是训练项目的组织能力、工程实践和团队协作能力,着重开发过程的训练,按照软件生命周期,完成各阶段的工作。项目实训放在软件工程和数据库原理等专业基础课程之后,软件体系结构之前。同时开展多个项目,把学生分成小组,在不同的项目中担任不同的角色,教师扮演客户和技术总监的角色,要求学生按时上下班,实验室允许学生加班,学生要负责实验室设备安全。要上交较完整的需求分析与设计文档,特别是各部分的公共信息要完整。可以只实现部分需求,时间安排为2~4周为宜。
2.4开发实践
开发实践在软件工程的专业实验室或校外实习基地进行。2008年我们与东风悬架弹簧公司和武汉天喻软件有限责任公司合作,利用武汉天喻软件有限责任公司的PLM软件,装入东风悬架弹簧公司产品开发的基础数据。学生通过该平台,可以了解企业产品的开发流程,不懂的地方随时可以向企业工程师咨询;可以选定一个模块,按照PLM系统接口规范进行设计开发,然后集成到PLM系统中去。可以是替换原来的模块,也可以是增加新的功能,进行集成测试检验程序的可靠性和效率。时间安排为4~8周为宜,由学校教师与企业工程共同指导。
2.5毕业设计
毕业设计是大学教学过程的最后一个环节,是一个学生自主开发的综合性实践教学环节。通过毕业设计,能使学生综合应用所学的各种理论知识和技能,进行全面、系统、严格的技术及基本能力的练习。我院毕业设计时间安排为16周,鼓励学生把就业与毕业设计结合起来。学生在企业实习阶段参与项目开发,由企业导师进行项目开发的相关指导,回校在校内教师指导下完成论文和答辩。
3软件工程专业实践教学的师资要求
软件工程专业的实践教学要求实践教师既是实践的指导者,又是直接的参与者。要对学生在实践中遇到的各种问题给予解答,包括编程语法、算法逻辑、软件体系结构设计、用户需求分析、团队协作方法等;在实践过程中更多地是站在用户的角度对学生的成果进行验收测试,使学生体会到在现实情况下怎样的软件才能被用户接受,体会到用户怎样检查软件的可靠性、可用性、正确性,用户怎样评价软件的优劣。
软件工程专业的特征要求从事软件工程专业教学的师资队伍是一支具有综合素质的队伍,既有专业理论基础,又要有企业实践背景;要充当软件开发过程的各种角色――投资者、使用者、组织者、设计者、编码者、测试员等。课程实验主要由理论基础扎实的教师担任,课程设计由理论基础扎实的教师和有企业实践背景的教师共同指导,项目实训和开发实践主要由有企业实践背景的教师完成。
4结语
本文介绍的软件工程专业实践教学体系是我校通过几年的不断摸索与改正后形成的。在探索过程中获得了湖北省教育厅项目(软件工程创新型人才培养研究)和学校的支持(2007年软件工程特色专业建设费15万元)。该实践教学体系利用一些基础实验帮助学生理解和掌握专业理论知识,为今后的发展打下坚实的专业基础,同时通过参与各种项目,提供了发展其动手能力的环境,贴近了企业需求,提高了就业率。2009年我校软件工程专业的一次就业率达到了90%。由课程设计、开发实践和毕业设计构成的创新训练体系,使学生获得了科学研究方法和软件开发活动的工程化的经验。
参考文献:
[1] 李红梅. 面向能力培养的软件工程实践教学体系[J]. 高等工程教育研究,2009(2):84-87.
[2] 董玮. 引入实训体系,培养应用型软件人才的探索与实践[J]. 计算机教育,2007(23):10-19.
[3] 董玮,邱建华,杨英鹏,等. 培养应用型软件人才的实践教学体系的研究与实践[J]. 计算机教育,2008(10):16-18.
[4] 郑耿忠,刘秋梅. 地方性院校软件工程专业建设探讨[J].电脑知识与技术,2009,5(30):8477-8478.
[5] 郑耿忠,刘秋梅. 软件工程专业实践教学体系构建探索[J]. 电脑知识与技术,2009,5(27):7690-7691.
[6] 白伟华. 软件工程专业应用型人才培养模式的思考[J]. 计算机教育,2008(22):35-37.
Practice Teaching System of Software Engineering in General Institutes
FU Yong-zhi, WANG Wen-yan, SHI Lü-hua
(Department of Computer Science School of Electrical & Information Engineering Hubei University of Automotive Technology,
2.评分模式单一软件工程采用了传统的闭卷考试方式,平时成绩占总成绩的30%,期末考试占70%。平时成绩=上课出勤情况(10%)+实验完成情况(10%)+作业完成情况(10%)。任课教师通过对不同的考核内容赋予不同权重来评价学生对软件工程课程的掌握情况,主要考核学生对课程基本知识的理解。此方法不足以提高学生实际动手的能力,更不利于激发学生实际软件设计开发的兴趣。
二、现有的教学方法的分析
针对上述问题,从事软件工程的相关教师从不同角度,对软件工程课程进行了改革。归纳起来主要有如下几种教学方法改革:
1.自底向上教学法在“软件工程”课程中应用授课方式主要是用倒叙的方式贯穿完整案例(包含警戒案例),以启发、讨论、辩论的形式讲授软件工程的原理、方法及过程,使学生不觉生疏,易接受,又符合IT从业人员的工作进程。[2]
2.模块化教学法在“软件工程”课程中的应用在尊重教学规律和学生个性发展的原则上,根据课程体系和内容之间的关系,将教学部分划分为若干独立的模块,确定模块之间的关联,针对不同的教学计划要求,采用不同的模块组合有选择地进行讲授和学习。[3]
3.案例教学法在“软件工程”课程中的应用软件工程案例教学是根据“软件工程”课程的教学目的和学生培养目标要求,教师选用相应的案例作为基本素材,引导学生对案例进行调查、思考、分析、讨论、设计、开发和交流等相关活动,在活动中教授学生软件工程的原理、方法及过程,进而提高学生分析和解决问题的能力,加深学生对基本理论知识的理解和掌握。[4]
4.项目驱动教学法在“软件工程”课程中的应用项目驱动教学法是案例教学法的基础上采用“案例导向、项目驱动”的教学方法。首先,教师根据要讲授的理论知识预先准备一个或者多个小的软件开发项目;然后,将学生作为主体,以软件开发项目的研发过程为引导,采用学生小组团队合作和学生个人独立完成相结合的教学形式,组织学生开展集体讨论并完成相应的实践性活动,在研发过程中同学和老师要对每位学生所完成的每个阶段任务加以点评、督促改进、分享经验等;最后,学生将成功的软件给予演示。
5.三位一体式教学法在“软件工程”课程中的应用根据学生的认识特点和该课程自身的特点以及对“软件工程”课程在计算机科学专业的定位、教材的选取、课程培养目标的分析下,采取以综合能力培养为中心、项目实践为标准,模板、案例、指导说明为辅助的三位一体式的教学思路。[6]对目前在“软件工程”课程改革中应用的五种方法针对改革侧重点进行汇总发现(见表1),单一的教学方法只是在理论教学、实践教学和考核方式某一方面发挥了很好的作用,而不能从全面发挥效果,而对于“软件工程”课程来说三者同样重要。
三、基于多元教学法的课程改革新模式
某一种教学模式改革已经不能满足现代“软件工程”课程教学的要求,只有将多元教学模式组合在一起,充分考虑各自对课程教学的优势,避其缺点,找到一种既能使学生具有良好的理论基础,又能充分培养学生实践能力,还能准确地考核学生的教学模式。本次课程改革就是本着这样一种思想,从理论教学、实践教学和考核方式三个方面进行多样化改革。
1.理论教学内容多样化
理论知识的学习在学生以后软件项目开发过程中具有必要性和重要性,软件工程学习过程中要重视基础和基本技能的培养。学生要具有开发软件项目的能力,首先要熟悉掌握软件工程相关的理论知识,特别是对如何按照工程化的方法系统地设计、实现、测试和维护大型软件,内容包括:软件开发的基本理论、方法和技术;其次是了解目前已有系统、工具和技术。(1)授课内容引入案例。教师在教学过程中引入与理论知识相匹配的实际案例,将比较抽象的软件工程原理、方法和技术转为具体生动的案例进行诠释,增强理论教学的艺术性、科学性、趣味性、形象性,使学生能够在课堂上深刻领会和理解软件工程的思想和方法,教学效果收到了事半功倍。(2)适时更新教学内容。近几年,软件原理、方法和技术发展较快,许多适应时展的软件不断涌出,而目前的教材虽不断改版更新,但其更新的速度远远跟不上软件工程的发展。因此,教师在进行理论讲解时,除了要教授学生基本原理、技术和方法外,还要时刻关注新内容的出现。(3)制作丰富多彩的课件。采用多媒体教学手段,在课件中插入图片、动画、声音、视频等多媒体元素,使教学内容更加充实和生动。(4)课堂小组讨论。从小问题到大问题,让学生参与教学过程,有机会发表自己的看法。课堂讨论和分析试验,使理论有实践作支撑,抽象的知识变得看得见,用得着,大大激发学生学习的兴趣和自信。
2.实践教学内容多样化
软件工程理论的讲解是课程学习和技能培养的基础,而软件工程中许多理论内容如果只是教师讲解不加以实践,内容本身就会变得空洞和不可理解,例如:软件复杂性计算、软件可靠性与安全性的测量标准、结构化的实现方法等都需要学生动手实践才能更好地理解知识本身的内涵。掌握概念、原理、方法和技术,熟练应用软件开发实践中的方法和技术是“软件工程”课程对学生的培养目标。(1)课程角色扮演。教师预先选择若干小项目,班内学生根据自己对项目熟悉情况选择项目名称,划分项目小组,每组人数不超过6人,每个项目小组成员根据自身特长选择不同软件工程角色,例如项目负责人、需求分析负责人、设计负责人、编码负责人、测试负责人和用户代表,进行项目分工。项目组成员按时完成自己负责任务,撰写相应文档。教师帮助学生分析和解决所遇到问题。在整个开发过程可以体现“学以致用”的思想,实现理论与实践相结合。(2)课程设计。课程设计主要是针对高年级学生在学习软件工程课程时开展的专项训练。课程设计采取在学校内模拟IT企业环境下完成来自企业案例或开发一些具有应用价值项目或学校教师承担的开发项目的部分开发工作,也可以是学生自选项目,整个课程设计阶段严格按照工程实施的基本思想来实施。(3)加强校企合作。一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位实地实习。
3.考试方式多样化
传统的考核方式已经不能反映学生实际软件开发的水平,也与多样化的教学模式不相匹配,为此多样化的考核方式才符合现实需求,主要包括:笔试、课后角色扮演、课程设计和项目总结。(1)笔试占总成绩的35%,主要考查学生理论知识的掌握情况和学习效果。(2)课后角色扮演占总成绩的15%。由教师根据每位学生在课后角色扮演中的具体表现进行打分,主要由3部分取平均值组成:1/3*(整个项目的成绩+自己负责完成的文档成绩+组内其他成员负责完成的文档的平均成绩)。(3)项目总结或心得体会占总成绩的15%。根据学生在软件开发过程中所撰写的经验和教训总结报告、每个小组成员建立的个人开发记录或日志的实际情况,相互打分。
四、基于多元教学模式课程改革方案
基于上述改革理念,按照软件工程开发原理、方法和技术,选用典型项目案例,将学生按照项目分成若干个小组,每组人数不超过6人。每个小组对应着一个具体的项目,每个人对应着一个具体工作过程,按照如下步骤进行多元教学。第一步,教师选用合适的教学内容,制作丰富多彩的课件,对学生进行基本理论和基本技能的讲解。在每一个软件生命周期结束后,教师进行案例场景描述。教师按照理论知识的内容,选择相应的案例进行描述,学生将所学内容运用到相关案例中。教师通过案例让学生明白理论知识如何应用,学生通过案例体会到小项目中所学的原理、方法和技术是如何实现的。第二步,课后角色扮演。学生通过分组讨论的方式,完成项目分工,明确自己在项目中所扮演的角色。所有的任务通过集体讨论的方式,决出所要完成的任务,并由相应的角色人实际操作完成。例如,需求分析一章内容,学生课后进行项目小组讨论,决定需求分析的内容,进行相应的需求分析,并由扮演需求分析人员的学生完成需求报告。软件开发过程需要整个团队的通力合作,根据学生的性格、表达能力、开发能力、理论基础掌握情况等方面进行人员分组,将具有不同特点的学生组成一个团队完成项目开发。这种团队合作的方式,既能发挥学生各自的特长,又能培养学生的团队合作精神。第三步,课程设计。当全部内容讲解完成,就可以开始长达2周的课程设计内容了。这段时间要求项目小组,彻底完成一个由教师虚拟的项目。此步骤中,主要培养学生良好的科研习惯,在开发过程中及时总结经验和教训,建立个人开发记录或日志,理论联系实际学着开发软件。第四步,学生总结,教师点评。学生经过多个教学环节后,每个团队在一定程度上完成了各自的项目任务,对各自团队的成果进行总结。教师听取每个团队的汇报后,从横向和纵向两个方面对项目成果之间进行比较,从而让每一位学生明白自己在团队中发挥了什么作用,自己哪些方面不足。第五步,请进来,走出去。通过学校和企业合作的方式,一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位,实地实习。
“软件工程”是计算机及相关专业的一门专业课,是培养学生的软件开发能力和项目管理能力的一门重要课程,反映计算机专业人员综合应用的素质和能力。它要求学生在学习过程中不仅要注重概念、原理、方法和技术的掌握,还要注重方法、技术的实际应用。然而,在实际教学中,很多学生认为这是一门理论课,内容繁琐,感到枯燥,学习兴趣不大,待到用时又不知如何运用这些知识。同时,软件工程是计算机科学与技术领域的一个重要的学科,如面向对象的开发方法、CASE工具与环境、软件重用技术、网络环境下的软件开发技术等有了长足的发展,而目前的教材内容、实践环节等方面存在严重的缺陷,制约了软件工程课程的教学效果。
本文结合作者多年来的软件工程课程教学和科研的实践经验,就软件工程教学内容、教学方法和手段、实践环节安排、教学环境乃至考核方式等方面进行了一些探索和研究。
一、结合行业发展,不断更新教学内容
教学内容是连接教师与学生的纽带,是教学改革的重要内容,具有开放性、综合性,应体现学科之间的相互联系、体现现代性,反映科学发展、知识更新规律。
《软件工程》课程是一综合性学科,涉及计算机科学、管理学、数学、心理学等相关学科的知识。随着计算机科学的迅猛发展,与相关学科的联系更加密切。为适应21世纪学科发展的需要,要适当压缩传统的面向过程方法学内容,力求反映20世纪90年代以来面向对象方法学的最新进展。在教学过程中以软件开发过程为主线,重点讲解软件开发的分析和设计方法,内容涉及软件工程方法、工具、过程三要素,使学生从工程的角度认识软件开发,对软件开发有比较完整和深入的认识,了解国内外软件工程学发展的现状和趋势,并且在更广阔和更高层次上加深对软件工程学的认识,为后续课程及相关工作的开展打下坚实的基础。
在教材选择方面,宜采用中英文教材结合的方式。对于基本理论和基本方法部分使用中文教材,对于新方法、新技术以及国际标准等内容则直接使用相关的英文资料,并鼓励和推荐学生课外阅读英文资料,更好地了解其最新发展。
二、采用立体化教学手段
在软件工程的教学过程中,采用多种立体化教学手段,拓宽学生的知识面,以及更强的独立思考、团队协作和解决问题的能力。
1.多媒体课件。采用多媒体教学手段,制作内容丰富、形象生动的课件。这些课件不仅能形象地讲授软件工程基本原理,而且使得课堂信息量更大,教师还可以演示和讲授软件工程工具。还有部分课件被制作成自学模式,以便于学生课外扩展知识。
2.双语教学。对软件工程可进行双语教学,采用国外优秀的原版教材,课堂板书和作业都采用英语作为工作语言,并鼓励学生使用英语解答;同时给学生提供英文的课外阅读资料,让他们及时了解国际上学科的最新发展。
3.实践。在课外,采用大量的项目演练。项目以团队操练的方式进行,一个项目组由5~6名学生组成,分别担任项目经理、客户、上级经理、系统分析员、程序员和测试员等角色。由教师为其提供一个虚拟的项目情景和要求。项目组根据项目需求,制定项目计划,进行分析、设计、编码和测试,运用所学知识,分工协作、查资料、探寻问题的解决方案。应注意培养学生遵守职业道德、法律和纪律,尊重知识产权。必须发挥团队的作用,提高学生在团队中工作的能力,培养学生交流、沟通、协调及与用户合作的能力。进入课程设计阶段,学生就能够进行实际软件项目开发。
4.课程网站。建立软件工程网站,组织和帮助学生的探索性学习,促进学生的主动发现和主动探索,扩展课堂教学。在网站上课程安排、教学大纲、师资介绍、作业、多媒体课件、实践要求、常用软件工程模板、自测题等内容,同时提供大量有价值的参考书籍清单和电子文献,供学生随时查阅,学生还可以随时和教师在网上进行交流和答疑,变学时有限的教学为在读期间的全程教学。
5.探索校企合作。软件工程具有显著的实践特点,其教学内容必须与当前软件行业的发展和需求保持同步。因此学校应该与实力雄厚、管理规范的软件企业建立合作关系,及时了解行业发展动态,调整教学内容。聘请既有理论知识又有开发经验的软件工程师为学生做有关先进的工程技术和管理规范方面的专题报告,让学生了解企业开发软件项目的全过程、软件开发的实际问题、行业现状以及发展趋势,及时调整学习方向,增强学习的主动性和积极性。
三、进行案例教学
软件工程讲授的原理、技术、方法都很抽象,容易产生枯燥乏味的感觉。为了使学生能深刻领会和理解软件工程的思想和方法,在教学中引入实际案例,将复杂抽象的概念用具体生动的案例进行诠释,能够收到事半功倍的效果。具体可采用以下步骤:
1.设计一个典型的、完整的、易于理解的、实际的软件项目案例。在整个教学过程中结合该案例讲授每个知识点,将实际案例作为贯穿所有知识点的主线。该案例最好来源于授课教师直接参与的软件项目,授课教师对其全部细节能够准确掌握。
2.讨论案例。在讲授一个重要的知识点后,安排一到两节的案例课,针对知识点设计多个案例。教师用语言叙述案例,其中隐含着有待解决的问题及其所处的客观条件,学生通过认真阅读案例,查阅相关资料,理出头绪,明确给定条件,找出主要问题并做好记录。然后分析问题,制定针对性的措施,提出解决主要问题的可行方案,并对方案进行初步评价。
3.组织小组讨论。将学生分成五至六人的小组,每位学生运用所学知识对案例进行分析、说明,提出解决的措施,重点阐述分析、设计的理由。然后,大家集思广益,小组内展开讨论,并由专人记录,讨论的重点是对各个解决方案的相互对比和分析评价。最后,选出一个较为合理的解决方案,或者对所有方案进行整理和归纳,得到一个最佳方案。
4.小组代表发言,集体讨论。每组派一名代表上讲台,讲述本组对案例的理解、分析、判断、论证和决策过程,说明解决问题的方案和分析设计结果。对于同学发言老师要给予必要的引导,鼓励他们多角度、多因素地观察分析问题,培养学生的知识迁移和拓宽思维的能力,启发他们学以致用的意识。然后,组织全体同学进行分析、讨论、评价。对于非确定型的决策问题,同学问往往存在着意见分歧,结论很难统一。这一过程可以增加学生对软件开发项目的感性认识和兴趣,提高他们分析问题和解决问题的能力。
5.教师总结。在案例讨论结束时教师要进行总结,因为解决案例问题的决策方案不是唯一的,所以教师的总结应是就整个讨论情况做出评价。对正确的论点给予肯定和完善,指出一
些原则性的问题,特别是对某些问题可以更深一步思考,进行启发式诱导。
案例教学法通过案例贯穿软件工程各知识点的讲授,将枯燥的理论与实际紧密结合,变抽象为具体,帮助学生充分理解和掌握各知识点;通过组织学生参与案例讨论,让学生置身于模拟的真实环境中,扮演不同的角色,身临其境,真正从“工程师”的角度考虑问题,学习如何应用知识解决问题,是软件工程课程进行实践性教学改革的一个重要环节。
四、强调实践教学环节,合理安排课程实践
软件工程课的目的是使学生能够真正在大型软件开发活动中贯彻软件工程的思想,正确使用软件开发方法,提高软件质量。为加强实践环节,教学中可采用以下方法:
1.重要的基础概念和基本方法必须进行实践。例如,需求分析建模的重要工具数据流图、实体关系图和面向对象建模等,这些知识看似容易掌握,但做起来可能会漏洞百出。在讲述相关内容时,应及时安排实验,检验学生是否掌握基本工具的使用。
2.将CASE工具贯穿于所有的软件开发活动。例如,在介绍基于UML的面向对象软件开发方法时,学生即可通过RationalRose针对实际应用问题构造UML模型。
3.根据软件工程课程实践性强的特点,结合教学进度,开设综合性的设计型实验一《软件工程课程设计》。该课程设计与《软件工程》课程的理论教学内容紧密配合,同步进行,让学生通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养创造性的工程设计能力和综合分析、解决问题的能力。
课程设计的具体内容是:在教师指导下,按照软件工程的开发技术和管理规范,开发小组进行“应用软件项目开发”。课程设计过程中,开设1~2次“软件新技术讲座”,并提供丰富的“教学资源”,为学生提供帮助。其主要内容是按照“案例导向、项目驱动”的设计思想,模拟软件企业先进的软件项目管理和开发过程,进行“应用软件的开发实践”。以项目开发带动软件工程的理论学习,又以软件工程的理论来指导软件开发的实践。使学生得到较全面、系统和规范的软件工程实践的训练,培养创造性的软件设计能力和综合分析、解决问题的能力。
软件开发是智力活动,同样的软件项目,不同的软件开发组织和人员采用的方案,耗费的时间、资源、成本,软件产品的质量可能相差很多。一个重要的因素是软件开发组织和人员的创新能力和水平。因此,在教学和软件开发活动中应营造一个宽松、和谐的环境,努力培养学生的创新精神和创新能力。
五、重视教学和科研环境建设,建立软件工程实验室
有效地使用软件工具和软件开发环境,对提高软件开发质量、效率,保证按时交付具有十分重要的作用,应加大软件实验室的建设力度,重视流行软件工具和软件开发环境的有效使用,提高学生的软件开发能力。如面向对象的软件建模方法、数据建模方法、软件度量方法、软件测试方法、现代软件管理方法、开发工具Rational Rose、Power Designer等不仅教师要掌握,学生也要尽可能熟悉。要熟悉和掌握的软件工程工具包括:分析设计工具、程序设计工具、软件测试工具、配置管理工具等。将这些工具贯穿教学及其软件开发活动,既有利于教师提高自身的研发能力,也能够让学生接触和学习各种CASE技术,锻炼他们的软件开发能力。
软件工程实验室需要配备适用的软硬件设施和比较科学先进的软件开发工具,以便为软件工程的教学和研究创造『必要的环境与条件。通过实验室建设,不仅可以加强教学效果,还可以进一步提高教师的科研水平。
中图分类号:G642 文献标识码:A
1 引言(Introduction)
软件工程作为计算机和软件本科专业最综合最系统的一门课程,在促进学生巩固之前学过的专业知识、掌握软件开发过程及方法、理解软件工程实践等方面发挥了积极作用。但高校特别是三本院校在软件工程课程讲授时理论脱离实际,片面地强调理论学习而忽视实践能力的培养,理论部分过于抽象,在课程实验中,没有把握好课程在人才培养的桥梁和作用,缺乏贯穿纵向知识体系和学科的整体理解和思想,往往只是本课程章节或课程的综合理论验证,采用虚拟的实验案例,甚至将其设计成为章节内容验证练习,而不是围绕着软件工程整本书的整个知识体系进行实际开发项目。导致学生学完软件工程课程后还是不能理解软件生命周期、开发过程及相应方法,与社会对软件人才的需求存在差距,学生难以很快融入现代IT企业的运作[1]。如何培养起适合信息产业所需要的应用型、实践型人才,已经成为亟待解决的问题。因此要想将学生培养成为符合社会需要的软件工程人才,就应当改变目前的局面,全面考虑软件工程课程建设。
本课题研究主要针对目前软件工程课程理论脱离实际,同时很多教师过分强调软件工程理论知识的一面,忽视了软件工程必须有实践项目还具有经验性、参与性、发展性的特点,通过理论研究和教学实践对软件工程教学实践提供实践指导。加强软件工程实践教学的改革,通过理论与实践相结合的方法培养社会需要的应用型软件工程人才。解决三本院校软件工程课程教授中理论、实验与实际相脱离的问题。
2 针对社会需求,制定明确合理的教学计划
(Formulate a reasonable teaching plan based on
the social needs)
教学计划是各教学环境的整体设计方案,合理的专业的教学计划能为教学顺利实施提供指导,也是教学过程质量的有力保障,是人才培养的纲领和实施蓝图[2],它规定了课程结构和知识结构,明确了人才培养目标,构建了专业要求的课程体系,限制了教学环节的进程及内容。具体在制定计划时应秉持以下几点:
(1)树立应用型人才培养理念
在培养软件工程人才过程中要和一二本院校区别开来,我们应当以实际动手为主,培养适合企业操作岗位的技能人才。软件工程专业应坚持“以市场为导向,以就业为目标,顺应IT业发展趋势,以校企合作为手段,突出技能培养,走应用型开放式道路。”的办学思路,通过吸收国内外的优质资源,通过校企合作,共建实训实习基地和技术开发应用等多种合作办学,提高办学活力及效率。在人才培养模式上突出以技术应用能力为核心的人才培养特点,课程设置以市场流行的软件开发技术为主线由浅入深,技术的学习采用项目驱动、案例驱动的方式[3],不断提高学生实践动手能力,培养应用型技术人才,适应企业对人才的需求。
(2)构建应用型培养系统工程
学生在学校对知识的储备与社会对人才的能力需求如何契合的更好是学校应该要慎重考虑的问题。目前,软件服务外包产业对应用型人才需求量较大,软件工程专业可以和武汉软件外包单位合作,全面实施3+1人才培养模式,即,三年基础、专业课程学习加一年实训。这种嵌入式教学模式将会极大地提升学生的实际应用能力,他们进入企业后适应能力更强,上手会更快。在教学过程中,软件工程专业可以构建工程化的实践教学体系,以软件项目研发到软件项目运行的生命周期为载体,让学生以主动的、实践的、课程之间有机联系的方式学习软件工程,建立试验―实训―综合设计―职业实践的实践教学体系,通过引进、开发真实的项目案例,让学生实际参与项目开发全过程,切实提高学生解决实际问题的能力,培养他们的综合应用素质。
(3)引入企业,接轨市场需求
基于工程化培养理念建立一批校企联合实习实训基地,实现教学过程与生产过程的对接,为应用型技术人才培养提供有力的保障。将一些行业内的企业而不单纯是培训单位引入校园,合作搭建项目开发平台,形成以研发项目促进学生实习实训,以研发项目带动师生科研发展的人才培养新途径,联合培养双师型教师。
3 软件工程实践教学采用的主要方法(The main
method of the software engineering practice
teaching)
软件工程实践课,包括课程实验、课程设计、项目实训和毕业设计等实践环节。
3.1 实例教学
在教授理论知识时,传统方法过度的在讲授枯燥的理论知识,学生没有实际的工程项目的经验,根本无法理解软件工程课程里的内容,在软件工程课程理论课上教师要通过典型的软件项目实例来讲解理论知识,将实例贯穿于教学环节,模拟软件工程项目场景,启发学生分析问题、进行方案设计,在项目案例讲解过程中抽象上升为理论知识,理论知识又反过来指导项目案例。
3.2 实验教学
相对于计算机科学与技术专业,软件工程专业更强调实践性和工程性能力的培养,这都需要在实践环节中培养,因此实验与实践教学是软件工程专业教学的重要组成部分,其实施质量对专业教学质量具有举足轻重的影响。软件工程专业可以构建“课程实验、课程设计、毕业设计”三级实验体系[4],三级实验体系粒度从细到粗,从具体到综合。教师需要设置好实验环节的内容、形式,实验课和课程设计时采用商业软件的开发模式,以实际项目和企业正常运作时人员的分工配合来进行实验教学,理论指导实践,实践强化理论,将系列的实践课程提升到工程项目训练,实际软件工程项目贯穿同步理论课的知识,让学生从需求分析、总体设计、详细设计、编码、测试到项目交付和管理维护等完整的软件开发过程进行系统实践学习,这样学生在一个真实的场景中实践,亲身体验并进行反思,只有实际操刀了,学生才能理会并掌握完整的软件开发流程、软件开发技术及软件开发方法。实验时以小组形式开展工作,四五个学生为一组,每组由组员推荐或自荐一位组长,负责协调、分工,组员在小组长的协作领导下完成项目的开发过程。项目驱动实验的软件工程实践教学可以帮助学生建构良好的软件开发认知模式并培养一定的软件工程素养[5]。在学生毕业前,开设项目实训和毕业设计,旨在培养学生的综合实践能力,通过这样的手段学生能比较真切地理解软件工程理论知识并掌握软件开发过程。通过实验,掌握一个完整软件开发过程,及过程中的每一个阶段的任务、目标、方法、工具,并熟练使用一些CASE(计算机辅助软件工程)工具来提升软件开发效率,保证软件质量。通过集中性的课程设计、毕业设计训练,使学生逐步培养编程能力、算法分析设计能力、数据库设计能力,能够结合专业知识实现用户需求,形成产品意识而不是作业意识,培养团队交流协作能力、积累工程经验、提高工程素养。每一个阶段制定可衡量的、明确的目标,激发学生的学习兴趣、提高知识的灵活运用能力、创新思维能力、综合分析能力、系统设计能力等,为培养符合社会需求的人才奠定基础。最后通过毕业设计综合性锻炼,实现学生就业的平滑过渡。
在每一级实验过程中都采用“教师为主导、学生为主体”的原则,才有利于避免学生在学习上的依耐性、缺乏独立思考问题和解决问题的能力,因此要充分发挥学生的主体作用,运用教师的专业知识和项目经验言传身教地引领、启发学生学习、动手实践,不断引入新技术、新方法引起学生好奇心,激发学生探索学习欲望。教师需要动态地了解学生的接受能力,有针对性地因材施教、指导学生学习,让学生拥有自主学习、持续学习的能力,意识到自己学得会,也很有利于调动学生学习的主动性,只有这样,才能达到较好的实验课教学效果。在每一次实验后要及时地对本次实验加以分析和总结,通过本次实验遇到了什么问题?解决的方法是什么?实现了什么功能?还有哪些有待解决的问题?都要加以总结,并以报告的形式记录下来,有利于日后开展实验课程的教学。
3.3 社会实践教学
一个软件企业的正常运行需要多方面的人员协作与配合,如财务人员、开发人员、配置管理员、质量保证员、数据库管理员、网络维护工程师、系统架构师、软件测试人员、管理人员等,在学校里学生难以体会到一个软件开发过程中除编码测试人员之外的其他岗位的职责和特性,学生只有真正进入企业才能体会并有机会实践这些岗位。社会实践教学可以通过校企合作的形式,也可以鼓励学生自己去找实习单位,学生可以根据自己的兴趣和个人发展方向来自由选择角色,完成不同的任务,教师和公司导师给予引导。社会实践教学是一次综合性的实践活动,是学生走向社会的开始,通过社会实践教学活动,使学生能够逐步认识综合利用所学的专业知识,培养软件开发的技能,深刻体会企业软件开发与学习过程中编写软件的不同、软件工程各阶段角色任务管理和开发知识,提高自身的创新意识与创新能力,促进团队之间的沟通协作,为早日踏上工作岗位打下坚实的基础。
学生进行社会实践教学活动时,严格按照企业的规定,执行、考勤、日志、总结等实际工作环节,广泛使用协同开发平台,使学生规范化、有序进行社会实践活动。
4 结论(Conclusion)
通过对几年软件工程课程教学的思考和总结,以及调研一些其他院校软件工程课程,提出了三本院校中软件工程实践教学存在的问题以及软件工程实践教学改革的必要性,从课程教学计划的制订、实例教学、实验教学、社会实践教学等几个方面给出了切实可行的建议,同时这些建议也可为其他课程提供有意义的借鉴。
参考文献(References)
[1] 熊伟,洪玫.大学本科软件工程专业建设的探索与实践[J].理
工高教研究,2010,(2):59-61.
[2] 晏立.从社会需求的角度探索软件工程教育[J].教育与教学研
究,2008,(22):141-145.
[3] Roger S.Pressman.软件工程:实践者的研究方法[M].北京:机
械工业出版社,2011,(8):32-68.
[4] 熊凡,李伟波.项目驱动的软件工程实验教学探讨[J].中国电
力教育,2012,(2):77-79.
[5] 丁洁.软件工程的教学改革与实践[J].科学与技术信息,2009,
(9):555.
中图分类号:
1、引言
提起软件,在当今社会人们并不陌生,正是由于软件的发展,使计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生很大的变化。这同时也促进人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂,人们的软件开发能力越显得力不从心。于是,人们开始重视软件开发过程、方法、工具和环境的研究,软件工程应运而生。
“软件工程”主要介绍软件工程的基本原理、开发方法和开发工具,通过本课程的学习,使学生了解和初步掌握开发1个软件项目所使用的方法和工具,以及“软件工程”的发展过程和发展趋势,为进行软件开发打下1个良好的基础。
2、课程特点
1。课程综合性强。
软件工程与其他计算机课程,如程序设计语言、数据结构、编译原理、数据库以及操作系统等课程都是相互作用和影响的。在1定程度上说,软件工程讨论的是在实际开发当中综合运用这些课程中讲过的理论和方法,将这些课程的理论和方法放在1个统1的目标下,这个目标就是在有限的时间及预算条件下,开发出高质量的令用户满意的软件。
2。课程内容不断更新。
软件工程课程的教学培养目标应该以市场需求为导向,使课程培养的学生真正能够在软件行业中发挥作用。因此,在授课时,我们不能拘泥于教材内容的限制。在讲解基本原理、基本概念和基本方法的同时,介绍1些新方法、新技术。这样,有助于开拓学生的视野和培养创新意识与开发能力,使他们走向社会后不至落伍。
3。课程的实践性强。
软件工程是1门实践性很强的课程,它是各种开发经验的总结与提炼。在学习过程中不但应注重概念、原理、方法和技术的掌握,更应注重方法、技术的实际应用。学习软件工程必须投身于软件开发的实践,才能真正领悟软件工程的精髓。
实际教学当中,这门课的教学效果往往不是很理想,教师觉得这门课教起来较困难,学生学习中多数也觉得枯燥无味,很难达到较好的教学效果或获得较强的实践能力等预期目的。如何改善?结合软件工程的课程特点,笔者认为可以从以下几个方面来改进《软件工程》的教学质量。三、软件工程教学改进的内容和方法
1。教学过程引入实际案例
软件工程课程涉及面很广,如果不结合实际工程项目进行教学,很难把教学内容教授给学生。因此,在教学过程中引入案例,将复杂抽象的概念用具体生动的实例进行诠释,能够收到事半功倍的效果。例如,在授课时教师可结合1个“学校教材购销系统”实例,给学生介绍具体的开发过程和方法。
另外,学校还可邀请领域内有实际经验的资深程序员,针对软件工程中具体理论和方法在实际开发中的应用,在课堂上和学生进行面对面讲座,深入浅出地作讲解。这样,学生可以更加熟悉、掌握软件开发的过程。
2。组织课堂讨论,形成教学互动
我国有句名言:“授人以鱼,不如授人以渔”。学生是教学活动的核心,教师要利用合适的方法调动学生的积极心理和参与意识,改变传统的教师高高在上的教学方式,让学生参与教学过程,有机会发表自己的看法。
比如在讲授需求分析这章内容时,可结合“学校教材购销系统”这个案例,要求学生按照软件工程教学的思想和方法认真做好需求分析。在实施过程中,首先由学生独立思考,给出解决方案。然后在课堂上,组织学生进行讨论,分析各自解决方案的优劣,并进行综合。最后由老师进行总结和评价,指出该案例所涉及的理论知识及其应用方法,就学生提出的问题进行解答。这样通过组织学生讨论,可使学生进1步理解和掌握课程内容的方法和步骤,使抽象的知识变得看得见,用得着,大大激发了学生学习的兴趣和自信。
3。加强实践环节
从本质上看,软件工程的实践性和综合性是其他相关课程难以比拟的。因此,必须结合设计项目和实际应用加以施教,才能取得良好的教学效果。那么,在把握教学进度的同时,必须及早安排好课程设计,让学生同步开展课程设计。这样,理论课讲完了,课程设计也基本结束,学生们能从理论和实践的结合上,加深对软件工程知识难点、重点的理解,进1步深刻理解软件过程和系统消化理论知识,训练项目设计的思路,锻炼实际开发能力,培养严格规范的项目开发方法和步骤,体验文档编写整理、阶段性评审总结以及软件测试等各个方面的工作流程,直接培养了学生从事实际开发的能力。
四、结束语
在教学中,我们还应根据学生的具体情况,因材施教。总之,通过不断改进教学,使学生能更好地理解、掌握知识,运用所学服务社会。
参考文献:
(1)授课内容引入案例。教师在教学过程中引入与理论知识相匹配的实际案例,将比较抽象的软件工程原理、方法和技术转为具体生动的案例进行诠释,增强理论教学的艺术性、科学性、趣味性、形象性,使学生能够在课堂上深刻领会和理解软件工程的思想和方法,教学效果收到了事半功倍。
(2)适时更新教学内容。近几年,软件原理、方法和技术发展较快,许多适应时展的软件不断涌出,而目前的教材虽不断改版更新,但其更新的速度远远跟不上软件工程的发展。因此,教师在进行理论讲解时,除了要教授学生基本原理、技术和方法外,还要时刻关注新内容的出现。
(3)制作丰富多彩的课件。采用多媒体教学手段,在课件中插入图片、动画、声音、视频等多媒体元素,使教学内容更加充实和生动。
(4)课堂小组讨论。从小问题到大问题,让学生参与教学过程,有机会发表自己的看法。课堂讨论和分析试验,使理论有实践作支撑,抽象的知识变得看得见,用得着,大大激发学生学习的兴趣和自信。
二、实践教学内容多样化
软件工程理论的讲解是课程学习和技能培养的基础,而软件工程中许多理论内容如果只是教师讲解不加以实践,内容本身就会变得空洞和不可理解,例如:软件复杂性计算、软件可靠性与安全性的测量标准、结构化的实现方法等都需要学生动手实践才能更好地理解知识本身的内涵。掌握概念、原理、方法和技术,熟练应用软件开发实践中的方法和技术是“软件工程”课程对学生的培养目标。
(1)课程角色扮演。教师预先选择若干小项目,班内学生根据自己对项目熟悉情况选择项目名称,划分项目小组,每组人数不超过6人,每个项目小组成员根据自身特长选择不同软件工程角色,例如项目负责人、需求分析负责人、设计负责人、编码负责人、测试负责人和用户代表,进行项目分工。项目组成员按时完成自己负责任务,撰写相应文档。教师帮助学生分析和解决所遇到问题。在整个开发过程可以体现“学以致用”的思想,实现理论与实践相结合。
(2)课程设计。课程设计主要是针对高年级学生在学习软件工程课程时开展的专项训练。课程设计采取在学校内模拟IT企业环境下完成来自企业案例或开发一些具有应用价值项目或学校教师承担的开发项目的部分开发工作,也可以是学生自选项目,整个课程设计阶段严格按照工程实施的基本思想来实施。(3)加强校企合作。一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位实地实习。
三、考试方式多样化
传统的考核方式已经不能反映学生实际软件开发的水平,也与多样化的教学模式不相匹配,为此多样化的考核方式才符合现实需求,主要包括:笔试、课后角色扮演、课程设计和项目总结。
(1)笔试占总成绩的35%,主要考查学生理论知识的掌握情况和学习效果。
(2)课后角色扮演占总成绩的15%。由教师根据每位学生在课后角色扮演中的具体表现进行打分,主要由3部分取平均值组成:1/3*(整个项目的成绩+自己负责完成的文档成绩+组内其他成员负责完成的文档的平均成绩)。
(3)项目总结或心得体会占总成绩的15%。根据学生在软件开发过程中所撰写的经验和教训总结报告、每个小组成员建立的个人开发记录或日志的实际情况,相互打分。四、基于多元教学模式课程改革方案基于上述改革理念,按照软件工程开发原理、方法和技术,选用典型项目案例,将学生按照项目分成若干个小组,每组人数不超过6人。每个小组对应着一个具体的项目,每个人对应着一个具体工作过程,按照如下步骤进行多元教学。第一步,教师选用合适的教学内容,制作丰富多彩的课件,对学生进行基本理论和基本技能的讲解。在每一个软件生命周期结束后,教师进行案例场景描述。教师按照理论知识的内容,选择相应的案例进行描述,学生将所学内容运用到相关案例中。教师通过案例让学生明白理论知识如何应用,学生通过案例体会到小项目中所学的原理、方法和技术是如何实现的。第二步,课后角色扮演。学生通过分组讨论的方式,完成项目分工,明确自己在项目中所扮演的角色。所有的任务通过集体讨论的方式,决出所要完成的任务,并由相应的角色人实际操作完成。例如,需求分析一章内容,学生课后进行项目小组讨论,决定需求分析的内容,进行相应的需求分析,并由扮演需求分析人员的学生完成需求报告。软件开发过程需要整个团队的通力合作,根据学生的性格、表达能力、开发能力、理论基础掌握情况等方面进行人员分组,将具有不同特点的学生组成一个团队完成项目开发。这种团队合作的方式,既能发挥学生各自的特长,又能培养学生的团队合作精神。第三步,课程设计。当全部内容讲解完成,就可以开始长达2周的课程设计内容了。这段时间要求项目小组,彻底完成一个由教师虚拟的项目。此步骤中,主要培养学生良好的科研习惯,在开发过程中及时总结经验和教训,建立个人开发记录或日志,理论联系实际学着开发软件。第四步,学生总结,教师点评。学生经过多个教学环节后,每个团队在一定程度上完成了各自的项目任务,对各自团队的成果进行总结。教师听取每个团队的汇报后,从横向和纵向两个方面对项目成果之间进行比较,从而让每一位学生明白自己在团队中发挥了什么作用,自己哪些方面不足。第五步,请进来,走出去。通过学校和企业合作的方式,一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位,实地实习。
2CDIO模式下实践教学体系的构建
软件工程是一门实践性很强的专业,应用型、工程型软件人才的培养定位更加强调学生动手实践能力的培养和工程方法学的训练,因此,实践教学的体系建设和教学效果对学生的培养质量起着至关重要的作用。借鉴和吸收CDIO工程教育理念和标准,我们从教学内容和教学方法两方面对软件工程专业实践教学体系进行了重新构建和实践。课程实验、课程设计、综合实训、毕业设计四个层次循序渐进、由浅入深、环环相扣;在教学方法的构建上,我们从工程教育的角度出发,形成了“案例牵引、项目驱动、团队合作、引导互动”的教学模式。
2.1教学内容的构建
在教学内容的构建上,我们按照“以CDIO培养大纲为指南、以项目设计为导向、以工程能力培养为目标”的原则,将软件工程专业的实践教学体系分为以下四层次。2.1.1课程实验课程实验是单门专业课程教学中的实践环节,也是整个实践教学体系的基础,对学生基础专业技能的培养具有重要作用。为了加强实践教学,我们在绝大部分专业课和专业基础课中都设置了课程实验,根据教学目标的不同,课程实验设计为验证性、设计性和综合性等不同的层次。对于实践性很强的专业课程,如程序设计基础、面向对象程序设计等,采用完全实验教学的方式,通过一个完整的项目将课程知识结构串联起来,并通过“分而治之”的形式来学习各个知识点,将教师讲解与演示、学生实地操作有机融合起来,最后完成整个项目,以培养学生的动手实践能力和专业兴趣;对于理论性较强的专业课程,如数据结构、操作系统等,采用理论讲解与上机实践并举的方式,加强学生对专业基础理论知识的理解与应用。2.1.2课程设计课程设计是实践教学体系的第二层次,是在课程实验的基础上,选择一些实践性强且具有代表性的课程作为单独课程开设综合性课程设计。例如,Java程序设计课程设计、软件工程课程设计等。与课程实验相比,课程设计具有综合性和实用性的特点,学生在教师的指导下综合运用相关课程的知识和技术完成一个完整的设计或实现。通过课程设计的训练,培养学生运用专业知识分析问题和解决问题的能力,使学生的专业技能得到进一步的提升和拓展。2.1.3综合实训综合实训是以课程设计为基础,综合运用多门相关课程知识完成一个工程项目的实战训练。综合实训以项目为载体构建知识结构,将学科知识、专业技能与工程实践有效结合,体现软件工程领域中的工程学和方法学的实施,实施技术与管理能力训练和职业综合素质综合的培养[4]。根据方向不同,我们在软件工程专业开设了两门综合实训课程:(1)软件开发综合实训。以软件生命周期为主线,综合运用程序设计、数据库应用、软件工程、软件项目管理等学科知识,严格按照软件开发的流程与规范,完成一个软件项目的开发,最后提交软件产品和相关技术文档。(2)软件测试综合实训。要求学生以软件开发综合实训所完成的软件产品为被测对象,综合运行软件测试与质量保证、软件测试流程与方法、测试框架与自动化测试等学科知识,使用软件测试的方法与技术,设计测试用例和测试脚本,完成被测软件的功能测试与性能测试,生成测试报告,并对测试结果进行分析。2.1.4毕业设计毕业设计是实现人才培养目标的重要手段,是实践教学体系中最后一个综合性、创造性的实践环节;是对学生基础理论、专业知识与实践成果的全面总结,是学生综合素质与工程实践能力的全面检验[5]。为了提高毕业设计的质量,我们从以下三方面层层把关。(1)在课题选题上,强调选题的可行性和实用性,忌空忌大,选题最好能与指导教师的科研方向或学生的实习工作相关联;(2)在过程控制上,实行师生定期交流与汇报制度,确保毕业设计按计划保质保量完成;(3)在毕业设计报告及相关材料的撰写上,从规范性和科学性两方面严格要求,确保质量。
2.2教学方法的构建
2.2.1案例牵引案例教学是实践教学中的常用手段,具有直观性高、互动性强的特点。按照CDIO大纲能力培养的层次要求,结合各实践课程的教学目标,我们在实践教学中精心规划和设置了不同层次、不同复杂度的教学案例,以案例实现过程为驱动来安排教学内容和方法。在教学过程中,以一个具体的案例为线索,把教学内容巧妙地融合在案例之中,学生以完成案例任务为目标,在老师的指引下对目标问题进行分析与分解,并通过动手实践解决问题,真正做到“做中学”和“学中做”。在完成任务的过程中,不仅使学生的动手实践能力得以提高,也培养了学生的创新意识、创新能力以及分析问题、解决问题的能力。2.2.2项目驱动工程实践能力是专业技能的进一步升华和提高,是从整体上对工程项目的一种实做能力,是工程类毕业生必备的核心素质。根据CDIO“做中学”和“基于项目的教育和学习”的思想,我们在实践教学中广泛采用项目驱动的教学模式。强调以一个产品或系统从构思、设计、实现到运作的完整的构建过程来培养学生的工程实践能力。以软件开发综合实训课程为例,在课程中引入“项目驱动”的教学理念,以软件生命周期为主线,以项目为载体、任务为驱动开展实践教学。通过一个软件产品从项目启动到需求分析、设计、实现、测试、运行维护的整个生产过程的实战,培养学生的工程能力和综合素质。2.2.3分组教学团队能力是CDIO大纲要求工程毕业生必备的一种能力。在实际教学过程中,我们模拟企业的真实环境,将所有学生分为若干项目小组,每组由一名组长和若干名组员构成。根据任务分工不同,每名学生都被赋予一定的角色,组员在组长的指挥协调下通力合作,共同完成实验项目。实践表明,分组教学模式能较好地激发学生的学习热情,组员之间分工协作、互学互助,学生的沟通能力、协作精神和团队意识大为提升。2.2.4革新考核方式考核是对学生学习成果的认定和评价,良好的考核机制能对学生的学习过程和学习动机产生正确的指引作用,促进教学质量的提高。在实践课程的考核上,以能力培养为导向,采取多元的考核方式。引导学生在平时项目实训过程中加强专业技能的训练、工程能力的培养以及综合素质的提高。(1)对基础性的课程实验,重点考核学生专业知识与技能的掌握情况,采取平时实验成绩与期末上机考试成绩相结合的方式。(2)对课程设计和综合实训类课程,重点考核学生的工程实践能力和团队协作能力。采取以作品演示、项目答辩为主的考核方式,同时规范化的文档资料也是重要的考评指标。(3)对于毕业设计,重点考核学生的创新能力。科研能力以及分析解决问题的能力,考核方式同综合实训。总之,以能力培养为导向,注重能力考评。2.2.5校企合作校企合作是培养学生的综合素质和实践能力的重要途径。为了增强人才培养的针对性和毕业生与工作岗位的无缝对接,我们同中创、中远等知名软件公司开展校企合作联合办学。充分利用学校和社会两种教育环境和教育资源,联合构建工程型实践教学队伍与教学平台。一方面,学校聘请企业一线的工程师作为兼职教师来校授课,不仅充实了实践教学队伍,更带来了企业的最新技术和行业资讯;另一方面,选派优秀教师到企业学习锻炼,参与企业项目,提升师资队伍的水平。此外,通过在企业建立校外实训、实习基地,使学生尽早感受企业文化和接触到真实的企业项目,也为学生就业积累了丰富的工程实践经验。