摘要:鉴于目前大学《软件工程》课程教学中遇到的困难,本文提出了一个切合实际的教学方法,即以学生的实际情况为基础,以企业软件开发过程中的问题为引导,以冰酒销售系统实际项目开发为主线,并以大作业分阶段提交的方式进行考核的教学方法。本教学方法在深圳大学软件工程专业09级50多名学生进行实验。教学效果良好。
关键词:教学改革;软件工程;教学方法
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2012)02-0163-02
一、概要
1968年秋,NATO(北约)科技委员会召集近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。会上首次提出软件工程的概念[1]。软件工程是指导计算机软件开发与维护的工程学科;是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理措施和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它[2]。虽然软件工程应用了几十年,软件人才依然紧缺,大部分大学毕业生刚毕业缺少项目经验、实用技能和职业素质。用人单位不得不再投资,对刚毕业的大学生进行再培训,IBM公司和Microsoft公司对新员工的技术培训就是一个很好的例子。虽然各高等院校意识到这一现象,对软件专业、计算机应用专业都开设有软件工程课程,但是由于软件人才培养的实践性、连贯性、分工协作性,使得在大学环境下培养软件人员的方法、手段上面临着不少困难,具体表现在:软件专业的大学生在校园里缺乏实战项目、大学缺乏软件项目经理、缺乏有实际软件项目开发经验的教员。目前国内《软件工程》教学还是老师讲得多,学生做得少。学生也只是注重具体的编程能力,对于软件开发项目的全局不够重视,团队观念不够强,学生学得不扎实,兴趣不是很高。鉴于本文作者具有国内外软件开发公司的多年工作经验、多个项目的项目经理的工作经验,具有国内外大学的学习、科研经验,具有《软件工程》、《软件开发》、《项目管理》等课程的教学经验,特此介绍《软件工程》课程的教学方法,从理论和实践两个方面促进高校《软件工程》课程的教学改革,目标是充分调动学生学习的积极性、主动性和能动性,培养学生大型软件开发项目的综合能力。
二、教学目标和内容
本课程的教学目标是让学生掌握求解软件的基本思想、工具、技术、过程和方法,为从事计算机软件开发、测试与维护奠定良好的基础。从实用的角度讲述软件工程的基本原理、概念和技术,强调软件开发过程的方法研究,使学生掌握软件分析、设计、实现和测试等基本技术以及面向对象分析和设计的基本方法。通过案例研究和实践,实际运用软件工程的原理,掌握软件项目管理和团队开发的基本技能。具体内容包括软件工程与软件过程概念、结构化分析、设计和实现、面向对象的分析、设计和实现、软件项目管理基础、统一建模语言基础等内容[3、4]。
三、教学方法
众所周知,大学本科软件工程及其相关专业的学生,在大学学习期间,对软件开发接触的不是很多,特别是大型的项目,更是时间上和环境上的不允许。因而学生更注重于具体的编程技术而缺乏项目组及其团队精神。为此我们探索对《软件工程》课程的教学进行改革。中心思想是以学生实际情况为基础,以实际项目开发为主线,以企业软件开发过程中的问题为引导,特别是以本人多年的企业软件开发经验为实例,在讲述理论知识的同时,举出软件开发过程中遇到的实际问题,并讲述利用理论知识和其他知识解决问题的方法。为此特别设计若干个实际开发案例。从课程的第一节课开始,就要求学生和实际的开发案例联系起来。随着理论知识的逐步讲解,软件项目的实际开发过程的各个阶段也接着逐步进行。每一个阶段的完成,就是下一个阶段的基础及开始。最终系统地完成整个软件开发任务。具体来说,就是将课程讲解分成软件需求分析、系统原型建立、系统设计实现、系统测试、和系统总体报告等五个相互关联的软件开发阶段讲解,考核方式也是围绕着这五个阶段,要求学生每个阶段都提交阶段报告,最后现场演示并提交总体开发报告。这样既解决了以往教学上理论讲解和实际软件开发脱节的问题,又解决了对众多学生考评的问题。下面以一个冰酒销售系统为实践案例进行说明:首先,在教学的第一堂课,就提交给学生软件开发案例,即用户(冰酒销售商店老板)自述:“我是一个果园农场主,又是一个冰酒供应商。我向市场上提供不同种类的冰酒。我的客户可能是小商店、超市、批发商、或个人。客户可以通过电话购买冰酒,也可以到我的商店上门买酒。我以前是将每一次客户及购买信息登记到一张卡片上,并计算费用。我还要根据客户不同的要求送货,当然送货费用越远越高。我将所有的卡片放到一个盒子里以便查询。月末我还要对卡片进行统计。随着我的销售量的增加,我发现越来越难于应付了。现在需要用电脑系统来管理。”让学生已开始就有思想准备,就有一个目标,就有一个问题,即如何去完成软件开发任务。然后引导学生要有团队精神,要求学生自行组成软件开发小组,每一个开发小组4人,最多5人,最少3人。并将软件开发任务和以大作业形式分五个阶段提交报告的考核形式及要求分发给学生,使学生能够真正从软件工程和实际软件开发的角度对该课程的学习内容和要求有一个初步的认识。接下来的课程内容按照上述实践案例的实际项目开发过程进行分阶段段讲解和实施。第一阶段是软件需求分析阶段。本阶段首先讲述软件工程与软件过程概念,然后讲述结构化分析的方法和手段,再接着引入面向对象的程序设计和面向对象的需求分析方法,组织学生讨论,模拟软件需求调研以及起草用户需求分析报告。本阶段结束时,每个开发小组提交一份软件需求说明报告。报告内容要求包括报告封面、目录、各组员单独起草的软件需求说明报告、组内讨论分析结果及每个成员对该报告的贡献比例、和开发小组提交的软件需求说明报告。注意事项:可以按照不同的报告模板格式书写,但是主要内容不要遗漏,主要内容应该有实体关系图、数据流图、数据字典、概要功能说明、和详细功能说明。第一阶段提交的软件需求分析报告,我们会及时批改并反馈给学生。第二阶段是系统原型建立阶段。该阶段是在第一阶段的基础上进行的。在该阶段,主要是介绍各种软件工程的开发方式,包括结构化开发方式和面向对象的开发方式,并选择目前比较流行的原型建立快速开发方式对冰酒销售管理系统进行开发。特别强调系统原型的建立一定要在第一阶段的软件需求报告的基础上实施,切忌想当然的自行设计。该阶段结束时要求提交系统原型报告,其内容要求有报告简介、报告目标、报告范围、定义及缩略语、系统原型设计(对于本案例,主要是界面设计)图示及文字说明,报告后面必须有附录,即大作业第一部分,按照老师反馈信息修改后的小组提交的软件需求说明书。第三阶段是系统设计实现阶段。本阶段是在第一和第二阶段的基础上进行的。在第三阶段,主要介绍结构化程序设计的准则,包括模块化、抽象、迭代、信息隐藏、启发性规则以及面向数据流、面向数据结构的设计方法,同时介绍面向对象的程序设计的基本方法、设计风格,以及统一建模语言等设计工具。第三阶段要求在软件需求说明报告和系统原形报告的基础上提交系统设计、实现报告。报告内容及格式要求有简介、目标、范围、定义及缩略语、系统设计(包括用例图、类图、顺序图、活动图、和功能模块图及其文字说明)、系统实现(包括描述系统实现的环境,开发工具等)、参考、和附录(包括文档说明、小组成员贡献说明等)。第四阶段是系统测试阶段。本阶段是在第三阶段系统实现的基础上进行的。这一阶段主要讲解软件测试的各项技术和测试方法。要求学生提交测试计划和测试报告。其中测试计划内容应该有范围说明(冰酒系统概述和文档描述)、参考资料、测试计划(包括单元测试、集成测试、和系统测试的测试进度,对功能和性能进行测试的测试方案,测试环境,和测试人员安排)、和测试说明(包括功能测试说明,要求提供测试用例,例如系统进入测试、客户管理测试、产品库存管理测试、订单录入测试、订单修改测试、单查询测试、订单统计测试,以及性能测试,例如压力测试、系统反应速度等。软件系统测试报告内容应该有范围说明、参考文献说明、测试结果概述、详细测试结果说明(包括各功能模块的测试,要求截图及说明)、和总体评价。在完成了上述四个阶段的任务后,就是第五阶段的系统总体报告阶段。本阶段主要是概括总结,综合、串通上述四个阶段。在此阶段主要介绍软件开发过程中遇到的一些实际问题,而这些问题往往与各阶段的衔接有关。同时介绍软件项目管理,引导学生以项目经理的视野去看待问题。作为对学生的考核,要求各开发小组提交系统开发总体报告,同时作现场演示汇报,每一个学生对其他小组的演示进行现场评分,作为最终分数的一部分。
本教学方法以一个实际开发案例为主线进行讲解,解决了大学校园里缺乏实际软件项目开发的难题,提高了学生的学习兴趣,同时避免了大批学生一个老师带造成的程度差异,考核繁琐等问题。本教学方法在深圳大学软件工程专业09级50多名学生进行实验。学生们对《软件工程》课程有了初步的理解,特别是对团队精神和项目经理角色有了深刻的体会,教学效果良好。
参考文献:
[1]Roger S.Pressman,SoftwareEngineering-A Practitioner"s Approach,Sixth EditionM].McGraw-Hill,2005.
[2]Jeffrey L.Whitten.系统分析与设计方法(第6版)[M].肖刚译.机械工业出版社,2004.
[3]张海藩.软件工程导论(第五版)[M].清华大学出版社,2008.
[4]张海藩.软件工程(第3版)[M].人民邮电出版社,2010.
作者简介:朱安民,分别于1987年和1990年获得同济大学计算机科学专业学士和博士学位,于2005年获得加拿大圭尔夫大学计算机工程专业博士学位,目前是深圳大学计算机与软件学院的教师。