软件工程本科教学的探索与实践

时间:2022-09-29 06:12:12

软件工程本科教学的探索与实践

摘要:本文简要回顾了北京大学软件工程教育的发展历史,详细阐述了北京大学如何从充分利用科研实践经验、加强课程体系与教材的研究、注重因材施教三个方面构建软件工程本科教学知识体系;全面总结北京大学软件工程本科教学实践的探索经验。

关键词:软件工程;教学知识体系;本科教学

中图分类号:G642 文献标识码:B

1引言

软件工程这一术语首次出现在1968年的NATO会议上。软件工程这一概念的提出,其目的是倡导以工程的原理、原则和方法进行软件开发,以期解决当时出现的“软件危机”。张效祥院士主编的《计算机科学技术百科全书(第二版)》将软件工程定义为“是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户要求的软件产品的工程,或以此为研究对象的学科”。

“软件工程”作为计算机科学与技术及相关专业教学计划中一门重要的专业基础课,其主要目标是,培养学生运用软件工程的原则、开发方法和技术进行软件的开发和维护。作为一门多学科交叉的工程学科,如何合理地构建软件工程本科教学知识体系,对于培养国家急需的高素质的创新型软件人才具有重要的意义。

为了满足中国软件产业发展的需要,北京大学积极探索和推进软件工程教育。在1984年,北京大学首次为本科生开设了“软件工程”课程,培养学生在软件工程学科的基础知识以及基本实践能力。同年,在国家科委的支持下,北京大学和复旦大学分别举办了共4期软件工程研究生班,教学以工程实践为主,聘用国际上一些计算机专家任教,先后培养了近200名软件工程人才;1988年北京大学计算机科学技术系试办软件工程的本科专业;1996年北京大学开始招收软件工程领域的工程硕士。目前,在北京大学软件工程领域培养的人才,大部分已成为我国软件企业和国际软件企业的技术骨干。

通过多年软件工程领域的教学实践,杨芙清院士提出“软件工程教育体系需要多层次、多样化。比如,在本科教育阶段,重点培养软件工程学科的基础知识、基本的实践能力。而研究生教育阶段,首先要培养扎实的理论基础、软件工程技术和方法,然后再根据人才需求和职业发展分为两种,一是学术研究型,二是工程应用型”。

针对北京大学本科学生的特点,一是基础知识扎实、自学能力强,二是毕业后大部分继续学习深造,攻读硕士和博士学位(根据历届统计,直保本校研究生的比例大约在50%~60%),这为软件工程教育课程体系的建设提出了新的挑战,即如何体现启发式和因材施教原则,如何适应持续培养“本-硕连读”学生的需要。

围绕以上问题,我们自1984年开设本科生“软件工程”课程以来,不断结合北京大学软件工程团队在大型“软件工程”科研项目上的丰富的研究和实践经验,结合软件工程领域最新的研究成果,不断对软件工程本科教学知识体系进行改革,在探索和实践的基础上不断充实和完善,以期创建具有北京大学特色的软件工程本科教学知识体系。

2软件工程本科教学知识体系

在软件工程本科教学知识体系的探索和实践过程中,我们一直遵循以下两条基本原则:(1)一是软件工程本科教学知识体系不仅需要体现先进性、系统性,而且选取的内

容需要有助于提高学生求解软件的能力,特别是提高学生直接参与软件开发实践和工程管理的能力。(2)二是选取的内容是基础性的、比较“稳定”的,我们向学生尽量介绍有关软件工程的国际标准和成熟技术。我们从以下几个方面来推动软件工程本科教学知识体系的不断发展和完善。

2.1充分利用科研实践经验

