基于开源和群智的软件工程实践教学方法

2020-07-14 16:36毛新军
软件导刊 2020年1期
关键词:群智软件工程

摘 要:分析当前软件工程课程实践教学面临的主要问题和挑战,以培养“解决复杂工程问题能力”为目标,提出基于开源和群智的软件工程实践教学方法。设计了循序渐进的课程实践框架,其核心思想是:要求学生开发上规模、有创意、高质量的软件系统;通过学习、重用和改造开源软件开展软件工程课程实践;借助开源社区中的群智知识解决课程实践中遇到的具体问题。此外,介绍了支撑软件工程实践教学的软件工程及教学案例资源。5年的教学实践表明,实践教学方法成效显著,学生创新实践能力,以及综合运用知识和工具解决复杂工程问题的能力等得到了极大提升。

关键词:软件工程;开源软件;群智;开源社区

DOI: 10. 11907/rjdk.192730

开放科学(资源服务)标识码(OSID):

中图分类号:TP434

文献标识码:A

文章编号:1672-7800( 2020)001-0001-06

0 引言

软件工程课是一门“虚”“实”相结合、对实践性要求非常高的课程。其“虚”的一面主要体现在,该课程关注的对象是软件这一逻辑产品,课程知识点包含许多思想性和方法性的内容,要将这些抽象的知识点讲清楚、让学生听明白具有挑战性。如果照本宣科地讲授,学生会觉得空洞乏味,很难理解软件工程的内涵并掌握其要领,因而软件工程课程教学普遍存在“不好教”、“不易学”的突出问题[1]。其“实”的一面主要体现在,软件工程课程讲授的是软件开发的具体工程化方法,课程知识点包含许多具有经验性、实用性的软件开发技术,需要学生在具体实践中加以领会并应用到软件开发中。整体而言,实践教学是软件工程课程教学的核心和关键,如何通过实践教学提升教学成效,让学生领会软件工程的内涵、掌握其知识点并能运用它们解决实际问题,进而积累软件开发经验,是软件工程教育面临的一项长期重大挑战[2-3]。

提高工科学生的能力和素质是近年来新工科教育需要解决的主要问题[4]。软件工程课程实践教学并非简单地让学生完成一项软件系统开发,而是通过课程实践培养学生多方面的能力,尤其是“解决复杂工程问题的能力”,进一步提升学生的软件工程素质。实际上,软件工程课程非常适合培养学生“解决复杂工程问题的能力”,原因有二:一是软件本身是一类极为复杂的系统;二是软件开发需要综合运用多种技术和工具、需要考虑和权衡多种因素,充分体现了复杂问题的解决过程。成功的软件开发实践需要解决诸多复杂工程问题,如满足需求、确保质量、保证进度等。而要达到能力培养这一目标,就需要对課程实践教学任务进行精心设计、对实践成果提出明确要求、对实践过程进行精细把控。显然,这需要从源头提高课程实践中待开发软件系统的规模和复杂性,让学生在具体实践中体验由于规模和复杂性增长带来的一系列工程问题,并在解决实际复杂工程问题的过程中逐步培养其能力和素质。

在软件工程课程实践教学过程中,学生对于教师布置的软件工程实践作业往往无从下手,课堂上似乎听懂了,但一旦要具体开发一个软件系统常常不知所措,通常面临两方面的主要问题。首先,学生在实践过程中常常遇到超越教材和课堂的多样化开发问题,许多问题教师也难以回答,使得课程实践工作难以开展,影响学生完成实践作业的信心和勇气,许多学生不得不通过避重就轻、减少实践内容、降低实践难度等方式以求顺利完成作业,教师对此状况也只能“望而兴叹”“睁一只眼闭一只眼”。许多教师缺乏软件开发实际经验,没有足够的时间和精力指导学生开展实践、解答学生遇到的问题,也无法为学生提供实践所需的各种资源,常常觉得“心有余而力不足”。其次,软件工程课程实践中会有一些关键需求和功能模块,它们需要综合运用多种专门技术(从网络编程、数据库设计到智能数据分析)才能得以实现,因而是阻碍学生顺利完成实践的主要瓶颈。通常,软件系统开发涉及诸多技术要素,除通用软件工程技术外(如编程、设计、测试等),稍具规模和复杂性的软件系统都会或多或少地涉及一些专用计算机技术(如图像处理、模式识别、网络通讯、数据分析等)。对于其中一些技术要素,学生可能并未掌握,或者将其应用到具体的软件系统开发之中会有困难,进而阻碍关键软件需求和软件部件开发,影响课程实践的顺利完成。由于这两方面问题的存在,软件工程课程实践常常是“虎头蛇尾”、“草草了事”。学生提交实践作业,教师给定实践成绩,随后实践教学就结束了,至于实践做得好不好、对不对、效果如何、还存在哪些问题、应该如何解决等问题往往不得而知,最终导致软件工程课程实践教学流于形式、走走过场,难以达到预期效果。

