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