软件工程课程实践教学研究
2012-09-25范庆春周秋平
范庆春, 周秋平, 王 凡
(合肥师范学院 计算机科学与技术系,安徽 合肥230061)
1 引言
软件工程是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它[1]。软件工程除涉及计算机科学技术专业知识外,还涉及众多其他的领域,如数学与管理学、经济学、人机工程学等,因此,它是一门多学科的交叉学科,课程内容抽象、系统,理论性强。如何在高等院校中更好地开展这门课程的教学,尤其是实践教学,发挥学科优势,突出能力培养,使计算机软件专业的学生切实具备软件工程的实践能力,更加紧密地结合国家信息化人才培养的需求,正确地把握软件工程领域的发展趋势,是摆在我们面前的一项非常紧迫的重要课题。
2 软件工程实践教学的现状与分析
软件工程是高等学校计算机及相关专业教学中的一门核心课程,也是一门理论性和实践性都非常强的课程,然而在实际教学中,这门课程的教学效果往往不是很理想。学习软件工程这门课,既需要掌握软件工程理论,又需要具备一定的实践经验,这使得大多数没有项目实践的学生在课程学习的过程中普遍感到困难,对概念、原理、方法的理解不深。如何有效开展软件工程课程教学,成为当前广大教育工作者思考和探索的问题[2]。
当前高校软件工程课程教学存在着许多突出问题,如教材内容陈旧,教学内容与实际相脱节[3],教材重理论而轻实践,大部分教材过分强调软件工程理论的教学,不能有效地培养学生的软件开发技能。教学大多是纯理论的介绍,缺乏具体案例的分析。由于学生没有参与过软件开发的具体过程,因此对课程中讲述的开发模型、分析和设计方法等内容的理解不够深刻,学生很难理解和掌握所学的课程内容。尽管教材所举的案例对相关的理论有一定的支持作用,但由于案例之间缺乏完整性、实用性和一贯性,往往无法帮助学生全面了解软件开发的一般过程和其中每个环节应该做哪些工作[4]。
目前软件工程的项目实验基本上都是以小组的形式来开展实验的,分组实验以增强团队精神、方便小组成员之间讨论为出发点,但是小组中也有部分同学不愿意为项目出力,使得整体的项目实验教学效果得不到保证。本文针对这种情况展开讨论,在统计实验成绩时给出了具体的解决方案。
3 对软件工程实践教学的探索
实践教学是培养学生工程能力和解决问题能力的重要方法和途径。软件工程专业理应以实际需求为向导,以培养学生能力为核心,创建一套完整的工程化实践教学体系。
鉴于以上软件工程实践教学的困境,我们结合长期以来的软件工程课程教学经验,对实践教学中的软件工程实验体系的设计、软件工程实验成绩统计方法的革新、软件工程实验讲义的改革以及案例教学在软件工程教学中的应用等四个方面进行了探索。
3.1 软件工程实验体系的设计
软件工程的三要素是方法、工具和过程。理论教学注重对学生进行软件工程方法和理论上的培养,而实践教学注重对软件工程工具和过程的学习和培养。整个软件工程的实验体系是实践教学的具体实施,大致分成三个部分:第一部分的实验偏重对软件工程的“工具”的学习,第二部分和第三部分的实验侧重对软件工程的“过程”的学习。
第一部分的实验是课内实验。课内实验共计12个课时,主要学习结构化的方法建模的基本应用、面向对象的方法建模的基本应用、软件测试以及软件项目管理等四个方面的内容。在做这些实验的时候,更注重对软件工具的学习、安装和使用,如学习Visio、Rational Rose、WinRunner和Project等工具的应用。
第二部分的实验是项目示范实验。鉴于许多学生刚开始做项目实验时,总感到无从下手,所以我在某个计算机本科班上挑选一些学习能力较强、有主动精神,并有一定的编程基础的学生组成了一个具有示范性作用的项目小组,共同完成一个综合性的项目实验。比如做公寓房出租管理系统项目,这个项目小组的工作阶段成果会在上理论课时定期公布。而公布时,我会肯定这个项目小组做得比较好的地方,引导有待改善的地方,并让班上其他的学生来共同评判和讨论,起到了示范性教学的良好效果。
第三部分的实验是课程设计实验。在结束理论教学的学习和前两个部分的实验后,我把班上非项目小组成员的学生按每4~6人分成一个小组,开展一系列的课程设计实验。每个小组可以任选课程设计指导书中的题库里的题目,也可自拟题目。在做分组实验时,原先参与项目示范实验的学生分别安排在各个小组里面,作为该小组项目的顾问,协助小组其他成员,更好地完成课程设计实验。
3.2 软件工程实验成绩统计方法的革新
软件工程的实验课都是以小组的形式来开展的。在我指导实验的过程中,发现存在着不少问题。比如,有的学生总以不会编程为由,或者以正在看程序设计的书作为搪塞的理由,不积极主动地配合和参与项目。小组实验本来是为了方便交流和沟通,彰显团队精神的,而事实上小组却成了这些不主动参与项目实验的学生的“保护伞”。往往在一个小组中认真完成实验工作的仅仅是组长一人而已,组长工作得特别辛苦,但小组成员却不知道自己该做什么,最后大家的实验成绩又都是差不多的,这就导致了软件工程课程实验的真实效果难以得到确保。为了避免这种吃“大锅饭”的现象出现,我们对小组的实验成绩统计方法进行了革新。
首先,我们采取给每个小组一个综合评分Z,然后把这个小组的综合得分乘以一个班级系数B,作为每个小组的最终得分。这个班级系数B由指导老师对整个班级的表现进行评价后给出。小组中的成员按照其对小组实验的贡献大小来进行评定,由小组中的所有成员集中协商后,给每个成员都分配一个个人系数P,这个系数介于0.0到1.0之间,小组中所有成员的系数之和为1.0,小组中每个成员的最后得分X是小组最终得分(Z×B)乘以小组的总人数G再乘以个人系数P,如公式(1)所示;约束条件为所有人的个人系数之和为1.0,如公式(2)所示。如果某个小组成员的实验成绩最终得分超过了100分,则实验成绩以100分记。
比如给出a小组的综合得分Z是80分,班级系数B为0.9,则这个小组的最终得分是Z×B=80×0.9=72(分)。若该小组的成员共6名,即G=6,则这个小组中成员的个人平均系数为1.0/6≈0.167。
我们在a小组中选出两名成员a1和a2,假定在小组所有成员集中协商后a1的个人系数P1为0.2(高出小组个人平均系数),a2的个人系数P2为0.1(低于小组个人平均系数),则成员a1的最终成绩应该是72×6×0.2=86.4(分),成员a2的最终成绩为72×6×0.1=43.2(分)。这样一来,同一个小组学生的实验成绩就拉开了。
不同小组的总人数G也不一定相同。假定给定a小组和b小组的综合得分Z都是80分,班级系数B为0.9,那么这两个小组的最终得分都是Z×B=80×0.9=72分。比如说a小组的成员共6名,即G=6,则该小组中成员的个人平均系数为1.0/6≈0.167。b小组的成员共4名,即G=4,则该小组中成员的个人平均系数是1.0/4=0.25。假定a小组和b小组各有一名成员(a1和b1)经各自小组的所有成员集中协商后,a1和b1的个人系数P均为0.2,则a1的最终成绩应该是72×6×0.2=86.4(分),b1的最终成绩应该是 72×4×0.2=57.6(分)。这样的差异是小组总人数G不同所造成的。
比较而言,在同一个小组中,P的意义更大,它决定了一个小组内成员的贡献率,只有高于小组成员的个人平均系数的成员,个人成绩才能最终高于小组综合得分。而在总人数不同的小组之间比较,个人系数的大小没有显示更大的意义,只有小组内部成员的个人系数的差异才能造成最终个人成绩的差距。因此,我们以这种统计方法的革新促使每个学生在小组中都要尽可能地发挥积极作用。
3.3 软件工程实验讲义的改革
在长期的课内实验的教学过程中,我们选用了不少实验教材,有的仅仅是各种软件工具使用方法的罗列,有的只是针对软件工程实验的各个阶段进行阐述,我们发现这些实验教材都不是很适合实验教学,并与我院软件工程的具体情况也不切合。我院的软件工程的实验课时比较少,如果按照所选用的实验教材做实验,无法有效保证学生的实验质量,所以我们决定编制适合本院学生内部使用的实验教材。
我们编制的实验教材把软件工程的主流工具和两种范型(即结构化范型和面向对象范型)的建模学习结合起来,一方面学会使用软件项目中常用的工具的应用,另一方面学会结构化方法建模和面向对象方法建模等知识。基于上述要求,我们将课内实验的12个课时分成四个实验:结构化方法建模的基本应用、面向对象的方法建模的基本应用、软件测试和软件项目管理。前两个实验分别为4课时,后两个实验分别为2课时。在第一个实验中,一方面要求学生对具体的一个项目进行结构化建模,建立数据流图、实体——关系图和状态转换图,这三种模型图都是对软件需求的不同侧面进行描述,要求学生把这三种模型作为一个整体来梳理项目需求,另一方面要求学生学会使用 Microsoft Visio工具创建这三种模型图。在第二个实验中,要求学生使用Rational Rose对一个具体的项目进行面向对象建模,创建用例图和对象图,使学生在掌握面向对象方法建立模型的同时,掌握好Rational Rose工具的基本操作与建模过程。在第三个实验中,学习软件的自动化测试的同时,熟练掌握使用软件测试工具WinRunner进行对象识别、脚本录制,掌握脚本的执行及查看结果方法。在第四个实验中,要制订一个具体的项目进度计划,了解现有软件项目管理工具的主要特点和功能,掌握使用Project工具的基本应用。这四个实验涉及结构化范型、面向对象范型、软件测试和软件项目管理四个软件工程课程主干知识,同时十分重视软件工具的运用,为学生以后从事软件行业工作打下坚实的基础。这些课内实验也为软件工程的课程设计做了较为充分的准备工作,不管后面的实验学生是采用面向对象方法还是结构化方法都不会觉得陌生,都会比较容易上手。
在软件工程的课程设计中,我会安排那些难易程度适度的课程设计实验题目让学生自己去选择,学生也可以自拟题目,但一定要事先与指导老师协商,只有指导老师认可之后方可实施。课程设计指导工作特别重视软件工程的“过程”,强调各个阶段结束时一定要提交相应的文档资料,做到对每个阶段都有很好的可控性。通过阶段评审后才能进入下一个阶段,每个项目小组都要制订好详细的项目进度表,项目小组每周都要展开两次以上的会议讨论,每次讨论都要做记录,记录下当前遇到的问题,用来解决这些问题的可选方案,等等。最后项目结束时召开项目结项会议,项目成员作项目陈述和运行演示,由指导老师给出小组的综合成绩。
3.4 案例教学在软件工程教学中的应用
IEEE在2004年发布的《软件工程知识体系指南》中将软件工程体系划分为从软件需求到软件质量等十个知识领域[5]。其知识点非常繁多,尤其是对大多数没有项目经验的学生来说,学习这门课时会觉得很枯燥、学不进去,做起项目来又会觉得无所适从,不知道从哪里开始。老师上课虽然讲解了许多知识点,但是学生不能深入地去体会、理解,教学效果不好,所以在上软件工程课的时候不能仅仅使用传统的教学方法和手段,实践证明采用案例教学法能收到较好的教学效果。
在课堂教学中,如果对所有的知识点进行讲解,教学效果反而不好。我们改为对重点的知识点进行讲解,其他的知识点简明扼要地提一下,然后让学生去自学,这样就有空余下来的教学时间用来对实际项目的讲解,着重是针对第二部分项目示范实验进行点评,这会让其他没有参与这个示范项目中的学生很感兴趣,教学效果还是不错的。比如说我们在某个计算机本科班选择示范实验时用的题目是一个实用的项目公寓房出租管理系统,在最初的软件需求活动中,小组成员也觉得不知道该怎么去做,我们以图书管理系统为例,先给出项目的需求陈述,并给出如何建立实体——关系图、数据流图、状态转换图和数据字典等实例作为参考和启发,这样一来,项目示范实验小组做起接下来的需求工作就比较顺畅了。
在使用案例教学法时,我们首先注重对正在进行的项目示范实验进行点评,既对做得比较好的地方加以肯定和鼓励,也对做得不够妥善的部分进行引导完善。如在这个公寓房出租管理系统需求建模时,肯定和鼓励有的成员提出建立系统日志的方式,但是对实体——关系图用到了“会计”这个角色,在数据流图中却是“管理员”这种前后矛盾的现象进行了批评,指出了大家对这个角色的功能特征还是不够清楚,需要更加深入的研究。还有一个常见的问题就是文档和代码的版本号问题,因为是小组成员分工合作完成同一个项目,一开始小组成员对这个问题都不是很重视,出现了问题后我们再加以指正,课后许多学生都对此表示印象十分深刻。通过与传统教学方式的对比,学生普遍对引入案例的教学方式比较感兴趣,能够取得较好的教学效果。
4 结束语
本文在分析了软件工程实践教学现状后,结合软件工程课程的特点,给出了软件工程实验体系的设计,提出了一套具有独创性的软件工程实验成绩统计方法,在软件工程实验讲义的改革和案例教学在软件工程教学中的应用这几个方面进行了积极探索,这些措施方法在软件工程实践教学中的实施取得了良好的教学效果。接下来,在现有的探索基础上,我们旨在对团队文化建设、校企合作、构建“产、学、研”一体化平台等课题开展深入研究。
[1]张海藩,倪宁.软件工程[M].北京:人民邮电出版社,2010:5-6.
[2]刘竹松.《软件工程》实践式教学方法探讨[J].现代计算机(专业版),2011(8):38-40.
[3]周秋平,范庆春.软件工程课程教学改革研究[J].合肥师范学院学报,2008(6):65-68.
[4]霍英.项目驱动教学法在软件工程课程中的实践[J].计算机教育,2010(17):123-125.
[5]万江平,安诗芳,黄德毅.软件工程知识体系指南综述[J].计算机应用研究,2006(10):1-3.