融合CDIO.OBE的软件工程教学案例探索

2022-04-29 00:44陈国明李振鹏张嘉琛周如旗陈强朱雄泳
计算机应用文摘 2022年20期
关键词:软件工程教学

陈国明 李振鹏 张嘉琛 周如旗 陈强 朱雄泳

关键词:软件工程;Spring Cloud;教学;CDIO-OBE

1引言

高校课程改革的一个重要目标就是培养应用型人才,因此以成果教育为导向(Outcome BasedEducation,OBE)的模式蓬勃发展。OBE是以最终成果为导向的一种工程教育模式,旨在培养掌握专业知识、专业技能,能够快速融人社会的毕业生。OBE的基本理念在于实施课程时把握反向设计方法,以软件工程的课程内容、结构和典型成果为基础,选择教学内容,使学生深入理解知识,能够综合应用各方面知识解决实际问题。其中,课程实施过程包括学习成果呈现方式和对成果的评价方法。学习过程应注重基础知识的掌握和环境工具的使用,以实践操作为中心,综合应用知识,提升创新能力。

在教学案例整体设计中,要合理衔接专业知识与社会需求,引导学生掌握科学的思维方法,辨明研究方向。通过“案例项目驱动”的教学模式,培养学生由被动学习到主动创新研发的能力:借助线上线下多种学习媒介,提高学生的学习能力和创新意识。CDIO工程教育模式代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate),符合软件行业对应用型人才的培养要求,被广泛应用到软件工程教学改革实践中。

CDIO-OBE工程教育模式有利于提高学生的学习、模仿、探索、分析、创新等能力。以学生为中心的教学实践,有利于学生获得操作体验与知识技能,进而促进学生能力的发展。根据软件行业技术发展的实际需要和企业工作所需要具备的技能、知识、素养要求,重构教学案例,让学生明确掌握重要知识,并學会如何适应这些知识,为学生的可持续发展以及就业奠定良好的基础。教学内容需要紧跟时代发展步伐,强调科技创新的新技术、新方法,同步课程改革内容,按照内容分解任务重构教学案例,培养学生的创新精神。引入CDIO-OBE工程教育模式理念,优化软件工程课程的教学资源案例,既能够提升学生解决实际问题的能力,也能培养学生的创新精神。

20BE和CDIO教育理念的融合

OBE起源于1990年前后,是由美国教育家威廉.G.斯派迪提出的教学教育以学生为导向,以结果为导向的教育教学模式。目前,OBE已在新西兰、美国、澳大利亚等国家进行实施,并取得了良好的教学反馈。在中国,OBE被称为以结果为导向的教育模型,它强调的三个核心概念模型是面向输出的、以学生为中心的、连续的改进,这些概念代表了工程教育改革方向和先进教育理念。

CDIO工程教育模式是一种体现时代创新特性,以工程教育为背景的教学模式。最初由麻省理工学院和瑞典皇家理工学院通过长期研究、探索和教学实践创建的。作为新兴的教育模式和教学理念,伴随着信息技术的飞速发展,CDIO成为工程教育的一次深刻变革。CDIO代表了构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate)[3]。以软件需求到软件运维的生命周期为载体,让学生亲自操作,亲身经历情景,以直接体验为基础,强调全程参与,以边做边学的方式进行工程学习。CDlO注重培养学生的工程基础知识与专业技能、强调团队合作能力,培养学生因用科学思维方法完成软件的构思、设计、实现和运作,使其成为符合时代需要,能应对未来挑战,实现终身发展的创新型工程人才。

在OBE的理念下,专业训练计划遵循回溯原则设计,通过设置期望学习输出来设计教学案例。期望学习输出来自对专业职位、职责和软件开发能力的调查。以学生为中心建立课程案例,在实地调研学生实习的单位或企业的基础上,根据现实需求探索软件工程教学案例改革,基于OBE-CDIO的教育理念来设计教学案例。课程案例对应课程培养的能力和知识,明确每个人的期望学习输出,严格执行CDIO教育示范工程,保证工程教学效果。课堂教学以学生为中心,教师在课堂积极答疑,通过设计教学过程来指导学生完成项目,并监控工程质量。课程案例采用多种教学方法,引导学生积极学习,培养良好的学习习惯,并在各个阶段进行定期总结、反思以及评估实际学习输出与期望学习输出,科学分析实施过程出现的问题,及时调整计划并改进教学策略。

