2021年软工 案例分析作业

2021年软工 案例分析作业

项目 内容
这个作业属于哪个课程 2021春季软件工程(罗杰 任健)
这个作业的要求在哪里 案例分析作业
我在这个课程的目标是 熟悉软件工程的基本方法并尝试加以实践
这个作业在哪个具体方面帮助我实现目标 通过对现有产品的分析与反思,学习间接经验,体会软件工程的原则在实践中的种种体现

​ 本文约 \(12k\) 字,阅读时间大约 \(15\) 分钟。

一、洛谷

1.1 调研与评测

​ 洛谷创办于2013年,出道名为 “洛谷Online Judge” ,致力于为 OIers/ACMers 提供清爽、快捷的编程体验。它不仅仅是一个在线测题系统,它拥有强大的社区、在线学习功能。同时,许多教程内容都是由五湖四海的 OIers 提供的,保证了内容的广泛性。无论是初学OI的蒟蒻,还是久经沙场的神犇,均可从洛谷获益,也可以帮助他人,共同进步。

—— 知乎

​ 笔者在高中参加信息竞赛时便已经接触到许多 OJ 平台(将在1.2节中具体提及与比较),其中洛谷是当时我们使用较多的一个平台。在近年学习程序设计、数据结构、算法设计与分析等课程时,亦或是准备蓝桥杯等比赛的过程中,如果有刷题需要,我也会第一时间想到洛谷而不是其他 OJ ,是什么造成了我对洛谷的如此“依赖”呢?下面我将结合自己数年的使用经历,从基本功能、用户与场景、bug与改进等多方面对洛谷进行调研与评测。

1.1.1 软件功能

  • 基本功能:在线搜索、查看(图1)、提交、评测题目,查看评测记录(图2)

  • 社区功能:查看与上传题解,讨论区,小黑屋,建立与参与比赛(图3)

  • 团队功能:建立与管理团队(图4),在团队中布置作业或进行比赛

  • 变现功能(未深入体验):洛谷网校(图5)

  • 特点功能:分类题单刷题,智能推荐题目

    ​ 下面以图片形式展示其中部分功能:

图1

图2

图3

图4

图5

1.1.2 优缺点与用户体验

​ 笔者认为,洛谷基本功能完整,差异性功能具有吸引力,用户体验较好,具体如下:

  • 数据量大,覆盖多年各类竞赛真题,也支持用户自己上传题目,可以较好满足刷题准备竞赛的需要。
  • 基本功能相关的界面均较为美观,但部分页面(如用户偏好设置)有些赶工痕迹。
  • 每一道题目都拥有可隐藏的算法标签和难度分级,支持分类按照题单刷题,也能显示题单进度,用户体验良好。
  • 评测反馈及时,每位用户每天都拥有免费的下载测试点额度,团队模块的基本功能也都较为完整

​ 此外,笔者通过采访一些其他同学来直观感受洛谷在多个方面的优缺点和用户体验。

采访1:Yi同学

​ Yi同学自初中起学习信息竞赛,曾获WC2017铜牌、NOI2017银牌等奖项,属于典型的oi选手,笔者主要就其高中对洛谷的使用情况进行采访,文字记录如下:

Q1:最初是为什么开始使用洛谷的?最常使用什么功能?

A1:高中搞oi的时候发现洛谷有丰富的题库可以训练,最常使用做oi题。(洛谷还有别的功能吗)

Q2:你认为洛谷有啥优点?缺点?最大的特点是啥?

A2:优点是题库比较齐,讨论区比较活跃,缺点是题目数据不公开,最大的特点是二次元?(笑)

Q3:你认为洛谷有什么改进空间?或是最需要添加什么功能?

A3:下载测试数据。

Q4:有用过其他OJ吗?有什么主要区别?

A4:用过POJ,区别是洛谷界面更好看。

图1 还是二次元比较吸引用户

采访2:Wang同学

​ Wang同学高中并没有参加过信息竞赛,现在是软件学院的一位大佬,笔者主要就其大学对洛谷的使用情况进行采访,文字记录如下:

Q1:最初是为什么开始使用洛谷的?最常使用什么功能?

A1:最初使用洛谷是为了训练最大流等一些算法,最常使用的功能就是刷题了。

