实践与反思
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2 “软件工程实践”教学改革与课程建设

“软件工程实践”课程一般安排在本科三年级下学期。此时的学生经过前几个学期的学习和实践已经掌握了一定的计算机知识和编程能力,但分析解决复杂软件问题的能力及工程化软件开发的意识还比较薄弱。而“软件工程实践”课程的目标是使学生系统地掌握软件工程及软件管理的过程、方法和工具,为学生将来从事软件的开发和管理奠定基础。“软件工程实践”教学内容中的需求分析、系统设计、编码实现和软件测试等软件开发技术及工程化的开发过程(如软件过程、配置管理、项目管理等)必须通过实际软件问题求解过程和团队合作进行体验,而综合的软件开发能力更需要通过一个完整的软件项目开发过程进行锻炼和培养。在教学过程中,我们采用“案例教学、项目驱动、团队合作”的教学方法,边探索边改进,关于本门课程的教学谈以下几点思考。

2.1 明确教学目标和任务

“软件工程实践”教学指软件工程系列课程的实践教学,也指软件工程专业学生的软件工程能力和软件工程素质培养方面的实践教学。软件工程系列课程的实践教学包括需求分析实践教学、软件设计实践教学、软件实现实践教学、人机交互实践教学、软件测试实践教学等,“软件工程实践”是对学生工程化软件开发能力的全面训练。本课程以面向对象的开发方法和统一软件过程RUP为基础,引导学生完成一个完整的软件项目开发过程,包括需求获取、需求分析、概要设计、详细设计、编码实现和软件测试等瀑布模型内容,以及对应的技术文档的编写,同时强调数据库技术、网络技术等开发技术的综合运用,以及相关CASE工具的使用。在此基础上还鼓励学生尝试一些新的软件开发方法和技术。例如,构件技术、AOP、Web Service等新的软件开发方法和技术的应用;层次体系结构等体系结构风格的运用;面向方面(Aspect)、关注点分离的设计思想;系统可维护性和可扩展性的考虑、面向对象设计模式的运用;对于系统边界之外的外部接口的设计考虑等,以培养学生的创新能力。

2.2 采用案例教学和项目驱动相结合的方法

“软件工程实践”课程具有以下特点:

(1)完整的软件开发过程。课程教学以一个实际项目的完整开发过程为主线,覆盖了从需求获取、需求分析、概要设计、详细设计到编码实现和测试的整个软件开发过程。

(2)综合性与真实性。本课程要求完全实现所选择的软件项目,因此学生需要综合运用数据库设计、网络编程等技术知识,同时还要运用项目管理的知识,使学生能够体会到真实的软件开发过程中的一些技术问题(如外部交互接口、第三方软件构件等)和管理问题。

(3)开发过程的规范性。强调每个开发团队的开发过程都应该遵从软件过程规范,同时在开发过程中必须引入项目管理机制。

根据本课程的特点,在教学中以案例分析和完成实际项目为主线,确立案例和项目驱动结合的教学原则,本原则强调了在“实践”中“学习”的思想。首先案例的选择要具有全面性、典型性、准确性和特色性等基本原则,其次案例的选择要做到先易后难、深入浅出、逐步推进。

我们对教学改革和课程建设边探索边实践,努力做到:(1)设置实践项目和参考的案例,包括需求获取、需求分析、概要设计、详细设计、编码实现及软件测试等;(2)实践内容覆盖软件工程学科的各主要环节,覆盖软件生存周期各阶段,使学生通过实践加深对学科理论知识的理解;(3)充分重视和精心设计实践内容,要有可操作性、趣味性和适当难度;(4)软件工程实践要求学生采用项目小组的形式,结合具体开发项目进行设计;(5)学生分工合作,将项目开发各阶段的任务明确,熟悉软件开发环境,培养团队精神,共同完成项目的任务;(6)教师按工程化要求及实践内容,进行教学指导,引导学生独立分析解决问题;(7)每个项目小组必须按照国家《计算机软件开发规范》中给定的文档规范标准提供相应项目文档。

2.3 基于团队合作的软件工程实践

在进行软件工程实践教学活动初期,我们对学生按小组建立相应的软件开发团队,然后在教师的指导下,软件开发小组按软件企业的项目管理和开发模式,以项目驱动进行软件系统开发实践训练,以项目开发带动软件工程的理论学习,又以软件工程理论来指导软件开发的实践,使学生得到较全面、系统和规范的软件工程实践训练,提高软件开发能力。

(1)团队建设的目的:将软件工程原理、方法和过程应用到实践中,体验软件工程各阶段的主要工作,特别注意吸取教训;学会与他人合作,培养团队合作精神。

(2)软件开发:由于针对的是缺乏工程经验的大三学生,因此要求各小组根据自己的特点选择最适合的项目,同时强调开发小组的实践重点不但包括项目开发的技术方面,同时还包括学习过程与活动的实施技巧,即项目管理。教师对开发团队采用的具体技术不做特别的要求,从而更能发挥学生的主动性与团队的优势。

(3)团队建设:全班分为若干小组,每组5人左右,学生可根据自己的情况自愿结合,由教师提供分组指导,如根据兴趣爱好、性格特点和软件开发能力(包括需求分析能力、系统设计能力、编码能力、测试能力和项目管理能力等)组成开发小组,然后每个开发小组在项目经理的组织领导下,召开会议讨论开发小组名称、Logo和口号,接着开发小组选定开发项目,最后通过相应的手续申报。

各开发小组角色分配及其职责如下(开发小组成员可以身兼两个角色):

● 项目经理(1)。

● 系统分析员、软件设计师(1+1)。

● 软件开发工程师(软件开发经理(1+1))。

● 测试工程师(1)。

● 质量管理和配置管理工程师(1)。

● 通过完成与企业化类似的实践过程,培养了学生软件工程实践能力、创新能力和积极向上的团队精神。

2.4 值得进一步思考的问题

软件工程专业与其他专业不同,计算机专业的几门主要课程彼此连接非常紧密,孤立地学习和理解各门课程肯定达不到深度要求,因此在教学中要特别注意培养学生利用本课程知识对其他课程进行学习和深入探讨、应用的能力。

我们尝试本门课程与“面向对象分析与UML”、“软件测试实践”和“软件项目管理”等课程相结合,使学生把其他课程所学知识应用到软件工程实践课程具体实际项目中,有助于提高学生的综合素质和实践能力,使学生成为素质全面的实战型人才。