兰刚 甘涛 管庆 傅翀
[摘 要] 目前软件类综合设计课程存在设计过程缺乏规范性、对软件工程相关能力训练不足、小组不同成员的能力锻炼不均衡等问题。通过教学设计,强调系统能力的培养,加强过程管理,强化综合设计任务执行过程的规范性,并采用翻转课堂等方式,引导学生按软件工程的规范进行综合设计项目开发,有效加强了软件工程思维训练,提高了学生软件工程能力。
[关键词] 综合设计;软件工程;过程管理;翻转课堂
综合设计课程属于提升专业工程能力的实践类课程。通过综合设计,学生可以把所学知识应用于具体的工程问题解决,在巩固相关知识的同时,提升工程能力。我院作为软件工程学院,早已实施了卓越工程师计划,并且通过了工程教育专业认证[1-3]。我院尤其重视综合设计,把其列为核心实践课程,并对综合设计课程进行了持续改进。
综合设计实验是一项重在过程的教学工作,相对于设计成果和设计报告,更应该强调设计过程对学生能力的培养,因此综合设计更应该注重设计过程管理。综合设计过程涵盖从设计开始到结束的各个环节,设计过程进行管理则包含了设计流程规范性管理、设计过程教学指导管理、设计过程考核方式、设计过程对学生能力的培养以及对学生主动性积极性促进方面的考量。本文阐述了综合设计过程管理的具体实施方案。
一、目前综合设计I执行中存在的问题
我院的综合设计由综合设计I,II,III三个阶段组成。时间跨度从第2学期到第7学期,是一个难度和工作量都逐步提升的过程。其中综合设计I在大二上学期进行,是学生首次综合应用所学的知识进行一个工程项目的设计。此前综合设计I在设计过程管理中,存在以下问题。
(一)设计过程缺乏规范性,对软件工程相关能力训练不足
由于综合设计I是学生初次接触的工程设计,而且大二上学期的学生所掌握的知识有限,因此设计题目相对简单。这样导致的结果是很多组的学生拿到任务后,简单梳理下思路,在大致划分系统的模块之后,就开始进行编码设计,而不是遵循软件工程的要求,按需求分析、可行性分析、概要设计、详细设计、编码设计、测试这样一个规范流程来完成设计[4]。虽然指导老师也会强调按软件工程规范进行设计,但大多数同学还是在完成设计最后写总结报告的时候才补充需求分析、可行性分析、概要设计等方面的内容,而不是严格按软件工程规范进行设计,设计过程的随意性较大,导致相当一部分同学对软件工程相关能力训练不足,对软件工程规范在实际工程中的应用掌握不够全面,理解不够深刻。
(二)小组不同成员的能力锻炼不均衡
由于综合设计I的设计任务相对简单,可能导致一个组的不同学生在完成设计任务时所承担的任务量差距较大。比如可能由一个能力相对强的学生完成整个设计的编码任务,而其他成员完成查找资料、论文排版等一些相对简单的任务,使得一个组的不同组员得到的能力锻炼差别较大,部分成员得到的锻炼不够,一些学员甚至存在“混”和吃“大锅饭”的想法[5]。
二、研究的基本思路
综合设计I是整个综合设计课程体系中的基础阶段。此时学生已经完成了C语言课程的学习,并同步进行软件工程课程的学习。因此综合设计I需要在学生初次进行一个软件工程项目设计的时候,能够正确的引导学生应用软件工程的方法和工具进行软件项目的设计,强化学生的软件工程思维,为后面的综合设计II、综合设计III两个阶段的设计以及以后工作中参与大型项目设计打下坚实的基础。我们拟采用以下思路来进行综合设计I实验建设。
(一)强调系统能力的培养
系统能力的培养具有突出的工程教育特征,是解决复杂工程问题的直接體现。与其他专业学生的计算机基础和应用能力相比,计算机软件类专业学生更应突出强调计算机软件系统能力的培养[6]。而软件工程相关的知识、方法和工具,是软件类工程项目实施的基础,是学生必须掌握的基础系统能力。在综合设计整个过程中,都需要重视对软件工程思维及相关技能的培养。
(二)加强过程管理
加强设计过程的管理,使得指导老师对综合设计的指导和管理从偏向结果的管理方式,转变为过程管理和结果并重的管理方式。加大对教学过程的关注,使教育真正转向素质教育,形成持续提升的教育发展趋势是教育的必然选择[7],因此需要通过对实验管理过程进行顶层设计、优化过程实施及过程管理[8],提高综合设计的效果。
(三)强化综合设计任务执行过程的规范性
强化综合设计任务执行过程的规范性,引导学生严格按照软件工程的规范来进行设计,从学生第一次进行软件工程项目开发起,就培养其软件工程思维习惯,为以后学生走向工作岗位,成为高端软件设计人才打下坚实的基础。
(四)通过教学设计增强学生自主学习和主动合作学习的积极性
自主学习能力的培养是创新人才实践教学的重要内容[9]。自主学习能力有助于提高学生获取知识的积极性和自觉性。主动合作学习,是指学生在学习过程能够主动开展合作,共同学习、探讨、分享所学的知识、方法和技巧[ 10 ]。需要通过教学设计和管理,让学生自觉认识到合作的积极效应。
三、综合设计I改革实践
根据以上思路,我们在综合设计I的建设时,做了以下调整和改革。
(一)框架性设计任务
在综合设计I阶段,设计题目和任务都是框架性的,没有具体的设计目标。而具体的设计目标,由学生在任务框架下自行确定。
比如其中一个题目是“基于MSP430F5529的小游戏开发”。该题目规定设计的任务是开发一个小游戏,但具体是什么样的小游戏,游戏需要具备哪些功能,该如何操作等,都是由学生经过小组讨论后自行确定。经过指导老师审核通过后,每个组根据自己提出的具体目标去完成设计任务。
这样做的一个优点是在同一个任务框架下,不同组所选择的具体设计目标不同,不同组之间的具体设计内容并不重复。这样2~3个老师可以共同负责同一个设计任务的4~6组学生进行设计。所有组都可以详细介绍自己的设计思想、方法和具体实现等,以翻转课堂的方式进行交流,而不用担心这样的交流可能会导致自己的设计内容可能被其他组“抄袭”。
(二)按软件工程规范流程进行设计过程管理
为了强化学生的软件工程意识,使得每个组的设计过程能按照软件工程的规范严格执行,本次综合设计实验课的建设,按软件工程规范流程来设计指导,以这种方式加强学生软件工程相关能力的训练。为此,选取了部分指导课,专门用于软件工程相关内容的研讨,具体设计如下。
1.第一次指导,部署任务,主要是对任务进行详细讲解,使学生对任务有更深的理解。对任务实现的方向和主要技术路线做探讨,讲解需要学生自学掌握的一些基础知识和开发工具。
详解介绍评价和考核方式,以及对设计过程管理的要求。布置后面几次研讨内容和时间节点,让同学提前准备。
2.第一次研讨,进行可行性分析和需求分析相关技术讨论。主要内容是可行性分析该如何做,应该从哪些角度进行可行性分析,阐述对需求分析相关知识和方法的认识和理解,如需求分析可以采用哪些方式来描述,常用工具有哪些,确定具体的设计内容,并对具体的设计目标进行描述;准备用什么方式来对本次设计的需求分析进行描述,给出小组完成设计任务的进度计划表。
3.第二次研讨,软件可行性分析和需求分析阐述、概要设计方法研讨。主要内容是就选定设计目标阐述具体的可行性分析和需求分析。阐述对系统概要设计相关知识和方法的了解和认识,如系统总体设计(概要设计)可以采用哪些方式来描述,常用工具有哪些,准备用什么方式来进行本次设计的系统概要设计。
4.第三次研讨,系统总体设计阐述、系统详细设计方法研讨。主要内容是根据每组所做的需求分析,给出系统的概要设计和模块划分,通过讨论,确定不同组员负责模块的分工。原则除专职测试外,每个组员都需要承担相应模块的设计任务。阐述对详细设计相关知识和方法的认识和理解。针对示例程序的学习有什么心得体会和收获。
5.第四次研讨,复杂工程问题和关键知识点的讨论。主要内容是就系统的概要设计,阐述对设计题目所需的关键知识点的理解。阐述设计相关的复杂工程问题及解决方案。
6.第五次研讨,系统详细设计介绍。具体要求是根据系统概要设计和模块划分,每个组员分别阐述自己所负责模块关键部分的详细设计。阐述设计过程中遇到的复杂工程问题及解决方案。
7.第二、第三次指导。检查设计进度,辅助解决学生设计中遇到的问题。
8.第六次研讨,中期检查。主要内容是每个组介绍目前设计的进度;介绍设计中遇到的复杂工程问题及解决方案;讲解后续进度安排和计划。
9.第四、第五次指导,检查设计进度,辅助解决学生设计中遇到的问题。
10.第七次研讨,系统测试方法讨论。每个组就系统测试方法和使用工具进行讨论,并且介绍准备采用的测试方法和工具。
11.第六次指导,总结报告撰写、答辩准备指导。检查学生最后的完成情况,指导学生撰写总结报告、撰写总结报告的注意事项,指导学生准备答辩材料。
(二)学生对设计进度的把控更严格
在第一次指导课进行任务讲解时,指导教师就把整个设计过程要进行的主题研讨内容以及时间节点安排告知学生,并要求学生制定本组的项目实施计划,严格按计划执行。而每周的研讨和进度检查,可以督促学生按计划进度执行。尤其是研讨课,学生需要详细讲解具体的设计方法和实现,指导教师会根据每次同学汇报和讲解的表现给出设计过程分,这也将促使学生严格按计划执行设计任务。
(三)翻转课堂设计
从上文可以看出,整个设计过程安排了7次软件工程相关主题的研讨。这7次研讨以翻转课堂的方式进行,以学生汇报、师生讨论、教师点评、解答的模式实施。通过翻转课堂设计,把设计指导变为了主题研讨。
每个组根据每次研讨课的主题,自主查阅资料准备PPT,上讲台讲解。讲解的重点是对相关主题内容的理解、具体实现的详细描述、目前遇到的问题、解决问题的技术手段等。
每组学生讲解完成后,指导教师会对该组学生讲解中存在的问题和讲解不清楚之处进行提问,和学生一起探讨,并指导学生解决设计中遇到的技术难题。在此期间,其他组的同学也可以提问,一起讨论,这样有助于学生梳理相关的知识点,使得学生对相关知识点的掌握更清晰。
最后,指导教师会对该组学生讲解的内容进行点评,包括存在的问题、遗漏和不完善之处、与其他组相比较所具备的优点、改进建议等,使得学生通过翻转课堂形式的研讨后,除了能巩固他们所掌握的知识外,还能够得到提升。
由于加强了综合设计过程的管理,并采取了翻转课堂的研讨方式,使得指导老师对每个小组的执行情况和执行进度有较为清晰的了解,并且对一个组内每个学生所承担任务的工作量、出力多少、学习能力和态度等,有一个直观的了解和感受,可以相对客观的对小组内的每个同学的设计过程成绩进行评定。通过对每次研讨进行考评的方式,实现了对设计过程相对客观的考核评价。
(四)增加设计过程考核的权重
由于加强了对综合设计过程的管理,使得指导老师可以相对客观的对一个组的每个同学的平时成绩进行评定。在这种情况下,我们增加了设计过程考核分数占总成绩的权重,使其从原来的10%提升为40%,而且评价方式也由原来的组内互评,改为以指导老师评价为主,同学组内互评为辅的评价方式。每次研讨课都给予了相应的分数,通过这种方式实现了对设计过程的考核评价。
四、综合设计改革成果分析
本次综合设计改革是整个综合设计实验课程平台建设项目的第一阶段,该部分在2018—2019年度的第一学期进行了实施,取得了较为明显的效果。
(一)强化了学生对软件工程相关方法和工具的掌握
通过上述主题研讨课的安排,使得学生的整个综合设计过程都严格按照软件工程的规范流程进行。而主题研討方式,一个组讲解他们对研讨主题的理解以及具体实施方案时,其他组的同学在旁听,且可以提问探讨。不同组对同一个问题的理解可能有差异,而且针对本组设计任务采用的具体实施技术和方法也不同,这样的探讨容易在不同组之间形成思维碰撞,使得学生对相关主题的理解更加深刻、更加全面。