Hense 8c97ccd752 | ||
---|---|---|
README.md |
README.md
开源软件项目仓库的健康度量与寿命预测
背景
本次赛题背景基于开源软件生态系统下软件代码仓库的健康度量问题。现代软件开发、维护和运行的全生命周期都无不依赖于其他软件或第三方库,得益于现代软件开发生态中开源已逐步成为开发者的共识,同时各大软件代码托管平台(如 GitHub)功能的日趋完善,开发人员从代码托管平台上重用代码、引入依赖已成为当前开发活动的大势所趋。Synopsys 在其年度《开源安全与风险分析报告》(OSSRAR)中对 17 个不同应用领域的1700 余个代码库进行了分析,发现 76% 的代码库是开源的,同时其中 96% 使用了第三方开源组件。尽管开源软件作为可依赖项为软件开发与支持提供了便利,但并非是百分百可靠的。作为第三方开发和维护的软件产品,依赖项是否会被停止维护、抑或是何时会被停止维护,都无从被使用依赖的开发者所详细知晓,我们称软件仓库不再被开发者维护和更新的现象称为项目弃用。社区存在更好的替代软件、缺乏继续演进的动力、开发人员流失等各种原因都会致使代码库弃用问题的产生。由于软件交错复杂的相互依赖性,一个小量级项目弃用的影响往往会超出单个软件项目的范围,依赖于已弃用版本库的软件系统容易出现安全漏洞和兼容性问题,甚至导致整个软件系统的级联故障,进而威胁软件系统生态的健康和稳定。因此,对软件代码仓库的健康程度进行度量和评估对于开源生态系统的稳定具有十分重要的意义。
数据集
我们提取了GitHub平台上从2011年到2023年star数超过32的103,354个开源软件代码仓库的仓库属性和历史活动信息构成整合数据集(详见本项目仓库数据集一栏),分为"Repositories_with_label.csv"和"Repositories_with_statistics.csv"两个文件,前者包括代码仓库的静态基本信息,包括:stargazer/CountcreatedAt/updatedAt/pushedAt/isArchived/isFork/archivedAt/isTemplate/licenseInfo/primaryLanguage/repositoryTopics/description以及是否被弃用(deprecated)的标签信息,后者则包括本次整合数据集所挖掘到的不同仓库在生命周期每个月内的动态数据,包括:每月新增的commits/issues/prs/stars/tags/comments数等。这些特征数据分别从不同角度在一定程度上反映着代码仓库的状态,蕴藏着其健康程度的信息。
当然,在提供的数据集之外,参赛者可以使用公开数据集,如World of Code(World of Code数据集是全网Git仓库代码提交数据的大集合,收集了来自GitHub、GitLab、BitBucket等十余个代码托管平台的Git提交数据,并进行了开发者去重、索引等处理步骤)和GHArchive等,也可进一步挖掘其他任意可以通过公开渠道获取的数据(例如从X(Twitter)、LinkedIn、IRC等平台上挖掘和收集数据)。
为便于有需要的参赛者扩充数据集,将GHArchive数据集的相关信息及其使用方法简要介绍如下。
GHArchive(也可参考GHArchive官方网站)
说明
GHArchive数据集保存了2011年2月至今GitHub平台所有的 时间线API 数据,包括提交、议题、评论等,是开源平台社交协作数据良好的数据源。当前GHArchive包含75亿条数据,来自6900万个GitHub用户,占用空间500GB。
使用
Clickhouse
ClickHouse是一种具有高性能的列式存储关系型数据库。ClickHouse团队维护了GHArchive数据集的副本,数据集的结构和使用方法可以参考ClickHouse文档。数据集可以使用在线Playground或ClickHouse客户端进行连接:
clickhouse-client --secure --host play.clickhouse.com --user explorer
ClickHouse能以秒级的速度执行复杂的SQL查询:
SELECT
toYear(created_at),
count(*),
bar(count(*), 0, 1290803070, 30)
FROM gharchive.github_events
GROUP BY toYear(created_at)
并能够查询结果导出为CSV文件:
SELECT *
FROM gharchive.github_events
WHERE (event_type = 7) AND (title ILIKE '%release_note%') AND (action = 'opened') AND (actor_login NOT ILIKE '%bot%')
INTO OUTFILE '/tmp/issues_release_notes.csv'
FORMAT CSVWithNames
注意:ClickHouse使用的SQL语法 不是ANSI SQL的超集 , 与MySQL等差别较大,具体请参考 ClickHouse SQL Reference。