多年来,北京大学软件研究所承担了数十项部级科研项目(包括国家科技攻关计划项目、863计划项目、973计划项目、国家自然科学基金项目等)。其中,以研究软件工程开发环境为主要宗旨的国家科技攻关项目“青鸟工程”,对北京大学软件工程本科教学知识体系的构建影响最为显著。它是国家重点支持的软件产业的共性、基础性建设工程。从“六五”计划开始,历经二十个春秋,由北京大学牵头、中科院院士杨芙清教授主持了持续的科技攻关课题,其目标是以实用的软件工程技术为依托,建立软件产业基础,推行软件工业化生产技术和模式,提供必要的工业化生产手段和装备。

图1概括给出了“青鸟工程”动机、发展及研究内容。青鸟工程历经了国家 “六五”科技攻关项目“软件工程核心支撑环境BETA-85”、国家“七五”科技攻关项目“软件工程技术、工具和环境的研究与开发(SEP)”、国家“八五”科技攻关项目“软件工程开发环境(CASE)的标准化与实用化”、国家“九五”科技攻关项目“软件工程环境(青国际上令人关注的一支科研队伍。通过这些大型软件工程项目的实践,使教师提升了软件工程领域的知识,丰富了

图1青鸟工程动机、发展与研究内容

鸟CASE)工业化生产技术及系统(JB/SEIMS)的研究与开发”、国家“十五”973项目“Internet环境下基于Agent教师的软件工程知识体系结构。我们坚持教学与科研相结合,教师积极参加科研项目,从学习跟踪到自主创新,并的软件中间件理论和方法研究”等,取得了一系列重要的研究成果,在理论上不断创新,每年在国际重要刊物和国际会议上发表上百篇论文,理论成果覆盖了软件工程领域几乎所有的研究方向。北京大学软件工程研究团队已成为不断将这些科研成果和软件工程实践经验融入、引入软件工程的教学和实践活动中。

另外,北京大学软件研究所积极接收本科生进入实验室从事科研实践工作,这些学生可以应用最新的科研成果进行软件工程实践,并对科研成果提出相应的反馈意见。这样,通过科研项目极大地提升了学生的软件工程知识和技能。

2.2加强课程体系与教材的建设

北京大学软件工程教育长期研究和借鉴IEEE/ACM推出的软件工程规范。IEEE最新的软件工程知识体系SWEBOK(Software Engineering Body of Knowledge)将软件工程知识分解成10个知识领域,即软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法、软件质量,从而明确了软件工程学科的内容和体系。IEEE/ACM软件工程学科小组研究和公布了软件工程教育知识体系SEEK(Software Engineering Education Knowledge),将软件工程的本科教育分为10个知识领域,包括计算基础、数学与工程基础、专业实践、软件建模与分析、软件设计、软件验证与测试、软件演化、软件过程、软件质量、软件管理。这两个知识体系明确提出学生要有工程素质和专业实践能力,要有问题求解和工程管理能力,要有职业道德和相关法律的教育,要有书面和口头表达能力,要有交流和沟通的能力,要有国际交流的能力,要有组织和管理能力,要有纪律性和团队精神、主动性和创造性、为适应科学技术发展和学科变化进行自主学习的能力等。我们在课程体系的建设和教材的编写中,不断完善对学生以上能力的培养。

在软件工程本科教材编写和教学过程中,参照以上两个软件工程规范,关注软件工程课程知识体系的完善。通过多年的教学实践,给出了软件工程本科教材的基本知识结构,如图2所示。软件工程基本知识结构,基于对软件开发本质的认识,即实现问题域到软件解域之间的映射,紧紧围绕软件开发,讲解软件工程的生存周期过程;讲解有关过程、活动和任务的组织框架,即介绍一些在工程中常用的软件生存周期模型;讲解实施开发活动和任务的一些基本途径,包括结构化方法和面向对象方法,以及支持软件评估所需要的软件测试技术等;简单介绍作用于开发活动上的一些管理活动,其中重点介绍支持管理活动的一些基础性技术,例如过程创建以及成本、进度估算等。

图2软件工程基本知识结构

