骆斌+++王浩然+++丁二玉
摘 要:高端软件设计人才不仅要有过硬的设计技能,还要有牢固的工程观、系统观和产品观。本文基于南京大学软件学院的教学实践,以软件系统的设计与构造为主线,提出了围绕软件设计设置和实施的软件工程专业关键课程方案。该方案强调在专业入门课程就开始培养学生的软件工程观念和系统观念,并一以贯之地教授学生在软件工程思想的指导下进行软件设计的能力。
关键词:软件工程;软件设计;教学改革;课程建设;教材建设
一、概述
作为国家战略性新兴产业,软件业急需一批领军型软件人才。教育部在2002年批准开办软件工程(以下简称SE)专业并设立国家示范性软件学院,2011年批准设立软件工程一级学科并把软件工程师培养列入了卓越工程师教育培养计划。至2013年,我国有425所高校开设软件工程专业,设点数、招生数及就业质量均进入前十。因此,研究与建设软件工程专业关键课程体系对于软件人才培养具有重要的现实意义和积极的推动作用。
国际上,IEEE和ACM共同制定了软件工程学科教程CCSE[1,2],给出了软件工程专业的教育知识体系,提出了组织和设计课程体系的若干建议,是公认的软件人才培养工作基础。CCSE推荐课程包括SE基础课程5门、CS中级课程3门和SE高级课程6门,并提出了SE优先的课程方案和CS过渡的课程方案。
但是,SE专业在教学实施中面临以下难题[3]:(1)传统计算机科学(以下简称CS)专业的软件工程课程如何合理过渡到SE基础课程和6门SE高级课程;(2)如何落实SE优先的教学理念,解决关键课程的教学实践与教学资源;(3)如何实施软件工程课程与程序设计类课程的融合教学。
具体来说,目前国际国内缺乏对SE关键课程的教学实践,SE优先的基础课程与部分高级课程属于全新构造,难觅教材和成熟的教学资源,从而导致SE专业教学在实施时面临很大困难,大多数学校只能因循计算机科学专业传统课程过渡。因此,贯彻SE优先的教育理念与落实系统化的SE专业教学体系成为摆在广大SE教育者面前的一个巨大挑战。针对这些问题,南京大学软件工程专业经过多年教学实践,以软件开发的核心工作——软件系统设计与构造为主线,提出了面向软件系统设计与构造的SE专业关键课程教学实施方案。
二、设置思路
CS传统课程按照知识领域安排,非常适合于培养研究性人才。软件产业则迫切需要能够综合运用各种工程技术知识解决具体问题的实用性人才。为此,南京大学SE专业教学体系从能力培养入手,强调持续培养学生的工程观、系统观和产品观;面向“软件系统设计与构造”主线,规划专业关键课程,实践并求精CCSE的SE优先课程设置方案;探索关键课程的教学内容与教学方法,建设相关教材与教学案例。
1.提出软件工程专业课程改革的基本策略。在专业教学早期开始培养学生工程观、系统观与产品观,引导学生持续以软件工程观的角度学习与体验软件系统分析、设计与构建的过程。在一年级开设软件工程课程,专业入门时就树立学生的工程观和系统观,将质量、成本、度量、折中、决策、纪律、规范等工程理念贯穿后续课程,通过反复强化来培养学生牢固的工程理念以及基于工程理念解决问题和进行开发的能力。
2.规划与实践SE优先的专业关键课程。遵循工程的集成与创新特征,面向“软件系统设计与构造”,按照软件系统规模由小及大的次序建立专业教学主线,即以小规模系统、中规模系统、中规模产品、大规模系统技术、应用领域来部署SE专业课程的展开。在单门课程中强调构建系统的全面知识融合教学,培养学生解决实际问题的综合能力。
3.探索适应培养卓越软件人才的教学方法。软件人才培养必须重视学生的工程实践能力、设计能力与创新能力培养,重视实验、实训、实习等培养过程,特别是理论教学与实践教学的完美融合。主要的教学方法包括:面向具体的软件系统构造项目开展综合性知识教学;加强课程教学案例与实践用例建设,实施理论、案例、实践相辅相成的教学;探索校企合作教学、面向问题教学、体验式教学、面向实际教学、研讨式教学、软件创新设计竞赛教学等适合卓越人才培养的新型教学方法。
三、课程体系框架
下图给出了南京大学SE专业的课程体系框架[4,5],其中左侧为重点建设的SE专业关键性基础课程,右侧为其他SE专业基础课程和高级课程,后者在教学上较为成熟,故不赘述。
面向“软件系统设计与构造”的SE专业关键课程共7门,分别为计算系统基础、软件工程与计算Ⅰ、软件工程与计算Ⅱ、软件工程与计算Ⅲ、软件需求工程、软件系统设计与体系结构、人机交互的软件工程方法,分别重点解决学生计算系统分层构建、个人级小规模软件系统设计与构造、小组级中小规模软件系统设计与构造、模拟团队级中规模软件产品设计与构建、大规模软件系统的需求技术、大规模软件系统的设计技术、交互式软件系统设计与评估技术等关键性能力培养。
南京大学软件工程专业课程体系结构图
这7门关键课程均围绕一个具体的软件系统教学案例,融合构建系统所需的多方面知识展开每门课程的教学。各课程都精心设计了一个教学讲解用的软件系统构建案例,并同步设计了一个培养学生工程能力的实践用例。课程围绕教学案例和实践用例的构建活动组织课程教学和实践教学。课程同时力图打破传统课程的技术藩篱,将程序设计、软件工程、交流与沟通、团队动力学、职业素质、过程管理、工程经济学等知识进行融合教学,在案例中引导学生使用软件工程的观念来观察、体验和实践计算系统软件的设计与构建过程,训练其软件系统设计与构造的综合能力。
四、课程描述
“计算系统基础”,以一个经典计算机指令集MIPS的简化版本DLX为线索,以C语言为载体,使初学者可以建立起完整的计算概念,了解经典计算系统的工作原理,理解计算系统自底向上、逐次构造的过程;理解结构化程序设计,能够利用自顶向下、逐步求精的方法完成小规模的结构化程序。具体教学内容包括:数据的机器级表示、数字逻辑、冯·诺伊曼模型、机器语言、汇编语言、输入和输出、Trap 机制和子例程、结构化程序设计和语言处理。endprint
“软件工程与计算Ⅰ”,在软件工程理念指导下,侧重于程序设计教学。以一个计算示例和实践用例的迭代式增量开发实践为线索,全面培养学生在个人开发级别的小规模软件系统构建能力,让学生初步体验软件工程方法与技术在系统开发中的关键作用。具体教学内容包括:程序设计基础、面向对象程序设计语言;OOA、OOD、调试与测试等软件工程知识;个人级别的软件开发活动管理、个人级别的软件职业知识。
“软件工程与计算Ⅱ”,以经典软件工程方法与技术为主线,软件设计与构造知识为教学重点,软件系统构建实例(计算系统示例与学生实践用例)为切入点,培养学生基于瀑布模型的、简单小组开发级别的、中小规模软件系统构建能力。具体教学内容包括:软件工程历史、软件职业知识;适用于中小规模软件产品开发的软件工程方法、原则与实践;软件工程方法指导下的程序设计原则与实践;小组级别的简单软件开发活动管理;包括代码和重要文档在内的关键软件开发制品。
“软件工程与计算Ⅲ”,以螺旋模型和团队实践为特征,通过开发一个中等规模软件产品的方式,培养学生对程序设计和软件工程方法的实际运用能力,同时强化学生的职业技能和项目管理能力。将学生组织成8人左右的团队,按照6个阶段(即项目启动阶段、第一循环、第二循环、第三循环、第四循环、项目部署阶段)合作完成一个具有一定复杂度的具体项目。在项目完成过程中,涉及需求、设计、实现和质量保障,强调团队协作、文档写作、工具使用、陈述等能力,并在软件团队中对软件开发进行管理。
“软件需求工程”,以需求工程技术、软件经济学和迭代过程为特征,结合工业界实例综合分析,培养学生构建大规模软件系统所需要的需求获取、分析与建模能力,试图让学生把握需求工程工作给后继软件项目工作带来的影响。具体教学内容包括:需求工程基础、需求获取方法与技术、需求分析方法、需求分析模型与建模技术、需求管理与需求工程过程知识、软件工程经济学等。
“软件系统设计与体系结构”,以软件设计、体系结构、可复用软件过程为特征,结合复杂工程案例及其重构,培养学生构建大规模软件系统所需要的综合设计技术能力。具体教学内容包括:软件设计的要素、软件设计的支持与评价、软件设计方法、体系结构设计、详细设计、基于中间件的设计、基于复用的设计和设计演化。
“人机交互的软件工程方法”,以用户为中心的设计与软件再工程为特征,培养学生交互式产品开发的软件分析、设计和评估技术。具体教学内容包括:可用性工程、人机交互界面的经典模型、人机交互的需求工程方法、人机交互的设计方法以及基于行为观测与眼动分析的交互评估技术等。
五、教学方法
软件人才培养需要重视教学方法改革,面向软件系统设计与构造的SE专业采用了一系列新型教学方法。
面向问题教学要求各课程都以工程问题开始,并依照工程问题的解决过程和活动来组织教学,这既体现了多种知识的融合运用,又培养了学生的问题解决能力。体验式教学要求各课程在实验设计时必须考虑模拟现实环境的不确定性因素,让学生体验真实的开发氛围,这既能培养他们综合运用各种知识与方法解决问题的能力,又能重点训练他们的折中、决策、沟通等非技术能力。面向实际教学要求各课程在讲授软件开发方法与技术时,要结合实践调查数据说明企业对不同方法、技术的选择与权衡情况以及应用效果,要突出企业界的主流方法与技术,遵循企业界的行业标准与规范,这既能让学生更深入地理解方法与技术,又能开拓他们的视野。研讨式教学要求各课程针对教学难点和重点,给出启发式问题,让学生自行收集资料,研讨解决,这既培养了学生的问题解决能力,又培养了他们的创新能力。基础课程结合软件创新设计竞赛教学鼓励低年级学生在导师指导下,结合课程教学内容,自由选题,参加软件创新设计竞赛,鼓励学生创新。部分高级课程采取实训实习后回顾教学,通过理论教学考试和实训实习后再回顾总结报告综合评定分数,促使学生学习理论、实践体验、再总结提高,以提高他们的工程认知能力与创新能力。还有部分高级课程采取校企联合设计课程、联合实施教学的校企合作教学。
这些教学方法可以培养学生牢固的工程观念、综合运用设计技术进行创新以解决复杂工程问题的能力、基本的职业素质与交流沟通团队组织能力以及良好的开发过程驾驭能力等。
面向软件系统设计与构造的SE专业关键课程建设秉承教材系列化、案例行业化、实践系统化、资源公开化的原则,围绕教材、案例和实践,打造了软件工程专业课程精品教学资源。多门课程入选国家精品课程,出版系列教材,建设教学案例和学生实验教学用例,建设课程教学资源示范网站,提供丰富的教学资源(课件、教学与实践案例、实验设计、教学视频),可供我国软件工程专业教育者参考。
参考文献:
[1] ACM/IEEE Joint Task Force on Computing Curricula[EB/OL]. Software Engineering 2004, Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering, http://sites.computer.org/ccse/.
[2] 骆斌,臧斌宇,丁二玉. 软件工程专业教学知识体系的分析、重构与求精[J]. 计算机教育,2010(23):2-8.
[3] 刘强,陈越,骆斌等. “软件工程”课程教学实施方案[J]. 中国大学教学,2011(2).
[4] 骆斌,葛季栋,丁二玉等. 软件工程专业课程体系的研究与创新实践[J]. 计算机教育,2010(23):9-13.
[5] Eryu Ding, Bin Luo, Daliang Zhang, etal. Research and Practice on Software Engineering Curriculum NJU-SEC2006, CSEE&T2011[R]. Proceedings of 24th IEEE-CS Conference on Software Engineering Education and Training.
[责任编辑:余大品]endprint