2.1软件工程案例教学模块的设计

软件工程的课程案例是以一个餐饮信息管理系统为主线,根据CDIO-OBE模式特征,围绕课程理论知识与实践内容,还需要更好地体现以学生为中心的自主学习方式[6]。在课程教学案例的设计中,强调各个知识模块之间的相互作用,通过模块的系统学习,学生应该掌握软件工程项目实施的基本方法。教师上课之前对照知识点模块,可以很清楚地把握教学内容。软件工程案例的教学按照知识模块一共划分为四个模块,即餐饮信息管理系统软件结构的设计与数据模型设计(设计Design)、MVVM方案的构思(构思Conceive)、Spring Cloud框架(运作Operate)、实现网页前端(实现Implement)。在该教学案例中,各个模块的学习成果可以通过可视化的形式展现出来,因此可在此基础上进行教学评价与质量检测。

2.2餐饮信息管理系统软件结构设计以及数据模型设计(设计,Design)

在融合OBE和CDIO的教学案例设计中,前期信息系统需求分析包括系统功能建模、系统对象建模、系统动态建模。以数据模型设计(提供餐饮信息管理系统的数据模型)为例,通过建立基本的概念数据模型、逻辑数据模型以及物理数据模型,在CDIO中强调设计(Design)的理念,范例中的数据模型可供学生参考,并由学生提出改进方案。

本案例中初始的数据库设计概念模型如图1所示,主要涉及菜品种类表(category)、菜品信息表(product_info)、订单概述表(order_summary)、订单详情表(order_detail)以及用户表(dinner_user)。其中,菜品种类和菜品信息为一对多关系,订单概述与订单详情是一对多关系,订单详情与菜品信息是一对一关系。

2.3MVC模式与MVVM模式(构思,Conceive)

2.3.1MVC模式

构思是设计过程中的一种模式,在这种模式中,学生将精力集中在构思的产生上。CDIO中的构思比较抽象,学生难以迅速集中注意力进行训练,学习难度较大。良好的案例有助于学生对工程设计内容的理解,突破难点,改善训练环境。好的设计模式还能使软件更容易修改和维护,其结构经过长期发展形成解决方案,体現出创作构思的整体性。这种构思在实施可行的基础上具有一定的创新性。

所谓MVC模式,即模型一视图一控制器(Model-View-Controller)模式,三个部分分别对应内部数据、数据表示和输入/输出控制部分,把它们分开独立设计,其过程是:首先,控制器接收用户的请求,并决定调用哪个模型进行处理;然后,模型用业务逻辑来响应用户的请求并返回数据:最后,控制器用视图来表示模型返回的数据,将其呈现给用户。模型侧重数据和功能,视图侧重数据显示,控制器侧重用户输入,其优点是把数据和业务规则分开表示。

(1)模型对象

模型对象是应用程序中用于处理应用程序数据逻辑的部分,其变化通过事件处理通知视图和控制器对象。

(2)视图对象

视图对象代表GUI对象,并且以用户需要的格式表示模型状态,是交互系统与外界的接口。它包含子视图,子视图用于显示模型的不同部分。通常而言,每个视图对象对应一个控制器对象。

(3)控制器对象

控制器对象代表事件,主要处理用户的输入行为,给模型发送业务事件,将其解析为模型执行的动作。同时,模型的更新与修改经由控制器通知视图,实现各视图与模型的一致。

2.3.2MVVM模式

MVVM模式改进了MVC模式,更好地分离了视图和模型。MVVM的组成结构如下。

(1)模型层(Model):指数据模型,或指代表内容的数据访问层,在前后端分离的架构中,可以理解为后端往前端传递的数据。

(2)视图层(View):即用户界面。

