基于GitHub 开源平台的软件开发类课程实践教学探索
2023-07-31王兴芳张金区
曹 阳,李 慧,王兴芳,张金区
(华南师范大学计算机学院 广东 广州 510631)
2017 年以来,教育部积极推进新工科建设,旨在培养多样化、创新型的卓越工程科技人才。相对于传统的工科人才,新工科需要的是实践能力强、创新能力强、具备解决复杂工程问题能力的高素质复合型人才。为了适应新工科人才培养的需求,软件开发类课程的实践教学应该采用与工程实践紧密结合的教学方法,培养学生的动手实践能力和团队协作能力[1]。然而在传统的实践教学模式下,由于学生缺乏项目管理经验和团队协作技巧,往往采用单机开发、现场审查、手工合并等原始的协作方式[2],学生团队内部和团队之间均缺乏有效的互动和合作,容易出现分工和时间安排不合理、重复劳动或者某些任务无人问津等现象[3]。学生学到的技术和方法离真正解决实际问题还有较大的差距。为了提升教学效果,培养学生的协同实践创新能力,软件开发类课程的实践教学模式亟须改进和优化。
在现代的软件开发领域,开源社区为软件开发提供了一个高效的合作平台。开源本身具有的“创新、开放、自由、共享、协同”等特性,与教育的目标和特征不谋而合[4]。GitHub作为一个全球最大的开源社区平台,同时也是一个以代码托管、版本控制为基本特征的软件项目远程协作开发平台。它吸引了世界各地大量的开发人员,并承担了数以千万计的项目托管任务。GitHub 最大的优势在于程序员可以与他人分享各自的项目,彼此互相学习、协同合作[5]。GitHub的开放、社会化属性为软件开发类课程的实践教学带来了新机会,有助于建立实时交流、高效协作、体验良好的实践教学新模式。
本文根据软件开发类课程的实践教学目标,提出了基于GitHub 开源平台的教学方案,强调对学生的创新意识、角色定位能力、协同沟通能力等创新要素的培养,以提高学生动手解决复杂工程问题的协同创新能力。通过在“移动智能应用开发”课程中的教学实践,进一步验证了该教学方案能够有效地解决软件开发实践中学生团队的协同工作和客观评价问题,培养学生的团队协作能力和创新进取精神。
1 基于GitHub 的实践教学方案
GitHub 平台能够有效地解决多人协作开发的问题[6],但是如何与实际教学相结合还是需要根据课程的特点和学生的实际情况来制订教学方案。下面从团队协作、资源共享和考核评价三个方面,给出了基于GitHub 的实践教学方案设计。
1.1 使用GitHub 作为学生软件项目托管平台,实现开源共创的协作创新模式
为了实现软件开发实践中学生之间高效的团队协作,重点需要解决的三个主要问题:①项目团队成员之间的分工合作;②项目成员与指导老师之间的沟通交流;③学生团队之间的互动学习。使用GitHub 作为学生软件项目的托管平台,借助其项目管理和多人协作的核心功能,可以构建一个动态的协作环境,提供多层次、多维度的协作方式。
在GitHub 中每个项目团队创建各自的项目仓库(Repository),使用分支(Branch)功能来管理团队成员的分工,利用合并请求(Pull-Request)机制实现各组员代码的合并,从而保证开发过程的高效性与并行性。学生在使用GitHub的过程中可以学习到基本的协作方法与技能,促进协作能力与自我管理能力的提高。由于学生团队项目任务进展和各成员的贡献是透明的、一目了然的,可以让学生感受高效顺畅的开源共创文化,增强学生的创作责任感和能动性。指导老师定期检查GitHub 中的项目数据,可以随时掌握项目的进展状况,与学生通过线上线下交流提供具体的支持和指导。
GitHub 倡导社会化编程(social coding)文化,程序员以一种社交化、民主化的形式进行代码协作。学生可以关注和参与到其他团队的开源项目中,学习他人解决问题的方法、优秀的设计思想和先进的技术,还可以进行二次开发,为开源项目做出贡献。学生通过与其他团队的合作交流,可以快速提高个人学习能力,在协同开发和创作的过程中,将对知识的理解应用到问题的解决中,促进技术的学习和知识的转化。
1.2 引入GitHub 的开放式资源共享机制,为学生提供更好的学习资源平台
GitHub 中丰富的开源项目是软件开发类课程实践教学的宝贵资源。开放的社会化网络为学生寻求问题的解决方案提供了一个很好的渠道。在软件开发的实践教学中,鼓励学生从GitHub 平台上查找具有参考价值的项目代码,并在此基础上继续学习、探究和创新。学生还可以在GitHub上第一时间了解到最新、最前沿的IT技术,了解这些软件产品的初始状态、中间状态和发布状态,学习一个优秀项目是如何一步步走向成熟,如何进行扩展,从而点燃学生追求卓越的热情和主动学习的积极性。
历届学生团队在GitHub 上提交的项目文档,分享的学习资源、笔记和心得,也是可以利用的优质学习资源。不同年级的学生可以突破时空限制进行沟通和交流,学习经验和方法,获取创意灵感和解决问题的思路。通过在实践教学中引入GitHub 的开放式资源共享机制,可以实现从单一来源的封闭环境资源分享模式向多渠道的大范围资源共享模式转变,学生可以从开源社区中不断获取他人的智慧,完善知识,扩大视野。
1.3 基于GitHub 数据建立多元化的评价体系,实现对学生开发工作的有效评估与反馈
在传统的实践教学模式下,由于没有适当的方式记录和呈现项目团队的分工、成员实际承担的任务和完成的情况,因此会出现难以客观评估团队成员贡献度的问题。GitHub 平台的优势在于实现了完善的成员管理机制,将项目成员的代码提交与版本更新、注释、文档、审查交互均记录在案,团队每个成员的贡献程度公开透明、可追踪。指导老师可以随时掌握项目进展和各成员的工作情况,成员之间对彼此的进展也都有很好的了解,从而可以保证评价的公平公正。
在GitHub 数据支持的基础上,教师不仅可以实现对学生作品的终结性评价,也可以对学生的开发过程进行过程性评价和形成性评价。通过建立多元化的评价体系,从不同维度全面反映学情,实现评价的全面性和激励性。学生通过自我评价与生生互评,形成反思意识,找到自己在团队中的定位,不断完善自己,促进自身和团队的共同发展。
2 教学方案的实践与探索
在计算机学院的专业选修课“移动智能应用开发”课程中应用基于GitHub 平台的实践教学方案,取得了较好的教学效果。教学实践和反馈表明,基于GitHub 平台进行学生项目的代码管理和团队协作,能够有效地促进学生的理论知识学习和工程实践能力的培养,达到了预期的课程目标。
“移动智能应用开发”课程的特点是知识新、内容广、工程性强,强调学生在实践环节中的过程性训练。为了有效考核学生的开发实践能力,鼓励团队合作,课程采用项目实践考核方式,要求学生组成团队完成相对较复杂的移动App 项目开发。团队一般由2—4 名学生组成,设置组长一名,负责组内成员的分工、进度与协调等工作。为了更好地组织和管理学生团队和软件项目,课程使用GitHub的“组织(Organizations)”账号管理模式,建立了“Mobile Smart Application Development Course”组织(如图1所示)。指导老师作为组织的创建者和管理者,使用团队(Team)功能对学生的项目团队进行管理,各团队创建仓库(Repository)以实现代码共享和协作开发,团队完成的文档、代码及设计作品通过版本控制功能进行存储和保护。
图1 “移动智能应用开发”课程组织
课题完成之后,除了团队在GitHub 上提交项目文档,每个学生还需要提交总结性的个人报告。指导老师从团队评价和个人评价两个角度给出一个综合评分,其中团队评价包括项目创意、完成效果、技术难度等指标,个人评价包括工作表现、完成的工作量和任务难度等指标。GitHub中记录了每位团队成员提交的代码及提交时间,如图2(p115)所示。通过分析这些统计数据,教师可以有效区分学生的团队表现和个人贡献,形成客观、公正的评价。
各团队的项目文档托管在GitHub 平台上可以永久保存,供感兴趣的学生学习,进而建立一个积极活跃的开源课程社区,使得课程资源可以不断迭代,自我完善。经过多年的实践,目前“Mobile Smart Application Development Course”组织内包含了212 个学生团队、234 个项目仓库以及相应的课程资源,实现了教学质量的提升与教学效果的辐射。
从学生的课后反馈来看,大多数学生表示收获了丰富的学习资源,掌握了实际的项目开发方法和团队协作方式,锻炼了解决复杂工程问题的能力。有部分学生表示未来有意愿从事移动应用软件的开发工作,希望继续深入学习和探索相应领域的知识。
在近几年的课程教学实践中,教学产出逐年提高,多个学生项目在课外科研课题中立项或参加学科竞赛,并取得了一系列的成绩。这些实践经历对学生自信心的培养和成就感的取得起到了积极作用。部分学生在课程结束后,选择移动应用相关的岗位实习,或以移动智能应用开发为主题撰写毕业论文,大大促进了学生对专业的认可程度,对未来学生在专业领域的发展有一定的导向性作用。
3 结语
软件开发类课程实践教学的重点在于培养学生的动手实践能力和解决软件开发中复杂工程问题的能力。基于GitHub 开源平台的软件开发实践,让学生体验到行业中实际的开发环境。通过全方位沉浸式的团队合作,学生巩固了所学的软件开发知识,掌握了今后实际工作中所需的技能和经验。通过在“移动智能应用开发”课程中的实践探索,进一步验证了基于GitHub 的实践教学方案能够有效地解决学生团队的协同工作和客观评价问题,提高学生学习的积极性和工程创新能力。该方案还可以进一步改造升级,应用到本科生的毕业设计、学科竞赛和课外科研课题的实践管理工作中,实现管理效率的提升和人才培养机制的优化。