如何找到并快速上手一个开源项目

· 浏览次数 : 0

小编点评

新手如何快速参与开源项目: 1. 确定目标:思考自己参与开源的目的,如提升技术、丰富个人履历、提高面试通过率或纯粹热爱开源。 2. 选择合适的项目:挑选自己熟悉且近期有更新维护的项目,避免选择由大公司主导的项目,以提高贡献的可能性。 3. 查看项目需求:在 Github 上查找标签为 "help want/contribution welcome" 的 issue 或 PR,选择对新人有足够包容度的项目。 4. 复习项目代码:在开始贡献之前,先阅读项目的源代码,了解项目的基本结构和主要模块。 5. 编写单元测试:针对项目中的关键模块编写单元测试,以便更好地理解项目逻辑和代码实现。 6. 实现功能:在实际项目中尝试实现功能,如修复 bug 或添加新功能。 7. 优化代码:在实现功能的过程中,注意优化代码质量和可维护性。 8. 提交 PR:在完成功能或优化后,提交 PR 并等待项目维护者的回复。 9. 学习贡献者文档:阅读项目的贡献者文档,了解如何构建代码、代码规范、提交规范等信息。 10. 持续贡献:在项目维护者的指导下,持续为项目贡献代码,提高自己的开源技能。 总之,参与开源项目需要耐心和毅力,通过不断学习和实践,逐步提高自己的开源能力。

正文

以前有写过两篇文章来简单聊过如何做开源的事情,最近我自己组了一个社区里面也有不少朋友对开源感兴趣,于是我便根据自己的经验系统的梳理了一些关于开源的事情。

有兴趣的可以先看看之前这两篇。

🔎如何找到自己感兴趣的开源项目

首先第一步先想清楚自己搞开源的目的是什么:

  • 参考社区大佬的代码,提升技术
  • 丰富个人履历,提高面试通过率
    • 更功利一点就是想成为某个项目的 Committer/PMC
  • 单纯喜欢分享,热爱开源,认可开源改变世界💪。

我人为前面三种都是一个目的,提升自己获得后续的好处;最后一种则是妥妥的纯热爱。

以我个人来说,我两者都沾一点;我相信大部分人都是前面三类的目的,到这里我可能要先浇点冷水。

往往一个开源项目从你熟悉它开始到提第一个 PR 然后到合并中间经历的时间可能是大大超出你的预期的。

特别是越大型越专业的项目(我相信你也是想加入这类有一定知名度的项目)。

因为开源社区大部分都是执行异步沟通,与即时通讯的快速反馈不同,甚至还有不少 reviewer 处于不同的时区。

所以一开始就想做好心理预期,不要指望着我给某个项目提交一个很牛逼的功能,然后他们快速 review 合并,然后给你 commit 权限。

而且有不少开源项目是由某一个公司主导的,比如(Pulsar、Golang、Kafka),他们可能对于外部社区来的新手并不那么上心,一个 PR 晾在那里几个月没人理都是很正常的。

所以我建议一开始选择的项目有以下几个筛选标准:

  • 尽量是自己日常在用,熟悉的项目。
  • 最近有在及时更新维护的项目。
  • 对社区新人的接纳程度是否足够包容。
    • 这点可以在 Github 里查找标签为 help want/contribution welcome 的 issue 或者是 PR。
    • 查看这些 issue/ PR 最近的活跃时间,贡献者是否为新人。
    • 往往一个包容度较高的项目以上信息都是很活跃的。
  • 项目主要维护者是否来着不同的公司,是否足够活跃。


推荐几个我认为比较符合我刚才提到的条件的项目:

🖐如何快速上手一个开源项目

如果找到了自己想贡献的项目,如果自己还不太熟悉的话,那就可以尝试以下步骤来快速上手它。

✅单元测试

首先第一个就是单元测试,单元测试是一个非常不错的方式来上手一个新的开源项目,但重点不是去看现有的单测,而是自己去写✍️

写过单元测试的小伙伴就知道,如果要达到 90% 以上的覆盖率时需要对自己写的每一行代码都得了解,甚至在写的过程中会发现部分代码是不是没有必要,从而再帮助自己梳理一遍业务。

所以写单测确实是快速熟悉某个项目的方法,但这针对于一些逻辑简单的项目;对于一些业务复杂的项目建议还是快速跑通官方推荐一个功能。

🌟以 Pulsar 为例

Apache Pulsar为例,那就先跑一个消息的生产者和消费者 demo;跑通了之后再尝试看看它客户端已有的单测代码,然后尝试改一些断言,此时就会发现预期值为什么会这么定义。
https://github.com/apache/pulsar/blob/631b13ad23d7e48c6e82d38f97c23d129062cb7c/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java#L1077

比如这里的一个 consumer 取消订阅两次时候就会抛出异常,此时我们就可以根据异常的地方找到源码里对连接状态的判断条件。

就可以得知:当客户端取消订阅时会修改连接状态。

💓HertzBeat

下面以 Apache HertzBeat为例来看看当时我是如何贡献单元测试的。