(3)视图模型层(ViewModel):该层主要负责Model层与View层的通信以及数据与视图之间的绑定。可以将数据封装并传递至视图层,或将视图的行为与状态的变换传递到Model层。

本文的课程案例采用前后端分离的架构开发。在该架构中,后端对应MVVM模式中的Model层,围绕数据库系统进行业务逻辑的处理,封装数据(主要为JSON格式)并传输至前端。前端对应MVVM模式中的ViewModel层和View层。前端从后端获取的数据通过JavaScript代码进行二次封装,以生成符合View层使用预期的视图数据模型,以HTML加CSS的形式进行展示。当视图发生变化时,前端根据与后端约定好的接口规则,通过JavaScript代码向后端发起请求。而MVVM模式降低了模块之间的耦合度,前后端分离架构提高了开发效率。

2.3.3CDIO中的构思

以学生为中心的教学模式,强调学生个性化学习。在前后端分离的技术应用中,项目里有很多代码都是重复的。例如,几乎每个基础模块的代码都有增删改查的功能,而这些功能都大同小异,如果这些功能都要自己去写,将会降低开发的效率[8]。启发学生积极思考,自己寻求解决方法,这种重复性的代码可以使用代码生成(前后端代码的生成Java,html,xml,sql),也就是通过统- JSON数据格式设计,通过导人数据库的表来生成代码。

2.4Spring aoud微服务框架(运作,Operate)

2.4.1CDIO的运作(Operate)与Spring Cloud微服务框架

利用有限的时间将难懂的专业术语向学生描述清楚,使学生在操作的过程中因加深了对知识的理解而收获成就感,从而增强学生的主动性、创造性和实践能力。并且.教师通过设计详细的运作文档把过程中每一步的配置操作都记录下来:学生通过对典型案例进行阅读、思考、分析、讨论、交流和操作复现,提高其分析问题和解决问题的能力[9]。学生掌握后端Spring Cloud微服务框架基本的运作,通过对SpringCloud的部署以及对环境的设置,使得项目得以正常运作。其运作的成果如图2所示,基础的点餐服务的各组件可以正常运行以及展示。

Spring Cloud Netflix微服务框架作为后端架构,在学生了解MVC设计模式、前后端分离技术以及SpringBoot框架的基础上,为学生介绍分布式应用架构设计理念。微服务架构就是将原来单体应用,按照一定粒度拆分为多个独立的服务,从而降低项目耦合度,实现快速扩容和弹性伸缩。本案例使用VM Ware虚拟机进行后端本地部署,操作系统使用CentOS 8,同时需要启动餐饮信息管理系统所需要的各个组件。将相关组件启动后,运行启动脚本,即可完成部署,所有注册成功的微服务都可以在Eureka注册中心中进行查看。

2.4.2主要类图与项目流程简介

Controller类图(API接口)如图3所示,Service类图(业务实现类)如图4所示。以添加菜品为例,前端按照后端接口文档给定参数,包括菜品名(name)、菜品图标(icon)、菜品介绍(desc)、菜品价格(price)、菜品状态(status)和菜品库存(stock),并将其封装成JSON对象,根据路由发送到后端。数据会先经过Zuul网关,判断用户是否登录以及请求路径是否合法等,然后会根据请求路径分发到对应服务的Controller接口并转换成对应的DTO对象进行数据校验。在接口中会调用Service的方法进行业务逻辑处理,如果没有出现错误,则会将DTO对象转换为持久层(Mapper)对象,并调用持久层相应的添加方法将数据写入数据库中,完整的请求调用链可以通过Zipkin等分布式链路追踪工具进行查看。

2.4.3服务组成结构

项目部署架构如图5所示。

(1) DINNER-SERVER

Eureka注册中心,提供服务注册服务,其本身也属于一个服务,各个节点启动后,会在Eureka Server中进行注册。Eureka Server不需要注册自身,且不需要拉取配置文件。Eureka会定时删除不健康的服务节点,当大批服务节点宕机时,Eureka会认为自身网络故障,便會开启自我保护模式,不再删除节点,在该项目中将该功能关闭。并且,Eureka具有服务缓存的功能,当某个服务节点宕机时,微服务的Provider和Consumer仍可以依托缓存继续通信。