为了改革软件工程实践教学方法,人们进行了诸多探索,如采用游戏化的手段[5]、借用MOOC教学[6]、引入协同学习方法[7]、也尝试将开源项目引入到软件工程教育中[8]。本文以培养“解决复杂工程问题能力”为目标,设计了软件工程课程实践的任务框架,明确了课程实践的具体要求,提出了基于开源和群智的软件工程实践教学方法。

1 《软件工程》课程实践教学任务框架

如何针对教学目标设计一个科学、合理、可行的实践任务是开展实践教学的基础和前提。软件工程课程实践任务设计不仅要服务于能力和素质培养这一目标,还要综合考虑实际条件、前导课程、学生水平、技术状况等因素。本文设计了包含两项实践任务、循序渐进的软件工程课程实践任务框架(见图1),以达成课程实践教学能力培养目标。

任务1:阅读、分析和维护高质量的开源代码。

该实践要求学生:①阅读高质量的开源代码,理解代码的语法语义和编程风格;②对开源代码进行标注和注释;③分析开源代码质量,从多方面理解和领会高质量代码的基本特征,掌握编写高质量程序的基本技能和要领,包括编码风格、软件设计和程序设计方法等;④运用所学到的软件开发技能和方法维护开源软件,以增强和完善其功能,纠正开源代码中的缺陷和错误,在此过程中将所学到的编程技巧、设计方法和代码风格等应用到代码维护中,做到“学以致用”,以确保维护质量,并在此过程中体会和感受软件“质量”的重要性,理解“需求变化”和“代码修改”对软件质量的影响。

该实践旨在通过对高质量开源代码的学习,掌握高水平的软件设计和程序设计技能,培养质量意识和良好的软件工程素质。对于刚刚入门的学生而言,程序代码的阅读、分析和维护比软件分析、设计和建模等工作更容易人手。该实践任务既可以让学生在程序代码层次,从质量视角理解软件工程的内涵,也可以让学生掌握高水平的软件开发技能和要领,并以此指导后续实践任务的开展。因此,该实践任务的引入在整个软件工程课程实践中起承上启下作用,帮助学生循序渐进地开展实践,作好技术储备,积累一定软件开发经验。

为了达成该实践任务的培养目标,需要对阅读、分析和维护的开源代码提出明确要求:①质量高,如代码的软件设计很好体现了软件工程原则,程序模块具有良好的独立性和封装性,代码遵循编码风格,具有良好的可理解性、可维护性、可扩展性等;②规模适中,规模太小,难以体验代码规模给软件质量及软件维护等带来的影响,无法领会软件工程在开发大规模软件系统中的作用;规模太大,学生难以从整体上把握软件系统的全局,没有足够的时间和精力完成阅读、分析和维护工作。为此,建议待阅读、分析和维护的开源代码规模至少应具有5 000-10 000行的代码量;③易于理解,所选择的开源软件尽可能来自于大家所熟知的应用领域(如办公、家庭、公共服务等),其功能应具有直观、易于理解的特点,学生容易建立起功能和代码之间的关联关系,并结合实际应用需求构想和增强其软件功能;④用熟知的编程语言编写,尽可能选择那些用学生所熟知的程序设计语言所编写的开源软件;⑤开源社区活跃,尽可能地选择那些在开源社区中仍然活跃的开源软件,以便学生可以就该开源软件的有关新特征、缺陷、版本等在社区中进行交互和协同,分享社区中软件开发者群体的软件开发经验和知识。

