软件工程专业实践教学改革的研究与探讨

2014-05-30 18:07邓泽林谢中科
中国电力教育 2014年8期
关键词:软件设计考核方式软件工程

邓泽林 谢中科

摘要:软件工程专业是一门实践性极强的学科,传统的教学方法侧重于软件编程,而忽视了软件工程的系统性和工程化的特点。对于软件工程专业实践性教学中存在的问题提出了一些改进的方法和措施,包括加强软件项目设计环节、实施大型软件项目、开展软件测试和课程考核改革等,实践结果表明改革措施很好地改善了学生的实践能力,说明了改革措施具有实际意义和参考价值。

关键词:软件工程;实践教学;软件设计;软件测试;考核方式

作者简介:邓泽林(1977-),男,湖南常德人,长沙理工大学计算机与通信工程学院,讲师;谢中科(1968-),男,湖南长沙人,长沙理工大学计算机与通信工程学院,副教授。(湖南 长沙 410076)

基金项目:本文系长沙理工大学校级精品课程的研究成果。

中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2014)08-0176-02

当前,随着信息技术的持续发展和国家政策的有力支持,软件产业得到了长足的发展与进步。为了更好地培养软件工程人才,很多大学相继开设了软件工程专业,专门进行软件工程课程的教学和软件从业人才的培养。经过多年的教学实践,软件工程专业不仅培养了大量的软件工程的人才,还积累了相当的教学和实践经验,包括课程教学的改革[1]、教学团队的建立[2]、学生能力评价方法[3]和考核方法[4]。然而,软件工程专业涉及的是复杂的课题,专门研究如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科,它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。[5]由此可见,软件工程的研究范围包括计算机科学、管理学等领域,形成了一个交叉学科,而且目前软件工程尚未形成成熟的教学模式,教材也少有提供较为成熟的设计、训练和实践内容。

软件工程的这些特点导致了软件工程的实践教学面临着诸多困难。传统的软件工程教学中过多地强调理论教学,忽视软件工程专业系统性、工程化的特点,使得学生难以按照软件工程的原则实施项目,造成学生的专业能力有所欠缺,难以满足企业的要求。在此,长沙理工大学计算机与通信工程学院软件工程专业结合多年的教学经验,针对传统实践教学的弱点提出相应的改革方案,以改善学生的软件工程实践能力,提高学生软件开发水平,更好地满足企业的用人需求。

一、教学中的问题

1.忽视软件项目的分析和设计环节

软件工程是通过健全的工程原则来进行软件项目的开发、管理和维护的。与道路、建筑等工程项目具有完备的图纸、方案相似,软件工程项目也应具有大量的分析与设计文档用于后续项目的开发和维护。然而,传统的教育比较注重软件编程、系统实现等环节,而忽视了项目的分析和设计环节,从而使得软件项目难以有效地实施和管理。

2.缺乏团队开发经验和项目管理经验

软件工程往往涉及较大的软件项目,这些项目难以通过个人完成,因此需要团队的协作。而在课程教学中由于场地、时间等因素的限制,难以开展规模较大的项目。常用的教学案例往往规模较小,单个学生即可编程实现,导致学生缺乏团队开发经验。没有团队开发经验将会导致学生对团队开发环境不熟悉,从而难以有效地进行较大规模项目的实施。不实施大规模的团队协作开发将不可能涉及项目进度的合理安排、项目的过程控制、人员调配等项目管理经验,导致培养出来的学生仍然是一个初级程序员而非合格的软件工程师。

3.忽视软件测试

软件测试是软件质量控制的重要环节,掌握基本的软件测试方法是软件工程学生必须掌握的技能之一。传统的实践教学侧重于系统功能的实现而忽视软件测试环节,软件系统的测试和验证仅仅通过少量的数据来进行,而对边界情况缺乏足够的考虑和测试用例的设计,使得程序在运行中经常出现错误,表现不够稳定。

4.考核方式陈旧

课程的考核方式和评分规则将直接影响学生的学习重点与学习方法。很多软件工程的课程仍沿用笔试考试方法,这种方法不仅难以考核学生的真实水平,而且容易将学生的学习主动性引导至背诵书本、突击考题的学习方法上,不利于提高学生的动手能力。

由于传统的实践教学存在一些问题,导致学生的学习存在一些误区,使得学生的能力与企业的用人需求存在差距,因此,软件工程的实践教学环节需要进行改革以提高学生的能力。

二、实践教学改革措施