(2) DINNER-CONFIG-SERVER

分布式配置中心,集中管理每个微服务的配置文件,使用Citee统一存储,实现配置文件的版本控制。在配置文件中填人Gitee相关参数,当项目启动时,Config Server会从远程仓库中拉取相关配置文件。

(3) MANACER-CATEWAY

餐饮信息管理系统卖家端人口,采用Spring CloudZuul作为API网关,可以根据访问的路由将请求分发到相应的服务,自定义白名单对访问名单内路由的所有请求直接放行。Hytrix为Spring Cloud Netflix的容错组件,当远程调用超出所设置的时间时,Hytrix将会执行相应的保护措施。Ribbon为Spring Cloud Netflix的负载均衡组件,当连接超出所设置的时间时,Ribbon将会根据相应的负载均衡算法,重新选择服务节点,在本案例的多数服务中都有相关配置。

(4) CUSTOMER-CATEWAY

餐饮信息管理系统买家端的人口,同样采用Spring Cloud Zuul作为API网关,其主要配置与MANACER-CATEWAY基本相同。在CUSTOMER-GATEWAY中对订单服务等服务配置了服务降级处理,当远程调用超时或错误时,将会返回托底数据,避免服务雪崩。

(5) DINNER-PRODUCT

菜品服务,买家端能够查看菜品信息,卖家端能够对菜品信息进行增删改查等操作。在需要拉取配置文件的服务中编写bootstrap.yml文件,编写要获取的配置文件的相关参数,Spring Boot会优先读取该文件,然后访问DINNER-CONFIG-SERVER获取相应的配置文件,并使之生效。

(6) DINNER-ORDER

订单服务,为买家提供下单功能,卖家能够对订单信息进行增删改查等操作。

(7) DINNER-USER

用户服务,提供买家与卖家用户信息的各种操作。

(8) DINNER-AUTH

认证服务,负责卖家与买家的账号登录以及退出等操作。

案例提供Spring Cloud Netflix相关资料,可以让学生可以更深入地了解Spring Cloud Netflix的相关知识。而项目的详细结构、业务实现以及代码逻辑等板块,则可以让学生自行阅读源代码进行研究[10]。

2.5网页前端的实现(实现,Implement)

网页前端的实现模块提供美观的图形化网页操作界面,属于人机交互的界面接口设计以及CDIO的实现部分( Implement)。可供学生运行以及调试的网页前端界面成果如图6所示。

本案例前端技术采用React框架,UI框架使用Ant Design Pro,修改Nginx服务器配置文件,启动Nginx即可完成前端部署。本案例前端架构基于AntDesign Pro框架开发,采用了TypeScript,React,Umi.js等前端技术栈,实现前后端分离的模式进行开发。通过React构建View层视图以及ViewModel层的业务逻辑,利用Umi.js完整的插件体系与webpack进行前端工程化的模块开发。其中,后台管理界面采用的是ProComponents页面组件进行构建,而权限管理、数据流、网络请求服务、跨域代理、mock数据等业务则是通过Umi的各种播件进行开发。

2.6教学过程概述

(1)在课堂上为学生介绍项目基本情况,包括项目主题、项目模块、相关技术等,并为学生提供所需要用到的软件工具、基本项目代码以及操作手册。操作手册提供图文并茂的项目介绍、运行环境的安装、项目部署步骤以及相关技术的参考资料[11]。但考虑到学生的能力水平不一致,需要鼓励学生组队合作,按照操作手册的指示完成项目的部署。

(2)要求学生在课下认真研读项目源码,必要时可以根据操作手册提供的资料对相关技术进行学习。教师需要收集学生在项目部署以及阅读源码时遇到的问题,在教学社群或课堂上予以解答。另外,建议学生根据技术偏好进行分工,如前端开发、后端开发、项目测试与项目运维,让学生真实地了解软件项目的开发流程以及生命周期,并应用软件工程相关知识撰写项目手册,在课堂上进行展示和考查。

