以实践能力培养为目标的软件工程教学改革探索
2022-07-13侯之旭任大飞
侯之旭 任大飞
(长江师范学院大数据与智能工程学院,重庆 408100)
0 引言
软件工程的教学内容是软件工程学科的基本概念、基本原理和基本方法,教学目标是培养学生用软件方式解决应用问题的能力, 即锻炼学生的分析需求、设计软件解决方案并实现软件的能力,这就决定了软件工程必是一门理论与实践并重的课程。 并且在课程教学中还表现出一些特点。 第一,软件工程的学习通常需要一些前导课程做基础,比如程序设计基础、数据结构与算法设计、数据库应用等,这些课程是从事软件开发重要的基础知识和开发技术来源,这些课程的学习质量直接影响软件工程课程的学习质量甚至是兴趣。 第二,课程理论知识具有抽象性且概念多、关系复杂,学习起来枯燥难理解。 第三,课程理论知识大多来源于大型复杂软件开发,这让几乎无开发经验的学生学习起来接收困难。 第四,课程实验内容通常为软件建模练习和文档编制,这很容易被学生认为“无用”,对学生动手实验的吸引力不大。 这些原因都给课程教学带来极大困难,也给课程教学目标的达成带来不利。
因此为了改善教学效果,促进课程教学目标的达成,需要结合课程实际,分析软件工程实践能力的内涵和培养途径,再针对理论和实验教学现状中存在的问题给出相应的改革办法。
1 实践能力及培养途径分析
具体到软件工程课程需要培养的工程实践能力,主要指:(1)能用软件工程的原则、开发方法与技术实现软件项目的开发与管理;(2)能适应软件开发新方向。 要具备这些能力,首先,要在课程实验环节,动手开发实际软件项目,积累开发经验;其次,要在课程理论学习中,理解软件工程的概念、原则,学习主流的技术和方法,了解新技术等。 本文将从课程理论和课程实验两个方面分别描述课程教学现状和改革措施。
2 课程教学现状
2.1 理论教学面临的问题
首先,软件工程课程理论具有概念多、名词多,知识点之间关系不易把握的特点,学生学习很难产生主动的学习兴趣。 比如,在第一章学习中,就会先后接触到“软件”“软件生命周期”“软件工程”“软件过程”和“软件过程模型”等概念,“软件”是软件开发的目标产品,“软件生命周期”是软件概念的补充,对指导软件开发过程的活动安排有重要作用,“软件工程”是一个以制造计算机软件为目标的工程学科分支,强调综合利用基础科学知识, 能以最小代价开发出高质量软件,“软件过程” 是一次软件开发各活动所形成的过程,即软件工程的一次实践等。 由此可见这几个名词在含义上相互之间有关系,且对课程学习目的的认识有重要作用。 但教材和常见学习资料通常仅给出名词的经典定义,学生学起来难理解、难记忆,也很难产生进一步学习的兴趣。
其次,课程理论知识大多数是来源于软件开发领域的优秀经验、标准规范等,且大多针对的是大型或复杂软件,这些很难在几乎无软件开发经验的学生头脑中产生共鸣。 软件工程课程为了能够对各种规模、各种复杂程度、各种类型软件开发问题都能起到指导作用,所以内容大多是以大型复杂软件开发的需要所安排的,主要特征为规范严格、过程烦琐、建模复杂以及文档细致,这些特点与几乎没有软件开发经验的学生形成鲜明对比,实际教学中也很少有真实的大型复杂项目作为案例, 所以学起来很难有直观的感受,即课程内容较难调动学生学习的主动性。
最后,由于课程实验课时少,实验内容决定了主要的理论教学内容为软件需求和设计阶段的知识,然而在实际软件开发中,这两个阶段不直接产生软件程序,对于没有全过程软件开发经验和切身体会的学生来说,开发软件就是编写程序,可以运行的程序才最重要,编写代码技术好才是软件开发的真本事,甚至是唯一需要的能力,而需求理解分析、软件设计的建模和文档似乎是没有多大用的。 这就导致课程内容对学生吸引力不大。
2.2 实验教学存在的问题
首先,由于实验课时少,所以只能将实验内容选定为软件需求、设计建模及文档编制(因为软件开发过程其他活动的知识有相应专业课学习), 而这些实验内容学习成本较高(另外要学习UML 和建模工具)且无直接的可运行程序产出,对学生练习的吸引力很小。 其次,通常只有中大型软件开发才必须要求规范的软件建模和文档编制,而学生实验练习题目很难达到这样的规模,一般是选择需求能够来源于常识中小型软件题目,这就导致实验内容的说服力不强。
3 教学改革措施
鉴于现在课程教学中存在的问题,应该以工程实践能力的培养为教学目标,有针对性的分别在理论教学和实验教学中采取相应措施。
3.1 创新理论教学方法,改善学生学习效果
针对课程理论知识很难引起学生兴趣,学习效果不好的现状,在理论教学中可采取以下四种措施。
第一,利用与学生存量知识之间的接口,让学生对知识的接收更容易。 比如,大多数学生通过前导课程的学习, 已有编写计算机程序解决应用问题的经历,了解软件开发要从问题需求开始,所以在讲解软件开发过程(需求分析、软件设计、编码实现、测试、部署)时就可以充分利用这一点。 即软件开发一定是为了解决现实中的某个应用问题,所以先要理解分析问题。 另外学生也都有中小学解数学应用问题的经历,可以引导学生参照数学上解决应用问题的经典过程(如审题、设计算式、计算出结果、验证结果),软件开发也需要理解分析应用问题的需求,然后设计解决该问题的软件解决方案,最后用程序设计语言实现该软件,并由软件测试保证软件质量。
第二,重在讲解知识点之间的联系,具体知识点学习可充分发挥学生自学。 大多数学生都有较强的自学能力, 针对单个具体概念的学习是完全可以胜任的,鉴于课程概念多的问题,可以将讲解的重点放在讲清楚知识点之间的联系上。 比如,在学习软件设计活动时,通常依次要学习这三个概念:(1)软件设计;(2)设计模型;(3)设计原则。 学生对这三个概念自学是基本可以理解的,自学的困难之处在于,不容易理解为什么要学设计原则,教师只需要讲出来是设计模型的内容和质量要求以及设计活动所面临的挑战决定了必须要依照一些设计原则才能完成设计,才可能得出高质量的设计方案。
第三,理论知识讲解时一定要结合案例,并且使用一个案例贯穿整个知识体系讲解的全过程。 课程的核心内容就是软件开发各阶段的活动及相关方法和技术,讲解这样的内容,一定要充分借助一个有代表性的软件案例,通过逐步介绍其开发过程和各阶段的软件制品,使学生有更具体的理解。 比如,在需求理解分析活动中,引导学生通过理解需求尝试规划系统功能用例和参与者,并构思之间的关系,尝试表示出系统功能模型,然后给出一个标准的详略适当的功能模型的“参考答案”,使学生自动的反思自己模型表示的优势和不足之处,取长补短,提升能力。
第四,在理论知识讲解过程中适时引入对软件开发领域新方向、新技术。 软件工程学科内容是为高效的开发出高质量软件而准备的,自然也会因为社会对软件要求的变化而发展,所以学习者在学习传统的经典的软件过程模型,掌握主流的软件开发方法、技术的同时,也一定要了解软件开发的新方向,比如现在处于发展中的基于构件的软件开发、 敏捷软件开发、面向服务的软件开发以及持续集成等软件开发新方向。比如,现在软件开发时需求变化情况可能会发生在软件开发和运行的各个时期, 甚至软件开发可能是仅从创意开始的,软件边开发需求边构思,软件边使用功能边丰富,这要求软件开发具有适应需求变化能力。
3.2 强化课程实验,锻炼学生实践能力
针对课程实验内容的吸引力不大、说服力不强的处境和实验目标难以达成的现状。 在课程实验教学中可采取如下四条改革措施。
第一,应该有针对性加强关键步骤演示,及时解决学生实践环节的卡壳点。 在面向对象方法是主流的软件开发方法的当下, 掌握UML 模型表示机制及其相关建模软件是很有必要的。 所以学生要想顺利地开展软件建模实验,首先要对UML 有比较深入的了解,这已经是比较大的学习任务了,而且实际中还要熟悉一款可以进行UML 软件建模的工具, 这无疑又增大了学习任务。 所以要求在有限的实验时间内进行软件建模练习, 学生必然会在UML 学习及工具软件熟悉过程中有困难和卡壳点,教师一定要结合自己实验备课的体会,再加上主动收集学生实验过程中的疑难问题,及时进行演示讲解,助力学生顺利开展课程实验。
第二,合理组织实验小组,精心确定软件题目。 为了能够模拟真实的软件项目开发场景,实验形式适合3~8 名学生组成项目小组, 这样既可以承担一定规模的软件题目,又可以在实验中锻炼项目组成员分工协作。 另外软件题目的以小组自拟加教师审核的方式确定,在自拟题目之前教师也可以提供数个题目供学生参考, 让学生在参考中体会可以选择的软件类型、软件规模等。 教师审核软件题目和软件需求这个环节必不可少, 一定要确保选择的题目有开发意义价值,具备一定的规模,且具备可实现性。
第三,强化软件开发过程控制。 在组成项目组,确定软件题目后,应该要求学生根据每次实验课安排的实验任务, 对自己的软件题目进行相应软件建模,在本次任务完成后,要以实验报告的形式提交当前软件建模的成果。 在需求分析建模完成、软件设计建模完成后,还要编制需求文档和设计文档。 虽不作为实验成绩的组成部分, 但鼓励学生在实验课时结束后,项目小组将软件设计进行编程实现,将软件开发完成。
第四,改进课程考核方法,强化实验所占比例。 为了突出实验练习在达成课程教学目标中的重要性,还可以将实验环节在课程考核中的占比在一定范围内加大,参考软件工程的教学实施方案建议,将占比确定为40%,其中软件建模结果和质量占20%,实验报告情况占10%,规范化需求和设计文档占10%。
4 结语
作为计算机专业一门核心专业课,软件工程肩负着培养学生软件开发方面的工程实践能力的重任。 良好的软件开发能力不仅要求具有实际软件开发经历,也要求具备成体系的理论知识,所以实际教学中既不能轻视课程实验对学生的锻炼,又不能忽视课程理论知识的教学效果。 经过长达5 学期软件工程一线教学观察和思考,针对课程教学中存在的问题,先后逐步在教学中施以本文所述教学改革措施。 经过对比发现学生在理解知识点之间的关系和学习主动性方面有了明显改善,在实验方面也从模仿已有软件模型到独立设计软件模型。 在教学目标达成方面取得了一定的成效。 鉴于教学课时有限,后续可以考虑将知识点之间的关系整理成学习资料,将建模工具软件操作录制成视频等,持续推进课程建设。