为了建设世界一流大学,培养出具有创造性的一流软件人才,我们充分地利用了北京大学软件工程科研队伍。这支科研团队在理论上的创新,给教材的编写和讲授提供了源源不断的新知识。在教材的建设中,不断总结新的知识和经验,编写了《面向复用的需求建模》、《构件化软件设计与实现 》和《面向复用的软件资产与过程管理》,这三本书是北京大学软件工程研究几十年经验的结晶,在理论上有许多创新、对教学和科研有重大的指导意义。在多年从事软件工程教学和科研的过程中,编写了《软件工程》,该书先后出版三版,每一版都增添了新的教学经验和科研成果。

我们不仅利用自身团队的经验,我们也充分吸取世界最新软件工程成果为我所用。我们先后翻译了《软件工程――实践者的研究方法》、《软件复用实践》、《管理软件开发项目》和《软件工程最佳实践项目经理指南》等经典著作,作为我们所用教材的补充。

这些教科书和参考书的编写和翻译有力地推动了软件工程课程体系的持续优化。例如,在《软件工程――技术、方法与环境》第一版中,在面向对象分析和面向对象设计两部分,我们讲授的是Coad-Yourdon方法,而到了第二版,我们介绍的是主流的UML和RUP。又如,在《软件工程――技术、方法与环境》第一版和第二版中,我们没有系统地介绍软件项目管理内容,而在第三版中,我们参考和借鉴了软件工程知识体系SWEBOK,引入了“软件工程项目管理概述”一章,进而加强了对本科生软件工程管理能力的培养。

2.3注重因材施教

北京大学的学生具有很强的自学能力,而且不同专业和不同层次的学生对软件工程知识的需求也各不相同。基于以上因素的考虑,我们设置了以下课程分别满足不同层次本科生对软件工程教育的需求,体现了因材施教的原则:

(1) 为计算机科学技术专业的学生在设置了“软件工程”课程,使学生系统地学习软件工程的基本思想和方法,培养他们从事软件开发、维护和软件工程项目管理的能力。

(2) 为二学位的学生设置了辅修“软件工程”课程,与计算机科学技术专业的“软件工程”课程相比,该课程在内容和难度上有所降低,主要培养学生的软件工程思想以及基本方法的应用能力。

(3) 为“电子信息科学类”专业、基础好、领悟力强的学生开设了“软件工程―实验班”。这些学生经过计算概论实验班以及数据结构与算法实验班的培养,具备了很强的程序设计技巧与能力。本课程不仅讲授软件工程基本思想与主流方法,而且主要通过实际系统的工程化开发,培养学生的软件工程素质和能力。

(4) 为研究生和高年级的本科生共同开设了一些先进软件工程技术或研究探索性课程,如“高级软件工程”、“方案工程”和“软件项目管理”。这些课程的开设,主要是使学生对先进的软件工程理论、方法和技术有一定的了解和掌握,培养学生从事软件工程研究的素养。

图2所示的软件工程基本知识结构体现了计算机科学技术专业设置的“软件工程”课程的内容体系,而辅修“软件工程”根据非计算机专业学生的知识基础和专业需要,对软件工程本科教材内容进行适当剪裁,“软件工程-实验班”依据其培养目标,结合实际需求,更加关注软件工程有关知识的应用。

3软件工程本科教学实践的探索

3.1启发式教学培养创造性人才

我们不仅在教材编写过程注意启发式教学,而且在讲授中更要突出启发式教学,让启发式教学贯穿教学活动的始终,这样很好地调动了学生学习的积极性和主动型,开发了学生的创新思维,培养了学生的创造能力。

我们从以下三个方面贯彻启发式教学原则:

(1) 教师授课中的启发式。教师讲授不是照本宣科,而是在深入备课的基础上提炼出重点、难点,拟好带有启发性的关键问题,在课堂上提出,让学生认真思考和讨论,老师有目的、有重点地做点评。例如,在讲授“软件过程”一章时,我们主要提炼出两个关键问题:①软件开发要做哪些映射-活动?②应如何正确地组织开发活动,形成求解软件的逻辑?让学生带着这两个问题去阅读、思索和讨论,从而得到对这一章节知识的深入理解。