(3)在初次教学实践中,有学生反馈项目部署与运行方面的问题。此后的教学中将会收集相关问题以及解决方案,不断迭代操作手册的内容。在成果展示中发现有更为优秀的项目,能够作为新的项目模板进行教学,完成对教学案例的迭代。

3基于OBE和CDIO的实施要点

案例的基本简化模块已经在对计算机学院软件工程专业学生的教学中进行实施,并提供了一定设计构建的经验,通过在课程中注入模块来加强学生对产品系统生命周期的了解。课程案例及实践项目需要紧跟软件行业的发展趋势,学生的学习成果需要适应企业要求,通过教学案例改革,培养学生的软件工程应用能力、软件项目开发与测试能力、专业素质等,使学生熟悉软件项目开发流程和规范,不仅要开发出好的软件,还要培养良好的开发习惯。而且,通过教学案例提高了学生使用所学知识的能力以及根据实际情况解决具体问题的能力,也能培养学生的创新意识和团队合作精神。更重要的是,学生可以通过案例接触到最前沿的新技术,不会出现“闭门造车”的现象,能有效促进学生的成长[12]。

可见,理论和实践是教学过程的两个重要方面,两者缺一不可,相辅相成。软件开发的实践体系要紧跟软件产业的发展,注重软件人才的综合素质和创新意识的培养。因此,软件开发的实际系统应该是分层的。首先,将课程案例划分为知识块,为每个知识模块提供教学、模仿、升级、综合项目。其次,这些项目是CDIO的项目,阶段之间是多个知识块的综合应用。课堂以学生为中心,通过设计项目案例模块,完善每个模块的详细操作指引文档,引导学生按照文档步骤完成各个模块的任务,细心引导、帮助、培养学生完成任务,提高学生的学习兴趣,耐心点拨学生困惑,使学生不断进步。教师在教学的过程中要注重教育,让学生享受成功的喜悦。最后,学生需要在课前根据教学微视频提前完成知识学习,而教师需要在课堂上进行基础项目的教学,引导学生从简单到复杂,前后衔接,使得教学更深入、更彻底。

随着项目实践的增加,大部分学生都能在学习中自行解决问题,循序渐进地总结,最终形成理论。应用CDIO教育理念,设计项目教学环节,目的是激发学生的兴趣、好奇心和热情,带动学生团队和个人努力探索新知识。因此,闯关流程分为个人级别和团队级别、强制级别和可选级别。案例项目的设计要满足学生的个体差异,引导学生积极学习新知识。

4结束语

本文探讨了CDIO-OBE教育模式下的软件工程教学案例模块的设计与实施。软件工程案例的教学按照知识模块一共划分为四个模块,即餐饮信息管理系统软件结构的设计与数据模型设计(设计Design)、MVVM方案的构思(构思Conceive)、Spring Cloud框架(运作Operate)和网页前端的实现(实现Implement),并在案例各模块充分展现基于成果的教育(OBE)。在案例中,项目的学习成果可以通過可视化的形式展现出来。同时,以CDIO-OBE为导向,教学内容紧跟时代发展步伐,强调科技创新的新技术和新方法,同步课程改革内容,按照内容分解任务,重构教学案例,并为每个模块设计详细实现文档,然后布置相应的案例任务来指导学生按照文档内容逐步去实现。通过期望学习输出,使学生清晰地了解学习课程后将要达到的学习成果,提高课程的教学质量,为学生就业打下良好的基础。基于CDIO-OBE的工程教育模式理念能够培养学生的创新精神,也能提升学生解决实际问题的能力,是强化实践的有效手段。从审查及评价结果可以看出,采用此教学理念模式的教学效果明显,具有一定的理论价值与应用价值。

猜你喜欢
软件工程教学
微课让高中数学教学更高效
“自我诊断表”在高中数学教学中的应用
对外汉语教学中“想”和“要”的比较
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨
跨越式跳高的教学绝招