APP下载

融合开源软件思想与实例的软件工程课程教学研究

2024-01-02黄浩炜

软件导刊 2023年12期
关键词:开源软件分析

黄浩炜,姚 卫,张 锦

(长沙理工大学 计算机与通信工程学院,湖南 长沙 410114)

0 引言

当前,软件发展的趋势已转变为“软件定义一切,软件无处不在”,软件成为现代文明的新载体之一。因此,为软件行业发展培养高素质专业人才变得尤为关键,已然成为我国高等教育的一项重要任务。软件工程是高等院校计算机科学教育中的一门重要学科,涉及程序设计语言、数据库、软件开发工具、系统平台、设计模式等多个方面。学生通过软件工程课程的学习,可以掌握软件设计相关知识和方法,理解软件开发全过程,在实际软件开发中提高开发效率和质量。传统软件工程教学主要通过课堂授课、实验实践和项目作业相结合的方式进行,帮助学生建立对软件工程领域的基础认识。然而,这种传统教学方法在当前软件研究和开发迅速变化的关键时期存在一定局限性,可能无法充分培养学生对于开源软件的理解和认识、协同综合能力和创新思维。因此,当前软件工程教学也应考虑引入更多与时俱进的教学方法和开源软件实践,更好地培养学生的综合素质和实际项目开发能力。

长沙理工大学软件工程概论课程教学着重引入开源软件思想,并将开源软件实例贯穿于软件工程课程教学全过程,同时引入虚拟仿真实验以培养学生软件需求分析的真实能力。课程内容主要包括开源软件思想的基本概念,如开放源代码、自由使用、自由修改、共享知识等,引导学生学习并使用一些常见的开源工具和平台,如Git 版本控制系统、GitHub 等,帮助学生了解开源项目的管理和协作;在课程中引入由国防科技大学开发的“空巢老人看护”系统ElderCarer 开源项目并将其作为案例,将整个案例贯穿于需求分析、软件设计基础、软件体系结构设计、用户界面设计和软件详细设计等各阶段的理论学习,让学生从项目需求分析、设计、开发到测试各阶段都能全面深入地理解软件工程;在软件需求分析部分的学习过程中,引入面向互联网医院的真实需求分析虚拟仿真实验平台,多方位培养学生需求分析能力,取得了较好的教学效果。

总体而言,通过贯穿整个软件工程概论课程的开源软件思想和实例,让学生从传统的理论教学中解放出来,让他们能够通过参与开源项目培养实践能力、协作能力和创新思维,为将来从事软件工程领域相关实践和研究奠定坚实基础。

1 相关工作

软件工程教学的核心是将理论授课与项目实践有机统一起来,帮助学生建立软件工程领域的理论和实践基础。当前应用得较为广泛的教学方式是运用分组实践、实际项目支撑、开源软件支持和智能化教学辅助等多种方式,并取了很好的教学成效。毛新军等[1-2]聚焦软件工程课程实践教学,以面向对象软件工程技术为基础,利用开源软件和开源社区中的软件开发知识着重介绍基于群智的软件工程实践教学理念;王静等[3]、李保环等[4]基于新工科背景下的软件工程案例教学模式,将学生置于实际项目场景中,采用基于项目的学习和协作学习方法,促进学生夯实理论基础并提升实践技能和创新能力,以适应行业趋势和学生的实际需求;张帅[5]将大数据和互联网等先进技术充分融入软件工程教学,提升学生的分析能力和工程实践能力,着力培养高层次的软件人才;杨波等[6]将软件工程理论与人工智能实验相结合,通过分析研究现状并介绍实验案例,提高软件工程课程的总体教学质量;周张泉等[7]、张翼飞等[8]、张睿等[9]、崔颖安等[10]尝试使用不同的教学方法以提升软件工程课程教学质量,如三阶段试误法、渐进式PBL 教学法、“互锁式”教学模式、基于CDIO 等新的教学探索;刘力[11]提出一种基于项目组和案例的软件工程教学模式,并通过问卷调查验证教学效果;王方丽等[12]、白晓颖等[13]则更加关注软件工程领域具体技术上的教学探索,结合具体实践项目加深学生对UML 建模技术和面向对象开发理论的掌握,着重强调敏捷开发模式,基于真实项目持续跟踪反馈和指导评估,着重夯实学生软件工程中的项目开发能力。

以上方法是当前主流的软件工程课程教学理论与实践相结合的先进教学方法,在教学中取得了较好成效。为进一步突出新时代软件工程教育的特点,顺应不断变化的软件开发模式和要求,本文结合学生专业背景并基于长沙理工大学教学实践,引入融合开源软件思想和实例的软件工程概论课程教学方法,采用针对需求分析阶段的虚拟仿真实验进一步提升学生软件工程领域综合能力。

2 开源软件思想

2.1 强化培养开源软件思想

