孔凡豹,万家山
(安徽信息工程学院,安徽 芜湖 241000)
《软件工程》项目化教学改革探索
孔凡豹,万家山
(安徽信息工程学院,安徽 芜湖 241000)
《软件工程》课程的教学不能只注重理论内容的讲解,更应强调工程化思维能力和实践动手能力的培养.本文围绕企业级项目开发的各个阶段,介绍教师与学生在《软件工程》课程的教学与学习过程中角色的转变,以项目经理及开发人员的行为准则来完成企业级项目的开发与管理过程.以项目管理平台作为支撑,对项目开发的各个阶段进行流程化管理,建立标准规范的文档评审及考核机制,实现《软件工程》课程教学的“工程化”改造,建立工程化实践与理论相结合的教学体系.实践证明,这是一种成效显著的教学改革方法.
软件工程;教学改革;项目化教学;工程化教学;教改探索
《软件工程》是高等院校计算机专业教学中的一门必修课程,该课程具有较强的综合性与实践性,涉及计算机、数学、管理等多个学科的知识,是在软件开发过程中不断总结经验而获取的理论指导课程.
该课程旨在培养学生在软件开发与设计过程中的工程思维能力,项目管理能力,团队沟通与协作的能力,掌握如何采用工程化的理论和方法来指导软件开发过程,采用先进的技术和经过时间检验证明合理的管理方法来提高软件质量和生产效率,也就是在给定成本、给定时间的前提下,开发出高质量的软件产品.
目前国内高校普遍采用的教学方式是传统的理论讲授,极少甚至没有实际的项目进行支撑,学生被动地听课,教学内容一般是重理论而轻实践,一整套的工程化理论和思想不能落地.学生对软件工程知识的掌握仅仅停留在理论记忆方面,很难将软件工程的抽象性和应用性落实到具体的实践项目中,课程效果远远达不到预期目标.
《软件工程》课程在国内高校的开设已有20余年历史,按说已是一门较为成熟的课程,但是大部分高校对该门课程的实施效果不能达到预期目标.究其原因主要有以下几个方面:
第一、软件工程是一门综合型、应用型学科,其本身的特点决定了它不能完全从课堂和书本上掌握,学生不可能通过单一的理论学习就能真正掌握软件工程的思想和方法.
第二、很多教师采用虚拟的项目作为教学支撑,这就使得软件开发过程中许多实际的问题和矛盾被忽略,软件工程中的工程化思想和方法得不到具体地应用和验证.
第三、学生容易对《软件工程》的抽象理论感到枯燥和乏味.由于缺乏项目开发经验,学生很难在头脑中将《软件工程》的抽象理论和实际开发过程联系起来,因此很难对该门课程产生兴趣.
第四、考核方式对过程和实践环节的关注度不够,不能满足工程化与创新型人才培养的要求.
传统的软件工程教学模式大多照本宣科,没有真实的企业项目作为支撑,与实际企业项目开发过程差别较大,如:无需求变更、无计划或者计划性不强及缺乏评审等,无法锻炼学生在复杂情况下的逻辑思维能力与解决复杂任务的能力;在没有压力的实训模式下,学生完成的任务质量不高,工程意识与规范很难养成等,并且传统的知识培养模式不能完成沟通与表达能力、分析与解决问题能力、抗压能力、团队协作等高级职业素养能力的培养.
将理论教学与项目实践有机结合起来.采用“项目化”教学方法,对《软件工程》课程的教学加以“工程化”改造,建立工程化实践与理论相结合的教学体系,让学生了解并掌握时下流行的大型软件项目开发的工程化方法和管理工具;了解软件工程各领域的发展方向;用结构化的方法和面向对象的方法开发软件项目,以及开发过程中应遵循的流程、标准和规范.
突破传统的知识点覆盖的讲授方式,采用项目式教学模式,模拟企业真实项目的开发过程,通过一个完整的项目开发过程来达到教学目的,考核方式以项目的过程和结果为导向.由指导教师先确定选题的范围、项目考核规程及里程碑计划,学生组成项目小组,每组指定一名开发组长负责小组日常项目管理、学习任务分配,团队一起收集相关材料、方案设计并进行项目实施.
讲师在项目实施过程中承担项目经理的角色,负责每个团队项目进度跟踪及过程产物评审.
具体实施分为两大阶段:
该阶段的主要目标是培养学生对软件开发相关技能的掌握和运用,同步启动软件工程理论教学,主要讲授敏捷开发、需求工程、系统建模以及体系结构设计等工程化的理论和方法,强化学生对各种软件工程思想和方法的理解与应用,同时让学生掌握和意识到软件工程中各阶段文档的编写标准和重要意义.
该阶段重点培养学生的分析与设计、解决问题的能力,以及工作计划、团队协作、工程意识等项目管理能力.在项目技能课程阶段,学生已经学习了软件项目开发的各种必备技能和知识、软件工程中的各种先进思想和方法,并初步将二者有机结合加以综合运用,侧重软件工程思想与文档编写能力的培养.强化实训阶段学生将不再学习新的内容,而是将精力完全投入在真实项目的开发与管理上,利用科学的、成熟的软件工程思想和方法进行指导,是对项目技能阶段学习成果的具体应用和落地.
本阶段将依托讯飞教育项目式教学支撑平台进行项目进度的跟踪与管理,包括项目选择、文档提交、产物评审等,使得整个项目开发过程规范、高效、透明.
该平台提供了大量经过专家评审筛选的、科学的且多次实践过的真实项目库,这些项目库都有着标准明确的需求文档,可支撑多种实训模式的项目实践过程.
强化实训期间,整个过程又分为6个子阶段:学生选题阶段、需求分析阶段、概要设计阶段、详细设计阶段、编码与测试阶段、发布与验收阶段.以下为各个阶段的目标、活动、材料(课程预先提供的资料)、产物以及考核方式和要求的具体说明:
图1 项目式教学支撑平台
1)学生选题阶段
目标:学生确定团队构成以及项目选题,组建评审委员会.
活动:本阶段主要是进行前期准备,包括项目团队的组建(自由组建或随机分配,原则上3-5人),项目选题的确定.其中最重要的还有一个是组建学生评审委员会,让学生置身于项目评审活动中,以评审者的视角来审查项目,对于其中存在的问题能够有更好的、客观的认识和理解.
材料:备选题目(项目式教学支撑平台提供).
产物:团队成员构成、小组选题、评审委员会构成.
考核:各小组提交项目申请书,教师审核.
图2 选题菜单
2)需求分析阶段
目标:熟悉用例图的绘制、用例的描述、功能模块的划分.区分功能需求和非功能需求.熟悉需求分析文档的编写.学习掌握常用项目管理方法和工具.
活动:进行问题的识别,分析出哪些是功能需求,哪些是非功能需求.对功能需求进行收集整理,并进行模块化的划分,绘制相应的用例图,并编写相应的用例描述.
材料:需求分析功能列表模板.
产物:需求分析功能列表.
考核:采用评审报告会的形式,由参与评审的团队进行宣讲,指导老师和评审委员会对该小组本阶段成果进行评审打分,按权重比例确定本次产物最终成绩,录入项目式教学支撑平台.
3)概要设计阶段
目标:熟悉软件工程中的体系结构,如分层体系结构、MVC模式等,利用这些分层结构进行项目分层设计.能够运用UML进行系统的静态建模,能够对关键功能点进行技术难度评估,进行技术调研,并给出相应技术解决方案.
活动:针对第二阶段的需求分析,对系统进行总体架构设计,功能模块的划分与设计,数据库建模与设计,绘制E-R图.画出系统主要的类图、时序图、页面原型等.对项目存在的关键性技术难点进行评估,并对相关技术进行调研,给出相应的技术解决方案.
材料:概要设计说明书模版.
产物:概要设计说明书.
考核:采用评审报告会的形式,由参与评审的团队进行宣讲,指导老师和评审委员会对该小组本阶段成果进行评审打分,按权重比例确定本次产物最终得分,录入项目式教学支撑平台.
4)详细设计阶段
目标:熟悉模块内部结构和流程的设计,熟悉模块内部调用关系的设计.熟悉使用流程图描述功能业务逻辑,使用活动图及状态图描述业务执行过程.
活动:画出各模块的业务逻辑及模块之间的调用关系,各个模块内部的设计与实现,对每个模块内部进行详细设计,编写数据库表结构说明书.
材料:详细设计说明书模版.
产物:详细设计说明书、小组内人员任务分工.
考核:采用评审报告会的形式,由参与评审的团队进行宣讲,指导老师和评审委员会对该小组本阶段成果进行评审打分,按权重比例确定本次产物最终得分,录入项目式教学支撑平台.
5)编码与测试阶段
目标:掌握本领域开发所使用的相关技术以及团队协作工具,包括Eclipse、HttpWatch、SVN等工具的使用.学习开发岗位应了解和掌握的测试技术,主要包括:普通功能测试、白盒测试、安全测试、稳定性测试等.
活动:团队进行项目开发过程中的编码与调试、测试、日常代码评审、日常工作汇报工作.
材料:代码评审报告模版、日常工作汇报模版、编码规范.
产物:项目代码、代码评审报告及跟踪情况、日常工作日报.
考核:定期对项目进度及功能进行跟进、评审,根据代码评审情况对个人及团队进行评分记录,并录入项目式教学支撑平台.
6)发布与验收阶段
目标:学习企业项目作业程序,包括打包部署、生产环境配置与管理、编写用户手册及客户培训,软件技术支持管理等.
活动:发布部署项目,提交项目测试报告以及功能验收报告.组织评审委员会对项目进行验收评审.
材料:测试报告模版、验收报告模版.
产物:部署可运行的展示项目、测试报告、验收报告.
考核:由团队进行项目最终成果展示,指导老师和评审委员会进行评审,确定项目总分.
在项目技能阶段,重点培养学生项目开发的一些必备技能、软件工程中软件设计与开发的理论和方法.而在强化实训阶段,要求学生按照软件工程的理念,选择恰当的开发方法,完成指定项目的可行性分析、需求分析、概要设计、详细设计与编码、测试部署等一系列软件工程过程,使得学生对软件工程有更深刻的认识和体会,为今后的软件职业道路打下扎实的理论和实践基础.
实施项目化教学改革后,软件工程的教学成果是突出的,具体表现在以下几方面:
1.整体开发流程符合企业项目开发过程,实现了企业级项目开发的培养目标.
2.使用项目式教学支撑平台作为实训支撑,学生从团队组成到项目立项、到需求分析、一直到最终答辩,各个阶段都由平台中间过程进行引导和监督,不会偏离既定目标.
3.降低学生对教师的依赖程度,提高分析问题与解决问题的能力.
4.教师从“保姆式”的帮助学生解决问题的困境中解脱出来,参与到更高层次的项目管理过程.
5.教师在各个过程进行产物评审,及时反馈学生存在的问题,有利于把控项目整体进展.结语
要改进《软件工程》课程教学,除了要使用常规的教学方法、合理安排好课程内容外,还要重视学生学习兴趣的培养、重视理论与实践的无缝结合,让《软件工程》的教学工作越来越实践化、工程化.
〔1〕孙俊逸.计算机教育教学改革与实践[M].武汉:华中科技大学出版社,2009.
〔2〕黄丽莉.任务型教学法在国际商务英语演说的实证研究[J].长春大学学报,2015(6):129-133.
G642.0
A
1673-260X(2017)12-0182-03
2017-10-11
大数据时代下个性化教学研究(2016xjjyxm08)