Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add multiple new CHAOSS metrics (EN + ZH) #31

Merged
merged 15 commits into from
Sep 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pull_preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,4 @@ jobs:
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.issue.number }}
body: 🪧The website for this PR is deployed at https://open-digger.cn${{ secrets.OSS_TARGET_PATH }}pull_${{ github.event.issue.number }}/
body: 🪧The website for this PR is deployed at https://open-digger.cn${{ secrets.OSS_TARGET_PATH }}pull_${{ github.event.issue.number }}/
602 changes: 326 additions & 276 deletions docs/user_docs/intro.md

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_request_reviews.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 变更请求审查

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

变更请求审查(Change Request Reviews)是由 [CHAOSS](https://chaoss.community) 定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 变更请求审查](https://chaoss.community/kb/metric-change-request-reviews/)。

该指标是软件开发过程中的一个关键组成部分,确保在集成之前对代码库的建议修改进行全面评估。这个过程包括评估变更的质量,并确保其符合项目指南。审查可以在合并之前建议改进或必要的更改,从而促进软件质量和最佳实践的遵循。

> 软件工程研究长期以来认识到代码审查对提高软件质量的重要性(Baker et al, 1997; Kemerer et al, 2009)。正式审查确保变更符合项目标准,并有助于整体代码健康。这实际上对于维护代码库的完整性和促进协作开发环境至关重要。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_requests_reviews.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_requests_reviews.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L734)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Change Requests Reviews" src="https://codepen.io/frank-zsy/embed/bGjPGxw?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/bGjPGxw">
OpenDigger - [CHAOSS] Change Requests Reviews</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_requests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 变更请求

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

变更请求(Change Requests)是由 [CHAOSS](https://chaoss.community) 定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 变更请求](https://chaoss.community/kb/metric-change-requests/)。

该指标是指提出的变更作为“对源代码的变更建议”进行讨论,而不是直接提交到代码库,每个变更请求都需要由其他开发人员(或维护人员)进行审查,他们可能会建议改进,从而产生新版本,直到审查为正面并接受代码,或者建议被拒绝。变更请求是项目活动的一个代理指标。但需要注意的是,这个指标不是唯一用于跟踪编码活动量的指标。

> 在上述情况下,“变更请求”对应于 GitHub 中的“拉取请求”,对应于 GitLab 中的“合并请求”,对应于 Gerrit 中的“代码审查”或在某些情况下的“变更集”。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_requests.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_requests.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L697)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Change Requests status" src="https://codepen.io/frank-zsy/embed/bGjPGxw?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/bGjPGxw">
OpenDigger - [CHAOSS] Change Requests status</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_requests_accepted.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 接受的变更请求

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

接受的变更请求(Change Request Accepted)是由 [CHAOSS](https://chaoss.community) 定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 接受的变更请求](https://chaoss.community/kb/metric-change-requests-accepted/)。

该指标是项目中编码活动量的一个有价值的指示器。通过跟踪已接受的变更请求数量,我们可以获得对开发团队整体生产力和参与度的洞察。该指标作为导致项目实际变化的活动水平的代理。

> 虽然该指标是评估编码活动的有用工具,但它不应是唯一的衡量标准。补充指标,如提交次数、代码审查和问题解决,提供了项目健康状况和进展的更全面视图,并识别需要改进或优化的领域。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_requests_accepted.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_requests_accepted.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L497)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Change Requests status" src="https://codepen.io/frank-zsy/embed/bGjPGxw?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/bGjPGxw">
OpenDigger - [CHAOSS] Change Requests status</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_requests_age.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 变更请求年龄

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

