2022-09-07 17:59:55 +08:00
# 课程项目:为真正的开源项目做贡献!
2022-09-20 16:58:34 +08:00
## 目标
2022-09-07 17:59:55 +08:00
2022-09-21 11:36:25 +08:00
课程项目的首要目标是希望同学能够通过一学期的课程学习和实践,能够初步理解开源项目的运转、开发和组织模式,以便将来在需要的时候,能够加入开源项目,对开源项目做出自己的贡献,或者开始自己的开源项目。
2022-09-07 17:59:55 +08:00
2022-09-21 11:36:25 +08:00
## 主要任务
课程项目的主要任务是**对一个或多个具有一定质量水准的开源项目,做出自己的贡献**。于此同时, 我们安排了三次presentation和一次期末报告, 作为我们考核**开源贡献的质量**的重要参考。
需要注意的是, 贡献的项目必须是具有一定质量水准的开源项目( 有证据能证明高质量、被很多人使用、贡献者多, 等等) ; 自己建一个GitHub仓库, 但是不满足上述质量水准, 是不可以的。
2022-09-07 17:59:55 +08:00
2022-09-20 16:58:34 +08:00
由于开源贡献过程的挑战性和不确定性,我们强烈建议在课程学习的过程中,尽早开始,并且对多个开源项目尝试做贡献。不管贡献最终是否被接收,都会纳入最终的考核标准中,还请多多尝试。
## 检查清单
### 项目选择
2022-09-21 11:36:25 +08:00
* 是否选择了活跃、有关注度的开源项目?
2022-09-20 16:58:34 +08:00
* 是否能够配置好项目需要的开发环境?
* 是否对这个项目有强烈的兴趣?
* 是否对这个项目的相关领域、编程语言、技术栈比较熟悉?
* 这个项目是否有完善的开源管理机制?
### 任务选择
* 这个项目是否有比较多的待解决issue?
* 这个项目是否有比较多的good first issue?
* 有没有自己作为项目的用户想要去解决的问题?
* 这个项目对issue的管理机制如何?
* 这个项目的贡献流程和要求如何?
## 参考资料
1. [https://opensource.guide/ ](https://opensource.guide/ ): 关于如何参与开源的各种指南
2. [https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/ ](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/ ): GitHub官方对good first issue功能的介绍
3. [https://github.com/topics/good-first-issue ](https://github.com/topics/good-first-issue ): GitHub提供的good first issue主题页面
4. [https://goodfirstissue.dev/ ](https://goodfirstissue.dev/ ): 一个列出有good first issue的GitHub项目的网站
5. [https://gfibot.io/ ](https://gfibot.io/ ): 对一些GitHub项目推荐good first issue( 来自我们实验室)
## 考核方式及评分标准
2022-09-07 17:59:55 +08:00
### 开题/中期/期末Presentation( 每个5分, 共15分)
2022-09-21 11:36:25 +08:00
为了跟踪进展和提供反馈, 课程会安排三次presentation( 开题/中期/期末,时间参见[课程大纲](../Syllabus.md)) , 每次presentation的内容要求如下( 对PPT模板和形式不做要求) :
2022-09-20 16:58:34 +08:00
#### 开题Presentation
1. 计划贡献的开源项目及其基本情况
2. 为什么选择这个/这些开源项目?这个/这些项目的哪些方面吸引到了你?你对这个/这些项目的了解情况如何?
3. 计划去做什么任务/解决什么issue?
#### 中期Presentation
1. 选择的开源项目/任务
2. 已进行的开发和交流活动
3. 过程中遇到的事件、问题和收获
4. 未来的计划
#### 期末Presentation
1. 选择的开源项目/任务
2. 每一个贡献从提出到被接收/拒绝的过程,涉及的沟通过程和代码贡献
3. 对开源参与的总结/思考
4. 对课程的建议
对于每次presentation, 能够按照要求作报告, 且报告中包含了要求的所有内容, 即得5分满分。如果存在内容欠缺, 明显准备不充分的情况, 酌情扣分。
请在presentation开始前, 将ppt以邮件形式发送给助教( heh@pku.edu.cn) , 文件命名统一为`学号-姓名-开题/中期/期末Pre.pdf/pptx`(例如`2001111320-何昊-开题Pre.pptx`)。
2022-09-07 17:59:55 +08:00
### 期末报告( 10分)
2022-09-21 11:36:25 +08:00
在期末presentation结束后, 要求提交一个期末报告, 作为整个开源参与过程和思考的一个正式记录, 也是我们评分的重要参考之一。
2022-09-20 16:58:34 +08:00
2022-09-21 16:45:29 +08:00
报告要求使用LaTeX撰写, 模板参见[Report/](Report/)文件夹, 以PDF格式提交, 详细要求参见报告模板。可以将报告模版文件上传到[OverLeaf](https://www.overleaf.com/)上, 设置编译器为XeLaTeX即可一键编译为PDF, 避免复杂的LaTeX环境配置。
2022-09-20 16:58:34 +08:00
2022-09-21 16:45:29 +08:00
如果合适, 可以直接复用你的Lab和Presentation的相关内容用于撰写期末报告。不过, 需要注意报告作为一个整体的逻辑完整性和一致性。
2022-09-07 17:59:55 +08:00
2022-09-21 16:45:29 +08:00
最终提交的报告评分分配如下:
* 遵循要求的报告格式, 1分;
* “开源项目概览”小节, 3分;
* “对开源项目的贡献”小节, 3分;
* “总结与反思”小节, 3分。
每一小节的评分将根据报告的表达清晰度、思考深度、认真程度等因素综合评判,会根据优秀率的情况进行适当调整。需要特别注意的是,**报告的长度不会成为评分的标准**,希望大家把功课主要放在做开源贡献本身,及对整个过程的总结和思考上,报告简明扼要,能够表达清楚意思即可。
2022-09-07 17:59:55 +08:00
2022-09-21 11:36:25 +08:00
请在截止日期之前(具体时间参见今年的[课程大纲](../Syllabus.md)) , 将期末报告的PDF以邮件形式发送给助教( heh@pku.edu.cn) , 文件命名统一为`学号-姓名-期末报告.pdf`(例如`2001111320-何昊-期末报告.pdf`)。
2022-09-07 17:59:55 +08:00
### 贡献质量( 15分)
评分分配: 基本分( 5分) + 工作量加分( 5分) + 难度加分( 5分)
1. 基本分( 5分) 的评分标准如下:
- 与一个开源项目进行了某种程度的合理交互( 开启issue、参与issue讨论等) , 获得1分。
- 向一个开源项目提交了一个贡献, 获得2分。
- 这个贡献最终被社区接受, 获得1分。
- 如果是**涉及源代码变更**的贡献, 获得1分( 毕竟本课程名为《开源**软件**技术》:);是否涉及源代码变更,以助教判定为准)。
- 如果在做出贡献的过程中出现明显违背[GitHub Code of Conduct](https://docs.github.com/en/site-policy/github-terms/github-community-code-of-conduct)的行为,视情况扣分
2. 工作量加分( 5分) 采用积分制, 5分封顶:
- (代码工作量加分)以下项目中,选择最高的加分项目:
2022-09-21 11:36:25 +08:00
* 如果有一个被接收的贡献, 代码变更行数大于20行, 加1分;
* 如果有一个被接收的贡献, 代码变更行数大于100行, 加2分;
* 如果有一个被接收的贡献, 代码变更行数大于500行, 加3分。
2022-09-07 17:59:55 +08:00
* **备注:** 代码变更行数为添加行数和删除行数之和;如果代码变更都是高度重复或没有技术含量的变更(例如,重新格式化代码),助教保留取消这部分加分的权力。
- ( 沟通工作量加分) 如果存在一个贡献, 经过反复沟通, 或者被社区多轮打回修改才最终被接收, 加1分; 至多有三个贡献可以通过此条规则获得加分( 亦即沟通工作量加分最多为3分)
- (贡献数量/类型加分)以下项目中,选择最高的加分项目:
* 如果被接收的贡献数量大于等于3个, 加1分。
2022-09-19 18:07:10 +08:00
* 如果被接收的贡献覆盖了N种不同的贡献类型, 加N分( 最多通过此条规则加3分) 。
2022-09-07 17:59:55 +08:00
* **备注:** 贡献类型包括修复Bug、实现新功能、优化性能、重构代码、编写文档、编写测试、协助构建/部署, 等等; 一般以开源项目的Issue Label为判定标准, 对于模糊的情况, 助教保留最终判定的权力。
2022-09-19 17:55:19 +08:00
- 对于没有最终被社区接收的贡献, 在表现出合理的交互、沟通、和努力的前提下, 可以按上述标准的60%获得加分。
2022-09-21 11:36:25 +08:00
3. 难度加分( 5分) 将由助教考虑所有学生的情况进行综合评判, 如果工作量加分的标准难以衡量实际的工作量和难度( 例如向知名、复杂、开发难度高的项目进行贡献等) , 会适当在给分上予以倾斜, 同时整体根据优秀率的情况进行适当调整。
2022-09-07 17:59:55 +08:00