20 世纪80 年代,美国麻省理工大学的Richard Stallman 创建了自由软件基金会[14],从此在全球范围内掀起自由软件运动。跨入21 世纪以来,开源软件继续蓬勃发展,越来越多大型科技公司设计的开源软件广泛应用于人工智能[15]、大数据[16]、云计算[17]等领域,各类开源项目不断涌现。当今,开源软件已成为计算机科学和软件工程领域的主流,在全球范围内得到支持和贡献。同时,开源软件的生态系统不断壮大,吸引了更多开发者参与其中。长沙理工大学软件工程概论课程教学着重引导学生深刻理解开源软件思想并注重开源软件能力培养,增设“群体化软件开发”专题讲授,为学生深入讲解当前主流的开源软件,如Ubuntu、Eclipse、Kubernetes、MySQL 等,帮助学生深刻认识“几乎你想到的重要软件都可以找到开源软件的对应物”,将开源软件思想贯穿于软件工程概论课程教学过程并根植于学生心中。

2.2 助力形成开源软件能力

开源软件开发是依托互联网平台吸引、汇聚、组织和管理互联网上的大规模软件开发人员,通过竞争、合作、协商等多种自主协同方式,让他们参与软件开发、分享软件开发知识和成果、贡献智慧和力量的一种新颖软件开发方法。在课程实践过程中,从自主选择目标软件、阅读文档和获取源代码、编译安装与运行、参与社区交流并贡献代码和持续学习与经验分享等多个方面帮助学生了解开源项目的管理和协作方式,指导学生进行开源软件实践从而逐步形成开源软件能力。

(1)自主选择目标软件。该课程指导学生从知名的代码托管平台如GitHub、GitLab、Bitbucket 或开源社区Apache、Mozilla、GNU 中浏览项目列表,学生根据知识背景和自身兴趣选择合适的开源软件项目。

(2)阅读文档和获取源代码。选择目标开源软件项目后,学生需要通过阅读项目的描述、安装说明、下载说明、使用方法等文档,学会如何获取该项目的源代码,例如,可以通过代码托管平台上的“Clone”或“Download”按钮获取代码。

(3)编译安装与运行。学生需要按照项目文档中提供的指引进行编译和安装,使开源软件能够在本地环境中正常运行,通过运行在本地的示例代码,学生可以进一步了解软件的基本用法。

(4)参与社区交流并贡献代码。开源软件社区对于学习和提高技能至关重要。学生通过课程实践学会如何加入邮件列表、论坛或聊天室,与其他开发者交流经验、提出问题并学习其他人的见解。如果对该项目有深入理解还可以贡献代码,加入分支尝试解决已知问题或增加新功能。

(5)持续学习与经验分享。开源软件是不断演化的,学生需要持续学习并跟踪项目更新,有能力的学生可以在一定范围内维护开源软件并在开源社区分享解决问题的经验。

学生通过以上几个方面的实践学习,初步了解主流开源代码托管平台和开源社区;掌握一定规模软件的下载、编译、安装和测试等多个流程;具备一定能力的学生可以主动参与开源社区讨论并作出一定量的代码贡献,总体上帮助学生强化了开源软件思想,培养学生开源软件使用及开发能力。

3 开源软件实例贯穿软件工程教学

在软件工程概论课程教学中引入由国防科技大学设计实现的“空巢老人看护”软件ElderCarer,将其实例贯穿于软件工程教学各部分,包括需求分析、软件设计基础、软件体系结构设计、用户界面设计和软件详细设计等阶段。在需求分析阶段的学习中引入面向互联网医院的虚拟仿真实验,让学生置身真实软件需求分析场景,充分提升学生的积极性和学习效果。

3.1 引入开源软件实例

“空巢老人看护”系统是一款将计算机软件、自主机器人、智能手机等设备紧密结合的综合软件。它借助机器人对独居老人进行监护,及时发现老人出现的异常状况,通过移动互联网将实时信息传送到家属或者医生的智能手机端,同时支持老人与远端家属进行语音和视频交互。这是一款具备良好结构的开源软件,无论从应用背景还是实现方式上都比较容易理解,非常适用于软件工程教学。通过将该实例贯穿于软件工程课程教学全过程,有利于帮助学生更加直观深入地理解软件工程各阶段。

3.1.1 软件需求分析阶段

通过空巢老人看护系统“用户登录”用例帮助学生理解在软件需求分析阶段如何分析和建立对象和类以及对象类之间的相互关系。一般而言,软件需求用例描述了特定的业务逻辑,主要涉及边界类、控制类和实体类以及它们之间的交互协同。在教学过程中引入图1,用顺序图表示“用户登录”用例的交互模型,其中边界类LoginUI 负责用户身份验证,控制类LoginManager 负责处理用户登录请求,实体类UserLibrary 负责保存系统中所有用户的账号密码信息。学生可以很好地将抽象的类与具体应用建立对应关系,加深理解。

Fig.1 The interactive model of use case “user login”图1 “用户登录”用例交互模型

3.1.2 软件设计基础阶段