任务2:开发有创意、上规模和高质量的软件。

该实践任务要求学生运用软件工程的思想、方法、技术和工具开发一个有创意、上规模和高质量的软件系统,在此过程中积累软件工程经验,逐步培养和提升软件开发能力,尤其是解决复杂工程问题的能力。

为了达成实践教学目标,对软件系统开发规模、质量等提出明确要求:①规模性,待开发的软件系统必须具备一定规模,才能让学生领悟软件工程中的“工程”要素并运用工程化的手段解决复杂问题。一般而言,要求学生以团队为单位开发出具有至少10 000行以上程序代码的软件系统;②综合性,软件系统开发需要综合运用多方面的技术、语言和工具等;③集成性,待開发软件系统需要与各种遗留系统、机器人、无人设备、智能终端、互联网云服务等进行交互,从而解决实际问题;④高质量,所开发的软件系统必须具有良好的质量属性,如规范性、正确性、可维护性等,从而表现出良好的软件工程素质;⑤创意性,所开发的软件系统需要在待解决问题以及解决问题的方法等方面具有创意,以加强创新意识和能力培养,同时激发学生的实践热情和激情。

2 基于开源与群智的实践教学方法

达成上述实践教学目标,无论对于教师还是学生而言都是一项极具挑战性的工作。通过分析可以发现,软件工程实践教学方法自身存在诸多局限性,难以有效支撑上述培养目标的实现。首先,施教方法落后,具体表现为施教对象的封闭性、辅助渠道的单一性、提供资源的有限性等,学生主要依靠教师和教辅解决实践中遇到的困难和问题。实践的成功高度依赖于教师和教辅的决心、投入、经验和水平。今年成功并不意味着明年成功,难以重复和复制。其次,实践教学诸多假设的不合理性,比如要求针对熟知的问题或给定明确的软件需求完成软件开发,认为实践所需的技术等不能超出学生已学课程的知识范畴,要求学生采用全新的方式开发软件系统的所有代码,以及期望学生一次性地完成软件开发实践等。这些假设严重束缚了实践的开展和实施,没有为学生提供改进的机会和空间。

近年来,移动互联网带动了群体智能的应用及发展,其特点是利用互联网上的海量人群及其智慧解决各类问题,成功的案例包括基于众筹众智的万众创新、基于众包众享的共享经济、基于大众开发的开源软件等。这给开展软件工程实践教学改革提供了启发:在软件工程课程实践教学中,仅靠教师的力量无法从根本上解决实践教学中的基础性问题,可以尝试将互联网大众的力量引入到课程实践环节,让那些高水平的软件工程师成为指导学生的“教师”,帮助学生解决实践中遇到的各类问题;并且,开源软件技术及实践在IT学术界和产业界得到了广泛应用,产生了重要影响,建设开源生态、借助开源软件实现软件开发已成为诸多IT企业的共识,包括Coogle、IBM、华为甚至微软等。这给开展软件工程实践教学改革提供了启发:靠学生自己独立开发出软件系统的所有程序代码,既无必要也不现实,重用和集成开源软件完成软件开发是一种有效的工程方法和手段,应该鼓励学生通过重用开源软件完成课程实践任务。概括起来,基于开源和群智的软件工程实践教学方法本质就是要借助于互联网上的海量群体以及开源软件帮助学生开展软件工程课程实践。它不仅可以有效克服现行方法的不足,还可以帮助学生有效解决实践中遇到的问题。该方法基本思想描述如下:

