郑珂晖
(福建农林大学 计算机与信息学院软件工程系,福建 福州)
21世纪以来,人类进入了信息化时代,对软件开发提出了更高的要求:能够及时响应用户需求变化,提升开发效率、保证开发质量,交付有效的、可用的软件产品。为了实现这一目标,近些年来,有些学者[1-2]提出软件开发应当“以构造为中心”的观点,认为软件构造是软件开发的中心,应该将软件开发的重心放在软件构造上。
根据2013年IEEE发布的SW EBOK3.0的定义[3],软件构造是指通过详细设计、编码、单元测试、集成测试、调试和验证相结合,创建出具有意义的、可以正常工作的软件,知识域可以分成五个子域,即:软件构造基础、管理构造、构造技术、构造工具和实际考虑。
案例教学法聚焦于明确的教育目标,通过将实际教育过程中真实的情境,引导学生思考和判断,进而通过独立研究和相互讨论,提高学生分析问题和解决问题的能力,在实际教学中,得到了广泛的应用,近些年来,有不少教师将案例法应用于实际教学中,取得了较好的教学效果:唐玲、尹珧人[4]综合应用分组、案例、项目等教学方法,大大提升了学生学习计算机基础课程的兴趣。白守英[5]分析了案例教学的特征,指出教学案例要做好选择,对构建数学思维等手段提升学生学习高等数学课程的兴趣,其中,课后案例教学等是高等数学教学中应用案例教学的主要策略,有力提升了教学效果。高涵[6]在教学实践中,通过分析案例教学法实际运用中存在的不足,提出应该将实践和理论相结合,以此加强案例教学法与统计学教学的联系,使案例教学法更好地应用于统计学教学中。李昕、辛元芳[7]等提出结合虚拟仿真进行案例教学驱动方法,激发学生的学习的主动性,以“数字控制直流稳压电源”为案例进行“嵌入式系统”课程教学,学生不仅牢牢掌握大部分知识点,还培养了应用开发技能和创新思维,教学效果显著提升。
因为软件构造对于软件开发人才的培养是十分重要的,在软件工程的课程体系中处于核心课程的地位,涵盖了软件构造的基础、管理软件构建、构造技术、实践问题以及软件构造工具等,即包含软件开发的基本理论、原则,又有软件开发的最佳实践经验等,是理论与实践相结合的课程。有关《软件构造》的课程教学改革研究在课程专家的努力下,也得到了许多成果。彭鑫[8]结合与企业产学合作的经验,提出要以软件构造活动为中心、突出实践化培养特色、体现软件工程师成长路径的软件工程教学指导思想,通过实践化教学方式帮助学生更好地理解与掌握软件工程思想和方法。潘家辉、张洋[9]提出在《软件构造》教学中采用型混合教学的新模式,以提升教学水平。李劲华、陈宇[10]提出在软件工程的课程体系中可以设置综合软件开发技术、工具和各种应用技术实践的《软件构造》课程设计及其课程群,可以更好地培养软件开发的人才。
上述工作对《软件构造》课程教学水平的提升起了重要的作用,但是有关《软件构造》课程中案例教学的报道目前相对较少,具有一定的研究价值。在教学中采用案例式教学法来进行讲解,可以使学生能够更好地理解软件构造的基本原理、工具应用和实践技巧。本文主要介绍了在《软件构造》课程中案例设计的一些经验,分析了《软件构造》教学中存在的一些问题和解决方法,并对教学案例设计的原则、方法和教学实际应用效果做些介绍,以期可以抛砖引玉。
在软件工程课程体系设置中,一般会在学生修完程序设计基础、数据结构、数据库、软件工程等科类基础课后才进入到软件构造的学习。学生经过前面的学习,已经具备了软件开发的基本要求,但相关课程的知识还不能有效地融合在一起为软件开发服务。由于大多数院校开设《软件构造》课程时间较短,在组织课程教学时,常存在一些问题,主要有:
(1)教学资源相对匮乏,缺少相对权威的教材和课程配套资源,授课内容各有侧重,在教学大纲的编写、课程教案等还缺少统一、规范的共识。
(2)课程讲解的主要形式是理论讲解。而《软件构造》课程是在相关理论基础上实践性相对强的一门课程,但苦于缺少足够的案例支撑,对实践讲解往往只停留在教材提供的例子上,这些例子有的相对孤立,较难将不同章节的知识内容串连在一起。
(3)在实验课中,要求学生完成的实验内容与教材提供的案例相似,学生在完成实验时往往直接按照教材提供的代码来完成实验,缺少主动思考。
为了解决上述问题,可以考虑采用案例教学的方法。因为学生在前续课程的学习中已经有了一定的基础,能够理解软件开发中的常见案例,那么,在教学中建设从浅入深、不断推进的增量式案例群,可以很好地解决《软件构造》教学中遇到的上述问题,采用案例教学具有如下优点:案例如能选择适当,可以贯穿于学习课程的全程,将各章节的知识形成一个有机整体;此外,案例讲解有助于学生理解复杂的、抽象的概念;在基础案例群上进行适当的广度和深度的扩充,有利于学生在完成实验时,既有一定的基础,又能主动思考,使得构造的能力得到切实的培养。
由于《软件构造》的课程内容有涉及模块化、面向对象、数据库、图形用户界面、交付使用等内容,知识面较广,而构造活动在软件开发中的重要地位也确定了课程的培养目标,所以在进行教学案例设计前,需要明确案例设计的原则,根据确定的原则,就可以查找素材、依据教学内容对素材进行编辑,使得案例设计能够直接服务于教学。一般认为,教学案例的设计要贴近生活,响应教学目标,有利于学生理解等[11-12]。对于《软件构造》课程而言,教学案例设计的主要原则有:
(1)目的性原则:教学案例设计以提升教学质量为根本目的,要紧紧围绕讲授的知识内容来进行案例设计,帮助同学们理解,更好地掌握构造原理。
(2) 中心性原则:以学生为中心,做好学情分析,对参加课程学习的学生已修课程和掌握的情况要了解,确保案例建立在学生已有的知识架构之上。
(3)生活化原则:案例选取贴近生活,不要涉及太多的专业领域知识,一般采用常见的、简单的架构,开发过程符合《软件构造》规范化的要求,突出现代增量式软件开发技术的应用。
(4)集成性原则:案例中要考虑集成若干不同的软件开发技术,这是因为现代软件构造往往不是只采用单一技术来实现的,需要学生了解如何整合不同的技术。
(5)串连性原则:整门课程不同章节的案例要能串连起来,从而体现了现代软件开发的进化演变的特征。
上述的原则并不是孤立的,而是一个有机的整体,在进行案例设计时,应当要依据授课内容和知识点,加以综合考虑。
在《软件构造》课程中,根据具体教学内容,按照上述的设计原则进行教学案例设计,可以根据教学过程,即课前、课中、课后和实验环节分段组织实施。
(1)根据教学目标、教学对象和教学内容,精心设计教学案例,可以在课程组内组织《软件构造》任课教师共同编写案例,并对案例进行集体评审,投票选出最佳的案例。并在最佳案例的基础上进一步细节,做到案例符合教学目标,贴近生活,难度适中。案例设计之后,还要根据使用的效果,进行动态更新,及时将案例中学生不太容易理解、教学效果不好的部分进行修正,形成真正服务于教学、服务于学生的金案例。
(2)课前发布案例包含的问题,使得学生能够自学并发现问题。在课程开始以前,可以将班级学生分组,在每次课前通过课程QQ群、各慕课平台等将案例中的问题先发布出来,引导同学们做好课前准备,对将要讲解的内容做到“存疑”,带着解决问题的悬念,激发听课的兴趣。而分组的方式,可以保证小组内的同学能够互相监督,共同解决案例中的问题,任课教师在课前可以通过每个组的小组长收集同学们在理解案例时提出的问题。
(3)在课堂讲解时,任课教师针对同学们在课前准备中提出问题,在案例讲解时,对典型的问题逐一讲解,注重将软件构造的基本理论与工程实践相结合,例如在讲解到案例中实际构造的实例时,要站在同学的角度来分析为什么要这么构造,这么做的原理是什么,有没有可替代的方案,这些方案中哪些最优,等等,通过启发和引导学生学习,从而达到“释疑”的效果。
(4)在课程结束后,任课教师应当将案例的构造思路、构造涉及的知识(如算法、数据结构)等内容作为参考资料发布在课程群或慕课平台上,供学生下载复习,而案例提供给学生的最好是用伪代码表示的方案,请同学们用熟悉的编程语言来实现,同学们可以按照小组来提交自己模仿案例构造的软件,提交给教师后,可以采用互评与教师评阅相结合的方式对同学们提交的作品打分,以促进学生学习的兴趣。
(5)在实验环节,可以在课堂案例的基础上,举一反三,在原有案例的功能、性能等方面进行适度的扩展,让同学们在前期完成的软件构造模块的基础上,达到在巩固所学知识的同时有新的进步。
这样,就可以将教学案例贯穿于整个教学环节,但在每个环节中,又有所侧重,学生在课前、课中、课后、实验环节中都能领会到软件构造的基本原理与思想,并能动手实践,在案例中学习,在学习中理解案例中包含的软件构造的基本原理、构造工具和复用方法等。
笔者开设的《软件构造》课程的学生为软件工程专业大三的学生,软件工程的相关专业基础课也已经修完,已经具备了较好的编程基础。掌握学生学情以后,考虑采用一个贯穿课程全程的案例来辅助教学。根据教学大纲的要求,课程章节的设置,案例采用一个大家熟悉的数字计算器开发作为案例。案例设置如表1所示。
表1 软件工程专业《软件构造》课程章节知识与案例
这样,从一个简单的没有图形界面的数字计算器逐步演化为一个功能齐全的可以使用的软件产品,在案例演化的过程中,同学们可以较好地理解各章节的知识点,并能举一反三,在实际的软件开发中能够掌握软件构造的基本原理,应用好软件构造的基本方法、工具。
在课前、课中、课后和实验环节使用案例,可以采用形式多样的方法。例如:在课前,提出数字计算器的案例时,可以先将问题发布出来,由于课程聚焦于软件构造,所以软件的需求任课教师可以先整理好提供给学生,学生们可以根据数字计算器开发提出开发方案,如采用什么样的数据结构、采用什么样的算法等,并对方案进行评估,每个小组给出一个建议的构造方案。在课堂上,教师讲解案例时,采用信息化的工具用形象化的方法来演示案例中的构造方案,和学生课前预习提出的方案进行比较,解释学生的疑问。而在课后,可以请每个小组将案例的构造用具体的编程工具(如Java)实现,并将每个构造都发布在Git等平台上,方便同学们交流学习。而在实验课环节,则在前期学习的基础上,给出开放性的实验,要求在普通数字计算器的基础上,从不同的层面考虑构造。
通过这样的形式,同学们都能较好地完成数字计算器的构造,各小组提交的构造都能做到源于案例、高于案例,达到了教学效果。
由于软件构造已经成为现代软件开发的重要阶段,构造质量直接决定了软件产品的质量和用户使用体验等。而构造本身是理论与实践高度结合的活动,采用纯理论教学,学生学习起来较为困难。实际教学中,注重将学生之前所学的知识整合在一起,按照软件构造的原理、采用各种构造技术和工具,完成软件产品的开发,是实践性较强的课程,通过设计较好的案例能够帮助学生掌握好该门课程。
在案例的选择和设计时,要按照五个基本原则,进行合理设计,并且通过适当的机制,如课程组内部评审等来保证案例能够较好地符合课程需要,此外要加强案例在实验环节的作用,在实验中源于案例,而实验后学生构造成果高于案例。
此外,还需要注意到,软件构造的新技术、新方法不断涌现,在进行教学引入案例时,要将最新的构造方法、构造工具、构造思想引入到案例中,使同学们能够较好地掌握软件构造技术发展的最新前沿,更好地为软件工程培养大量合格人才。