通过实践教学的改革,激发学生学习的热情和兴趣,提高学生的实践能力,培养出软件技术人才所必须的实践能力、工程能力和创新能力,满足企业对软件技术人才的要求。结合传统教学的问题,从如下方面进行了实践教学环节的改进:加强软件项目的分析和设计;大中型项目的实施和管理;加强软件测试能力培养;课程考核方法改革。

1.加强软件项目的分析和设计

通过UML等课程的学习,掌握基本的图示元素,并依据课程案例来练习软件项目的分析与设计。在“UML建模”的课程中,我们采用了若干经典的教学案例,如ATM取款机的需求分析等,并以此为基础设计用例图、时序图、协作图等的图例,掌握基本设计能力。同时,通过设计简单的任务达到熟悉Rational Rose、Microsoft Visio等软件的目的。通过学习“数据库原理”,掌握基本的E-R分析,将概念模型转换成物理模型。同时,要求学生熟练掌握关系数据库范式,能够根据实际情况将范式进行分解,以达到更优化的数据库设计方案。

在实际问题中,要求學生根据实际情况,结合软件工程的瀑布模型,进行系统的分析与设计,并撰写文档。这些文档主要包括需求分析报告、可行性方案、用例分析图、时序图、类图、数据库的设计、界面设计等描述项目和系统功能的文档。这些文档需要进行讨论和论证后才能进行后续的工作。通过前期的系统分析和设计,使得学生能够从全局角度掌握软件项目,从而可以根据这些设计来指导后续的开发和管理工作。

2.大中型项目的实施和管理

大型软件工程项目在实际实施中受场地、时间、人员等因素的限制,难以在教学课时内进行有效地控制和验收。为此,修改了教学大纲,在新的教学大纲中安排1个学分的“软件工程实践”课程,课程性质为必修。该课程不开设讲课,而是为每个学生安排一个指导教师,每个指导教师负责指导3~4人4学年。这3~4个学生自然成为一个开发小组,每个学期接受不同的项目,组长轮流担任。

通过大一、大二两个学期的锻炼,学生掌握了基本知识、具备基本的开发能力后,导师在大三的一个学年里需要为组员提供1~2个来自企业里的大中型工程项目,不仅使学生有机会开展大中型软件项目,而且使学生更加了解软件企业对员工的能力要求,利于学生以后顺利求职就业。学生在接受项目之后需要进行适当的需求分析,查阅资料,了解项目需求。同时,组员之间要讨论系统功能,并进行相应的系统分析和设计,最终形成需求分析报告和系统设计白皮书。然后,组长根据系统功能为组员指派任务,制定项目进度规划。接下来团队进入编码开发阶段,开发小组采用CVS或者VSS进行源代码版本控制,组员之间相互协调,在团队环境中进行软件实现。

由于学生在开发项目的同时还有其他课程的学习,因此不能保证项目每天都有进度,但应该尽量要求每组成员保证每天至少在晚上一起开发项目1~2个小时,并要求学生录入指纹或者签到,这样就能够从时间、人员上保证大中型项目的实施。至于场地的保证则相对容易,软件专业有专用的实验室,我们为每个学生分配一个机位。学生可以自带电脑进入实验室,或者向实验室申请计算机使用。

每个组员每周提交项目进度报告给组长审查,组长将情况汇报给指导教师,使得指导教师能够及时掌握项目进度。每个学期学生的出勤时间汇总以及项目完成情况将决定学生是否最终能够获得“软件工程实践”这门课程的学分。其中项目完成情况通过项目答辩确定。

在实践过程中,大部分组员都能较好地遵守规章秩序,积极参与到项目的实施中去,而且由于学生开发了大量的项目作品,使得学生有条件地参加各种比赛。在2013年湖南省大学生程序设计竞赛应用开发组的比赛中,我们专业的学生提交了3个作品,其中有2个作品获得一等奖,一个作品获得二等奖,取得优异的成绩。

3.加强软件测试能力培养

软件测试是一项非常重要的工作,用于评估开发完成的计算机软件的正确度和质量等指标。由于软件测试具有较强的专业性,只要求学生具备基本的测试能力即可。为了提高学生的软件测试的能力,使学生具备良好的测试习惯并掌握基本的测试技术,不仅开设了“软件测试”的课程,还购买了软件测试平台,供学生练习。