(1)鼓励学生借助开源软件开发软件。在软件工程课程实践过程中,学生可能会构思一些较为复杂、有技术难度的软件需求,这些需求的实现需要用到超出课程和教材的专业知识(如语音识别、图像识别、机器人控制、智能手机通信等),所需软件开发技术(如数据库设计)可能还未开始讲授,掌握实现需求的开发技术(如将语音转换为文字、将视频和语音信息从一台计算机传输到用户手机上)对学生而言有难度。在这种情况下,课程实践鼓励学生到开源软件社区去寻找开源软件,以实现课程实践中那些学生所不能或者难以实现的软件需求。学生可访问诸如Cithub( https: //github.com/) 、SourceForge( https: //source-forge.net/)、码云(https://gitee.com/)等开源软件托管网站,结合实际需求找寻相应的开源软件,通过对开源软件的理解,对其进行重用,集成到课程实践的软件系统中,从而实现目标软件系统的关键需求。开源软件托管平台(如Github)汇聚了海量的开源软件项目(如仅Github就有8000万个软件版本库),足以提供相应的开源代码帮助学生实现各类软件需求。无疑,重用开源软件或其代码片段可以帮助学生有效解决课程实践中“不知道如何做、不会做”等问题。例如,假设学生所构思的软件系统中有一项关键需求,要求将机器人所获取的语音信息传送到远端的用户手机上。这一功能需求的实现对专有技术要求很高,开发起来有难度,为此学生可以到Cithub中寻找相关开源项目,利用“Linphone4Android”开源软件就可以实现该软件需求。

(2)要求学生到开源社区寻求问题解决。在软件工程课程实践过程中,学生会遇到大量、多样化和个性化的软件开发问题。这些问题覆盖编程语言、开发技能、基础平台、代码调试、工具使用等方方面面,涉及语言使用、缺陷定位、数据库设计、网络编程等诸多环节。显然,让教师和教辅帮助学生解决这些问题是不现实的。在这种情况下,课程实践要求学生到软件开发知识分享社区中寻找这些问题的答案,以解决问题。学生可访问诸如Stack Overflow( https://stackoverflow.com/)、开源中国(http://www.oschlna.net/)、CSDN( https://www.csdn.net/)等软件开发知识分享社区,针对其遇到的问题搜寻相关回答,从而解决这些问题。一些软件开发知识分享社区(如Stack Overflow)拥有几千万软件开发者以及近亿条知识问答条目,足以帮助学生解答实践中遇到的各种问题。学生在实践中遇到的95%以上的问题都可以在上述社区中找到相应答案。对于那些找不到满意答案的问题,学生可以在相关社区中提问,以寻求社区用户的回答。无疑,到开源社区寻求问题解决方法可以帮助学生有效解决课程实践中遇到的各类问题,从根本上解决“有问题找不到解答、获得帮助的渠道有限、无法获得有效指导”等问题。例如,假设学生在实践中不知道“如何用Java访问MySQL数据库”。针对这一问题,学生可以访问Stack Overflow网站,在查询框中输入“access MySQL database in Java”,系统将返回大约500个与此问题相关的回答。Stack Overflow还进一步描述了这些回答的详细信息,如提出者是谁、问题提出时间、提供回答数目、用户点赞情况等,学生可以进一步点击相关超链获得具体回答信息。

3 实践教学支撑软件工具及教学案例资源

基于开源和群智的软件工程课程实践需要借助一系列的支撑软件工具,以帮助教师和学生有效和高效地开展课程实践,搜寻和利用开源软件和群智知识,跟踪实践进展情况,开展问题解答和知识分享,具体包括:分布式协同开发平台Trustie-Forge、开源软件检索和分析平台Trust-ie-OSSEAN、开源代码阅读和标注工具Trustie-Codepedia、群体化学习工具LearnerHub等。

3.1 实践任务管理与协同开发工具Trustie-Forge

Trustie-Forge部署在互联网上,URL是http://course.trustie.net。它为软件工程课程实践开展提供了任务布置、人员组织、团队组建、项目创建、成果提交、协同软件开发等一系列功能和服务(见图2)。

(1)人员组织和管理。支持对参与课程实践的各类人员(包括教师、教辅和学生等)进行组织和管理,包括注册、登录、退出和关联。经过注册后的用户可以登录到系统中,并根据所扮演的角色(如教师、教辅、学生等)操作相应功能。

(2)实践任务布置和管理。允许教师在课程中发布实践任务,支持学生采用两种方式提交实践成果:以文件方式提交和以版本库的形式提交。Tru stie- Forge能够搜集实践人员的实践活动信息(如提交代码、合并代码等),掌握实践开展动态情况,并及时将这些信息告知给相关实践人员。

(3)实践软件项目托管与协同开发。针对软件工程课程实践特点和要求,提供实践软件项目托管服务,支持实践人员之间的分布式协同开发,具体包括:开发任务分配和跟踪、实践成果汇聚和合并、实践成果版本管理、实践成果质量分析等。

(4)实践信息采集和分析。搜集实践人员参与实践、开展软件开发工作等方面的信息,包括实践投入时间、发布的资源和帖子及回复帖子数量和质量、作业提交次数等。基于这些实践数据,Trustie-Forge可以从实践人员个体和项目团队两个层次,分析他们的实践活跃度、开发贡献度(如提交的程序代码行数量)、实践成果提交质量(如程序代码的质量等级)等,并依此对不同的软件开发者个体、项目团队进行排名。

3.2 代码阅读与标注工具Trustie-Codepedia

Trustie-Codepedia部署在互联网上,URL是http:llcodepedia.trustie.net,可为软件工程课程实践提供代码加载、阅读、标注、质量分析等功能和服务(见图3)。

(1)代码阅读和注释。Trustie-Codepedia支持将开源软件代码加载到工具中,构建面向阅读和标注的开源软件资源库,并为代码阅读和标注提供软件系统的总体结构、类与方法、方法间调用关系等方面的视图信息,以加强对开源软件项目的理解和认知。在此基础上,工具提供了代码独立标注的功能,实践人员可以针对任何一行代码或者一个代码库等进行标注。工具还集成了代码分析工具,并基于分析结果形成相应的引导问题,引导和培养学生编写高质量代码的意识。

(2)标注质量分析和评估。实践人员对代码理解是否准确和正确、标注质量如何等,仅靠教师评估非常困难。Trustie-Codepedia工具提供了多种功能和服务以加强對标注质量的分析和评估。工具支持实践人员查看他人给出的代码注释,以帮助其更好地理解代码的语义。工具还提供了赞与踩、匿名评论、交叉互评等功能,通过学生间的相互评阅,利用机器学习和自然语言处理技术对标注进行分析,从而对学生代码注释质量进行科学分析和准确评估。

3.3 软件开发知识与开源软件检索工具Trustie-Ossean

Trustie- Ossean部署在互联网上,其URL是http://os-sean.trustie.net,可为实践人员提供群智资源检索和获取服务,包括开源软件项目、软件开发知识问答、技术博客等,帮助实践人员解决实践中遇到的多样化和个性化问题,重用开源软件,促进软件系统开发。

(1)检索和获取开源软件资源。互联网上开源软件托管社区(如CitHub、Sourceforge、码云等)汇聚了海量针对不同应用和需求的开源软件资源。Trustie-Ossean通过爬取这些开源软件托管社区,建立起面向实践教学的大规模开源软件资源库。软件开发人员可以通过查询获取所需开源软件,进而支持软件系统开发。

(2)检索和获取软件开发知识。互联网上开源社区(如Stack Oveflow、CSDN、开源中国等)汇聚了有不同软件开发人员所提供的多样化软件开发知识(包括知识问答、技术博客等等)。它们既是对众多软件开发经验的总结,也提供了针对不同软件开发问题的常见解决方法。Trust-ie-Ossean通过与开源社区内容同步等技术手段,建立起面向软件工程课程实践教学的大规模软件开发知识库。软件开发人员通过查询方式获取和共享相应的软件开发知识,从而帮助他们解决实践中遇到的困难和问题。

3.4 群体化学习工具LearnerHub

LearnerHub(也称知士荟)部署在互联网上,其网址是http://www.learnerhub.net/,它可以帮助实践人员围绕特定的主题(如软件工程、软件开发等)开展学习、交流、讨论和分享。它采用在线社区的模式组织学习者,使得他们通过互联网分享学习资源(如学习资料、技术博客、开发经验等)和知识。

(1)基于项目的群体化学习。LearnerHub支持学习者围绕学习项目开展群体化学习,如创建学习资源、贡献学习资源、提出问题、回答问题、投票回答等,进而支持互联网大众围绕特定的主题开展自主化学习。LearnerHub允许用户自由地创建学习项目(如软件工程综合实践),接受互联网用户加人到学习项目中开展群体化学习。

(2)基于群组的学习者管理。LearnerHub采用学习群组机制组织和管理学习者,它允许用户创建群组(如软件工程课程实践的学生群)并通过群组汇聚具有共同学习目标和兴趣的学习者。互联网用户可以根据自己的兴趣和意愿自由地加入到相应的学习群组之中。群组中的用户可以创建学习项目,从而使得群组中的成员可以围绕学习项目开展群体化学习。LearnerHub允许一个群组创建一个或者多个学习项目,也可以在一个群组中创建一个或多个子群组。群组中的管理者(也称群主)拥有对群组及其所关联的学习项目的管理权限。加入群组后,群组中的成员可以跟随群主的学习路径和计划一起开展学习,也可以结合各自学习需求在相关学习项目中进行交流和分享。

3.5 开源社区

软件开发是一个知识密集型的活动,高效的知识获取、分享和传播可有效地促进软件开发。目前,典型的软件开发知识分享社区包括编程问答社区、技术资讯社区等。

(1)编程知识问答社区及Stack Overflow。编程知识问答社区主要围绕编程过程中遇到的问题进行问题发布、回答、评论、搜索等活动。Stack Overflow是一个面向编程人员群体的垂直问答网站,也是目前最活跃、最具影响力的软件开发知识问答社区,问题主题非常宽泛,涉及Web开发、数据管理、安全、编程实践等方方面面,涵盖Android、iOS、Eclipse等软件开发平台,包括C++、Java、Python、Ruby等各种编程语言及技术。

(2)技术资讯社区及CSDN。技术资讯主要围绕特定的编程开发技术,供软件开发人员发布其开发和实践经验、使用体验等,供相关人员开展交流和讨论。同时,社区还可以围绕特定的开源项目或者开源技术,发布相关开源产品的最新信息等,典型技术资讯社区的代表是CSDN。CSDN是创立于1999年的中国IT社区和服务平台,为软件开发人员和IT从业者提供知识传播、职业发展、软件开发等服务。在CSDN中,用户可以了解最新IT技术资讯,学习和发布技术博客。

3.6 实践教学案例及资源

为了支撑基于开源和群智的软件工程实践教学及改革,本文以“空巢老人智能看护系统”为案例,提供了丰富的实践教学资源,具体包括:软件文档及模板、分析和设计的UML模型、高质量的程序代码、实践总结材料(包括软件产品宣传材料、演示视频和汇报PPT等)。

案例资源可在LearnerHub工具中的学习空间“软件工程课程实践教学及改革(教师)”(见图5)中获得。教材[1]结合软件工程实践内容详细阐述了案例细节。

4 实践成效分析

基于上述实践教学方法,课题组在国防科技大学计算机学院开展了为期5年的软件工程实践教学改革与探索,成效显著,具体表现为以下几个方面:

(1)创意性。学生构思并开发了许多有创意和特色的软件系统,如无人值守的图书馆信息系统、空巢老人智能看护系统、物流宝、多无人机联合搜寻系统等。这些课程实践成果先后获得计算机作品赛、科技创新比赛、创新创业赛、网络技术挑战赛等的特等奖、一二等奖、金银奖共计18项。

(2)规模性。课程实践所开发的软件系统代码行数量绝大部分超过15 000+LOC。这意味着课程实践中的软件系统具有一定的规模性和复杂度,学生通过该实践可以在一定程度上感受复杂系统开发的常见问题,体会和践行软件工程的基本原则和思想。

(3)集成性。课程实践中的绝大部分软件项目尝试将软件系统与智能手机、机器人、无人系统、互联網云服务等系统和设备集成在一起,以解决实际问题,并寻求创新。所开发的软件系统大多是分布式、异构的人机物融合系统。

(4)综合性。课程实践中几乎所有的软件项目都综合运用多种软件开发技术、工具、语言和平台,一些软件系统包含有多个不同的异构软部件,运行在不同的计算平台上(如机器人、智能手机等计算设备、Linux和Android操作系统等),采用多种编程语言实现(如C++、Java和Python),以满足软件系统在不同平台上的开发、部署和运行需要。

(5)高质量。学生在课程实践中提交了多样化的软件制品,包括软件模型、文档、程序代码等。通过对这些软件制品的质量分析可以发现,学生提交的软件系统具有较高的质量,具体表现为UML模型表达准确,软件文档规范且文字表述较为简洁和严谨、可读性较好,程序代码遵循编码风格且具有较好的可理解性、可维护性等。

5 结语

软件工程课是一门很难讲好、教好和学好的专业课程,其实践教学环节尤为关键。软件工程课程实践教学常常面临着学生“做不了、做不出、做不好”,教师“缺乏工程经验、没有足够精力指导学生和解答问题”等突出问题,使得实践教学流于形式。出现这种状况的原因是多方面的,既有软件工程课程实践的特殊性,也有现行实践教学方法的局限性。本文提出从培养“解决复杂工程问题能力”的高度确立软件工程课程实践教学目标,为此设计了支撑这一目标的实践任务框架,对实践任务的规模性、创新性、集成性、综合性和高质量等提出明确要求。为了达成这一实践教学目标,解决实践教学中的突出问题,应对挑战,本文提出了基于开源和群智的方法,其核心思想是学习开源软件中的成功经验、鼓励学生借助開源软件完成软件开发、要求学生到开源社区寻求问题的答案。

基于上述方法,课题组进行了5年的改革和探索,成效显著。整体而言,通过软件工程实践,学生创新实践能力以及综合运用知识和工具解决复杂工程问题的能力等得到了极大提升。详细的实践实施方法可以参见相关教材[1],支撑平台LearnerHub( www.learnerhub.net)汇聚了教学改革的具体成果,包括:课件、模型、文档、代码、数据、工具等。

参考文献:

[1] 毛新军,王涛,余跃.软件工程实践教程:基于开源和群智的方法[M].北京:高等教育出版社,2019.

[2]SHAW M.Software engineering education:a roadmap[Cl. ICSE-Fu-ture of SE Track, 2000: 371-380.

[3]ARDIS M,FORD G.SEI report on graduate software engineering edu-cation[C].SEI Conference on SoftWare Engineering Education, 1989:208-249.

[4]林健.面向未来的中国新工科建设[J].清华大学教育研究,2017,38(2):26-35.

[5] ALHAMMAD M M,MORENO A M.Gamification in software engineer-ing education:a systematic mapping[Jl. Journal of Systems and Soft-ware.2018, 141: 131-150.

[6] FASSBINDER A G D 0,FASSBINDER M,BARBOSA E F,et al.Mas-sive open online courses in software engineering education[C].IEEEFrontiers in Education Conference. 2017: 1-10.

[7]NEILL C J,DEFRANCO J F,SANGWAN R S.Improving collabora-tive learning in online software engineering education [J]. EuropeanJournal of Engineering Education, 2016, 41(3):1-12.

[8] PAPADOPOULOS P M,STAMELOS I G,MEISZNER A.Enhancingsoftware engineering education through open source projects: Fouryears of students' perspectives[J].Education and Information Tech-nologies, 2013, 18(2):381-397.

(责任编辑:孙娟)

基金项目:科技部重点研发计划项目( 2018YFB1004202);国家自然科学基金重点项目(61532004)

作者简介:毛新军(1970-),男,博士,国防科技大学计算机学院教授,研究方向为软件工程方向的教学教改、人才培养。

猜你喜欢
群智软件工程
数据驱动下交互网络群智感知任务分配仿真
物联网时代移动群智感知技术中的安全问题浅析
探讨移动群智感知应用
应用瀑布模型的MOOC制作方法
融合APTECH体系的软件产业人才培养探究
关于如何创新和完善计算机软件工程管理的探讨