Q2:你认为洛谷有啥优点?缺点?最大的特点是啥?

A2:优点就是题比较多,每道题都有算法标签。缺点就是我觉得洛谷的用户主要针对的是高中生,初中生,他们的一些讨论留言让人难以理解。

Q3:你认为洛谷有什么改进空间?或是最需要添加什么功能?

A3:洛谷使用的不太多,个人感觉做的比较完善了。

Q4:有用过其他OJ吗?有什么主要区别?

A4:我还用过HDU,牛客网,LeetCode。第一个主要是练习ACM的OJ,上面的题也很多。后面两个主要是为了面试,题目相对简单,但是提供的在线编辑器和题解比前者和洛谷丰富。

1.1.3 Bug与改进意见

​ 以下 bug 发生的环境均为:

  • 操作系统: Windows 10, 18363.1440
  • 浏览器:Microsoft Edge, 89.0.774.63

​ 在本文中,Bug严重性星级分类标准如下:

  • 五星:频率较高且后果较为严重

  • 四星:影响范围较大,频率高且后果较轻,或频率较低但后果严重

  • 三星:影响范围较大,发生频率中等或后果中等严重

  • 两星:影响范围较小,发生频率极低或后果较轻

  • 一星:影响范围小且频率低且后果较轻

  • 零星:没有任何影响

Bug1: 链接无法正常跳转

  • 问题描述:团队创建页面中“帮助”的链接无法正常跳转。

  • 可复现性:稳定复现

  • 操作步骤

    • 进入创建团队页面,注意到有一个“帮助:团队”的链接。
    • 点击此链接,无任何响应(下图),在新标签页中打开为 about:blank#blocked

  • Bug分析
    • 可能原因:前端开发过程中未正确配置传送门,可能单纯是忘了。
    • 严重性:
      • 系统功能:一星,不影响基本功能。
      • 安全性:零星,没有任何影响。
      • 用户体验:一星,对少数用户有影响,且频率较低,后果不严重。一般而言需要用到创建团队功能的用户极少,多数为学校信竞教练等,其可以自行于帮助页中找到关于团队的介绍。(何况就算链接没失效大多数人也不会点进去看)但是这种低级Bug会使得用户有理由怀疑该模块是否真的经过测试。
    • 改进建议:
      • 全面筛查是否还存在其他链接失效的情况并逐一修正,在新模块上线之前做充分测试。

Bug2: 注册界面导引不清、流程冗余

  • 问题描述:用户注册时,仅在邮箱验证码填写后才进行“用户名重复”的提示,修改用户名后需要重新验证邮箱。

  • 可复现性:稳定复现

  • 操作步骤

    • 进入注册页面,按照引导输入用户名、密码、验证码、邮箱信息。
    • 填写邮箱收到的验证码,注意此时没有任何对用户名重复的提示。(图1)
    • 点击“注册”按钮,网页报错提示“该用户名已被使用”。(图2)
    • 修改用户名,注意此时验证码和邮箱验证码均未被清空。(图3)
    • 再次点击“注册”按钮,网页报错提示“邮箱或手机验证码不正确”。(图4)
    • 手动更换验证码图片和填入新的邮箱验证码后,注册成功。

  • Bug分析
    • 可能原因:需求分析过程中没有考虑这一需求,亦或是较少进行场景测试,亦或是最初的版本有这个功能而在维护过程中接口变化而没有及时更新。
    • 严重性:
      • 系统功能:两星,影响注册模块的基本功能但后果不严重。
      • 安全性:零星,没有任何影响。
      • 用户体验:四星,对所有用户均有影响,但频率较低。洛谷作为一个用户数量较大的社区,新用户注册时有很大可能存在用户名重复的情况,从而陷入多次邮箱验证的流程中,用户体验极差,可能直接造成潜在用户的流失。好在此Bug仅发生在注册过程中,不会多次影响用户。
    • 改进建议:
      • 方法1:在注册界面增加用户名是否重复的检测结果显示。
      • 方法2:将注册与邮箱验证分离,用户先使用邮箱验证注册,成功后再设置其用户名。
      • 方法3:采用唯一ID标识用户,从而允许用户名的重复。
  • Bug反馈:已在洛谷[反馈、申请、工单专版]进行反馈(传送门),约一天后得到了PM的回复“已记录,之后会优化”。

