郑大鹏 张晓燕 张申勇
摘要:提出在软件工程综合实训课程中融合有关理论教学模块,通过模拟软件企业实际工作环境,让学生在完成软件项目的过程中掌握软件工程的实战知识,介绍基于建构主义的软件工程综合实训法并付诸实施。
关键词:课程融合;企业环境;综合实训;软件工程;建构主义
1、背景
为了提高软件工程人才培养水平,探索适合计算机学院特点的人才培养方案,几年前我们提出了一种创新的软件工程人才培养模式。我们于第6学期设置大型综合性软件工程实训课程,在课程中融合软件工程的理论教学模块,同时通过模拟软件企业实际工作环境,让学生在完成软件项目的过程中掌握软件工程的实践知识。为了落实这种创新的综合性实训课程,我们还对综合实训的软件开发过程进行了探讨。根据上述人才培养思路,我们修订了软件工程专业教学计划。该计划在第6学期安排了一门13学分的软件工程综合实训课,与系统分析与设计(4学分)、软件开发过程管理(3学分)同修。按照我们的实训理念,后两门课将融合在综合实训课中开展。2014年春季学期,根据修订后的教学计划,我们首次对2011级软件工程专业.NET技术方向的59名学生实施了此综合实训课的教学。
2、综合实训课主要实施内容
按照课程的构想,软件工程综合实训一方面要通过“做中学”促进理论课的教学,让学生掌握软件工程技术方面的知识;另一方面要通过企业工作环境模拟,让学生在项目开发中掌握软件工程管理和过程方面的知识。这意味着课程覆盖面很广。为了确保成功,我们将此次实施的重点放在以下几个方面。
2.1真实工作场景的模拟
在实践课程中,我们尽量模拟真实的工作场景。除了开发时使用与企业接近的开发工具、服务器环境和工作方式,最重要的是要求学生像在企业上班一样,每天都要到实训室工作,并记录考勤。
这样做可以给学生一种小组开发的氛围,同时由于开发小组数据和代码保存在单独的服务器上,如果没有实训室网络环境支撑,学生无法组织有效的团队开发。
2.2小组软件开发
开发活动以小组为单位,每个小组由5人组成,分别担任组长、开发经理、计划经理、测试经理和技术支持经理等角色,小组开发活动参照“小组软件过程”的指引。
2.3、理论课融合
在实践课开展过程中,有关理论课的内容和进度根据实践课需要安排。涉及的理论课除了与实训课同修的系统分析与设计、软件开发过程管理,也包括实践课中的理论教学模块Web程序设计技术、软件测试管理与实践、数据库设计及管理等3个模块。这些理论教学的内容尽量以学生项目开发需要为取舍依据,内容组织顺序尽量以项目进展需要为参考,所有课程都围绕同一案例(送花网站)从不同的方面展开。
2.4迭代开发
按照业界流行的软件开发过程,软件开发以3周为一次迭代,每次迭代进行必要的需求、分析、设计、实现、测评等活动,通过多次迭代逐步完成软件功能。整个实训包括开始1周,5次迭代15周。这与原来设想相比减少了1次迭代,主要是因为学期长度已改为19周,需要留出2周做期末考核,l周做成绩评定和提交。
2.5阶段考核和小组考核
由于实训课时间较长、学分较多,为了及时掌握学生的学习情况,也为了减少一次性考核对学生的压力,本课程采用阶段考核方式。大约每两次迭代即对实训课中融合的理论知识进行一次考核,共进行三次。此外,为了加强团队建设,让学生有集体感,有些作业、考核以小组为单位评分。每门课30%的成绩由考勤、参与度和表现决定,30%由团队表现和成果决定,40%由学生个人的书面考试或书面报告决定。
3、实施过程
3.1分组与选题
课程开始,首先将学生每5人分成一组,老师根据学生所在行政班并考虑以往学习成绩给出初步分组方案,原则是确保每组有一名学习成绩相对较好的同学,尽量让同一行政班的学生在一组,如果有充分的理由学生可以提出微调。由于学生共59人,故分为12组,第12组4人。第12组由实验班中学习成绩较好或编程能力较强的学生组成,并被委托开发本实训课程急需的支撑平台系统,以备下一届学生上课使用。
第1-11组学生要求参考老师提供的送花网站功能和代码,使用ASP.NET技术完成一个电子商务网站。电子商务网站类型由学生从老师提出的候选类型中选择。每个小组要求做业务不同的网站,但都应完成一个完整的购物流程,包括浏览商品、选购、下订单、网上支付、订单查询等环节。各小组选题情况见表1。
3.2开发环境搭建
课程开始,教师首先要求各小组用一台自备的笔记本电脑作为小组开发服务器,安装并配置服务器操作系统(Windows Server或Windows 7)、数据库管理系统(SQL Server)及源代码管理软件(Visual Source Safe),而实验室电脑作为开发工作机已经预先安装了必要的软件,可直接使用。
要求学生用自己的电脑做服务器主要是为了让每组学生都能实践服务器系统的安装和配置、源代码管理、远程数据库连接和读写。另外实验室电脑安装了还原卡,每次启动都会还原,数据无法保存。
3.3Web应用开发
本课程介绍给学生的是ASP.NET Web Form编程技术。因为先修课C#高级程序设计中已介绍过此技术,实训课的目标是加强以往知识并付诸实践。此外,这种编程技术入门容易,比较适合本实验班大部分同学掌握。
第12组学生提出使用他们感兴趣的ASP. NET MVC技术完成项目,指导老师支持学生大胆尝试。第4组同学提出浏览器端编程使用HTML+CSS+AJAX技术,也获得同意。这体现了因材施教的思想。
本课程实施的一大特色是为学生提供了完整的送花网站代码和文档示例,让学生在模仿过程中建立自己的编程经验。
各小组开发活动在类似企业的分布式环境下进行。学生每日开始编程时,先从服务器上签出源代码;每日结束时,将修改后的代码签入服务器。每日集成活动要求小组测试经理负责保证每日签入的代码都是完整、可运行的。此外,每个成员开发时直接读写服务器上的数据库,确保数据结构的一致性。
3.4Web代码重构
开发过程中,要求学生在第一次迭代完成网站的原型;然后在第2、3次迭代添加功能代码实现网站要求的功能;最后在学习多层体系架构、设计模式等方面知识后,在第4、5次迭代对完成的代码进行重构,使系统优化为多层体系结构,并在有关功能实现中适当使用设计模式、Web服务、Windows服务等技术。为了便于学生模仿和体会代码重构的概念,示例代码按照迭代阶段分为初始版、多层架构版及分布技术与设计模式版,并分别在不同的时间节点提供给学生。后两个版本的示范代码中留有大量重构的痕迹供学生参考。
3.5小组活动
在开发过程中,要求小组开展每日晨会、考勤、每周例会、周计划、日志、周报、每周互评等开发活动。由于缺少支撑软件的辅助,以上某些活动未能很好监督,执行还不够到位。但考勤、周例会、周计划等活动基本坚持下来。
在技术层面,小组开展的活动包括业务建模、范围识别、需求描述、原型设计、系统分析、设计、编码、测试、每日集成、源代码管理等。由于项目非真实,管理软件缺乏和准备工作不足,尚有代码走查、测试驱动的开发(TDD)、风险管理、变更控制等未很好落实。
3.6理论课教学
按照建构主义认知理论,在实践课中融合理论模块的教学主要是为学生的自我知识构建提供素材和帮助,这既能提高理论课的教学效果,也可以确保实践项目的完成。为此我们要求理论课的内容必须围绕项目开发的实际需要展开,理论课中的例子必须与项目相关,且各种不同的理论课应以同一项目为实例,这样可以从不同的角度体现各种理论知识对项目开发的作用。以上要求对理论模块教学内容的取舍和内容组织的先后顺序提出了新的标准。实际执行时,由于系统分析与设计这门传统专业课的内容不要有太大的变化,我们在设置项目需求时做了特别的考虑。例如,为了让学生了解和掌握有关多层体系架构、设计模式方面的知识,要求各小组最后完成的作品必须是多层体系架构,且要实现付款功能(为此,笔者事先实现了模拟的公共支付网站及相关编程接口供学生开发使用),付款的实现还要考虑支持多种不同的付款方式。这样,教学大纲规定的有关知识点就能在项目中体现了。在理论课内容组织顺序方面,为了与项目开发的需要配合,开始几周要安排较多的理论课教学,开发的进度则相应减慢。
3.7全程辅导
本课程要求学生在长达一个学期的时间里,每天到实训教室工作或上课。这是本课程的特色,也是模拟真实工作场景的需要。在此过程中,理论课之外的所有时间都安排老师全程辅导,一方面监督学生的工作,了解各小组的进展;另一方面可及时解答学生的问题,提高学生的学习效率及效果。
4、实施结果
由精心的组织和认真的执行,本实训课首次实施最终顺利完成,12个小组都提交了自己的作品。这些作品虽然水平参差,但都已超过往用实践课,基本达到了本校毕业设计作品要求,有些小组作品甚至已达优秀毕业设计水平。
为了比较新的实训课与以往同类课程的教学效果,笔者连续两年对自己所带的软件工程综合实训课学生进行了问卷调查。作为对比的2013年综合实训课按照未改革的传统模式进行。凋查方法是采用统一的规范化问卷,要课程结束时按照自愿和匿名的原则请已完成答辩的学生填写2013年调查班级共42名同学,收回有效问卷38份;2014年共有59名同学,收回有效问卷48份问卷中代表学生对实践课总体印象和评价的陈述包括以下两部分。
问题1:本课程让我学到了软什开发的实战知识;
问题15:总体来说,本实践课开展得很好
这两项的调查结果如图l、图2所。
从图1可知,2013年89%的同学对课程表示认可,其中强烈认可者占18%;2014年,采用新的教学模式后,对此问题表示认可者上升到92%,其中表示强烈认可者显著上升到42%。根据图2,对本课程总体上认可的学生从79%上升到了85%,其中表示强烈认可的从26%显著上升到了56%。
5、结语
尽管基于课程融合和企业环境模拟的软件工程综合实训实施有一定的困难,但只要精心计划、充分准备,该实训课方案是完全可行的。尽管第一次实施尚有不少需要改进的地方,但实施的结果表明,这种实训方式有利于提高学生的软件工程实战能力,并能显著提高学生对课程的满意度。