在项目开发的过程中主要进行单元测试,集中对用源代码实现的各个程序单元进行测试,验证代码模块是否实现了用户要求的软件功能。在测试用例的设计时着重考虑系统边界条件进行测试,防止出现因系统边界考虑不清而出现的错误,使得程序更加稳定。在各单元完成后,再进行集成测试,把已测试过的模块组装起来进行系统测试。通过这些测试可以检查已实现的软件是否满足了需求规格说明中确定了的各种需求。

4.课程考核方法改革

对于具有实践性质课程的考核应该尽量避免使用笔试的方式进行考核,而应该使用学生的实践结果进行评分。

(1)阶段作业。每一门课程在教学的过程中分为若干阶段,每个阶段的若干知识点需要掌握并融会贯通,因此,在合适的时间点上都会安排相应的阶段性作业。该作业不是考查单一的知识点,而是若干知识点的融合,使学生在学习的过程中即能够运用多个知识来实现较复杂的、实用的功能软件,提高学生的学习兴趣。这些阶段性的作业通过教学平台提交,作为平时成绩的一部分。

(2)课程项目。在课程结束时安排有一定规模的项目作为期末考试的内容,并集中安排时间让学生在机房实践。在项目检查时,主要通过三个方面来进行评分:一是项目外观。看学生的作品是否考虑到了良好的用戶体验,是否考虑到了界面的常用模式、界面是否美观、专业等因素。二是系统功能。看学生的作品是否实现了系统功能,包括代码的优美性、系统架构是否合理等。三是项目亮点。学生在项目实现的过程中是否具有一定的创新性,如是否提高了代码的复用性、可扩展性等。课程项目的评分与阶段作业成绩加权求和即可作为课程成绩。

(3)项目答辩。对于一些实践性很强的课程设计,依然采取导师制,每个老师负责5个左右的学生。导师需要为学生出题,并指导课程设计,学生在导师的指导下完成课程设计。学院安排统一的时间进行项目答辩,学生不仅需要演示系统、提供课程设计报告,还要现场回答导师们的问题,导师们根据综合情况对答辩学生打分。通过这种方法可以给学生严肃感、正式感,使学生更重视课程设计的质量,更好地完成课程设计任务。

三、结论

针对传统的软件工程实践教学的问题,提出了相应的改革措施。这些措施主要包括:注重软件项目的分析与设计以及项目文档的组织,从而实现对软件项目更好的控制和管理;创造条件实施大中型软件项目,利用团队开发环境进行软件的开发。在团队开发中,需要对项目的开发过程进行有效的管理管理,确保项目的成功实施;加强软件测试能力培养,强化单元测试的能力,实施项目质量控制;改革实践课程考核方式,主要通过阶段作业、课程项目、项目答辩等环节对学生能力进行考核。

通过这些实践教学的改革,学生的动手能力得到了显著的改善,而且学生团队能够胜任软件项目的过程控制和管理,同时在开发的过程中能够通过软件测试提高项目的质量。实践课程考核的改革将考核的重点放在项目实施和项目评估,引导学生积极参与软件项目的实践。

在软件工程实践教学改革的过程中,学生们的软件作品还积极参加了“挑战杯”、大学生程序设计竞赛应用开发作品的竞赛,并获得了多个奖项。这些成绩说明了教学改革确实提升了学生的能力,相应的改革措施具有一定的参考意义。

参考文献:

[1]邓泽林,谢中科,胡宁静.以企业需求为导向的Java程序设计教学改革探讨[J].中国电力教育,2010,(28):114-116.

[2]翁伟,朱顺痣,肖蕾,等.应用型软件工程教学团队建设方案[J].计算机教育,2011,(8):43-46.

[3]周波,刘兴丽,乔付,等.应用型本科院校学生软件工程能力评价研究[J].中国电力教育,2013,(23):18-19.

[4]厉小军,谢波.软件工程实践课程教学改革探索[J].计算机教育,2012,(3):106-110.

[5]Wikipedia.Software engineering[EB/OL].[2014-01-09].http://en.wikipedia.org/wiki/Software_engineering.

注:邓泽林为本文通讯作者。

(责任编辑:王祝萍)

猜你喜欢
软件设计考核方式软件工程
对普通高校绩效考核的对策研究
基于STC单片机的厨房智能安全管控系统的设计
金融管理与实务专业人才培养方案探究
基于STM8S903K3的序列打螺丝夹具的软件设计
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
《桥梁工程》课程的试卷分析及教学改进措施
关于如何创新和完善计算机软件工程管理的探讨
职业能力视角下的高职语文教学策略探讨
一种VHDL语言代码重用的方法