李亚红 (南阳理工学院计算机与信息工程学院,河南 南阳473004)
《软件工程》是高等院校计算机专业教学中的一门必修课程,涉及计算机、数学、管理等多个学科的领域知识,是在软件开发过程中不断总结经验而获取的理论课程。在当前市场情况下,无论是软件管理者,还是项目开发者、测试者都需要掌握软件工程的原理、方法和技术。否则,这个项目就有可能呈现出 “软件危机”的特性,即项目的延期、费用的超支、质量的降低甚至最后的软件失败。作为一名《软件工程》的教师,如何培养学生具备有软件工程的开发思想,如何搞好这门课的教学,是摆在面前的一道难题。
实际教学中,《软件工程》课程的教学效果也并不如人意,学生很难掌握过多的知识点,即使掌握,也只能是从理论记忆方面,针对软件工程本身的抽象性和应用性,又很难将其应用到具体实例当中,致使学生所学和社会所需很难接轨,不能满足市场的需求,不能获得较强的实践能力。下面,笔者根据自身从事软件工程的教学经验,就 《软件工程》课程特点、学生学习和教学安排等几个方面阐述了自己的想法。
软件工程的目的是生产出有正确性、可用性以及开销合宜的产品。围绕这个目标,经过总结而得出的适用于所有项目的原则、方法和技术的相关理论知识,是所有项目的抽象。
软件工程的应用体现在项目的整个开发过程中,包括可行性分析、需求分析、设计、编码、测试、运行与维护。每一个阶段的结果都直接影响到下一个阶段的成败。例如在需求分析阶段产生的一个小决定,发生的一个小变化,都可能对软件的后期阶段产生严重的影响,即错误的放大效应。
另外,软件工程是经验的总结,它既包括成功项目的经验,又包括失败项目的经验。要从实际项目中不断总结经验,不断提升课程内容。尤其软件工程适用在一些较大型软件项目中更显示出它的意义。例如建大厦必须进行设计,而建宠物窝则不需要设计。
所以软件工程的课程内容来源于实践、高于实践又要应用于实践。
根据 《软件工程》课程内容的特点和多年教学的实际情况,发现学生在学习的过程中存在的问题主要表现课程内容的枯燥乏味、学习中的被动性等方面。
1)学生对 《软件工程》的抽象理论容易感到枯燥乏味 《软件工程》主要讲解的是原则和方法,不怎么涉及软件算法,也没有较强的逻辑推理。不能带给学生智力上的快感,也不能激发学生的兴趣和热情。而且由于缺乏开发经验,学生很难在头脑中将 《软件工程》的抽象理论和实际情况联系起来,因此较难对这门课产生兴趣。
2)学生难以参与软件开发的全过程 学生在学习的过程中,仅能抽象的学习软件开发的过程,很少有机会参与软件开发的整个过程。学生开发的系统大多只是应付教师的检查,一般不会交付使用,没有经受客户的真正检测,代码里面的很多错误也被隐藏。但是这些错误有可能是编码前面的各个阶段所隐藏的。如果学生看不到错误,也就不能体会到自己在需求分析、设计等各个阶段工作对软件成果造成的影响。另外,一些实践环节如课程设计等,涉及的大部分是小型软件项目,使得学生容易轻视软件工程的学习,甚至会觉得没有作用。
1)采用案例教学 《软件工程》讲授的原理、方法和技术都具有抽象性,容易产生枯燥乏味的感觉,为了使学生深刻领会软件工程的思想和方法,在教学中引入案例教学,将复杂抽象的概念用具体生动的案例进行诠释,能够收到很好的效果。具体可采用以下步骤:①设计一个典型的、完整的、易予理解的、实际的软件项目案例。在整个教学过程中,结合案例讲解每一个知识点,将实际案例作为杂乱知识点的主线,教师可以从案例的细节出发,从具体的分析出发,完成整个课程的讲解。另外在难度系数比较高的知识点上,可以引入生活的实际应用,加深学生的理解。例如模块之间的耦合性,可以将其利用人的肢体去表示每一个模块,然后肢体和肢体之间的关联描述耦合度的强弱。这样方便学生记忆,也易于掌握。②小组讨论案例。将学生分组,然后每位学生对要解决的问题进行分析和说明,利用所学知识点提出解决的措施、方法,并要求每组做好记录。最后由小组推荐一位同学来发言说明小组的解决方法,使得学生体会到软件开发中成员合作的重要性,并学会知识的应用。③教师总结。在学生讨论完后,教师要进行总结,对于学生提出的解决方案给与补充或者添加新的解决方案,毕竟在软件开发过程中,解决方案并不是唯一的。教师在总结过程中要注意强调所学知识如何应用到案例,加深学生的理解。其次要强调原则性的问题,进而诱发出学生更进一步的思考。
案例1 在传统的开发方法和面向对象的开发方法中,采用 《网上购物系统》作为案例教学,使得学生从中体会到软件开发的流程。同时将学生分组,每小组跟随课程的进度完成软件的整体开发,包括可行性分析、需求分析、概要设计、详细设计、编码、测试直至最终提交的各种文档。每个阶段都要有成果展示,最后进行评分总结。这样,学生边听课,边实践,从而正确地运用教师传授的理论知识包括结构化的开发方法和面向对象的开发方法设计出一个比较科学、合理的系统。这种案例模拟教学使得学生能将理论和实践结合起来,加深对理论知识难点和重点的理解,锻炼了实际开发能力。
2)被动式学习转换为主动式学习 它是对教师和学生关系的重新定位。教师应该转变角色,激发学生自主学习的兴趣和信心,要让学生由原来的 “要我学”的被动式学习逐渐转换为 “我要学”的主动学习,是要学生由 “学会”到 “会学”。从以下几个方面来提高学生主动性学习的习惯:①尊重每一个发言者,让学生掌握一些主动学习的技巧,并在实践中逐渐提高。②教师注意自己在教学过程中的指令性语言,要尽量使用有利于对话活动开展的指令。比如,“请大家一起来思考这个问题”、“大家可以针对前面同学的发言来表达自己的想法”等等。③变 “教师讲解”为 “学生主讲”,从根本上解决了 “以学生为主题”这一课堂的基本问题,它把整个教学过程设计为几个阶段,每一个阶段都由学生自行设计,自我调控,自主完成,自我评价,学生真正成了课堂教学的主人。
另外,教师可以通过设立多级学习目标和多样的学习方式,让不同的学生都能根据自己的实际需要选择到合适的内容;教师还应给学生提供多样化的自主探索空间,鼓励不同意见和创造性思路的迸发,鼓励多样化的问题解决方法。教师可以根据学生的能力差异、水平差异针对性地实施分层次教学,增强其学习的信心;也可以采用伙伴教学的方法,变学生的个体差异为资源,让学生在参与合作中互相学习并充分发挥自己的长处,协同完成学习任务。
案例2 在面向对象软件开发过程中,引入点是面向对象的基本概念 (类、对象和消息)和特征(抽象性、封装性、继承性和多态性)。因为学生已学习过面向对象的开发语言,所以给出学生实例,让学生自己来分析其中存在的概念和特征的体现,并鼓励学生自己讲解。如 “昨天我的一个朋友结婚了”,让学生采用想象的思维模型体现在这个描述中,可以想到的概念,描述概念的属性以及概念和概念之间存在的关系、概念的表示形态等等。加深面向对象概念的了解,并通过概念之间的关系等引出建模思想,进而讲解面向对象的开发方法。
3)改变单一的教学模型 在教学模型改变中,要从教学实际出发,根据不同的教学目标、内容、对象和条件等,灵活、恰当地选用教学方法,并善于将各种方法有机地结合起来[1]。任何一种方法和模式的选择和使用,都应该建立在深入理解其内涵的基础上。如启发式教学模式,就是根据教学目的、内容、学生的知识水平和知识规律,运用各种教学手段,采用启发诱导办法传授知识、培养能力,使学生积极主动地学习,以促进身心发展。这里要着重说明,启发式教学不仅是教学方法,更是一种教学思想,是教学原则和教学观。将其应用到 《软件工程》教学中,主要模式见图1。
案例3 在软件工程的教学过程中,针对不同的教学目标和教学重点、难点,可以采用如下模式:①在讲解软件生命周期时,可以采用引导教学方式。“人的生命是有限的,整个生命过程可以划分为哪些阶段呢”,进而引出问题 “软件项目的生命是否有限呢?”“如果是有限了,它可能包括哪些阶段呢?”通过这些问题引入学生不断去思考。②在需求分析阶段,可以采用情景教学法。对于需求的获取,引入电影 《谁能读懂他的心》,让同学们分析电影中的情节,了解演员的心理,进而引入到软件中,分析客户的心理,分析客户的需求,并能采用语言复述的能力表达,锻炼学生的分析能力和语言表达能力。
4)加强实践教学 以毕业设计为项目的软件工程教学,优点主要有:①提高了学生的综合分析、设计能力。学生从基础的市场调研开始,完成可行性分析、需求分析、设计、编码等工作,对软件项目开发的整个生命周期有了一定的了解和认识,加深课堂学习的理论知识,从实践中再一次获取知识。②提高了学生团队协作能力。项目的完成是多个人齐心协作的工作结果,是一个团队协作能力和分工能力的体现,也是于社会接轨的一个中间环节。所以在这个方面,可以充分锻炼学生的团队合作能力和组织分工能力。这样也有利于提高学生高层次的思维能力、解决问题的能力,能够在团队合作中学会容忍他人的缺点,吸取他人的优点,体会到团队的力量[2]。③提高了教学效果。以毕业设计为项目的软件工程教学法将毕业设计和软件工程课程有机结合起来,它以教师为导向,以学生为主体,改变被动式学习为主动式学习。而且,学生在学习中体会到软件开发之间互相约束,前后知识点之间的连贯等,进一步激发学生的求知欲望,调动学习积极性,既能提高课程的教学质量,又能保证毕业设计的质量。
图1 启发式教学模式
《软件工程》是一门集理论和实践于一身的学科,是学生在进入社会使用最广泛的一门学科。笔者从目前 《软件工程》存在的问题着手分析,总结多年的教学经验,提出了几点关于提高教学效果的方法,主要包括教学内容的改革、学习主动性的体现、教学模式的多样性和加强实践教学环节,并将其应用于毕业设计。总之,要改进 《软件工程》课程教学,除了要使用常规的教学方法、合理安排好课程内容外,还要培养学生的学习兴趣,重视理论与实践的结合,让 《软件工程》教学越来越合理,才能培养出满足软件行业需求的人才。
[1]周学梅 .论网络教学环境下教师角色的转换 [J].中国科教创新导论,2010(13):139-140.
[2]Vicente F de Lucena Jr,Alysson Brito,Peter Gohner.A Germany-Brazil experience report on teaching software engineering for electrical engineering undergraduate students [A].Proceedjngs of the 19th Conference on Software Engineering Education & Training(CSEET’06)[C].2006:69-76.