变更请求年龄(Change Request Age)是由 [CHAOSS](https://chaoss.community) 定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 问题年龄](https://chaoss.community/kb/metric-issue-age/)。

该指标衡量变更请求被保持开放的时间长度,提供了对审查和集成过程及时性的洞察。该指标对于理解开发团队的效率和响应能力至关重要。

> 变更请求年龄指标特别有助于识别瓶颈,并确保提出的修改能够及时得到处理。研究表明,变更请求平均年龄较低的项目往往具有更高的贡献者满意度和保留率。及时解决变更请求表明一个组织良好且高效的开发过程,这有助于吸引和留住有才华的贡献者。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_request_age.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_request_age.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L341)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Time Duration Related Metrics" src="https://codepen.io/frank-zsy/embed/VwBqwaP?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/VwBqwaP">
OpenDigger - [CHAOSS] Time Duration Related Metrics</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_requests_resolution_duration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 变更请求解决持续时间

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

变更请求解决持续时间(Change Request Resolution Duration)是由 [CHAOSS](https://chaoss.community)定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 变更请求解决持续时间](https://chaoss.community/metric-issue-resolution-duration/)。

该指标衡量变更请求被关闭所需的平均时间,提供了对审查和集成过程效率和及时性的洞察。该指标对于理解开发团队的整体响应能力和效率至关重要。

> 较短的解决时长通常表明一个更高效和响应迅速的开发过程,这对项目的整体健康和进展有益。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_request_resolution_duration.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_request_resolution_duration.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L341)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Time Duration Related Metrics" src="https://codepen.io/frank-zsy/embed/VwBqwaP?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/VwBqwaP">
OpenDigger - [CHAOSS] Time Duration Related Metrics</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
29 changes: 29 additions & 0 deletions docs/user_docs/metrics/change_requests_response_time.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 变更请求响应时间

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