(2) 学生登台讲授。这是调动学生学习主动性和积极性的极好方法。北京大学的学生基础好、自学能力强,并有一定的动手能力,这是他们登台讲授的良好基础。我们选择一些章节,在教师的指导下,让学生做准备,然后在小组或班级做讲授。学生准备的过程就是深入学习的过程,这样学习的知识掌握得更深透。一位讲过课的学生深有感触地说:“自己讲一遍胜过听别人讲三遍。”

(3) 老师解惑答疑。我们采用启发式教学充分调动了学生的学习积极性,并不能解决所有的问题。学生越愿意学习,越容易发现问题,提出问题。老师必须居高临下,采用讨论的方式,给学生以及时准确的回答,增强学生的信心,鼓舞学生继续向前攀登。

3.2加强课程实践培养动手能力

根据教材,我们设计了一些配套的课程实践课题,如结构化方法实践和面向对象方法实践课题,这样学生可以充分利用北京大学软件工程领域研究的各种软件开发环境(因为北京大学软件工程领域的研究成果覆盖了软件工程各研究方向),如青鸟面向对象建模工具JBOO、青鸟配置管理系统JBCM、基于软件体系结构的可视化建模和构

件组装工具ABCTOOL等,进行课程实践。软件工程课程实践要求学生采用“项目小组”的形式,结合具体的开发项目进行分析和设计,每组不得超过5人。每个项目小组选出项目负责人或项目经理,由其召集项目组成员讨论、选定开发项目。学生分工合作,学习软件开发小组的组织和管理,将项目开发各阶段的任务明确,熟悉软件开发环境,培养团队精神,共同完成该项目的开发任务。教师的主要任务是总体指导学生。学生在规定的时间内完成相应的课程实践,并对已有的科研成果进行反馈,从而进一步促进科研的发展。

从“六五”国家科技攻关项目的研究到目前的研究,我们一直利用科研促进教学,不断完善软件工程本科教学知识体系,在这个探索和实践的过程中,也培养了学生软件工程理论和实践相结合的能力以及创新性的思维能力,很多学生都说这正是北京大学软件工程教学知识体系和科研结合的独到之处,也是北京大学良好学风的体现。

4结束语

北京大学软件工程本科教学知识体系的建设和教学活动实践既参照了国际上计算机学科发展规范所提出的质量要求规范-软件工程知识体系SWEBOK和软件工程教育知识体系SEEK,又充分考虑了国家对北京大学的要求和希望,以及北京大学软件工程教学和科研团队,高质量的学生的特点,不断进行教材建设和教学活动的探索和改革,已经取得了一定的成果,对科研和教学起到了推动和促进作用。这种探索和改革还在继续进行中,我们相信未来会取得更理想的成果。

参考文献:

[1] 张效祥. 计算机科学技术百科全书[M]. 2版. 北京:清华大学出版社,2005.

[2] 杨芙清. 软件工程教育的思索与实践[C]//全国高校2007年软件工程专业教育年会论文集. 北京:高等教育出版社,2007.

[3] IEEE. Guide to the Software Engineering Body of Knowledge 2004[EB/OL]. /portal/web/ swebok.

[4] IEEE and ACM. Software Engineering 2004[EB/OL]. /ccse/.

[5] 齐治昌,宁洪,谭庆平,等. 抓住关键,突出特色,主动适应信息化建设需要-软件工程课程建设的体会[C]// 全国高校2007年软件工程专业教育年会论文集. 北京:高等教育出版社,2007.

[6] 王立福, 孙艳春, 刘学洋. 软件工程[M]. 北京:北京大学出版社,2009.

上一篇:计算机专业英文教学PREPAID方法探讨 下一篇:坚持科学发展,正确处理学院工作的四个关系