通过官方的架构图可以得知 HertzBeat 是通过一个 collector 去直连目标采集数据的。

比如通过 Redis 的客户端去获取监控数据,然后再存放到自己的时序数据库中进行展示。

所以这个采集的过程就是比较核心的逻辑,我们可以看看他的接口定义。


一共就三个接口,分别是:

  • collect采集接口:在 Metrics 中定义了采集的目标信息(地址、端口等)
    • 采集完后的数据写入到 Builder 供后续的写入存储
  • preCheck:提前做一些参数校验
  • supportProtocol:返回定义的协议类型,通过这个类型找到对应采集器

然后就交由不同的实现类去采集不同的指标。

这里我以 RedisCommonCollectImpl为例,主要的单测逻辑就是模拟 Redis 客户端的返回数据,然后在 Collect 的代码里查看不同的处理逻辑,其实就是要覆盖各种分支以及异常的情况。

最后再断言采集到的数据与预期是否匹配即可,贴一段核心逻辑:

至于应该返回什么预期结果,有些 collector 可能会在代码注释里写清楚,但这个 Redis 没有写。

不过也有办法,我们可以把代码在本地跑起来之后进入管理台查看内置的监控模版。


这里是用于定义会监控哪些字段的地方,这样我们就可以在代码预先生成好预期返回值了。

具体的单测代码请看这里:
https://github.com/apache/hertzbeat/blob/master/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java#L46

📝总结

参与一个成熟社区的开源有一点一定要记住,就是要仔细阅读贡献者文档

里面往往会写清楚如何构建代码、代码规范、提交规范等信息,这些都捋清楚后提交的 PR 才更容易被社区接受。

后面会继续更新集成测试与 e2e 测试等内容。

与如何找到并快速上手一个开源项目相似的内容:

如何找到并快速上手一个开源项目

以前有写过两篇文章来简单聊过如何做开源的事情,最近我自己组了一个社区里面也有不少朋友对开源感兴趣,于是我便根据自己的经验系统的梳理了一些关于开源的事情。 新手如何快速参与开源项目 手把手教你为开源项目贡献代码 有兴趣的可以先看看之前这两篇。 如何找到自己感兴趣的开源项目 首先第一步先想清楚自己搞

【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

问题描述 对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中抓取

五分钟教你使用GitHub寻找优质项目

前言 经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项目。GitHub作为世界上最大的项目开源平台之一,上面有着无数优质的开源项目。善于使用它能够让你获得很多意想不到的惊喜。 首先解决访问慢的问题 FastGithub是GitH

Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板

概述 创建一个简单的 Grafana 仪表板, 以实现对日志的快速搜索. 有经验的直接用 Grafana 的 Explore 功能就可以了. 但是对于没有经验的人, 他们如何能有一个已经预设了简单的标签搜索的仪表板,以帮助一些团队在排除故障时快速找到他们正在寻找的东西。虽然 Explore 很适合这

使用Visual Studio分析.NET Dump

前言 内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃。今天我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄漏问题。 什么是Dump文件? Dump文件又叫内存转储文件或者叫内存快照文件。用于存储程序运行时的

C# 在Excel中添加、应用或删除筛选器 (日期筛选、文本筛选、数字筛选)

自动筛选器是 Excel 中的一个基本但极其有用的功能,它可以让你根据特定的条件来自动隐藏和显示你的数据。当有大量的数据需要处理时,这个功能可以帮你快速找到你需要的信息,从未更加有效地分析和处理相关数据。 下面将介绍如何使用免费.NET Excel库在Excel中添加、应用和删除自动筛选器。包含以下

Meilisearch 安装和使用教程

如今搜索功能已成为几乎所有应用不可或缺的一部分。无论是电商平台、内容管理系统,还是企业内部知识库,用户都期待能够快速、准确地找到他们需要的信息。然而,传统的搜索解决方案往往面临着诸多挑战:响应速度慢、相关性差、难以适应大规模数据、缺乏灵活性等。这些问题不仅影响用户体验,还可能导致用户流失,最终影响业

「指间灵动,快码加编」:阿里云通义灵码,再次降临博客园

目前园子的主要收入来源是会员、周边、广告,在当前会员与周边收入很少的情况下,随着今年广告业务的回暖,广告收入成为维持生存的新希望。 虽然因为被百度降权失去了巨大的搜索流量,但如果找到长期合作的广告单子,基于园子高质量的用户群,依靠现有的流量,努力做好推广,通过广告收入维持基本生存是可行的。 但残酷的

Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?

昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成类库可以使用? 之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类似内容,那就拿来试试,如果暂时没需求,就先了解收藏(技多不压身)。 JSqlParser JSqlP

过年回去,终于给老人讲清楚两台电脑是如何通信的

摘要:本文将从小白的角度,讲解两台计算机之间是如何精确的找到对方的位置并发送和接收消息的,以从宏观角度把握计算机网络的体系结构。 本文分享自华为云社区《两台计算机之间究竟是如何通信的?》,作者:龙哥手记。 计算机网络的知识点非常杂乱且琐碎,非常容易让人产生畏惧心理。其实计网通篇研究的核心就是不同计算