李天宇,张东辉,张秀坤,张素莉,赵洁红
(长春工程学院计算机技术与工程学院,长春130012)
《软件工程》作为计算机专业和软件工程专业的一门主干课程,在计算机专业教学中占有非常重要的地位。本课程的理论和实践教学的目的是使学生掌握软件工程的基本概念、原理、方法和技术,掌握软件项目的开发、设计与维护的过程,以及开发过程中应遵循的原则。基于软件是计算机的灵魂,与此相应,软件教学质量从某种意义讲,直接影响甚至决定了计算机高级专门人才的培养质量。
近年来,国内众多高等院校对培养符合社会需求的软件工程应用型人才进行了有益的探索,上海电力学院计算机科学与技术学院用CDIO工程教育理念来指导卓越工程师的培养[1];武汉科技大学计算机科学与技术学院采用任务驱动教学,并突出了实践教学[2];浙江大学软件工程专业通过校企合作,在实战中培养从事大规模软件工程的软件人才[3]。所有这些探索的共同特点是:高度重视实践教学在软件工程课程中的地位和作用,并通过改进和加强实践教学,增强理论与实践的结合,提高学生解决实际问题的能力。
长春工程学院软件工程课程组教师基于应用型高级专业人才的培养目标定位,针对课程教学中普遍存在的问题,对软件工程课程的教学进程、教学内容和教学方式进行了深入系统的研究和改革。
虽然实践教学在软件工程课程教学上得到了高度重视,但是在具体教学过程中由于多方面条件的限制,无法达到理想的实践教学目标。关键有以下原因:
1.课程本身的特点。由于软件工程讲授的知识多为概念、原理、原则和经验性内容,学生在学习的时候会感觉概念抽象、内容枯燥。学生对刚学的理论知识、开发方法和技术还一知半解,对整个软件开发过程更缺乏整体认识[4]。实践过程中,需要针对软件项目进行分析和设计,对于没有项目开发经验的学生来说,高质量地完成任务非常困难。
2.学时的限制。为了对学生进行全面的培养,在校期间,学生需要学习很多门课程,不论多重要的课程,分配的理论教学和实践教学的时间都是有限的。多数学校在设置《软件工程》理论和实践教学的学时一般为64—72学时。理论教学为40学时左右,实践学时为32学时左右。而开发具有一定规模的项目即使对于一个软件公司来说,都要以年和月为单位来计划开发时间。显然制定的实践教学的学时是不够的。面对这种情况,许多教师在实践环节只能选取软件开发过程中的一部分内容进行实践,这样做则破坏了实践教学的完整性。
3.考核方式的问题。多数实践教学是在实践环节结束后以答辩和提交报告的形式来进行考核。这种方式应用在软件工程实践环节中会出现问题,由于高等教育从精英教育转变为大众教育,班级学生人数较多,指导教师很难随时掌握所有学生的设计情况,就会发生各阶段出现的错误得不到及时纠正,从而造成错误的积累和放大,到最后想要弥补和改正都极为困难。
针对以上问题,课题组主要对实践教学的课程安排、开发方法以及考核方式进行了改革与研究,具体改革的方法如下:
为了保证软件工程课程实践训练的系统性和完整性,加强理论教学与实践教学的衔接。课程组采取了独立设置实践课程,拉长实践教学周期的方法。具体的做法是:取消原来分散在软件工程课程中的实验课时,独立设置32学时的软件工程集中实践教学环节,实践教学周数为8周,每周4学时。表1是具体的时间及内容安排,要注意的是这个内容安排包含了软件设计开发过程的各个阶段,其中软件项目管理是贯穿整个实践环节的,但各个阶段不是按照传统的瀑布模型严格地分阶段执行,可以根据具体情况进行调整。
表1 实践教学的时间及内容安排表
采用分散式的实践教学方式是由软件工程实践教学的特点决定的。对于分析问题的能力和工程化软件开发意识较弱的学生来说,对于软件项目进行的分析与设计,随着研究的深入,往往需要多次反复修改,在较短时间内仓促完成的成果会有诸多的问题。分散式实践环节与理论课程采用了类似的教学进度,上课时间主要是进行教师指导、研究讨论和分阶段答辩。课下学生有更多的时间去理解、思考、分析和设计。
这种分散式实践教学与其他教学区别是:不同于理论课程的教学,在上课时间不会对理论进行大量讲解;不同于课内实验,分散式实践在时间的安排上要在《软件工程》课程结束以后,不属于课内实验;不同于课程设计,课程设计一般都是集中在一两周进行;不同于毕业设计,毕业设计侧重结果,分散式实践侧重过程。
即使采用分散式实践教学,但是利用传统的方法去开发项目在时间上仍然不足,这就需要采用新的开发方法。敏捷开发方法是近些年被重视和研究的软件开发方法,敏捷开发方法具有特点是:以人为核心、循环迭代、响应变化等等,主要着眼于能高质量地快速交付让客户满意的软件。将敏捷开发方法应用于软件工程课程的实践教学过程中,能够克服传统教学方法的一些缺陷[5]。与传统的软件开发相比,敏捷开发注重灵活性,简单、快速,适合于对时间要求严格的项目,采用敏捷开发方法学生能够在较短的时间内完成任务。同时,敏捷开发方法与其他的开发方法在原理和过程上是相同的,这就保证了实践教学的完整型和全面性,学生将来即使采用其他的开发方法也不会出现障碍。这些年,敏捷开发方法被很多软件开发公司广泛使用,掌握了敏捷开发方法,有利于学生毕业后求职和快速胜任工作。
敏捷软件开发方法包含了5个价值观和一系列的原则。但是在实践教学中不是所有内容的都要采用,需要进行剪裁,找到适合的开发模式。有些理论和经验对于处在学习阶段的学生并不适用,只有在工作中经过一段时间的锻炼,才能够真正体会。学生阶段,主要就是让学生掌握理论、方法和技术,同时培养学生的沟通、简单、反馈、勇气和谦逊的价值观。要注意的是:采用敏捷开发方法,表1中列出实践内容的各个阶段并不是严格区分的,存在循环迭代。
为了严格保证质量,一般工程项目都会进行阶段性验收。由于软件项目的分析与设计需要进行阶段评审,在实践教学中,采用分阶段答辩就是一个合适的考核方式。在项目开发的每个阶段都让学生对本组的设计成果进行介绍讲解,同时回答教师和其他小组同学的提问,这与毕业设计答辩在形式上相似。采用分阶段答辩可以及时纠正学生在设计过程中出现错误和偏差,避免问题的积累和扩大。
学生的最后成绩主要是根据平时表现、答辩表现、提问情况和团队分数四个方面进行综合打分。不同阶段答辩的同学不能相同,这就要求组内所有的同学都要共同努力,只有团队取得较高分数才能保证个人的成绩。分阶段的项目答辩不但能检查项目的进展情况,而且能为更多的学生提供展示自我的机会,提高学生的表达能力和反应能力,培养了学生的自信心,也为将来的毕业答辩打下良好的基础。
在此过程中,不仅要看学生设计的结果和解决方案正确与否,还要看学生是否认真地思考了问题。因为一个软件项目常有多种解决方案,看学生是沿用以前的方案,还是经过思考采用新的方案。即使新的方案有缺点和不足,也会给出较好的成绩,鼓励学生去思考创新。
通过将改革后三个学年的学生学习情况与改革前的情况进行对比研究,发现两种培养模式在期末考试中客观题的解答上相差不大,但是主观题目的解答上,改革后的学生分数明显提高。许多学生在经历改革实践后发生很大变化,从被动学习到主动学习,从不愿在同学面前讲话到积极表达自己的看法,学生对软件工程产生了浓厚的兴趣,能够深入思考和创新。教师与学生之间的沟通也大大增加。
从毕业生求职的情况来看,教学改革后毕业生在面试环节获得的评价很好,签约率也明显提高。改革后的第一届毕业生就取得很好的成绩,2011年国内某知名企业在吉林省招收了计算机专业6名学生,其中4名为其他院校的研究生,2名为我院的本科学生,公司报到后被安排在研发部门工作。
本文为教研项目“基于敏捷开发方法的软件工程实践教学的改革与研究”的研究成果,在软件开发方法采用敏捷开发的基础上,又研究出了分散式实践教学的课程设置方式和分阶段答辩的考核方式,其中首次采用的分散式实践教学方式,在软件工程课程实践教学中实现了创新,并取得了良好的效果。通过改革和研究有效地解决了软件工程实践教学中的难题,实现了计算机软件开发应用型人才的培养目标。
[1]毕忠勤,单美静.基于CDIO的软件工程专业培养体系建设[J].计算机教育,2013(8):23-26.
[2]张晓龙.面向应用型人才培养的软件工程课程改革与实践[J].计算机教育,2010(5):10-13.
[3]杨小虎,陈越.基于大规模工程实践的软件工程专业建设的探索与创[J].计算机工程与科学,2011,33(A1):164-167.
[4]曾红卫,刘悦,刘炜.软件工程实践教学方法探索[J].计算机工程与科学,2011,33(A1):15-18.
[5]林晓宇,钟一文,黄世国,等.基于Scrum敏捷方法的软件工程实践教学探索[J].电脑知识与技术,2011,7(19):4762-4765.