刘 超
摘要:软件工程领域的大量最新研究成果源源不断地转向实用,成为软件产业应对新挑战的重要方法和工具,并因此被纳入大学的“软件工程”课程中,不断地充实和更新“软件工程”课程的内容。本文就“软件工程”课程体系建设中的一些基本问题进行了探讨,包括“软件工程”课程体系建设的总体目标、指导思想、课程体系的总体框架,以及每门课程的讲授内容、彼此之间的衔接等,并针对本学科的人才培养目标,提出了一些建议和想法,以供进一步的研究和探讨。
关键词:软件工程;基本架构;课程体系
中图分类号:G642文献标识码:B
1概述
随着我国现代化和信息化建设的快速发展,计算机软件产业已初具规模,并呈现持续快速发展的态势。社会对软件工程人才有着旺盛的需求,并要求高校培养出基础理论和专业知识扎实、工程实践能力强、具有持续创新能力的高层次复合型软件工程人才。他们需熟练地掌握和运用先进的软件工程化管理方法和最新的软件技术,同时,面对新挑战要善于钻研、勇于创新,以便能够很快地成为软件企业的技术中坚和引领软件企业发展的领导者。
早在上世纪八十年代初期,“软件工程”课程便已经成为北京航空航天大学(以下简称北航)计算机科学与工程系(现为计算机学院)的研究生学位课,随后又成为本科生的专业必修课程。九十年代,本科生和研究生课程体系又逐步增加了“软件测试技术”、“个人软件过程”、“面向对象技术”、“人机用户界面设计”、“信息系统分析与设计”、“软件过程管理”、“软件体系结构”、“软件需求管理”、“软件项目管理”等系列课程,不断强化对软件工程技术和管理方面专业知识的讲授,以及规范化软件工程方法的训练。2001年以来,我们将量化的软件过程控制思想和一些日趋成熟的工程训练方法引入到软件工程课程实践中,并指导“软件工程”课程实践,进一步强化对学生软件工程实践能力的培养。
然而,面对不断涌现出来的软件工程新概念、新方法、新技术和新工具,如UML、CMM&CMMI、构件化开发等,“软件工程”课程体系的设计和教学方法的改革依然是一个严峻的课题:
(1) 从课程设置和讲授方法上看,“软件工程”学科特有的工程性,技术与管理的综合性,新兴学科的快速发展和变化等特点,使得“软件工程”课程体系设计面临一系列突出问题,包括培养目标的确定、授课内容的遴选、课程系列的设计和组织、讲授的方法、实践环节的设计、考核的方式、学习效果的评判、课程体系的评估与持续改进等。特别是在课程设计和软件开发实践环节中,由于缺乏对过程的有效指导和控制,难以有效地培养学生的软件工程能力,包括在软件过程管理、软件项目管理、软件配置管理、软件质量管理,以及需求分析、体系结构设计、规范的模型构建与分析、文档撰写等方面的基本训练。
(2) 从教学效果上看,来自学生、教师,以及社会各方面的反馈表明,“软件工程”课程系列的重要性已得到普遍认可,然而实际效果与期望之间还存在着显著差距,突出表现在“软件工程”课程大多属于“基本概念和方法的概论”加上部分“新技术的讲座”。这使得学生的学习效果不佳,普遍存在基础知识掌握不牢固、基本概念的理解含混在后续课程、毕业设计和软件开发实践中无法自觉有效地运用成熟的软件开发方法。
此外,由于“软件工程”相关课程的设置和内容的选择主要取决于任课老师的个人观点,缺乏整体和系统的设计及论证。
针对上述问题,北航软件工程研究所对“软件工程”课程体系开展了长期的研究。自2001年以来,以“软件工程”课程系列的主讲教师为主体,我们分别从“软件工程”课程体系建设的总体目标、指导思想、课程体系的总体框架、每门课程的讲授内容、彼此之间的衔接和课程实践设计等方面进行了反复探讨,重点开展了面向本科生和研究生的一体化“软件工程”课程体系研究与建设,进一步凝练了软件工程人才培养的基本理念和目标,以及与之相适应的课程体系。
2指导思想和目标
北航计算机科学与技术学科是国家重点一级学科。本学科确定的建设目标是成为国内一流、国际知名的高水平研究型学科,培养高素质、高层次人才。作为本学科的骨干课程,“软件工程”课程体系的基本定位是面向软件行业发展的基本需求,培养基础理论和专业知识扎实、工程实践能力强并具有团队协作和创新能力的高层次软件工程复合型人才。
为此,我们确立了“软件工程”课程体系建设的指导思想,即从多个层面向学生系统地和渐进式地介绍日渐完善、成熟的主流软件工程化方法、技术和工具,并强化规范和基于统计过程控制的软件工程训练,同时引导学生积极探索最新的研究领域,及时了解最新的研究成果,培养学生在软件工程实践中发现问题和解决问题的能力,使学生深刻理解并牢固掌握基本思想和方法,进而逐步培养学生在大型软件系统开发过程中自觉运用软件工程化方法的能力、组织管理与团队协作能力以及对于软件工程化方法的持续改进与创新能力。
3 “软件工程”课程体系的基本架构
软件工程领域的新问题、新概念、新方法、新技术、新工具层出不穷。一方面,软件工程领域的知识爆炸向课程的设置提出了挑战;另一方面,其知识结构的相对稳定性和发展规律也提供了构建“软件工程”课程体系的基本架构的基础。通过对软件工程知识体系的深入剖析以及我们20多年软件工程课程成功教学实践的凝练,对照软件工程知识体系SWEBOK、ACM和教育部颁布的本科生软件工程方向专业规范,本文提出了一种基于软件工程技术和管理双主线,面向本科生和研究生两个层级的“软件工程”课程体系基本架构,简称为指数型(2n)组合架构,如图1所示。在这个架构下,我们将课程体系的总体目标、讲授内容和实践要点等进行适当的分解,以确定各门课程的目的、主要内容以及相互之间的关联,并帮助学生根据需求选择不同的课程组合。
该架构包括如下基本要素:
(1) 两条主线:软件工程技术和软件工程管理;
(2) 两类学生:本科生和研究生;
(3) 两个层次:面向本科生的基础知识和基本训练、面向研究生的系统化方法与综合实践;
(4) 两种能力:规范化的工程实施(包括开发和管理)能力和持续改进与创新能力;
(5) 两类课程:软件工程技术类课程、软件工程管理类课程;
(6) 两种教学方法相结合:课堂讲授、小型项目实践的过程追踪与指导;
(7) 两方面的考评:基础知识和基本能力的考试、小型项目实践的过程结果。
在这种架构下,要素之间彼此交叉支撑,各类课程系列得以分层细化,并具有以下特点:
(1) 主线清楚,面向技术和面向管理的两类课程的划分有助于突出各自的侧重点,避免教学内容的偏颇和重复,强调彼此的关联与支撑。
(2) 层次分明,界定了本科生和研究生各自的学习重点和对能力培养的基本要求。
(3) 分级细化,明确专业课程及其定位,优选各类选修课程。
(4) 易于调整,在基本结构保持相对稳定的前提下,可以针对新近的技术发展动态,分层级地对各门课程的内容进行调整,或增减课程。
(5) 易于评估,基于该架构,有助于直观地评估课程的增减或者课程内容的调整对整个课程体系的影响。
4 “软件工程”课程系列的设计
上述“软件工程”课程体系的基本架构可以用来指导课程系列的设计和组织以及对课程系列讲授内容的重点、覆盖面等进行评估。
对于“软件工程”专业的学生而言,应当学习课程包含了三条课程主线(或称三类课程),其中计算机科学与技术专业课程是公共专业课程体系,而软件工程技术和软件工程管理这两类课程构成软件工程课程系列。表1中扼要地列举了软件工程方向的本科生和研究生应当选修的课程系列(其中阴影部分为重点课程),包括:
(1) 计算机科学与技术学科/专业公共基础课程:奠定计算机专业基础,扩宽知识面。
① 公共课:数学分析/高等代数、大学英语、工程训练、大学语文、第二外语等。
② 基础课:
a) 计算机基础:计算机导论、算法和数据结构、高级语言程序设计(1、2);
b) 计算机理论:数理逻辑、集合论和图论、组合数学、概率统计(A);
c) 计算机硬件:数子电路和数字逻辑、计算机原理和汇编语言、计算机接口与通讯、计算机体系结构、计算机网络;
d) 计算机软件:编译技术、操作系统、数据库系统原理。
(2) 软件工程专业课程,包括:
① 软件工程技术类课
a) 必修课:面向对象技术;
b) 选修课:
i. 软件代码开发技术、软件质量保证与软件测试技术、软件工程工具与应用;
ii. 相关选修课:嵌入式软件开发技术、Web应用软件开发技术、信息系统分析与设计。
② 软件工程管理类课
a) 必修课:软件工程导论;
b) 选修课:
i. 个体软件过程、软件项目管理、软件配置管理;
ii. 相关选修课:团队协作与社会实践、软件经济学基础。
5结论
本文简要介绍了本学科“软件工程”课程体系建设中需要考虑的主要问题,给出了一种“软件工程”课程体系基本框架,分析了其主要特点,并在此基础上,给出了一个基本的“软件工程”课程系列。
如前所述,课程体系建设涉及多个要素,“软件工程”课程体系更受到软件工程这一新兴学科发展的影响,因此,其基本架构应当能够很好地组织软件课程系列,并适应软件工程的发展和变化。在这样一个基本框架下,能够比较清晰地判断课程及其内容的覆盖面和取舍是否恰当,为课程系列的构建提供了有效的支持。
教学方法的改革,特别是与之配套的教学实践的设计和对实践过程的指导,是一项艰巨的、富有挑战性和长期性的研究课题。多年来,我们针对本科生的软件工程课、研究生的高级软件工程课等课程各自的要求和特点,进行了多年的研究和实践,积累了重要的经验。实践证明,参考这样的架构,有助于相关课程的组织和协调以及持续的改进。
参考文献:
[1] 北京航空航天大学. 北京航空航天大学计算机学院“十一五”发展规划[Z]. 2006.
[2]Alain Abran, École, James W. Moore. Guide to the Software Engineering Body of Knowledge, 2004 Version, SWEBOK®[Z]. IEEE Computer Society(2001-2003).
[3] 教育部计算机科学与技术专业教学指导委员会. 计算机科学与技术本科专业规范(软件工程方向)[Z]. 2004.