53 lines
4.4 KiB
Markdown
53 lines
4.4 KiB
Markdown
# Lab 2: 了解开源项目的开发方式和贡献流程(7分)
|
||
|
||
**截止日期:2024.10.10 11:59am**
|
||
|
||
## 实践目的
|
||
|
||
初步确立一个有贡献意愿的开源项目;了解这个开源项目的贡献指南、开发环境、质量管理方式、issue管理方式等基本情况,熟悉贡献一个开源项目前需要做的准备工作,为开发任务的选择做准备。
|
||
|
||
## 实践流程
|
||
|
||
> (2分)请列出一个你想要贡献的开源项目,提供项目的链接,用一句话简要介绍一下这是个什么开源项目,并简要回答如下问题:
|
||
> - 这个项目是一个活跃的开源项目么?为什么?
|
||
> - 这个项目是一个成熟的开源项目么?为什么?
|
||
> - 你为什么想要对这个开源项目做贡献?
|
||
|
||
(在这里写下你的回答)
|
||
|
||
> (2分)请找到并阅读这个项目的贡献指南(如项目内[CONTRIBUTING.md](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors)等),提供贡献指南的链接,并简要回答如下问题:
|
||
> - 这个项目的贡献指南包含了哪些内容?
|
||
> - 有哪些为这个开源项目提出改进建议的方式?
|
||
> - 有哪些为这个开源项目做出贡献的方式?
|
||
|
||
(在这里写下你的回答)
|
||
|
||
> (3分)请尝试找到这个项目的开发文档,提供开发文档的链接,按照开发文档的描述在你的机器上配置开发环境,并简要回答如下问题:
|
||
> - 这个项目是否规定了统一代码风格?采用了什么自动化工具来执行规定的代码风格?
|
||
> - 这个项目有哪些测试?采用了什么测试框架(如Python的[pytest](https://docs.pytest.org/en/7.4.x/))来运行测试?
|
||
> - 这个项目是否配置了CI/CD流水线(例如,[GitHub Actions](https://docs.github.com/en/actions),注意GitHub上commit边上的小绿勾)?流水线中包含了哪些检查?
|
||
> - 你能否在你的机器上成功构建并运行测试?如果是,请提供一些输出结果(可附截图);如果否,请试图解释原因
|
||
|
||
(在这里写下你的回答)
|
||
|
||
## 提交方式
|
||
|
||
请在截止日期之前,将此markdown文件(请检查前面的问题是不是已经都回答了)发送到助教邮箱(xuww@stu.pku.edu.cn),文件命名统一为`学号-姓名-Lab2.md`(例如`2201110012-张三-Lab2.md`)。
|
||
|
||
## 评分标准
|
||
|
||
对实践流程中提出的每一块问题,均有合理的回答即得满分,否则酌情扣分。
|
||
|
||
提交超出截止日期24小时内,最多获得80%的分数;提交超出截止日期72小时内,最多获得50%的分数;超出截止日期72小时的提交不得分。
|
||
|
||
## 备注
|
||
|
||
1. 如果一些问题不适用于你选择的开源项目,解释一下为什么不适用,并跳过此问题即可。
|
||
2. 一个正经的软件项目(当然包括大多数开源项目!)通常都会采用以下方式来保证代码的正确性和质量:
|
||
- [静态分析](https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis):简单地说,静态分析工具通过对代码运行特定的算法,来检查代码是否存在常见的质量问题,或者将代码自动格式化成统一的格式(便于维护),典型的工具有Java的[FindBug](http://findbugs.sourceforge.net/)、Python的[black](https://black.readthedocs.io/en/stable/)、等等。
|
||
- [软件测试](https://en.wikipedia.org/wiki/Software_testing):简单地说,软件测试就是通过一组专门编写的程序(i.e., 测试用例)来验证软件项目的核心代码的正确性。通常项目都会使用某些开源测试框架(例如,[JUnit](https://junit.org/junit5/)、[pytest](https://docs.pytest.org/en/7.1.x/)、等等),简化编写测试用例和运行复杂测试的过程。
|
||
- [持续集成/持续部署(CI/CD)](https://en.wikipedia.org/wiki/Continuous_integration):CI是指在代码提交到云端后,在一系列预先配置好的虚拟机环境下运行一系列自动化脚本,对代码库的整体质量进行检查,避免引入bug;CD是在这一步的基础上,自动化地将程序发布/部署到特定的位置;通常CI和CD会在一起配置成一个由脚本组成的流水线。常见的流水线脚本包括代码静态分析、软件测试(单元测试、集成测试、...)、自动部署(自动发布)、等等。
|
||
3. 请注意为开源项目配置开发环境所花的时间可能难以预估,请务必尽早开始。
|
||
|
||
|