一、实践驱动,激活教学
针对这种情况,采取“实践驱动”的方法,将实践嵌入到教学中,把实践活动提升到与课堂教学同等的地位,用实践活动驱动课堂教学,边练边学,边学边教,让实践活动和课堂教学同步进行,贯穿软件工程实践领域,包括制定计划、需求分析、软件设计、程序编写、软件测试等整个生存周期。为了提高教学效果,将实践活动提前到授课之前开始,而不是授课之后的简单验证或者考查,力图让学生在思考中进行实践,带着问题听课,充分激发学生学习的主观能动性,同时让学生在听完课后有豁然开朗的欣喜感。总而言之,就是让学生练而有惑,学以解惑。在课程刚开始的时候,把学生酌情分成若干人为一小组(通常以6到8人一组),提供一定数量的课题做为选择,课题不应该太复杂,毕竟是软件工程课而不是编程课。每个小组根据自己的喜好选择一个课题。第一堂课,通常会向学生讲授软件工程概论,软件生存周期的六个步骤。课后,可以要求学生开始自己的课程实践。这时候学生虽然知道软件生存周期的第一个步骤是制定计划,却又不知道从何下手,如何制定计划以及计划的内容。这种情况下大多数学生会对教材的相应章节进行学习,并在课堂上积极提问。于是将课堂教学的效果最大化,最大程度地聚焦了学生的注意力。学生先在实践中遇到疑难,然后在课堂上提出疑难,最后在实践中解决疑难,这样才能保证学生牢固掌握所学到的知识,并能在今后的学习生活中加以运用。
二、针对企业,模拟实战
仅仅强调以课程实践驱动课堂教学,还远远不够。比如就曾有学生说:“到底为什么要做需求分析呢,我在项目中并没有觉察到需求分析的作用”。也有学生觉得制定计划很没有必要,可有可无,相应的文档也处理得很简单。相对于软件设计和程序编写来说,其他步骤都受到了一定程度的忽视。这又间接使软件工程课变成了一门加强版的编程课。然而在企业的现实应用中,情况并非如此。制定软件项目计划,做好需求分析,恰恰是决定一个项目成败的至关重要的因素。软件工程课讲授的知识应该是面向企业,面向实战的,不是纸上练兵,也不应该是闭门造车,应该让上过这门课的学生都知道,实际企业中的软件工程是什么样子的,他们以后参与的可能是一个什么样的过程,而不是上完这门课以后只是会用RationalRose画几张用例图、活动图。针对这种情况,采取“模拟实战”的方法,在每个软件生存周期的阶段,老师将模拟不同的角色来推动课程实践向实战靠拢。在制定计划阶段,老师将担任“上司”的角色,对风险分析,开发计划都要进行评阅,如果此阶段进行得不成功的话,老师可以对此课题喊停,该小组将不得不另选一个课题重新进行课程实践。在需求分析阶段,老师将摇身一变为“用户”,各小组需要制定相应的调查纲要,对用户的需求进行调查了解。同时仍然拥有“上司”的身份,各小组需要向上提交一份可行性研究报告,以决定该课题是否继续。在软件设计阶段,老师将以“用户“的身份对需求随时进行调整,让学生充分理解迭代的过程,这时候过程不规范的小组将深受其苦。在其后的编程和测试阶段,老师都将以“上司“的身份参与实践,使实践过程受控。每个小组都需设一名组长,并将小组的集体讨论贯穿整个课程实践,同时进行讨论纪录,附在文档之后。这样能使小组所有成员对开发过程有一个清晰一致的认识,从而实现整体能力的提高,获得更佳的效果。这对强调团队精神的软件开发尤为重要。
作者:周翔 刘晓强 单位:江西南昌大学软件学院