0引言
为培养适应新经济发展的新型工科人才,教育部发起了新工科建设战略,开启了我国高等工程教育改革新路径[1]。作为新工科建设中数量最多、影响最大的专业,计算机类专业建设和教育提升中,首要内容是学生系统能力培养[2]。
教育部计算机类专业教学指导委员会于年即提出在计算机类专业教育中树立系统观和加强系统能力培养[3],经过多年研究和实践,形成了以南京大学、北京航空航天大学、清华大学等高校为代表的多种培养模式[4-6],并于年展开试点工作。作为首批试点单位,山东工商学院根据学校定位,借鉴名校经验,在软件工程、计算机科学等专业展开了应用型高校系统能力培养探索与实践工作。
1计算机系统能力内涵与发展
近年来,多位学者从不同层次、不同角度对系统能力内涵进行了阐述,虽然表述不同,但均强调计算机类专业应重视“系统观”教育,使学生具备计算机系统层面的认知与设计能力,并能综合运用多种知识解决复杂工程问题。
针对现有系统能力培养中存在的问题,多个学校进行了各具特点的探索和实践。北京航空航天大学按照“三工”教学准则,围绕“一个CPU、一个操作系统、一个编译器”展开系统能力培养改革[4];清华大学提出“注重系统、强调实验、培养能力”教学理念,统一规划计算机系统类教学内容和实践体系[5];南京大学基于“IA32+Linux+GCC+C”平台,以程序员视角,建立高级语言、指令集体系结构、操作系统、编译器等之间相互关联,培养学生的“系统观”[6]。
王志英教授将这些系统能力培养经验总结为4种模式,并在新工科背景下,从计算机教学的角度,将计算机系统划分为3个层次,即强调计算机运行系统设计和开发的计算机基础系统、强调计算机领域专门系统设计和开发的计算机领域系统,以及强调各种应用系统设计开发的计算机应用系统[2]。3个层次的定义,将计算机系统能力培养从计算机基础系统扩展到了更广泛的范围,使得不同层次高校的各类计算类专业可以选择合适自己的系统能力培养模式。
2软件工程系统能力特点
软件工程是用系统的、规范的、可度量的方法开发、运行、维护软件的学科,兼具科学性教育属性和工程教育属性[7]。作为计算机类专业,软件工程专业学生应具有包含系统认知、系统设计、系统开发和系统应用在内的计算机系统能力[3];作为工程类专业,软件工程专业学生应具有包括工程专项能力、工程系统能力和工程创新能力三大模块在内的工程能力,其中工程系统能力是对工程专项能力的综合,同时也是工程创新能力的基础,包括系统分解、系统应变、系统集成和系统协调能力[8]。因此,软件工程专业应着重培养学生的计算机应用系统能力和工程系统能力,二者相辅相成,共同构成软件工程系统能力。
2.1计算机应用系统能力
软件工程计算基础知识领域的大部分内容包含于计算机科学专业的基础课程内[9],但由于二者在人才培养、研究领域等方面的侧重,软件工程系统能力培养所处的计算机系统层次与计算机科学专业明显不同,更接近于计算机应用系统层次,如图1所示。
为培养学生调试、优化、编制高效程序,解决现代复杂软件工程问题的能力,一方面学生应从软硬件交界面ISA出发,了解底层硬件、操作系统、编译系统的工作原理及相互作用机制,另一方面应深刻理解计算机基础系统、算法与程序、数据处理及网络通信技术之间的相互关系,建立完整的计算机应用系统概念。
2.2工程系统能力
工程系统能力是解决复杂工程问题的重要能力要素之一[8]。具体到软件工程,可以理解为以软件生命周期整体论知识为基础,系统运用需求分析、体系结构设计、软件测试、管理和维护等方法和技术,应对各种风险,协调团队完成复杂软件工程问题求解的能力。
软件生命周期具有一定的阶段性特征,但同时又有很强的关联性,如软件需求分析与软件设计、测试、维护、配置管理、质量保证等知识领域紧密相关,软件质量与软件测试密切相关等;特别是在现代软件工程问题的复杂性和用户需求的多变性情况下,以迭代和敏捷开发为代表的适应性软件开发生命周期模型逐渐取代了以瀑布模型为代表的预测型模型,各个阶段的联系更加紧密,边界更为模糊。因此,软件工程学科也应着重培养学生的工程系统观,使学生能够以软件生命周期整体去看待软件系统,系统运用各种知识实现复杂软件工程问题的求解。
2.3软件工程计算机应用系统能力和工程系统能力紧密关联
在软件工程知识体系中,需求分析、软件设计和软件构造等知识领域与计算基础知识领域紧密相关。如面向对象思想、多态和反射机制、程序设计模式等是各类软件工程方法的基石,在深层次上影响软件设计、需求分析和软件构造的技术和方法。因此,引导学生将工程类的课程和计算机系统类的课程关联起来学习,有助于学生形成系统的软件工程专业知识体系,提高解决复杂软件工程问题的“大系统”能力。
3软件工程系统能力培养存在的主要问题
计算机系统能力培养方面普遍存在缺乏系统贯穿课程、各门课程独立规划、系统开发规模及综合性不足等问题[3-5],在软件工程专业同样存在;除此之外,软件工程系统能力培养还存在以下主要问题。
3.1课程体系设置没有考虑软件工程专业系统能力培养特点
一些高校在设置软件工程专业计算机基础知识领域课程体系时,照搬计算机科学专业的知识体系[10],没有考虑软件工程专业的特点,不仅缺乏对软件工程专业系统能力培养的支撑,而且占用了大量学分。
在设置软件工程专业工程类知识体系时,同样存在各门课程独立规划、独立教学的问题,造成软件需求分析、体系结构设计、软件测试、质量保证等核心课程各自为战、知识点冗余、衔接关系脱节,难以形成系统的工程能力培养体系。
3.2缺乏大规模复杂软件工程问题训练
软件工程是针对大规模复杂软件引发的“软件危机”提出来的,学生必须进行一定规模的复杂软件工程问题训练,才能暴露软件开发和维护中的深刻问题。但目前相当多的学校只是设置了若干小规模的实验或实训,或者虽然设置了大规模的软件开发项目,但学生在训练时,并没有按照软件工程流程进行软件开发和过程管理,学生难以融会贯通软件工程方法和技术,形成软件工程系统能力。
3.3缺乏团队能力训练
团队能力是软件工程师重要的职业技能之一,“团队”一词在C-SWEBOK中出现了余次,涉及几乎所有的软件工程过程[9]。一些高校软件工程专业缺乏团队能力训练和考核,学生在实践中仍然“单打独斗”,或者虽然组队完成项目,但团队成员中缺乏沟通、协调,导致模块接口出现错误、文档与代码不一致、与用户需求存在差异等问题层出不穷[11]。
3.4缺乏文档能力训练
按照软件工程规范提供全面、清晰、准确的文档是软件工程师的责任,包括但不限于软件需求、设计、测试等各种文档[9]。但在实践中,学生往往