通过介绍“空巢老人看护系统”包含的两个子系统以及各子系统包含的构件和设计类,帮助学生理解需要确定的软件设计模型和设计元素。通常而言,软件设计元素按照不同粒度可划分为构件、子系统、类、属性和方法等。“空巢老人看护系统”主要包含两个子系统即部署在手机端的老人状况监控终端子系统和与机器人相连接的“机器人感知和控制”子系统。通过实际应用场景举例可以进一步帮助学生理解软件不同粒度的设计元素和各个元素的相互关系,使学生对于抽象的概念有更深刻的认识。

3.1.3 软件体系结构设计阶段

软件体系结构设计的学习要求学生根据软件需求给出宏观的解决方案,教学难点在于体系结构的宏观性容易使得学生的理解产生偏差。在这部分的学习中,该课程引入“空巢老人看护系统”体系结构设计,如图2 所示。将整个软件划分为3 个层次,即用户界面层、业务逻辑层和基础服务层,各层次既有清晰的定义和边界,也有对应具体的功能,学生可以直观地将宏观的软件体系结构设计映射到具体应用之上,学习效果优于传统的理论讲授方式。

Fig.2 Software architecture of elder care system图2 “空巢老人看护系统”软件体系结构

3.1.4 软件详细设计阶段

在软件详细设计阶段,进一步应用上文所使用的实例即“用户登录”用例的实现设计方案,将设计元素中的边界类、控制类和实体类加以细化和精化,形成逻辑更为完整的顺序图,如图3 所示。基于该过程可以帮助学生更加深刻地理解基于软件需求到形成类图的全过程,而且每一个阶段都有具体实例和应用场景帮助理解,取得较好的教学效果。

Fig.3 Sequence diagram of use case “user login”图3 “用户登录”用例实现顺序图

在软件工程概论课程教学实践中,将一个开源软件实例贯穿于整个教学实践中,一方面突出了开源软件的基本思想,另一方面将开源软件开发的整个过程呈现在学生面前,极大加深了学生对于软件工程实践的全面认识。

3.2 面向需求分析的虚拟仿真实验

在软件开发过程中,需求分析通常是一个非常关键的部分,是软件开发成功的关键,只有通过全面完善的软件需求分析,才能将软件功能和性能的总体概念描述为具体的软件需求规格说明,奠定软件开发基础。在软件工程课程教学过程中,学生通常缺乏大规模软件开发经验,从而难以理解需求分析的重要性。因此,软件工程概论课程引入需求分析虚拟仿真实验平台,多方位培养学生需求分析能力。

虚拟仿真实验的目的主要包括以下几个方面:①在知识方面,掌握与用户沟通获取需求的方法及工具,通过虚仿实验,学生要掌握访谈等与用户沟通获取需求的基本方法,以及主流需求分析工具的使用;②在能力方面,能整体掌握需求分析的规范流程,通过虚仿实验对需求分析规范流程的模拟,引导学生从系统设计师、业务和用户等多个视角深入理解需求分析的规范流程,包括项目背景调研、领域知识获取、用户沟通、需求确认等;③在素养方面,锻炼迅速获取领域本质需求的素养,针对特定领域,通过给定项目资料及检索迅速熟悉该领域,锻炼快速获取该领域的本质需求。

实验以互联网医院业务平台为对象,设计了完整体现需求分析标准流程的虚拟仿真实验,实验者逐步完成需求分析各个环节,最终完成互联网医院业务平台的需求分析说明书;虚仿系统通过需求分析的过程质量和结果质量这两个维度对实验者的需求分析能力进行综合评估,给出有针对性的需求分析能力分析报告,帮助学生通过实验不断提高需求分析能力。如图4 所示,面向互联网医院业务平台的需求分析,虚拟仿真实验平台包括通用服务层、仿真层、数据层和支撑层。通用服务层主要面向用途提供各项管理和交流等功能;仿真层主要包括可视化模块和仿真软件等以提供仿真支持;数据层主要存储用户数据、规则库和元数据等;支撑层主要负责用户权限管理、数据管理、域管理等底层服务。

Fig.4 Architecture of virtual simulation experiment system图4 虚拟仿真实验系统架构

4 结语

本文将开源软件思想和开源实例贯穿于软件工程概论课程教学:在理论课程中,突出开源软件思想和群体化开发方法;在实践教学中,引入开源软件课程实践,帮助学生深入理解软件需求分析这一重要阶段;同时,指导学生在开源代码仓库下载、编译和测试开源软件,帮助学生参与开源社区的贡献。这样的教学方式符合当前软件工程教学发展方向,相较于传统软件工程课程教学,更全面地培养了学生在软件开发各阶段的综合能力,提升了软件工程课程教学效果。

下一步,将以解决复杂工程问题能力为目标,根据软件工程的发展不断挖掘适合学生学习的开源软件项目,以进一步促进学生自主学习。同时,尝试引入小组讨论式学习,通过对开源项目的贡献度评估学生学习效果,持续改善学生学习行为,提升课程教学效果。

猜你喜欢

开源软件分析
禅宗软件
隐蔽失效适航要求符合性验证分析
五毛钱能买多少头牛
软件对对碰
电力系统不平衡分析
电力系统及其自动化发展趋势分析
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
开源计算机辅助翻译工具研究
谈软件的破解与保护