个人作业:软件案例分析
第一部分 调研,评测
主要选取了 GitLab 作为软件案例进行分析
软件评测
软件使用
GitLab 是一个基于 Git 版本控制系统的开源软件,它提供了一个基于 Web 的界面,包含了项目管理、代码审查、问题跟踪、CI/CD 等功能。GitLab 是一个完整的 DevOps 平台,可以帮助团队更好地协作,提高开发效率。
创建第一个项目和组
![img](https://img-community.csdnimg.cn/images/f83d13826f374aedb1ffa1ace2d7d0f8.png)
GitLab 提供了创建项目和组的功能,可以通过 Web 界面创建新的项目,也可以通过导入已有的项目。
在注册完成后,Gitlab 将引导创建 / 导入第一个项目
对于项目管理者而言,需要做的事情如下:
- 创建用于管理工作的群组、子组和项目
- 创建即将加入群组的成员,并为这些成员分配角色(权限)
- 创建群组中针对特定工作的项目,并将成员添加到该项目
群组管理
![img](https://img-community.csdnimg.cn/images/0406b5196e8340dab03c04a7797766ce.png)
在 GitLab 中,Gitlab 中每一个项目都将属于一个群组(group)。
一般而言,群组是一个组织的概念,可以用于管理工作的群组、子组、项目和成员。
类似于项目管理,用户可以创建新群组,也可以查看自己的群组列表等
![img](https://img-community.csdnimg.cn/images/d6fe8eda384940e7ad7fd9576792ae81.png)
项目管理
对于代码管理软件而言,用户最关注的是项目管理功能。
![img](https://img-community.csdnimg.cn/images/3060c0492988489e90c40777fe241609.png)
用户可以通过点击 New project 创建一个新项目,也可以查看自己的项目列表和 Starred 的项目。
同时,Gitlab 提供了 Explore projects 功能,可以查看所有公开的项目,也可以通过搜索功能查找感兴趣的项目。
![img](https://img-community.csdnimg.cn/images/25fd28bff201440aadfff71cd1828260.png)
在项目的主页,用户可以查看项目的代码、问题、合并请求、CI/CD 等信息。
同样,用户可以通过下载按钮下载项目的代码,也可以通过 Web 界面编辑代码。
软件分析
基本流程
- 代码管理
- GitLab 提供了基于 Git 的版本控制系统,可以用于管理代码
- 用户通过创建项目,将代码上传到项目仓库中,利用 Git 的分支、合并等功能进行代码管理
- 同时也提供了 CI/CD 等高级功能,可以用于自动化测试、构建、部署等
- 群组管理
- 用户可以创建群组,用于管理工作的群组、子组、项目和成员,并为成员分配角色(权限)
- 社区功能
- 类似于 GitHub,GitLab 也提供了社区功能,可以查看公开的项目,也可以通过搜索功能查找感兴趣的项目
优缺点分析
- 优点
- 功能:
- 作为一个完整的 DevOps 平台,GitLab 提供了完整的项目管理、代码审查、问题跟踪、CI/CD 等功能,可以帮助团队更好地协作,提高开发效率,相较于同类软件如 Github 等,GitLab 提供了更多的功能
- 安全性和权限控制
- GitLab 提供了基于群组 / 项目的丰富的安全性和权限控制功能,可以帮助用户更好地保护自己的代码
- 界面
- GitLab 的界面较为美观和现代化,并且拥有多种语言支持,国际化适配较好
- 用户体验
- GitLab 提供了丰富的文档和教程,可以帮助用户更好地使用软件
- GitLab 的免费计划提供了大量的服务,同时它也提供了社区版本,可以进行私有化部署
- GitLab 针对中国市场提供了 极狐 GitLab 特供版本,可以提供更好的用户体验
- 迭代速度
- GitLab 拥有 3300+ Contributors,1800+ Team members,133 Consecutive releases every month,可以保证软件的迭代速度
- 缺点
- 用户体验
- 作为国外网站,Gitlab 在国内的访问速度较慢
- 在教育应用上,没有对学生这一群体提供更多的支持
- 无法快捷更改项目所属的群组
- 体量
- 相较于 GitHub 等竞品,GitLab 的用户体量较小
改进意见
- 提供学生支持
- GitLab 可以提供更多的学生支持,例如提供学生免费计划
- 增加宣传和推广
用户调研
用户调研截图如下
![img](https://img-community.csdnimg.cn/images/79d5de8b87bc407ea5c2067d85d5a42f.jpg)
![img](https://img-community.csdnimg.cn/images/8d77886cb0b5422b84206adbd61d21f6.jpg)
![img](https://img-community.csdnimg.cn/images/aaacf5f3ed474299975875cf6c6aa821.jpg)
![img](https://img-community.csdnimg.cn/images/91cf09f650b74d6fbab1367e6e9d8c8e.jpg)
- 采访对象的身份
- 采访对象是 2020 级计算机系学生,现担任计算机系课程的高阶助教,有丰富的个人开发经验和代码托管工具使用经验
- 采访对象主要使用的功能
- 采访对象主要使用的是 GitLab 的项目管理功能和群组管理功能,用以组织课程各个模块的开发和自动化部署等
- 采访对象在使用产品方面的满意度
- 采访对象对 GitLab 的各个方面功能都比较满意,特别是支持私有化部署和提供了相对丰富的 CI/CD 功能
- 但是采访对象认为 GitLab 的搜索功能还有待加强,同时可以提高符号解析能力
- 采访对象觉得从用户体验的角度来说需要改进的地方有哪些?
- 希望能够引进 IM(Instant Messaging) 功能,以便更好地进行团队协作和社区交流
- 希望能够提供更强大的搜索和符号解析能力
测评结论
作为目前顶级的代码托管平台和 Devops,GitLab 的功能已经十分完善,在用户体验方面也十分不错。因此我对 GitLab 的评价是:e) 非常推荐
BUG 分析和提交
BUG 分级
级别 | 描述 |
---|
Critical(1级) | 会导致系统崩溃、数据丢失等严重后果,需要立即修复 |
Major(2级) | 会影响系统的主要功能但不会造成系统崩溃,需要尽快修复 |
Minor(3级) | 影响用户体验或功能不如预期,但不会影响系统的核心功能,可以在下一个版本中修复。 |
Improvement(4级) | 对现有功能的改进,可以放到下一个版本中处理。 |
Suggestion(5级) | 建议性的改进,不影响系统功能,可以根据情况考虑是否修复 |
BUG-1
平台
- Windows 11 专业版 22631.3296
- Firefox 123.0.1 (64 位)
BUG 描述
环境(Environments)搜索时,不能返回所有匹配的项目
复现方式
创建以下的环境:
dev/static-files-1
dev/static-files-2
stg/static-files-1
stg/static-files-2
uat/static-files-1
uat/static-files-2
搜索 static
,注意到无法返回 stg/
下的匹配环境
![img](https://img-community.csdnimg.cn/images/ebbcc1c531fb41459e6a51d64a0b88ac.png)
![img](https://img-community.csdnimg.cn/images/9b4f4e89617d4312b0eee966f2589ce3.png)
BUG 分析
- 原因猜测
- 字符串处理函数使用不当,导致无法返回所有匹配的项目
- 在之前的项目中,编写后端某些字符串处理函数用的不对,可能会出现一系列隐蔽的问题,导致在少部分情况下会导出错误结果,比方说转义符的处理等等
- 严重性分级
- 未修复原因预测
BUG 改进建议
查看后端处理该请求时的处理函数以及返回值,定位问题所在,然后编写测试用例,修复问题
BUG-2
平台
- Windows 11 专业版 22631.3296
- Firefox 123.0.1 (64 位)
BUG 描述
暂时关闭 Gravatar 服务后,新用户的头像为 null
而不是默认头像
复现方式
- 在 Gravatar 中关闭邮箱的头像服务
- 使用该邮箱创建一个 GitLab 新用户
- 将该用户授予某个项目的权限
- 查看
Repository/Protected Branches
并且打开用户列表下拉框 - 显示用户和一个裂开的头像
![img](https://img-community.csdnimg.cn/images/25be721dabca426691f81d57c4303dee.png)
BUG 分析
- 原因猜测
- Gravatar 在创建账号但又关闭服务时返回一个
null
头像,而 GitLab 判断存在 Gravatar 账号后并没有对 null
头像进行特殊处理,故出现破损
- 严重性分级
- 未修复原因预测
BUG 改进建议
特殊判定 Gravatar 的 null
头像
第二部分 分析
工作量分析
使用 vsocde 的代码统计插件统计了 GitLab 项目的代码量,结果如下:
Total : 54450 files, 4275418 codes, 145457 comments, 1005991 blanks, all 5426866 lines
language | files | code | comment | blank | total |
---|
Ruby | 34,935 | 2,328,742 | 114,822 | 661,945 | 3,105,509 |
JavaScript | 8,309 | 748,834 | 19,185 | 143,937 | 911,956 |
Markdown | 2,533 | 476,361 | 2,387 | 153,845 | 632,593 |
JSON | 1,014 | 313,241 | 0 | 1,076 | 314,317 |
YAML | 6,536 | 260,754 | 5,148 | 10,769 | 276,671 |
SQL | 9 | 55,194 | 22 | 16,462 | 71,678 |
SCSS | 258 | 34,319 | 1,299 | 8,126 | 43,744 |
Go | 224 | 22,425 | 1,162 | 5,425 | 29,012 |
HTML | 21 | 15,168 | 15 | 169 | 15,352 |
XML | 93 | 7,698 | 11 | 1,378 | 9,087 |
ERB | 230 | 4,186 | 0 | 925 | 5,111 |
Ignore | 192 | 2,937 | 940 | 828 | 4,705 |
Shell Script | 42 | 2,387 | 362 | 662 | 3,411 |
CSS | 8 | 1,119 | 33 | 273 | 1,425 |
Go Checksum File | 1 | 955 | 0 | 1 | 956 |
Diff | 13 | 494 | 12 | 44 | 550 |
Makefile | 1 | 163 | 17 | 35 | 215 |
Go Module File | 1 | 140 | 4 | 8 | 152 |
CSV | 17 | 77 | 0 | 17 | 94 |
Go Template File | 2 | 71 | 0 | 21 | 92 |
Docker | 1 | 46 | 19 | 15 | 80 |
JSON with Comments | 2 | 42 | 2 | 2 | 46 |
Python | 1 | 32 | 7 | 9 | 48 |
PowerShell | 2 | 10 | 10 | 8 | 28 |
Ini | 1 | 9 | 0 | 4 | 13 |
toml | 1 | 9 | 0 | 4 | 13 |
Clojure | 1 | 3 | 0 | 1 | 4 |
JSON Lines | 2 | 2 | 0 | 2 | 4 |
代码量约在 4,000,000 行左右,其中 Ruby 代码量最大,约 3,000,000 行。
根据 IBM 模型,估算工作量的公式是 $E=5.2*L^{0.91}$。
其中 $L$ 是源代码行数(以千行计),$E$ 是工作量(以人月计)。
跟据这个公式可以算出 GitLab 项目的工作量约为 $5.2*4000^{0.91}=9860$ 人月。
那么,如果我们的团队有 6 个人,其中还需要一个 PM,那么完成这个项目的时间大约是 $9860/5=1972$ 个月,约合 164 年。
那么基本上我们的小型团队想要完成这个任务也就是不可能的了。
但是如只完成核心功能(群组管理 + 项目管理),
预计工作时间能大大减少,开发一个同类项目大概需要 100 人 / 月,也就是 2 年左右。
软件质量分析
- 这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几?
- 目前市面上的类似软件有 GitHub,Gitee,GitCode,GitLink 等,预计 GitLab 的质量在同类产品中名列第一,原因如下:
- GitLab 提供了完整的项目管理、代码审查、问题跟踪、CI/CD 等功能,可以帮助团队更好地协作,提高开发效率,相较于同类软件如 Github 等,GitLab 提供了更多的功能
- GitLab 是开源项目,拥有开源社区的支持
- GitLab 有明确的商业化路线,拥有较好的商业化前景
- GitLab 的迭代速度较快,拥有 3300+ Contributors,1800+ Team members,133 Consecutive releases every month
第三部分 建议和规划
- 市场现状
- 市场概况
- 根据 Statista 的统计,2024 年全世界软件开发者将达到 2870 万人
- GitLab 的主要潜在客户是各大软件开发公司,以及个人开发者,估计全球潜在客户应该在 1000 万人左右
- 竞争产品
- GitHub,Gitee,GitCode,GitLink 等
- 产品定位
- 这些产品基本上都是代码托管平台,面向个人 / 企业开发者,提供代码托管、项目管理、CI/CD 等功能
- 而 GitLab 加强了其功能性,要构建一个完整的 DevOps 平台
- 目前 GitHub 是 GitLab 的主要竞争对手,用户数超过 1 亿,仓库数量超过 42 亿,而 GitLab 的用户数约为 3000 万
- GitLab 的优势:
- 一体化的CI/CD:GitLab提供内建的持续集成/持续部署(CI/CD)工具,而GitHub则依赖于第三方服务(如GitHub Actions,虽然现在非常强大)或集成。
- 更广泛的内置功能:GitLab 提供从项目规划到监控的一整套功能,无需依赖外部服务
- 自托管选项:GitLab 提供更灵活的自托管解决方案,适合希望完全控制其基础设施的企业
- 免费的私有仓库:GitLab 对所有用户提供免费的私有仓库,其中包含无限的协作者
- GitLab的劣势:
- 用户界面:一些用户认为 GitLab 的用户界面比 GitHub 更复杂,尤其是对新手而言
- 市场占有率:相比 GitHub,GitLab 在开源社区和市场占有率上略显逊色
- 集成数量:尽管 GitLab 的集成数量在增加,但 GitHub 仍拥有更广泛的第三方集成和社区支持
- 市场与产品生态
- 这个产品的核心用户群是什么样的人?典型用户是什么样的?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?
- GitLab 的核心用户群一般是寻求全面开发流程管理工具的企业级用户、追求高效DevOps实践的软件开发团队、对数据安全和隐私有特殊要求的组织、以及教育和研究机构等。
- 一般而言,其用户都具有较高的教育水平,多数拥有计算机科学方面的学位。年龄一般在 20 岁到 40 岁不等。专业多数是软件开发,系统架构等。一般对技术和开源社区拥有浓厚的兴趣,而且拥有较高的收入。
- 表面需求:高效的代码管理和协作,自动化的CI/CD,项目管理和监控等
- 潜在需求:数据安全和隐私,自托管能力,定制和集成等
- 产品的用户群体之间是否存在一定的关系?如果有,则是否能利用这些关系构成特定的用户生态?
- GitLab 的用户群体之间存在一定的关系,例如开发者、测试人员、运维人员等。GitLab 可以利用这些关系构成特定的用户生态,例如提供更多的测试、运维等功能
- 产品的子产品,以及其他相关产品之间是否存在一定的关系?如果有,则是否能利用这些关系构成特定的产品生态?
- GitLab 和 AWS,Azure 等云服务商之间存在一定的关系,可以利用这些关系构成特定的产品生态
- 产品规划
- 你要在当前软件的基础上设计什么样的新功能?为何要做这个功能,而不是其他功能?为什么用户会用你的产品/功能?你的创新在哪里?可以用 NABCD分析。
- GitLab 可以增加 IM(Instant Messaging) 功能,以便更好地进行团队协作和社区交流
- Need:用户需要更好的团队协作和社区交流,特别是远程工作下的即时交流
- Approach:有开源的 IM 服务,可以进行集成
- Benefit:可以提高团队协作效率
- Competition:GitHub 目前即将提供 IM 功能,而其他竞争对手没有
- Delivery:发表在 GitLab Blog 中,并在用户进入 GitLab 时通过教程提示引导使用
- 如果你是项目经理,可以招聘 6 个人,并且有 16 周的时间,你认为应该 如何配置角色(开发,测试,美工等等)才能在第 16 周如期发布软件的改进版本,并取得预想中的成绩。
- PM:1 人
- 美工 + 前端工程师:2 人
- 后端工程师:1 人
- 测试工程师:1 人
- 运维:1 人
- 请为你的团队设计 16 个周每周的详细规划。
- Week 1:确定项目目标、范围和需求;制定项目计划和时间表;明确每人的分工角色
- Week 2:调研会谈收集功能需求,分析目前行业中的竞品,编写规格说明书
- Week 3-4:技术方案设计和 UI 设计
- Week 5-10:前后端开发,并进行全面集成测试,开始编写用户手册
- Week 11-12:内部用户测试和安全与性能测试
- Week 14:编写上线计划和回滚方案
- Week 15:测试上线,邀请小范围用户试用,小范围部署,进行监控和性能测试
- Week 16:正式上线,按照上线计划进行部署