学术界是培养和准备未来开源开发人员的绝佳平台。在研究中,我们偶尔会将我们编写的软件开源。我们这样做有两个原因。第一,推广我们生产的工具的使用。第二,更多地了解人们在使用这些工具时面临的影响和问题。凭借编写研究软件的背景,我受命为布拉德福德大学二年级学生重新设计本科软件工程课程。
这是一个挑战,因为我面对的是 80 名来自不同学位的学生,包括 IT、商业计算和软件工程,都在同一门课程中。最困难的部分是与编程经验水平参差不齐的学生一起工作。传统上,这门课程包括允许学生选择自己的团队,让他们构建一个车库数据库系统,然后在最后提交一份报告作为评估的一部分。
我决定重新设计课程,让学生深入了解真实软件团队的工作过程。我根据学生的学位和编程技能将学生分成五到六人的小组。目的是在团队之间平均分配技能,以防止任何一个团队相对于另一个团队的不公平优势。
核心课程
课程形式更新为包括讲座和实验课。然而,实验课的作用是指导课,指导老师会拜访每个团队,询问最新进展,并了解团队在客户和产品方面的进展情况。有关于项目管理、软件测试、需求工程和类似主题的传统讲座,辅以实验课和导师会议。这些会议使我们能够检查学生的进度,并监控他们是否遵循讲座部分教授的软件工程方法。我们今年教授的主题包括
- 需求工程
- 如何与客户和其他团队成员互动
- 软件方法论,如敏捷和极限编程方法
- 如何使用不同的软件工程方法并通过冲刺式开发工作
- 团队会议和文档
- 项目管理和甘特图
- UML 图和系统描述
- 使用 Git 进行代码版本控制
- 软件测试和缺陷跟踪
- 使用开源库作为他们的工具
- 开源许可证以及使用哪种许可证
- 软件交付
除了这些讲座之外,我们还请了一些来自企业界的嘉宾演讲,谈论他们在软件产品交付方面的实践。我们还设法请来了大学的知识产权律师来谈论英国软件相关的知识产权问题,以及如何处理软件中的任何知识产权问题。
协作工具
为了使上述所有内容成为可能,我们引入了许多工具。对学生进行了培训,以了解如何将这些工具用于他们的项目。这些工具包括
- 团队和导师之间共享的 Google Drive 文件夹,用于维护项目描述、需求收集、会议记录和项目时间跟踪的文档和电子表格。这是一种非常有效的方式来监控,并直接向每个团队的文件夹提供反馈。
- Basecamp 也用于文档共享,在课程后期,我们考虑将其作为 Google Drive 的可能替代品。
- 缺陷报告工具,例如 Mantis,其免费报告的用户数量也有限制。后来,Git 本身也被团队中的测试人员用于任何工具中的缺陷报告
- 远程视频会议工具被使用,因为许多客户不在校内,有时甚至不在同一个城市。学生们经常使用 Skype 与他们沟通,记录他们的会议,有时甚至录制下来供以后使用。
- 学生的项目也使用了许多开源工具包。允许学生根据项目的需求选择自己的工具包和语言。唯一的条件是这些工具包必须是开源的,并且可以安装在大学实验室中,技术人员对此非常支持。
- 最后,所有团队都必须向客户交付他们的项目,包括软件的完整工作版本、文档和他们自己选择的开源许可证。大多数团队选择了 GPL 版本 3 许可证。
技巧和经验教训
总而言之,这是一个有趣的一年,几乎所有学生都表现出色。以下是我学到的一些经验教训,可能有助于改进明年的课程
- 为学生提供各种有趣的项目选择,例如游戏开发或移动应用程序开发,以及有目标的项目。使用平凡的数据库系统不会让大多数学生感兴趣。通过从事有趣的项目,大多数学生成为了自学者,并且还在团队内外互相帮助解决一些常见问题。该课程还有一个留言列表,学生可以在其中发布他们遇到的任何问题,希望能得到其他人的建议。然而,这种方法也有一个缺点。外部考官建议我们回到一种类型的项目和一种类型的语言的风格,以帮助缩小学生的评估标准。
- 在每个阶段向学生提供关于他们表现的定期反馈。这可以在与团队的指导会议期间进行,也可以在其他阶段进行,以帮助他们改进下次的工作。
- 学生非常愿意与大学以外的客户合作!他们期待与外部公司代表或大学以外的人员合作,仅仅是因为新的体验。他们在与导师互动时都能够表现出专业的行为,这让指导老师感到安心。
- 许多团队将单元测试的开发留到项目结束时才进行,从极限编程方法论的角度来看,这是一个严重的问题。也许应该在各个阶段的评估中包含测试,以帮助提醒学生他们需要与软件并行开发单元测试。
- 在 80 人的班级中,只有四名女生,每人都在不同的团队中工作。我观察到,男生非常乐于担任团队领导的角色,将最有趣的代码片段分配给自己,而女生大多是遵循指示或编写文档。由于某种原因,即使在女导师的鼓励下,女生也不愿意展示权威或不喜欢编码。这仍然是一个需要解决的主要问题。
- 文档编制有不同的风格,例如使用 UML、状态图等。允许学生学习所有这些风格,并在年内与其他课程结合,以提高他们的学习体验。
- 有些学生是非常优秀的开发人员,但有些学习商业计算的学生几乎没有编码经验。鼓励团队共同努力,以防止开发人员如果只做会议记录或文档工作,就会比其他团队成员获得更高分数的想法。还鼓励在指导会议期间轮换角色,以确保每个人都有机会学习如何编程。
- 允许团队每周与导师会面有助于监控团队活动。它还显示了谁在做最多的工作。通常,不参与小组的学生不会来参加会议,并且可以通过其他成员每周展示的工作来识别出来。
- 我们鼓励学生在他们的作品上附加许可证,并在与外部库和客户合作时识别知识产权问题。这使学生能够跳出框框思考,并了解现实世界的软件交付问题。
- 给学生选择自己技术的空间。
- 拥有助教是关键。管理 80 名学生非常困难,尤其是在他们接受评估的几周。明年我肯定会安排助教来帮助我管理团队。
- 为实验室提供支持性技术支持非常重要。大学技术支持部门对这门课程非常支持。明年,他们正在讨论为团队分配虚拟机,以便团队可以根据需要在自己的虚拟机上安装任何软件。
- 团队合作有所帮助。大多数团队都表现出对其他团队成员的支持性,指导也起到了帮助作用。
- 来自其他教职员工的额外支持是一个加分项。作为一名新晋学者,我需要从经验中学习,并在多个方面寻求建议,了解如果我对如何让某些学生和团队参与课程感到困惑,该如何处理。来自资深教职员工的支持对我来说是非常鼓舞人心的。
总而言之,这是一门有趣的课程——不仅对我这个指导老师来说是这样,对学生来说也是如此。学习目标和传统评分方案仍然存在一些问题,需要加以解决,以减少它给指导老师带来的工作量。对于明年,我计划保持相同的形式,但希望提出更好的评分方案,并引入更多可以帮助监控项目活动和代码修订的软件工具。
学校
本文是返校季系列文章的一部分,该系列文章侧重于面向各级学生的开源项目和工具。
3 条评论