基于CDIO模式的《软件工程》课程教学改革

2022-01-01 16:25彭小娟
科教导刊·电子版 2021年5期
关键词:软件工程架构分析

彭小娟

(广州大学华软软件学院 广东·广州 510180)

0 引言

CDIO工程教育模式是近年来由美国麻省理工大学、瑞典皇家工学院等4所世界知名大学经过长期的探索而研发的改革成果,主要包含“构思(Conceive)—设计(Design)—实施(Implement)—运行(Operate)”四个阶段。其倡导的“做中学”和以“项目案例”组织教学活动的教学方法,让学生通过主动的、实践的、课程之间具有有机联系的方式学习和提高工程能力,将理论与实践相结合,为《软件工程》的教学改革提供了一些有益的探索。

1 《软件工程》课程概况

《软件工程》是各大高校计算机软件教学体系中的一门核心课程,主要讲授软件开发、维护与管理,在软件工程学科人才培养体系中占有重要地位。软件工程涉及的面比较广,包括整个软件开发的分析、设计、实现、测试、维护等过程。过程中涉及的方法、原理和技术比较广泛而复杂,教师在授课过程中也感觉有困难,学生在学习过程中感觉内容比较偏理论化,理解上比较困难,易产生学不会、不想学的思想。通过多年从事《软件工程》课程教学经验的分析与总结,针对该课程存在的实际问题,我们需要从以下几个方面进行教学改革。

1.1 教材内容略显陈旧,已不能适应社会需求

软件开发方法与技术更新迭代非常快,但是现有的教材内容大部分略显陈旧,已不能适应社会需求。比如很多教材将大量篇幅用于讲解结构化分析与设计方法,该方法是一种面向数据流的传统软件开发方法,它以数据流为中心构建软件的分析模型和设计模型。主要适用于早期的信息系统的开发。现在大部分都是基于互联网、大数据和人工智能的应用程序,教材内容也迫切需要与时俱进进行更新。

1.2 学生项目管理的意识薄弱

一般而言,软件系统都是短期性的项目(短则几周,长则数年),而项目会存在各种风险,所以软件开发需要进行项目管理。在课程设计过程中通常会出现以下几种情况:之前系统可以运行,现在系统运行不了了,但是之前的版本也找不到了。由于前期缺乏对技术风险的估算,后期才发现技术达不到,导致最终项目搁浅了。团队在开发过程中没有进行进度计划和控制,最终项目不能如期交付。这些情况主要是由于学生项目管理意识薄弱造成的。

1.3 学生忽视前期的需求分析、缺乏工程实践的机会

由于前期学生学习了一些技术课程,这些课程主要是检验学生掌握技术的熟练程度,所以一般是给定要求让学生实现,所以学生形成了拿来就开始编码的习惯。但是软件开发的项目中,需要学生从需求开始进行分析,学会分析问题。另外,在进行课程学习的过程中,大部分学生很难有软件工程实践的机会,即便是有也可能是一些虚拟的实验项目或者小型的软件项目。这些项目存在缺乏需求背景、覆盖的专业知识面小的局限性。因此学生在进行软件项目实践时,通常是在缺少前期软件需求分析的基础上直接编码。通过这种模式培养的学生,缺乏实际动手能力,无法在实践过程中体会到软件工程的精髓,无法满足企业的实际需求。

1.4 师资队伍缺乏项目开发的实践能力和经验

软件开发技术更新迭代非常快,需要教师与时俱进地学习。很多任课教师由于长期在高校工作,缺乏对企业实际需求的了解,导致课堂教学内容因教学过程规范性的限制无法适应企业和技术的发展要求。

2 基于CDIO模式的《软件工程》课程教学改革探索

本课程总共68学时,理论课与实验课各34学时,每周各2学时。提供5~10个项目供学生选择;也可以自拟,但是需要获得指导老师的同意。提倡自拟,因为自拟课题要从平时的学习生活中发现需求,这将调动学生的主动性和思辨性。项目要求难度适中,工作量能够在课程中完成。学生可以自由选择3~6人一组,每组共同完成一个项目。在课程设计的过程中,所有团队要严格按照软件工程的思想和过程进行管理,保证每个阶段能够达到CDIO相应的培养目标。指导老师可以采用诸如教师引导讲解、小组讨论、学生讲解、生讲师评等方式进行。

2.1 构思阶段

从软件工程的角度出发,项目开始需要先初步收集开发需求,确定项目目标及范围等要求,定义系统功能,计划开发进度,从技术、经济、法律等方面进行可行性论证。