1.1.4 总结与评价

​ 总体而言,洛谷定位清晰,功能完整,虽有小Bug但无伤大雅,笔者评价为 e)非常推荐

​ 采用邹欣老师给出的表格,对其定量评价如下:

类别 描述 评价 评分(满分10分,及格4分,很差-3分)
核心功能 分析三个核心功能,功能设计和质量。 定位清晰,功能完整 10
细节 有什么为用户考虑的细节? 很多用户交互细节逻辑不尽如人意,参考Bug2
但同时题目详情页面的算法标签等信息均可隐藏,又显得细节良好
6
用户体验 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告) 界面简洁清晰 10
辅助功能 一些辅助功能如皮肤等 偏好设置完整 8
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 公认的刷竞赛类题的首选网站 10
软件的效能 占用内存, 启动速度, 内存泄漏情况 题目详情界面打开较慢,可能因为图片和链接较多,但无过大影响 6
软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 页面缩放支持较好,交互体验较好 8
成长性 记住用户的选择, 适应用户的特点,用户越用越方便 有智能推荐题目系统 10
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 部分提示信息莫名其妙,整体差强人意 4

1.2 分析

Q1:使用此服务的所有功能,估计这个软件/网站/服务做到这个程度大约需要多少时间?(团队人数6人左右,计算机大学毕业生,并有专业UI支持)

​ 笔者没有开发大型软件的经验,给出的预估也是瞎猜。完成基础页面和功能(注册与登陆,题目上传、删除、查看)约两周,完成核心功能(评测机的编写和提交模块)约两周,做集成测试约一周,此时已经完成了基本功能,可以进行 \(\beta\) 测试,之后完成社区功能(题解,讨论区,小黑屋)约一周,题单功能约一周,团队功能约两周,集成测试约一周,留两周余量进行Bug修复,共约三个月可完成目前所有功能。当然,这里的估计只针对现有功能的前后端编写,不包含上传这么多题目。

Q2:分析这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几?

​ 对于洛谷的优点和缺点在前文已经有了详细的介绍,不再赘述,类似软件将在1.3节中介绍。就整体质量而言,我认为洛谷在同类产品中排名第一。

Q3:从各方面的问题,推理出这个软件团队在软件工程方面可以提高的一个重要方面(具体建议)

​ 目前洛谷开发进度缓慢,很大程度上是最初编写的低质量代码导致的,上线运行后再对模块进行重构不仅会拖慢后续的开发计划,也会使用户难以习惯重构后的新的模块,洛谷联合创始人在知乎问题“如何评价洛谷将训练场改为题单?”下的回答充分说明了这一点。

知乎问题“如何评价洛谷将训练场改为题单?”的一个回答

​ 因此笔者认为,初期的洛谷团队在软件工程的每一个方面都会有所欠缺,而其最需要提高的方面是团队中每一个人的个人能力与技能,其次是对整体架构和有关接口的设计。

Q4:你在第一部分发现的bug,为何软件团队不能在发布前修复?他们是不知道,还是有意不修复?你觉得是什么原因?

​ 笔者认为洛谷团队不修复以上问题的原因主要是团队规模小,代码难以维护,工作效率低下,且目前有其他模块需要进行开发。

  • 按照洛谷PM发布的动态来看,虽然目前正在开发的模块工作量不太大,但时间上已经堆到了今年底,可以预想其团队规模较小,开发效率不高。

  • 笔者记得还在读高中的时候,洛谷似乎是由几个OIers“用爱发电”建立和维护的,可以预见的是当时代码质量并不高,可能对现在的迭代开发工作造成很大的影响。洛谷PM在一年前的动态也印证了这一点。

  • 洛谷团队有自己的开发计划,目前可能无暇顾及这些小Bug。

1.3 建议与规划

1.3.1 市场概况

首先市场有多大?其次直接的用户有多少?潜在的用户又有多少?

