个人作业:软件案例分析

20374290-曹宏墚 2024-03-17 23:15:46

个人作业:软件案例分析

项目内容
这个作业属于哪个课程2024年北航敏捷软件工程
这个作业的要求在哪里[I.2] 个人作业:软件案例分析
我在这个课程的目标是学习软件工程知识
这个作业在哪个具体方面帮助我实现目标学会分析已有软件的一般方法,以此提升自己的项目构建能力

第一部分 调研,评测

主要选取了 GitLab 作为软件案例进行分析

软件评测

软件使用

GitLab 是一个基于 Git 版本控制系统的开源软件,它提供了一个基于 Web 的界面,包含了项目管理、代码审查、问题跟踪、CI/CD 等功能。GitLab 是一个完整的 DevOps 平台,可以帮助团队更好地协作,提高开发效率。

创建第一个项目和组

img

GitLab 提供了创建项目和组的功能,可以通过 Web 界面创建新的项目,也可以通过导入已有的项目。
在注册完成后,Gitlab 将引导创建 / 导入第一个项目

对于项目管理者而言,需要做的事情如下:

  • 创建用于管理工作的群组、子组和项目
  • 创建即将加入群组的成员,并为这些成员分配角色(权限)
  • 创建群组中针对特定工作的项目,并将成员添加到该项目

群组管理

img

在 GitLab 中,Gitlab 中每一个项目都将属于一个群组(group)。
一般而言,群组是一个组织的概念,可以用于管理工作的群组、子组、项目和成员。
类似于项目管理,用户可以创建新群组,也可以查看自己的群组列表等

img

项目管理

对于代码管理软件而言,用户最关注的是项目管理功能。

img

用户可以通过点击 New project 创建一个新项目,也可以查看自己的项目列表和 Starred 的项目。
同时,Gitlab 提供了 Explore projects 功能,可以查看所有公开的项目,也可以通过搜索功能查找感兴趣的项目。

img

在项目的主页,用户可以查看项目的代码、问题、合并请求、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 可以提供更多的学生支持,例如提供学生免费计划
  • 增加宣传和推广
    • GitLab 可以增加宣传和推广,提高用户体量

用户调研

用户调研截图如下

img

img

img

img

  • 采访对象的身份
    • 采访对象是 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

img

BUG 分析

  • 原因猜测
    • 字符串处理函数使用不当,导致无法返回所有匹配的项目
    • 在之前的项目中,编写后端某些字符串处理函数用的不对,可能会出现一系列隐蔽的问题,导致在少部分情况下会导出错误结果,比方说转义符的处理等等
  • 严重性分级
    • Minor(3级)
  • 未修复原因预测
    • 测试用例不完善,导致无法发现这个问题

BUG 改进建议

查看后端处理该请求时的处理函数以及返回值,定位问题所在,然后编写测试用例,修复问题

BUG-2

平台

  • Windows 11 专业版 22631.3296
  • Firefox 123.0.1 (64 位)

BUG 描述

暂时关闭 Gravatar 服务后,新用户的头像为 null 而不是默认头像

复现方式

  1. 在 Gravatar 中关闭邮箱的头像服务
  2. 使用该邮箱创建一个 GitLab 新用户
  3. 将该用户授予某个项目的权限
  4. 查看 Repository/Protected Branches 并且打开用户列表下拉框
  5. 显示用户和一个裂开的头像

img

BUG 分析

  • 原因猜测
    • Gravatar 在创建账号但又关闭服务时返回一个 null 头像,而 GitLab 判断存在 Gravatar 账号后并没有对 null 头像进行特殊处理,故出现破损
  • 严重性分级
    • Suggestion(5级)
  • 未修复原因预测
    • 测试用例不完善,导致无法发现这个问题

BUG 改进建议

特殊判定 Gravatar 的 null 头像

第二部分 分析

工作量分析

使用 vsocde 的代码统计插件统计了 GitLab 项目的代码量,结果如下:

Total : 54450 files, 4275418 codes, 145457 comments, 1005991 blanks, all 5426866 lines

languagefilescodecommentblanktotal
Ruby34,9352,328,742114,822661,9453,105,509
JavaScript8,309748,83419,185143,937911,956
Markdown2,533476,3612,387153,845632,593
JSON1,014313,24101,076314,317
YAML6,536260,7545,14810,769276,671
SQL955,1942216,46271,678
SCSS25834,3191,2998,12643,744
Go22422,4251,1625,42529,012
HTML2115,1681516915,352
XML937,698111,3789,087
ERB2304,18609255,111
Ignore1922,9379408284,705
Shell Script422,3873626623,411
CSS81,119332731,425
Go Checksum File195501956
Diff134941244550
Makefile11631735215
Go Module File114048152
CSV177701794
Go Template File27102192
Docker146191580
JSON with Comments2422246
Python1327948
PowerShell21010828
Ini190413
toml190413
Clojure13014
JSON Lines22024

代码量约在 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:正式上线,按照上线计划进行部署
...全文
82 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

71

社区成员

发帖
与我相关
我的任务
社区描述
2024年北航敏捷软件工程
软件工程团队开发结对编程 高校 北京·海淀区
社区管理员
  • clotho67
  • Yeyanhan
  • HJin_Gwok
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