变更请求响应时间(Change Request Response Time)是由 [CHAOSS](https://chaoss.community) 定义的一个指标,有关该指标的详细定义,请参阅 [CHAOSS Metrics - 变更请求响应时间](https://chaoss.community/kb/metric-issue-response-time/)。

该指标衡量从提交变更请求到收到其他贡献者的首次响应之间的时间。这对于理解开发社区的响应能力和审查过程的效率至关重要。

> 较短的响应时间通常表明一个更活跃和参与度更高的社区,这对项目的整体健康和进展有益。

## 数据

**链接:** `https://oss.x-lab.info/open_digger/{platform}/{owner}/{repo}/change_request_response_time.json`

要获取特定存储库的数据,请将 `{platform}`,`{owner}` 和 `{repo}` 替换为实际名称。这里有一个 [示例](https://oss.x-lab.info/open_digger/github/X-lab2017/open-digger/change_request_response_time.json)。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/metrics/chaoss.ts#L415)。

## CodePen 演示

<iframe height="600" scrolling="no" title="OpenDigger - [CHAOSS] Time Duration Related Metrics" src="https://codepen.io/frank-zsy/embed/VwBqwaP?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/frank-zsy/pen/VwBqwaP">
OpenDigger - [CHAOSS] Time Duration Related Metrics</a> by Frank Zhao (<a href="https://codepen.io/frank-zsy">@frank-zsy</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
54 changes: 54 additions & 0 deletions docs/user_docs/metrics/community_openrank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# 社区 OpenRank

![From](https://img.shields.io/badge/来自-X--lab-blue) ![For](https://img.shields.io/badge/用于-开发者-blue)

## 定义

社区 OpenRank 是一个由 X-lab 开放实验室提出的开源指标,该指标由赵生宇博士提出,关于项目 OpenRank 的算法细节可以参考[这篇博客](https://blog.frankzhao.cn/openrank_in_project/)。

与全域 OpenRank 指标的计算方法类似,该算法使用项目内的 Issue、PR 等协作数据来构建网络,其网络模型为:

<br/>

```mermaid
graph TD
classDef rounded rx:5,ry:5;

Developer["开发者\n---------------------\nOpenRank | 数值"]:::rounded
issue["issue\n---------------------\nOpenRank | 数值"]:::rounded
pull_request["pull_request\n---------------------\nOpenRank | 数值"]:::rounded
repo["仓库\n---------------------\nOpenRank | 数值"]:::rounded

Developer -->|活跃| issue
Developer -->|活跃| pull_request
issue -->|属于| repo
pull_request -->|属于| repo
```

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/cron/tasks/community_openrank.ts)。

其底层使用的用于计算通用 OpenRank 的 Neo4j [插件项目](https://github.com/X-lab2017/openrank-neo4j-gds)已经开源,欢迎大家使用。

## 参数

项目 OpenRank 相较于全域 OpenRank 更加复杂,包含较多参数:

| 参数名 | 值 | 描述 | 注 |
| :------------- | :---- | :---------- | :--- |
| 开发者/仓库 OpenRank 默认值 | 1.0 | 网络中开发者与仓库的 OpenRank 默认值,例如新加入社区的开发者或新仓库 | |
| Issue OpenRank 默认值 | 2.0 | 网络中 Issue 节点的 OpenRank 默认值 | |
| 未合入 PR OpenRank 默认值 | 3.0 | 网络中未合入的 PR 节点的 OpenRank 默认值 | |
| 已合入 PR OpenRank 默认值 | 5.0 | 网络中已合入的 PR 节点的 OpenRank 默认值 | |
| 开发者/仓库继承比例 | 0.15 | 网络中开发者/仓库节点对上月历史 OpenRank 或初始 OpenRank 的继承比例 | 项目内 OpenRank 中,开发者的价值更应依赖于当月的活跃情况 |
| Issue/PR 继承比例 | 0.8 | 网络中 Issue/PR 节点对上个月历史 OpenRank 或初始 OpenRank 的继承比例 | Issue/PR 的价值应当相对稳定且更依赖于自身的价值 |
| OpenRank 衰减系数 | 0.8 | 对于当月不活跃开发者/Issue/PR 的 OpenRank 衰减比例 | 网络中各节点的 OpenRank 不应在当月不活跃后立即清零 |
| OpenRank 最小值 | 0.1 | 当网络中节点 OpenRank 值衰减至该值以下时将清零 | |
| Issue/PR 节点延属于边流向仓库节点的 OpenRank 比例 | 0.1 | Issue/PR 节点的 OpenRank 有多少比例转移到仓库节点 | |
| 仓库节点延属于边流向 Issue/PR 节点的 OpenRank 比例 | 平均 | 仓库节点的 OpenRank 将平均分配到所有 Issue/PR 节点 | |
| Issue/PR 节点延活跃边流向开发者节点的 OpenRank 比例 | 0.9 | Issue/PR 节点的 OpenRank 有多少比例转移到开发者节点 | |
| 开发者节点延活跃边流向 Issue/PR 节点的 OpenRank 比例 | 1.0 | 开发者节点的 OpenRank 有多少比例转移到 Issue/PR 节点 | |
| `发起`动作活跃比例 | 0.5 | Issue/PR 的价值有多少将转移到其作者 | Issue/PR 作者将优先获取其 50% 的价值,剩余 50% 由其他参与者获得 |
| `发起`/`评论`/`Review`/`关闭` 动作权重 | 2/1/1/2 | 用于计算活跃边权重时各类事件的权重 | |
| 👍/❤️/🚀 表情权重 | 2/3/4 | 用于计算 Issue/PR 初始 OpenRank 的表情的权重 | Issue/PR 的初始 OpenRank 将由其社区中开发者对其添加的表情所决定 |
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# 巴士系数
# 贡献者缺席因素

![From](https://img.shields.io/badge/来自-CHAOSS-blue) ![For](https://img.shields.io/badge/用于-仓库-blue)

## 定义

巴士系数(Bus Factor),或称为 Contributor Absence Factor,是由 [CHAOSS 社区](https://chaoss.community) 定义的一个指标。有关该指标的详细定义,请参阅 [CHAOSS Metrics - Bus Factor](https://chaoss.community/metric-bus-factor/)。
贡献者缺席因素(Contributor Absence Factor,是由 [CHAOSS 社区](https://chaoss.community) 定义的一个指标。有关该指标的详细定义,请参阅 [CHAOSS Metrics - Bus Factor](https://chaoss.community/zh-CN/kb/metric-contributor-absence-factor/)。

巴士系数是一个引人注目的指标,因为它形象的表达了一个问题,即:“在项目停滞之前,我们可以失去多少贡献者?”。巴士系数的计算是项目贡献量 50% 的最少人数,并表明了项目失去关键贡献者(包括维护者)后的韧性程度。
贡献者缺席因素是一个引人注目的指标,因为它形象的表达了一个问题,即:“在项目停滞之前,我们可以失去多少贡献者?”。贡献者缺席因素的计算是项目贡献量 50% 的最少人数,并表明了项目失去关键贡献者(包括维护者)后的韧性程度。

> 它有助于识别项目中的工作如何分布在贡献者之间,以及项目中做了大部分工作的关键人物。

Expand Down
43 changes: 43 additions & 0 deletions docs/user_docs/metrics/global_openrank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# 全域 OpenRank

![From](https://img.shields.io/badge/来自-X--lab-blue) ![For](https://img.shields.io/badge/用于-项目/开发者-blue)

## 定义

全域 OpenRank 是一个由 X-lab 开放实验室提出的开源指标,该指标由赵生宇博士提出,关于全域 OpenRank 的算法细节可以参考[这篇博客](https://blog.frankzhao.cn/how_to_measure_open_source_3)。

全域 OpenRank 是`活跃度`指标的一个下游指标,借鉴了`活跃度`来构建 GitHub 全域项目与开发者之间的一个协作网络,其网络模型是:


```mermaid
graph TD
classDef rounded rx:5,ry:5;

Developer["开发者\n---------------------\nOpenRank | 数值"]:::rounded
repo["仓库\n---------------------\nOpenRank | 数值"]:::rounded

Developer --> |活跃| repo
```
<br/>

在全域 OpenRank 指标的实现中,使用`活跃度`指标作为开发者与仓库之间的边的权重,从而构建出全域协作网络来计算网络中每个节点在每个月的全域 OpenRank 值。但与`活跃度`不同的地方在于,我们并没有对开发者的加权活跃值进行开方运算,这是由于`活跃度`指标中的开方运算是为了将社区参与人数(社区规模)的因素引入到指标计算中,但对于协作网络而言,社区参与人数这个变量已经隐含在了网络结构中。

与传统 PageRank 不同之处在于,计算中每个节点的全域 OpenRank 值将不仅仅依赖于当月的协作网络结构,并且也部分依赖于该节点在上个月的全域 OpenRank 值。即对于全域协作网络中的每个开发者和仓库节点,会部分的继承其历史的 OpenRank 值,这里也是体现了开源中珍视长期价值的价值观。

## 代码

这里是 [**实现代码**](https://github.com/X-lab2017/open-digger/blob/master/src/cron/tasks/global_openrank.ts)。

其底层使用的用于计算通用 OpenRank 的 Neo4j [插件项目](https://github.com/X-lab2017/openrank-neo4j-gds)已经开源,欢迎大家使用。

## 参数

全域 OpenRank 的计算中包含的参数如下:

| 参数名 | 值 | 参数描述 | 注 |
| :------------- | :---- | :---------- | :--- |
| OpenRank 默认值 | 1.0 | 协作网中新节点的默认值,例如新加入网络的开发者节点与新仓库 | |
| 开发者继承比例 | 0.5 | 开发者节点对于上个月 OpenRank 的依赖比例 | 该算法认为相较于仓库,开发者的价值更应体现出开源中的长期价值,因此开发者对于历史价值的依赖度较高 |
| 仓库继承比例 | 0.3 | 仓库节点对于上个月 OpenRank 的依赖比例 | |
| OpenRank 衰减系数 | 0.85 | 对于当月不活跃的开发者和仓库节点的 OpenRank 衰减比例 | OpenRank 价值并不会因为开发者或仓库仅在某月不活跃就直接清零 |
| OpenRank 最小值 | 0.1 | 当节点 OpenRank 衰减值该值以下时清空节点 OpenRank | |
Loading