​ 传统的高中竞赛只有数学、物理两种,但近年来,NOIP等信息竞赛逐渐走入大众视野,越来越高的省一线也暗示着越来越多的参加者,加之大学计算机相关专业大都人满为患,非本专业的也想凑凑热闹,可以毫不夸张的说,OJ市场覆盖了学生时代的每一个阶段。其中直接用户是参与相关竞赛或相关专业的学生及教师,潜在用户则是每一位学生,甚至家长也能算上。(毕竟家长钱好赚

1.3.2 市场现状

目前市场上有什么样的产品了?

​ 目前,面向竞赛类的OJ大多是一些组织的非营利性OJ,其中又以各大学校OJ为主,如北京大学的POJ,杭州电子科技大学的HDOJ等。

上述产品的定位、优势与劣势在哪里?产品之间呈现什么样的关系,哪些为竞品关系?以及竞争中的各方态势如何?

​ 就题目而言,上述产品与洛谷定位相似,但由于其不以盈利为目的,也就根本没有扩大用户量的需求,而是主要服务本校学生,因此基本上都只有OJ的基本功能——评测,而且UI不好看(下图分别为POJ和HDOJ首页)。

POJ首页

HDOJ首页

​ 因此,虽然上述产品都称得上是竞品,但其实没什么好竞争的,因此也造成了洛谷一家独大的现状。至于LeetCode之类,面向的用户完全不同,不在此讨论。

1.3.3 市场与产品生态

这个产品的核心用户群是什么样的人?典型用户是什么样的?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?

​ 结合笔者自己的使用经历,构造了以下几种典型用户:

典型用户1

  • 姓名:王芃帛

  • 身份:某某中学学生

  • 动机与目的:大量刷题,准备NOIP等一系列信息学竞赛

  • 使用环境:中学机房

  • 偏好:和队里其他小伙伴一起刷题一起学习

  • 典型场景:又到了某某中学的竞赛集训时间,王芃帛和队里小伙伴一起来到学校机房,打开洛谷的网络流题单,刷了几道题,并线下交流方法和感悟,线上水群或讨论区。

典型用户2

  • 姓名:杨梓铭

  • 身份:某大学计算机学院学生

  • 动机与目的:通过刷题练习程序设计、数据结构、算法等课程

  • 使用环境:自习室,个人PC

  • 偏好:按照算法分类刷题,记录刷题进度

  • 典型场景:杨梓铭今天在算法课上学习了01背包,晚上通过自己的PC打开洛谷,找到DP题单,开始爆肝,遇到不会的就看题解。

典型用户3

  • 姓名:牟虞
  • 身份:某某中学信息学竞赛教练
  • 动机与目的:组织队里的学生共同刷题,以便于看到各位同学的学习状况,并进行题目的统一讲解
  • 使用环境:学校配备的PC
  • 偏好:能自己上传私有的题目
  • 典型场景:讲解最大流问题的基本算法后,牟虞往洛谷的该校团队中添加了一道对应习题,让同学们进行练习,根据反馈进行个别辅导。

​ 其中,洛谷的核心用户群是典型用户1,但是值得注意的是典型用户3也具有很高的优先级(因为学校竞赛教练对于OJ的选择往往决定了该校竞赛生对于OJ的选择)。

产品的用户群体之间是否存在一定的关系?是否有利用其相互作用二次构成特定用户生态的可能性?

​ 典型用户3的出现会引入大量新的典型用户1,典型用户1在经历一段时间后会逐渐变成典型用户2。若想提升用户量,吸引足够的典型用户3会是一个很好的选择,而是否能将典型用户1成功转化为典型用户2则要依赖自身硬实力的强弱。

产品的子产品,以及其他相关产品之间是否存在一定的关系?是否有利用各个产品特性之间的相互关系二次构成产品生态的可能性?

​ 目前洛谷仅有“洛谷网校”这一个相关产品,而且就调研结果来看其用户量较低,没有存在感,笔者认为这是必然的。作为一个面向竞赛的刷题网站,从前面典型用户的分析可以看出,多数用户在现实中都有成体系的课程进行学习,根本不需要OJ来提供不知道效果如何的网课。关于这一部分,我认为洛谷可以寻求与一些竞赛强校达成合作,上传其相关课程,会比现在的效果好的多。(当然能不能合作就是另一回事了

1.3.4 产品规划

你要在当前软件的基础上设计什么样的新功能?为何要做这个功能,而不是其他功能?为什么用户会用你的产品/功能?你的创新在哪里?可以用NABCD分析。如果你是项目经理,可以招聘6个人,并且有4个月的时间,你认为应该如何配置角色(开发,测试,美工等等) 才能在第16周如期发布软件的改进版本,并取得预想中的成绩。请为你的团队设计16个周期每周的详细规划。

​ 在设计新功能之前,笔者认为应该先对已有的一些模块进行重构和足够的测试。虽然洛谷核心功能相关模块没有太大问题,且已经经历过长时间的上线运行,但其一些附加功能则显得有些赶工的痕迹,下图1是洛谷用户个人设置的安全设置页面,可以看到其前端表单部分结构混乱,按钮甚至都没对齐(这页面跟我上学期数据库大作业赶工程度有的一拼),前文中的Bug1的出现也印证了这一观点。

图1 洛谷个人设置界面的赶工痕迹

​ 就新功能的设计上,笔者认为洛谷目前需要一个有效的变现功能,脑袋一拍就想出了家校协作功能(太恶毒了)。具体而言,新增家长这一用户类型,可以和学生账号进行绑定并加入学校团队,可以查看学生账号的做题情况,给出薄弱点分析,在此基础上对家长的部分功能进行收费。若从NABCD各个方面对此功能进行分析:

  • Need:家长往往是高中生参加信息竞赛的重要推手,因此家长需要一种方式来监督学生的学习过程,看到其学习效果,家校协作功能将填补这一方面的空白。
  • Approach:家长往往喜欢看结果而不喜欢看过程,因此展示该校团队中所有学生近期的做题情况将是一个不错的方法。
  • Benefit:通过这个功能家长能够及时跟踪学生的学习状态,从某种意义上来说也能防止部分学生在机房摸鱼。(还能变现
  • Competitors:虽然文化课方面家校协作已经烂大街了,多数学校都已经有固定的合作APP向家长展示学生的考试成绩,但竞赛方面似乎目前还没有这种产品。
  • Delivery:可以通过学校竞赛教练对这一功能进行对家长的定向宣传,家长免费试用部分功能后再引导付费。

​ 对于这一功能,我会设置一位PM,一位美工,一位前端开发,两位后端开发,一位测试人员来完成,具体16周的详细规划如下:

  • 第一周:通过在部分学校发放调查问卷等方式调研用户需求,讨论确定需要开发的具体功能。
  • 第二周:继续讨论敲定具体功能,PM形成初步设计文档,美工开始设计LOGO等重要素材。
  • 第三周:前后端分别敲定所用框架和实现技术细节,PM设计前后端接口,美工开始设计界面。
  • 第四周:在已有用户基础上迭代实现家长这一用户类型,进行单元测试。
  • 第五周:实现家长账号与学生账号的绑定功能,进行单元测试。
  • 第六周:实现学校团队对家长账号的管理功能,进行单元测试。
  • 第七周:初步完成所有基本功能,进行集成测试。
  • 第八周:初次部署,发布第一次 \(\beta\) 测试,在部分学校进行试点,收集功能性反馈。
  • 第九周:讨论用户反馈,修改需求文档,敲定实现细节。
  • 第十周:初步实现用户反馈的部分功能,进行单元测试。
  • 第十一周:继续实现用户反馈的部分功能,进行单元测试。
  • 第十二周:完成新增的所有功能,进行集成测试。
  • 第十三周:进行完整的系统测试,修复功能性Bug。
  • 第十四周:再次部署,发布第二次 \(\beta\) 测试,在更多的学校进行试点,收集关于付费范围的反馈。
  • 第十五周:讨论并确定修改非会员家长用户的权限范围和会员定价等内容。
  • 第十六周:根据用户反馈进行少量修改,发布上线。

二、LeetCode

2.1 调研与评测

​ 力扣(LeetCode)是一个专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的 IT 技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。

​ 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

—— LeetCode官网

​ 笔者在最近才接触到LeetCode平台,且身边有许多同学由于求职的需要选择了在LeetCode上进行相关题目的练习,是什么造成了这种现状呢?下面我将结合自己和周围同学的使用经历,从基本功能、用户与场景、bug与改进等多方面对LeetCode进行调研与评测。

2.1.1 软件功能

  • 基本功能:在线搜索、查看、编辑与编译(下图1)、提交、评测题目,查看评测记录
  • 社区功能:查看与上传题解,讨论区,面经分享
  • 求职功能:模拟面试(下图2),面试,企业题库
  • 变现功能(未深入体验):力扣PLUS会员
  • 特点功能:每日一题,双语显示题目

​ 下面以图片形式展示其中部分功能:

在线编辑与编译功能

模拟面试功能

2.1.2 优缺点与用户体验

​ 笔者认为,LeetCode基本功能完整,差异性功能具有吸引力,用户体验较好,但是商业气息过于浓重,可能引起部分用户反感,具体解释如下:

  • 题目量大且针对性强,LeetCode上的题目均为真实企业面试中很有可能出现的方法或原题,用户针对性刷题效果较好。
  • 基本功能相关的界面均较为美观,在线编辑器偏好设置丰富,但是首页过于花哨。
  • 对于PLUS会员,能看到每一道题的出现率,能建立多题面试,用户体验较好。普通会员则相对一般。
  • 评测速度较快,有相对于全站所有用户的时间和空间排行。
  • 商业气息太强,一打开就让登录,不登录不让看,登录后随处可见锁符号,引导用户消费成为会员。
  • 有IDEA插件,可以不打开网页,很方便的刷题。

IDEA的LeetCode插件

​ 此外,笔者通过采访一些其他同学来直观感受洛谷在多个方面的优缺点和用户体验。

采访1:Zou同学

​ Zou同学由于准备实习的需要,最近经常于LeetCode上进行刷题练习,笔者主要就其最近对LeetCode的使用情况进行采访,文字记录如下:

Q1:最初是为什么开始使用LeetCode的?最常使用什么功能?

A1:准备面试,大家都说LeetCode可,就去试了试。一般只用来刷题,每日一题整挺好。

Q2:你认为LeetCode有啥优点?缺点?最大的特点是啥?

A2:优点是可以在线编辑和编译,和面试时比较像。缺点是很多功能都要付费,爬。

Q3:你认为LeetCode有什么改进空间?或是最需要添加什么功能?

A3:加点别的题,比如数据库,网络等方面的。

Q4:有用过其他类似平台吗?有什么主要区别?

A4:用过牛客,牛客面试方面做得更好,经历的线上面试也基本都是在牛客。

2.1.3 Bug与改进意见

​ 以下 bug 发生的环境均为:

  • 操作系统: Windows 10, 18363.1440

  • 浏览器:Microsoft Edge, 89.0.774.63

Bug1: 随机开始题目的权限问题

  • 问题描述:非会员用户点击“随机开始”按钮后,有一定概率跳转到没有权限查看的题目。

  • 可复现性:经常(50次随机跳题中出现13次无权限查看的情况)

  • 操作步骤

    • 在首页点击”随机开始“按钮,随机进行一次跳题,题目正常显示。
    • 在题目详情界面点击”随机一题“按钮,随机进行一次跳题,题目无权限查看。

无权限查看题目
  • Bug分析
    • 可能原因:随机跳转题目仅生成了随机数,没有做对应的权限检验。
    • 严重性:
      • 系统功能:两星,中等频率影响基本功能,但后果不太严重。随机到没有权限查看的题目会影响到其作为题库的基本功能——刷题,但是用户可以再次随机跳题以刷新,功能上的后果不太严重。
      • 安全性:零星,没有任何影响。
      • 用户体验:五星,对多数用户都有影响,且频率较高。并且经常出现的“升级力扣PLUS会员解锁题目”类似的提示会大大降低部分不喜欢引导付费的用户对产品的评价,造成用户的流失。
    • 改进建议:
      • 在随机跳题之前增加对用户权限的检查,若用户无权限查看该题则再次随机跳题。

Bug2: 随机开始题目的范围问题

  • 问题描述:在“多线程”等其他题库中随机跳题时,会随机跳到主站题目。

  • 可复现性:频率极高(10次随机跳题中出现9次跳转到其他题库的情况)

  • 操作步骤

    • 从LeetCode首页进入“多线程”题库,可以看到该题库共9道题(图1)。
    • 点击“随机开始”按钮,进行一次随机跳题,其确实为多线程题库中的题目。
    • 点击“随机一题”按钮,再进行一次随机跳题,发现跳到了“算法”题库中的题目(图2)。

图1

图2
  • Bug分析
    • 可能原因:迭代开发“多线程”等新题库时,简单的将题库加入了原有的算法题库,仅在第一次随机跳题时(多线程题库中的按钮)限制了范围,而忽略了题目详情页面的随机跳题按钮的范围限制。
    • 严重性:
      • 系统功能:四星,极高频影响非核心功能,且后果较为严重。虽然随机跳题不是核心功能,但这个Bug使得非“算法”题库的其他题库基本上不具有随机跳题功能,只能依次刷题。
      • 安全性:零星,没有任何影响。
      • 用户体验:三星,对少数用户有影响,但频率较高。使用LeetCode刷非算法题的用户量较少,此Bug对主站用户基本上没有影响。
    • 改进建议:
      • 在底层将各题库完全分离,随机跳题时仅在该题库内跳转。

2.1.4 总结与评价

​ 作为一个商业网站,LeetCode定位清晰,功能完整,且Bug较少,但是笔者个人不喜欢消费过强引导的软件,因此评价为 d)好,不错

​ 采用邹欣老师给出的表格,对其定量评价如下:

类别 描述 评价 评分(满分10分,及格4分,很差-3分)
核心功能 分析三个核心功能,功能设计和质量。 定位清晰,功能完整 10
细节 有什么为用户考虑的细节? 题目有可隐藏的多条提示 8
用户体验 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告) 广告、弹窗过多,整个网站透露出一种“快给我打钱”的氛围 0
辅助功能 一些辅助功能如皮肤等 代码编辑器偏好设置完整 10
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 有官方题解 8
软件的效能 占用内存, 启动速度, 内存泄漏情况 动画流畅,页面加载速度快 10
软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 页面缩放支持较好,交互体验较好 8
成长性 记住用户的选择, 适应用户的特点,用户越用越方便 每日一题存在智能推荐系统,可惜的是每日就只有这一题 8
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 提示信息明确 8

2.2 分析

Q1:使用此服务的所有功能,估计这个软件/网站/服务做到这个程度大约需要多少时间?(团队人数6人左右,计算机大学毕业生,并有专业UI支持)

​ 笔者没有开发大型软件的经验,给出的预估也是瞎猜。完成基础页面和功能(注册与登陆,题目上传与查看)约两周,完成核心功能(评测机的编写和提交模块)约两周,完成在线IDE约一周,之后完成社区功能(题解,讨论区)约一周,做集成测试约一周,留一周余量进行Bug修复,此时已经完成其作为题库的全部功能,之后再完成模拟面试约一周,面试模块约两周,竞赛模块约一周,学习模块约一周,集成测试和系统测试一周,留一周余量进行Bug修复,共约四个月可完成目前所有功能。当然,这里的估计只针对现有功能的前后端编写,不包含上传这么多题目和官方题解。

Q2:分析这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几?

​ 对于LeetCode的优点在前文已经有了详细的介绍,类似软件将在2.3节中介绍。就整体质量而言,我认为LeetCode在同类产品中排名第一。

Q3:从各方面的问题,推理出这个软件团队在软件工程方面可以提高的一个重要方面(具体建议)

​ 《构建之法》在8.5节中给出了功能的定位和优先级的相关概念,并给出了对待不同优先级的功能和不同优先级的需求的处理方法,分别是“维持、抵消、优化、差异化、不做”。而在笔者看来,LeetCode似乎做的功能有点过多了,其对标牛客网的面试、面经等功能没有做出差异化,因此没能取得一定的市场份额,还不如不做。在笔者看来,面试地点的选取对于LeetCode而言不那么重要(只要用户还在LeetCode刷题就行,在别处面试无所谓),题库才是LeetCode应该花大精力去继续优化的“杀手功能”。

​ 因此,笔者认为,LeetCode应该集中精力继续优化刷题体验,可以从提高题目质量入手(很多同学反映LeetCode目前的题目有些同质化),也可以对题解进行审核及筛选(现在很多的用户题解应该放在讨论区才对)。

Q4:你在第一部分发现的bug,为何软件团队不能在发布前修复?他们是不知道,还是有意不修复?你觉得是什么原因?

​ 虽然LeetCode首页将“算法”、“数据库”、“Shell”、“多线程”等内容单列,但实际上其共用同一个题库,笔者认为这是造成前文中两个Bug的原因。具体而言,可能是因为刚开始LeetCode只有算法题,在对市场进行调研后决定加上其他题库,但是需求分析不详,采用“做了再改”的开发方式,直接将新的题目放入了现有的算法题库中。

2.3 建议与规划

2.3.1 市场概况

首先市场有多大?其次直接的用户有多少?潜在的用户又有多少?

​ 近年来计算机相关行业就业压力不断加大,应届毕业生对于面向求职的题目的需要不断增加,企业也希望能够找到更优质的毕业生,2020年的疫情又使得线上面试成为一种新趋势。因此可以说市场覆盖计算机相关专业的全体高校学生和相关企业HR,其中直接用户是已经决定求职的学生,潜在用户是其他决定继续深造的学生。

2.3.2 市场现状

目前市场上有什么样的产品了?

​ 目前面向求职的其他刷题和面试网站主要是牛客网。

上述产品的定位、优势与劣势在哪里?产品之间呈现什么样的关系,哪些为竞品关系?以及竞争中的各方态势如何?

​ 牛客网商业气息与LeetCode相比犹有过之,牛客网主要提供笔试、面试双重备战,投递简历和进行面试,面经分享等功能,题库功能也是直接按照企业题库分类(好像用牛客网刷题的人不多),因此感觉上牛客网与企业合作更多,是它的最大优势。牛客网与LeetCode竞争关系严重,LeetCode最近赶出来的面试功能估计也是为了分在线面试这块蛋糕。

牛客网的题库首页

2.3.3 市场与产品生态

这个产品的核心用户群是什么样的人?典型用户是什么样的?学历,年龄,专业,爱好,收入,表面需求,潜在需求都是什么?

​ 结合笔者自己和其他同学的使用经历,构造了以下两种典型用户:

典型用户1

  • 姓名:丁诗妤

  • 身份:某大学大三学生

  • 动机与目的:寻求实习机会,通过刷题准备面试

  • 使用环境:自习室,个人PC

  • 偏好:有成体系的知识介绍部分

  • 典型场景:丁诗妤投了几个简历,将在下周面试,于是这周丁诗妤一遍狂补操作系统、数据库等理论知识,一边在LeetCode上刷对应企业常考的算法相关题目。

典型用户2

  • 姓名:李翊泷

  • 身份:某互联网企业HR

  • 动机与目的:进行线上简历筛选和面试

  • 使用环境:工位,PC

  • 偏好:能按条件筛选用户简历,有良好的面试体验

  • 典型场景:早上李翊泷来到工位,自动并手动筛选简历后向几位求职者发送了邮件以敲定面试时间,随后打开面试模块面试当日求职者。

​ 其中,LeetCode的核心用户群是典型用户1。

产品的用户群体之间是否存在一定的关系?是否有利用其相互作用二次构成特定用户生态的可能性?

​ 典型用户1在工作数年后可能成为企业相关职位的面试官,转变为典型用户2。因此面试和模拟面试模块在典型用户1的求职过程中留下良好的影响显得比较关键。

产品的子产品,以及其他相关产品之间是否存在一定的关系?是否有利用各个产品特性之间的相互关系二次构成产品生态的可能性?

​ LeetCode目前还经常举办比赛,可以通过与企业合作设置比赛的方式达到企业和求职者双赢的目的,提高典型用户1向典型用户2的转化率。

2.3.4 产品规划

你要在当前软件的基础上设计什么样的新功能?为何要做这个功能,而不是其他功能?为什么用户会用你的产品/功能?你的创新在哪里?可以用NABCD分析。如果你是项目经理,可以招聘6个人,并且有4个月的时间,你认为应该如何配置角色(开发,测试,美工等等) 才能在第16周如期发布软件的改进版本,并取得预想中的成绩。请为你的团队设计16个周期每周的详细规划。

​ 在设计新功能之前,笔者认为应该先提高现有题目的质量和数量。具体而言,对于主站的算法题目,需要根据所用方法或算法进行一定程度的去重(至少不能出现完全换皮的题目),而对于“数据库”,“多线程”,“Shell”等新题库,则需要搜集更多题目以进行扩充。

仅有9道题的多线程“题库”

​ 至于新功能,LeetCode首页已经够乱了,别加功能了,倒是应该先删功能。

posted @ 2021-03-31 08:50  Gottfriede  阅读(1522)  评论(2编辑  收藏  举报