构思阶段首先是分组选题,确定各小组的项目经理及其他角色,明确角色职责。项目经理是团队主要角色,一般由组织能力、沟通协调能力较强,技术能力不错的同学担当。团队确定后集体讨论进行选题。接着,由项目经理组织团队成员确定团队的slogan及团队规章制度,培养大家的团队意识;再进行团队分析,明确团队人员技术的优劣势,尽量降低技术风险;还要对系统需求进行分析与讨论,分析系统的用户类型、特点及权限,划分系统功能模块,明确难重点,评估系统功能能否在规定的时间内完成。之后,项目经理还需要通过Project分解WBS结构,估算工期,分析任务间的依赖关系,制定项目进度计划,明确里程碑,为团队成员分配任务。需求分析可以采取调查问卷、访谈、实地工作、联合小组、竞品分析等形式开展,分析整理后的需求条目还要进行重要性和优先级排序,工作量估算等。之后可用案例分析与建模的方式表示,比较简洁明了。每个阶段都要形成相应的文档并提交给指导老师,并由团队与指导老师一起进行评审。

2.2 设计阶段

设计(Design)阶段是根据构思阶段定义的系统功能进行系统建模。设计内容一般包括以下几方面:

(1)软件架构设计。软件架构指软件系统的顶层结构。架构是经过系统性地思考,权衡利弊之后在现有资源约束下的最合理决策,最终明确的系统骨架:包括子系统、模块、组件,以及他们之间协作关系,约束规范,指导原则,并由它来指导团队中的每个人思想层面上的一致。架构可细分为业务架构、应用架构、技术架构,代码架构及部署架构。业务架构是战略,应用架构是战术,技术架构是装备。其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型。业务架构的设计原则以解决业务问题为最终目标。应用架构和业务架构是相辅相成的关系。应用作为独立可部署的单元,为系统划分了明确的边界,深刻影响系统功能组织、代码开发、部署和运维等各方面。学生可以以解决业务问题为最终目标,对系统业务进行拆分,对领域模型进行设计,划分子系统或者模块。

(2)界面设计。界面设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的界面设计不仅要有个性,体现软件的特点,还要让软件的操作变得舒适简单。由于界面是面向最终用户的,用户对系统的认知主要源于界面,所以学生可以根据需求,采用Axure或其他工具进行原型设计,这样可以以最小的时间和成本快速进行需求分析,避免在没有明确需求的情况下匆忙开始编码,导致后期返工的窘况。

(3)类和接口的设计。本课程主要采用面向对象的设计思想分析类和接口、设计类和接口、确定类的属性和方法、职责之间的协作。另外,还需要根据面向对象设计原则去优化类图模型,以便提高系统的可扩展性和可复用性。

(4)数据库设计。大部分的选题都需要后台数据库的支持,所以需要进行数据库设计。通过E-R图进行数据库建模,确定需要设计的表、表的字段、表与表的关系及其他约束等。

2.3 实现阶段

实现(Implement)阶段是实现设计阶段的模型。首先,团队成员要统一使用统一的代码规范和数据库。这是软件工程遵循CDIO理念的一个基础,也更能体现工程性思维。阿里巴巴B2B事业群CTO李纯说过:“好的软件产品离不开工程师高质量的代码及相互间顺畅的沟通与合作。简单,适用的代码规约背后所传递的是技术上的追求卓越、协同合作的精神,是每个技术团队不可缺失的重要利器。”第二,团队可以按照模块进行实现,比如选择具体的编程语言和框架,编写各个模块对应的前后端页面、业务逻辑和功能代码等,选择某个数据库管理系统进行数据库和表的实现。第三,要求各团队要采用Git或其他版本控制软件对源代码进行版本管理,以免版本丢失的情况发生。Git作为一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,方便团队协作,并且会记录实现过程中所有文件的增删改等记录,离线工作,速度快、灵活,任意两个开发者之间可以很容易的解决冲突。版本控制系统也是业界常用的工具,学生在课程设计中了解使用,以后去企业就业就可以更快上手。

2.4 运行阶段

运行阶段通常采用答辩的方式,每个团队需演示系统,对项目进行构思、设计、实现、运行四个阶段的工作汇报,接受教师和同学的提问,总结本次课程设计的收获和经验教训。考核成绩包括系统演示1/3,讲解汇报与回答问题1/3,文档1/3。最终团队需要提交一份课程设计的完整文档(包括各阶段),系统实现的源码和配置文件、数据文件等。

3 结束

课程教学改革后,主要有3个方面的变化:增强了学生对于项目管理和工程思想的意识。团队协作的方式,既让学校保持了良好的实践作风,又增强了学生的团队协作意识和精神。通过项目驱动和工程的贯穿,将课程知识点形成有机整体。

总之,CDIO工程教育符合我国教育行业信息化发展的大趋势,为教育行业信息化革新注入了新活力。为了培养适应软件产业发展的人才,我们要不断的践行以CDIO理念为核心的教育教学改革。

猜你喜欢
软件工程架构分析
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
隐蔽失效适航要求符合性验证分析
电力系统不平衡分析
LSN DCI EVPN VxLAN组网架构研究及实现
电力系统及其自动化发展趋势分析
关于如何创新和完善计算机软件工程管理的探讨
一种基于FPGA+ARM架构的μPMU实现