PyPy 中的分布式敏捷开发¶
注意
此页面描述了在当前开源开发模式之前采用的开发模式。虽然欢迎大家加入我们(现在是每年一次)的冲刺,但我们鼓励大家通过 GitHub 仓库参与:https://github.com/pypy/pypy/。可以在 问题跟踪器 中提交和讨论问题,我们也欢迎 拉取请求。
PyPy 不仅仅是关于代码的生产,它还关乎我们如何生产代码。在社区内协调工作并确保它与欧盟资助的项目部分融合在一起的挑战确实很棘手。我们的目标当然是要确保社区的工作方式尽可能不受干扰,并且为 PyPy 做贡献仍然感觉有趣和令人兴奋(;-)),但也试图向欧盟以及其他资助项目展示开源理念、工具和方法确实是运行开发项目的良好方式。因此,PyPy 作为项目的运行方式——分布式和敏捷——是我们认为可能对其他开源开发项目和商业项目有用的东西。
实现此目标的主要方法是
- 冲刺驱动开发
- 同步会议
实现此目标的主要工具是
- py.test - 自动化测试
- Git - 版本控制
- 透明的沟通和文档(邮件列表、IRC、教程等)
冲刺驱动开发:¶
什么是冲刺,为什么我们要冲刺?
最初,Python 社区中使用的冲刺方法源于 Zope3 开发中的实践。冲刺的定义是“为期两天或三天的集中开发会议,开发人员在房间里配对,专注于构建特定子系统”。
其他典型的冲刺因素
- 不超过 10 人(尽管其他项目以及 PyPy 已经注意到超过了这个数字。这是建议,它可能是基于拥有可以互动/沟通和工作的人员的临界质量,而无需增加除绝对必要的协调时间以外的任何其他时间。2005 年和 2006 年的冲刺每次大约有 13-14 人,PyPy 冲刺中参与者人数最多的一次是 24 名开发人员)。
- 一名教练(教练是冲刺的“经理”,他/她设定目标,准备、领导和协调工作,跟踪进度并使团队可见。这里需要注意的是,PyPy 的冲刺中从未有过教练。相反,我们在整个团队中举行简短的状况会议,以相同的方式做出决定。到目前为止,这已经取得了良好的效果,我们仍然能够在压力条件下取得巨大的成果,例如发布等。我们确实有一位当地组织者,通常是住在该地区的开发人员,以及另一位准备和组织冲刺的开发人员。他们不会在冲刺开始时“管理”冲刺——他们的角色更多的是后勤性质。这并不意味着我们将来不会使用教练技术或类似的东西)。
- 只进行编码(这是一个难题。有一些项目使用冲刺方法来可视化或收集输入。PyPy 也有类似的集思广益的启动冲刺。到目前为止,这是官方路线,尽管再次强调,如果你参加 PyPy 冲刺,我们也会在小组中进行很多其他小型活动——计划冲刺、编写文档、协调我们的欧盟交付成果和评估等。但不要担心——我们的主要重点是编程 ;-)
- 使用 XP 技术(主要是结对编程和单元测试——PyPy 非常依赖这些方面)。将核心开发人员与不同代码库知识水平的人员配对,结果是人们可以很快上手并加入开发。我们许多参与者(对项目和代码库不熟悉)都表示,结对编程与编写自动化测试相结合,是入门的好方法。当然,这也是一个难题,因为我们的核心开发人员可能需要结对解决一些额外的棘手问题,这会影响其他配对的结构和效果。
这是一种非常适合分布式团队的方法,因为它让团队围绕明确(且具有挑战性)的目标集中精力,同时进行协作(结对编程、状态会议、讨论等),以及加速(短迭代和任务,“执行”和测试而不是长时间的计划和需求收集)。这意味着,大多数情况下,冲刺是获得成果的好方法,也是让新人熟悉代码库的好方法。由于结对编程,它也是团队内传播和学习的好方法。
如果冲刺与实际移动并让冲刺靠近社区中不同的活跃开发人员群体以及在 PyCon 和 EuroPython 等会议期间进行,团队将更容易招募新人才加入团队。它还使社区充满活力,并增加了不同 Python 实现项目之间的联系。
与所有方法一样,你必须根据你的项目进行调整(而不是反过来,这太常见了)。PyPy 团队从 2003 年初就开始冲刺,到目前为止已经进行了 22 次冲刺,其中 19 次在欧洲,2 次在美国,1 次在亚洲。某些实践已被证明在这个团队中更成功,我们在这里总结了这些实践。
它是如何完成的?¶
冲刺有几个方面。在 PyPy 团队中,我们专注于:1. 内容(目标) 2. 场地 3. 信息 4. 流程
内容(目标)在邮件列表(pypy-dev)和 IRC 上讨论,时间大约在活动前一个月。事先,我们有一些粗略的计划,称为“冲刺之间”,冲刺计划基于这些问题的状态,但也侧重于即将发布的版本和交付成果。通常是核心开发人员来做这件事,但自从我们开始在 IRC 上进行每周的“pypy-sync 会议”以来,透明度和参与度有所提高。同步会议与粗略的冲刺之间计划相结合,使其他开发人员更容易跟踪进度,从而参与到设定即将到来的冲刺目标中。
目标必须具有挑战性,否则它不会调动团队的全部努力,但它不能不切实际,因为这往往会让人非常沮丧和不满意。在设定冲刺目标时,考虑参与者也非常重要。如果冲刺是在会议(或类似的公开活动)期间进行的,那么实际编码进度的目标应该设置得更低(或以其他方式处理),重点应该转移到传播和让新/感兴趣的人对 PyPy 代码库有一定的了解。设定正确的目标并确保这是一个共同的目标很重要,因为它有助于参与者带着一些类似的期望参与进来 ;-)
场地——在 PyPy 项目中,我们对几个月后的冲刺地点有一个大致的了解。这么早就没有制定详细的计划。知道日期和地点可以更方便地预订机票 ;-) 场地比人们想象的要重要得多。我们需要一个相对舒适的环境来工作(最多可以容纳 15 人坐下来工作),这意味着桌子和椅子、灯光和电源插座。场地是否需要门禁卡,以便一次只允许一个人开门?你可以停留多长时间——每天 24 小时,还是房东希望团队在晚上 23:00 之前撤离?这些都是重要的问题,它们会严重影响冲刺的“感觉和氛围”,以及预期的结果!
此外,场地附近也应该有价格实惠的餐厅和住宿,方便参与者。场地需要提供茶水/咖啡制作设施,以及用于存放食物的冰箱。稳定的互联网连接是必不可少的 - 场地是否有关于网络访问的特殊规定等等?
白板是很有用的工具,最好能提供。投影仪(PyPy 行话)对于状态会议非常有用,至少要提供一台。项目本身也拥有一台投影仪,专门用于冲刺目的。
负责确保冲刺场地满足要求的人员应该有非常好的本地联系,或者最好是住在当地。
信息 - 关于内容和目标的讨论(预先公告)通常在 pypy-dev(邮件列表/IRC)上进行。所有其他信息通过 pypy-sprint 邮件列表以电子邮件形式分发,并以网页形式发布在 codespeak 上。当日期、地点和内容完全确定后,将发布冲刺公告,并发送到 pypy-dev 和 pypy-sprint,以及更通用的邮件列表,例如 comp.lang.python,并在 codespeak 上更新 - 这将在冲刺开始前 2-4 周进行。重要的是,冲刺公告要指向有关当地交通(到该国、到该城市和到场地的交通)、货币问题、食物和餐厅等信息。还有一些网页供人们宣布他们何时到达以及他们住在哪里。
冲刺的计划文本在冲刺开始之前一直更新,然后在状态会议期间和会议之间使用,以跟踪工作进度。冲刺结束后(或者更好的是:在冲刺期间,这样记忆还很新鲜),由其中一位开发人员编写冲刺报告并更新到 codespeak,这是一种对整个冲刺的总结,它描述了完成的工作和参与的人员。
在规划场地时,一个非常重要的策略是成本效益。尽可能降低住宿、食物/旅行费用,可以确保更多人能够负担得起参加或完全参加冲刺。项目的部分欧盟资助部分确实有一个所谓的冲刺预算,我们用它来帮助开发人员参加我们的冲刺(旅行费用和住宿),而且由于大多数资金是所谓的匹配资金,我们通常会在自己的组织和公司支付大部分费用。
流程 - 典型的 PyPy 冲刺为期 7 天,中间休息一天。通常冲刺者在冲刺开始前一天到达。第一天举行启动会议,如果有一些新加入项目的参与者,或者如果实施了一些新的工具或功能,还会进行一些教程。对参与者及其背景和期望进行简短的介绍也是一个好主意。不幸的是,第一天总是会花一些时间,主要是在早上,当人们到达时,需要设置互联网和服务器基础设施。这就是为什么我们通过 文档 鼓励参与者在到达冲刺地点之前设置好所需的工具和配置。
冲刺时间大约是 10-17 点,但人们往往会在晚上继续编码。每天早上都会举行简短的状态会议,然后根据需要和意愿进行“配对”工作。PyPy 冲刺是由开发人员和团队驱动的,因为我们没有“教练”,所以我们的状态会议实际上是团队讨论,同时做笔记并更新我们的计划文本。此外,冲刺是由开发人员团队与熟悉当地地区的人员(通常是住在当地的开发人员)一起完成(计划和执行)的。因此,在团队中,没有人正式负责冲刺。
为休息日提供一些非工作时间活动和社交活动的建议,可以很好地强调休息的重要性 - 当地组织者提供一些这方面的建议是不错的。
在冲刺结束时,我们会进行技术总结(我们是否实现了目标/内容),确定到下一次冲刺之前工作的粗略重点,然后冲刺轮再次开始滚动 ;-) 另一个重要的方面是对参与者进行冲刺评估。通常,这通过冲刺结束后发送的电子邮件问题来完成,也可以通过简短的团队评估来完成。进行评估的原因当然是为了获得反馈,并确保我们不会错过任何机会,使我们的冲刺更加高效和愉快。
我们冲刺流程的主要挑战是人们在不同的日期到达,并在不同的日期离开。这会影响共同的介绍(目标/内容、教程、演示等),也会影响结束 - 技术总结等。我们仍在努力找到一个折衷方案 - 因此,反馈变得更加重要。
我可以加入吗?¶
当然可以。只需关注 pypy-dev 上的工作,如果您特别感兴趣了解我们的冲刺信息,请订阅 pypy-sprint@codespeak.net 并阅读 codespeak 上的新闻以获取公告等信息。
如果您认为我们应该在您的城市举办冲刺,请给我们发送电子邮件 - 我们非常乐意利用冲刺来与活跃的开发人员(Python/编译器设计等)建立联系!