Loading

弹射臧否,擘肌分理——案例分析作业

项目 内容
这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健)
这个作业的要求在哪里 案例分析作业要求
我在这个课程的目标是 提升工程能力和团队意识,熟悉软件开发的流程
这个作业在哪个具体方面帮助我实现目标 分析比较现有软件,全面了解软件工程原理的作用

Leetcode

使用评测

基本功能和使用

初次登录,随便开了一道题,就有一步一步的入门教程,把整个界面给用户呈现地很全面,代码编写只需要实现一个函数,评测界面也比较简洁。

基本功能还包括讨论区的各个分区、题目的题解和讨论、编程比赛、模拟面试等等,就不一一截图了。还有两个全新功能,就是在线面试和 playground,在线面试感觉是为疫情准备的,不过好像疫情已经好转了许多,用途似乎会小一些:

playground 分两个,一个是正常写代码,还能添加一堆奇奇怪怪的函数,另一个是 react,看起来是个模拟前端的东西。

优缺点分析

首先,作为一个“面试题库”“基础算法题库”,力扣在这方面做得是相当出色的。从首页的“名企面试题”的讨论区大分类、推荐区对求职面试的讨论推荐,到题库中的“LeetCode 精选算法 200 题”、剑指 Offer 题库、程序员面试金典题库,再到讨论区“求职面试”讨论区块,到直接的和题库、讨论同级的“求职”板块,再到新开的线上面试功能,整个网站的意图非常明显:助学基础算法,助力面试。

题目的查看编写、提交界面也做的十分人性化,答题只需要填写一个函数即可,也很方便,不需要每个题都写一遍头文件了,比较契合大部分面试的要求。

讨论区也出人意料的活跃;题解也极其丰富(相较于洛谷等网站多出了不止几十几百倍)。但仔细去看,基本都是一些灌水、无意义帖,钓鱼评论竟是头条精选评论?而且题解也大多是一堆格式乱七八糟、代码极其丑陋的东西。直接跳过解题思路上代码的我真是不懂为啥要放到题解的最上面。

尝试发了一篇题解,没有任何审核就被通过了。灌水审核机制堪忧啊(左图)。不过大部分题都有“官方”题解,无论是解题思路还是格式排版都非常规范,这个需要赞一手。只是左边对应视频太多信息量太大导致不知道如何进行选择,这个信息量大不仅仅在题解、讨论出现,整个软件的界面都有这个问题,尤其是不该出现的地方出现各种各样的站内推广

还一个问题就是”超过了多少人“的设置。没当过一个题之后都会显示自己的速度、内存占用超越了多少人,而这似乎是讨论和题解的谈资。于是,不关注代码是否丑陋、实现是否流畅,许多人都在题解区晒自己超越了 \(98\%,99\%\) 的人,关注点从纯的算法转移到这里似乎有点舍本逐末了再次联想到敝校士谔书院的数据结构竞速大作业

有两种语言显示是一大亮点,了解了一下才知道整个网站是从 LeetCode英文站 汉化过来的,几千道题这样过来工作量似乎蛮大的。

很绝的一点就是力扣反馈。无论是有关于题目的 github issue有关网站的意见反馈讨论区,还是bug report或问题(在后面的 bug 分析详细说明),响应速度都极快,往往一日、甚至半日之内就可以给出完整的回复。难怪前些年听说力扣中国做的有点垃圾,但现在用户体验却这么好,反馈机制和效率方面有不可磨灭的功劳。

采访

针对不同用户群体,我采访了三位同学 A,B,C。

A 同学使用过 LeetCode,有准备面试的需求,但没有打过 ACM 等程序设计竞赛。

Q:你为什么使用 LeetCode?

A:为了巩固算法知识,不同难度梯度的算法题能有效帮助我训练算法能力;还可以为面试而准备,多样的面经以及面试算法题,可以快速提高我针对面试问答的能力,并让我更熟悉面试时的算法考察。

Q:这款软件有什么优点呢?

A:题目只需要完成关键核心算法即可,节省时间;支持多种语言;可以根据算法分类训练。

Q:那这款软件有什么缺点呢?

A:页面广告较多,容易不小心点到广告;只针对每个题给出了详细的解答,但是缺少对某个类型算法的系统教学;非会员权限较少,而且会员费用高。

Q:你觉得这款软件有什么改进空间呢?

A:降低主页面广告占比;增加算法、OS等计算机理论课教学内容。

B,C 同学都没用过 LeetCode,都是参加 ACM 竞赛的大佬。

B 同学:

Q:你为什么使用 LeetCode?

A:。。。(不是你叫我试用的么)

Q:初次上手,你感觉这款软件有什么优点呢?

A:写题、提交都很流畅,而且在线 IDE 除了没有一键格式化之外挺好用的。

Q:初次上手,你感觉这款软件有什么缺点呢?

A:有效信息不突出,初始界面和题解都有这个问题,放了一堆没有重点的东西,让人抓不到重点,不知道该点什么地方;还有就是刚注册没绑定邮箱进入题目的时候,点击绑定邮箱会在本页跳转到绑定邮箱界面,而且绑定后无法返回本界面。还有就是我 Ctrl+ 左键题目名为啥不能在新页面跳出来......(老新标签页选手了)

Q:你觉得这款软件有什么改进空间呢?

A:需要把信息量适当缩减一些,让重点更加突出。

C 同学:

Q:你为什么使用 LeetCode?

A:有 cf 做什么力扣[狗头],还不是叫你给逼的

Q:(嘘!)初次上手,你感觉这款软件有什么优点呢?

A:我感觉用起来还行啊,整体用起来感觉还好,功能也比较完善

Q:初次上手,你感觉这款软件有什么缺点呢?

A:难度分级太模糊了;题解太冗余了吧,这么多谁 tm 看啊

Q:你觉得这款软件有什么改进空间呢?诶,,诶你怎么跑了!

评分

定性来说,我给这款软件 d) 好,不错 的评价。

作为一个主要对象是准备面试和学习基础算法同学的网站,尽管存在着很多题解、讨论以及界面的冗杂程度等问题,但用户体验整体来说非常不错,通过官方认证题解也可以学到不少基础算法。

定量来说,就部分采用邹欣老师这里给出的评分表格:

描述 评分
核心功能 分析三个核心功能,功能设计和质量。 10
细节 有什么为用户考虑的细节? 9(没发现大的问题就说明细节考虑比较周全)
用户体验 当用户完成功能时,不干扰用户 9
辅助功能 一些辅助功能如皮肤等 4(只有题目区有 Dark 模式,还是 Beta 版)
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 8
软件的效能 占用内存, 启动速度, 内存泄漏情况 8(评测偶尔会比较慢)
软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 8(小问题放在 bug 分析部分)
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 10
自选评分项目 问题反馈机制 10
自选评分项目 排版和重点分布 -3
总分 73

功能性 Bug

LeetCode 没什么特别严重的功能性 bug,但如果吹毛求疵考虑用户体验角度还是存在一定问题的。

以下问题均在 Google Chrome 89.0.4389.90 上出现。

Bug 严重性表格:

星级 描述
五星 严重影响用户体验,或者严重导致服务器崩溃或者功能无法使用的 bug。
四星 较严重地影响大部分用户体验。
三星 较严重地影响小部分用户体验,或者较轻微地影响大部分用户体验。
二星 较轻微地影响小部分用户体验,或者较小地影响大部分用户体验。
一星 对少部分用户较小地影响用户体验。
零星 对用户使用没有任何不利的影响,只是一个小问题。

收藏状态未更新 [稳定复现]

复现步骤
  1. 收藏夹中点击一个已收藏的主讨论(不是讨论里的评论),点击星号取消收藏,并进入该讨论界面。

  2. 点击后退按钮(Chrome 的 Alt+左箭头),再点击前进按钮(Chrome 的 Alt+右箭头)

  3. 仍然显示“已收藏”;再次点击则会显示弹窗“观点不在收藏列表或已被删除”

Bug 分析
  • 成因:问题比较明显,尽管后端更改了收藏状态,但是服务器缓存没有更新,导致此问题。

  • 严重性:零星(不影响任何用户体验,只是小的显示问题)。

  • 改进建议:在判断加入收藏夹的时候加一句更新 session 之类的即可。

Bug Report

已经提交报告,而且在当天就得到了答复(这回复速度爱了,不过看起来程序猿并不准备修)。

收藏功能用户体验

复现步骤
  1. 收藏一篇主讨论
  2. 在收藏夹点击这篇文章的星号,会在取消收藏的同时会点进去这一篇讨论文章。
Bug 分析
  • 成因:感觉是照葫芦画瓢学前面评论和浏览量的时候,光换了个图标,没有取消掉重定向。总感觉这是个有意为之的 feature,但如果是个 feature 也是个影响用户体验的 feature不排除是为了加浏览量

  • 严重性:二星(轻微影响用户使用体验)。

  • 改进建议:只取消个收藏就行了,把重定向去掉。

面试相关用户体验 #1

问题描述

面试界面无法结束面试或者返回上一级,需要在面试主界面点击结束。

Bug 分析
  • 成因:这个应该是设计页面时疏于考虑了。

  • 严重性:三星(面试官无法结束面试,只能关闭窗口)。

  • 改进建议:添加到不容易误触的地方一个结束面试按钮,比如右上角代码和聊天之间的附近。

面试相关用户体验 #2

问题描述

编辑题面按钮不仅在题目最底端,而且冗余,有左右两个按钮。

Bug 分析
  • 成因:设计赶工,没有精心打磨、处理用户使用需求。

  • 严重性:二星(冗余没有过多影响用户体验,但题目上端没有不太合适)。

  • 改进建议:将编辑题面按钮提到最上面,而且仅有一个,或者上面一个下面一个。

面试相关用户体验 #3

问题描述

题面编辑界面不支持 markdown

Bug 分析
  • 成因:估计是疫情赶工产品,细节方面打磨比较粗糙。

  • 严重性:三星(这年头还有人用 html 写题面吗)。

  • 改进建议:给这个编辑题面加个 markdown 转换器。

面试相关用户体验 #4

问题描述

面试筛选没有“全部”按钮。

Bug 分析
  • 成因:应该也是疏忽了用户需求的缘故。

  • 严重性:二星(面试官筛全部的用处不太大,但也会影响体验)。

  • 改进建议:和其他按钮类似,加个全部按钮。

分类用户体验

问题描述

“题库”界面的 UI 设计问题,一个大按钮对着几个小字。

Bug 分析
  • 成因:审美问题;或者排版不够用心;或者为了迎合后面两本书的图片。

  • 严重性:二星(影响观感,少量影响使用体验)。

  • 改进建议:加大字号、减小框框的大小。后面两本书可以一个高度对应两个(一个对应算法、数据库;另一个对应 Shell、多线程);或者可以将内容从书的封面照片改为文字。

题库位置用户体验

问题描述

写博客的时候恰好要左右分屏,窄页面在上方显示“热门推荐”的内容(这时我才发现有这个分类的功能),长页面显示较为靠下的右侧边栏(再往下看了看才发现标签分类),而上方充满了没有必要的东西。

Bug 分析
  • 成因严重的设计和排版问题。其实设计排版问题就是整个网站站内推广严重的本质。题库就是题库,出现什么面试、求职记、编程大赛、周赛专场等等的推广不合适。每日一题可以有,但一进题库页面就能看到推荐题单和算法分类能够保证用户的基本体验。人进一个网站是有视觉过滤的,右上角的三个站内扩展会自动被屏蔽掉,这不是这个网页的重点,只能起到一个占位的作用。

  • 严重性:四星(因此用户在题库界面仅能体验到题库,而很难找到有用的算法分类等功能)。

  • 改进建议:题库就是题库,不要加竞赛之类的 label,建议全部删除或者下移,每日一题相关放在右上角;或者把每日一题搞掉,总之进题库界面第一眼必须看到算法分类和题单,否则这俩好功能有点白设计了的感觉。

题目难度小吐槽

问题描述

只有简单、中等、困难三个级别,让打惯了 Codeforces 的笔者看起来很不习惯。

Bug 分析
  • 成因:可能确实因为题目都比较简单,不好设置难度梯度。

  • 严重性:一星(可能对大部分算法面试的人来说这个并不太重要,或者不太关注;A 同学也表示对此并不太在意)。

  • 改进建议:(如果可能)将难度划分得更加细致一些,只有三个等级让人很难有提升的感觉?

软件分析

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

    A:没做过项目,也没人来一块做 Wide-band Delphi 方法(《构建之法》P278),所以以下都是胡乱分析。既然有专业 UI 支持,那就不考虑 UI 设计时间了。一周时间规划区块划分(题库、评测、题解、讨论、评论、竞赛、用户权限、以及各种关系等的数据形式和增删查改接口划分);两周搭建 MVP 支持少量功能并进行集成测试,整改后大概三到四周逐渐添加收藏、订阅、每日一题等功能,最后集成测试,如果是全部人都能够全身心投入的理想情况下,大概两三个月可以完成基础内容(不包括面试、playground 等新内容)。如果要搜集题面、每个题都加个官方题解,可能需要更多的时间,但那可能不是工程师的事了。

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

    A:类似软件挺多的,包括同样支持面试题目、但也支持竞赛题的牛客,同样难度不算特别大但题目分级更丰富、题目也更有趣的Codewars学习算法以及同样有各种题目的GeekForGeeks,等等。洛谷和力扣不算竞争对手,他们的受众不同

    力扣对于大部分这种网站的优势就在于:是中文的。至于其他方面比如难度梯度、界面美观度、题目丰富度、有大量的 OJ 可以碾压力扣(上文也分析过),但因为他们大多都是英文网站,没啥竞争力。有竞争力的是牛客,牛客竞赛面试两手抓,一边发展竞赛的关系,一边还不忘发展各种面试题。面试题涵盖面很广,从计算机专业知识到数据结构算法,应有尽有,这点力扣虽然也在开发“数据库”“多线程”之类考题,不过还是暂时无法超越。但牛客有个地方做的不如力扣就是,前端略显粗糙,初注册如果不仔细研读往下翻翻题库,往往不知道从何做起;同时牛客的题解也没力扣这么全,主要还是需要刷题者去上网自行搜索学习。而力扣直接提供一个明显的带官方题解的题库,给小孩喂奶一样的教学,刷就完事了。所以很难判断力扣和牛客孰优孰劣,各有千秋,那就并列第一吧。

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

    A:前端设计和用户调研可以再做的深一点。不仅笔者自己,很多身边的同学都反映力扣界面抓不住重点,这是一个非常严重的设计问题。功能可以做很多,但没必要每一个都摆个圆角矩形出来,做界面不是光要给经理看有多少功能,而是给用户去使用,对于用户调研还需要下一番功夫。另外,题库广度可以更加丰富一些,这边可能跟软工不太搭界,但是仅仅有数据结构和算法方面的题目还是显得略有欠缺,如果有其他部分的题目放在题库里更好,这其实也是用户调研可以得到的结论。

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

    A:收藏状态未更新可能不易发现,也不太影响用户体验,没发现也没必要修复(测试不充分或问题过小);取消收藏点进讨论大概是因为有意不修复,认为无所谓(对用户测试不完备);四个面试相关都应该是因为面试功能比较赶工,需要快速做出成品,细节方面考虑较少(对用户测试不完备);分类可能是从原站翻过来的时候没太在意直接拿过来了,后来加入两本书恰好高度相同(具体设计质量不高);题库位置感觉是搬过来的时候增加的 feature (原站没有每日一题日历之类的部分),没考虑到这种 feature 影响了用户体验(对用户测试不完备)。

市场规划

现在假装自己是力扣新项目经理。

市场分析:市场在整个计算机专业大学生。全中国的待毕业计算机系大学生甚至小部分专科生,只要有面试需求,无论是考/保研面试还是岗位面试,都是市场的直接用户。每年的潜在用户都是下一年待面试学生。

市场现状:目前市场上有的、有竞争力的产品就是牛客网。具体定位和优劣在上文软件分析的第二条 Q&A。竞品关系只有力扣和牛客存在的,没有别的产品存在竞品关系。牛客竞赛面试多方面都在发展,力扣专打一面,要把这个专注的优势打出来。

市场与产品生态核心用户群就是待面试、需要入门学基础算法的大学生。最核心应该是本科生,21-23 岁,计算机专业,表面需求是通过面试,潜在需求是找到工作或者合适的学校进行深造。用户群体之间通常是同学关系,而通常因为同时要报考面试,也会互相认识交往,使用的软件也一定会在其中进行传播。

产品规划:力扣的核心用户有一个特点,就是软件使用期短,面试完就走人了,所以题量不必太大但一定要精;但涉及面要广。按照 NABCD 分析。首先要满足用户的基本需求 N,把主站、题解、讨论区的排版搞好,减少站内广告,让每一个界面都专注于本界面的内容,用户可以迅速抓到重点。然后是兴奋需求 B,用户现有详细的算法基础上,增设计算机组成、操作系统、编译原理等计算机基础知识面试内容的题面和对应评测系统,满足用户的兴奋需求,给用户 Benefit。之后是竞争力 C,想要比牛客更加有吸引力需要做到两点:第一是做到他能做到的,第二是让他做不到的永远做不到。添加了兴奋需求 B 之后,他能做到的力扣已经都可以做到了(除了很多面试现在还是在牛客进行之外);但如果能够添加题解的审核、以及简易算法的大致介绍(而不是只能在特定的题目的题解里现学算法),以及对通过题目、学到新算法的奖励机制(要让用户体验到成就感),可以大大提升学习算法的针对性和效率,这一点可以参考 hihocoder,上面对于各种算法的介绍非常有趣,不过对于力扣的针对人群还是太难了,不能直接照搬。最后是市场营销 D,做好各个公众平台上的公关,开展一些算法训练营、和大公司合作开一些比赛之类的(不太懂市场营销...)。

项目经理:一个美工,一个开发一个测试,另外三个负责联系题目来源和题解审核。美工负责将各个页面设计地更加合理、干净利索,能让用户很快找到自己想要找的东西,或者发现有趣的特性。开发其实并不是很复杂,添加题解审核和新内容的评测就可以;可能花时间比较多的地方在于找题目来源和题解审核。第一周分析框架设计和美化方向并设计前后端接口,第二到四周的三周分别添加题解审核界面、新内容界面和评测部分内容,第五到七周进行题解审核、测试并反馈进行三次迭代,题目来源到了之后及时加入题库进行测试,大概加上题解审核在第八周整个框架就是可以完成的,但由于优秀题解的审核工作量比较大,应该需要很久时间,可能之后的时间大多用于此。如果说十六周出产品的话,可以邀请用户进行体验、反馈并迭代开发,并设计市场营销的手段。在此期间,可以考虑设计一些周边,获取知识付费的收入。当然这是在不考虑现有版本的情况下纯开发的规划,而且笔者没有任何项目经历,以上都是胡乱吹的,仅供一哂

Luogu

基本功能使用

这软件用了两年了,基本功能也用的比较熟悉了,如果非要要求截图的话...

基本功能:题目,评测,博客,讨论。(试炼场两年前还有,已经删了,改成了题单)

优缺点分析

优点很明显,功能非常丰富,而且前端用起来也很舒服,功能明确、重点突出(力扣,学学人家洛谷!)。每一道题都有算法标签、难易程度,对于每道题也有合适的题目格式和提交面板。题解审核非常棒,只有高质量题解才会被放在公共题解区,这是洛谷的一个巨大优势。洛谷有私人的专属博客,这也是一个加分项。题目的难度等级划分大部分也比较合理(紫题通常比蓝题难度高,但至于多数紫题不符合符合“省选+/NOI”这种难度的情况,这是用户为了提高信心获取成就感而评出来的等级,和实现无关)。然后还没有什么致命的 bug,大量评测记录评测起来也很稳定。

缺点是 bug 太多,下文会进行部分 bug 的分析,之后会对 bug 的来源和解决方式进行讨论,在此不再赘述。

采访

接受采访的是一位来自软件学院的不愿透露姓名的人工智能。

Q:你为什么使用洛谷?

A:锻炼自己的编程能力水平吧。别的地方的题目层次分得不是很明确,洛谷的分了几个阶段,对新手比较友好;软院算法的时候,因为洛谷可以按着知识点搜题,所以也对着上机的知识点刷过题。

Q:这款软件有什么优点呢?

A:题解,大多数题都有详细易懂的题解;反馈,能够清楚地知道自己过了哪几个点,也能够下载错误的点的测试集,方便调试;分类,按照知识点和难度搜索,方便了对特定知识的练习、根据自身水平选择题目;UI,做得挺好看的;社区,在社区与讨论板块里面能学到很多不懂的知识点。

Q:那这款软件有什么缺点呢?

A:感觉没啥缺点,硬要说的话我觉得在提交界面内嵌一个 web ide 可能会更舒服。

Q:你觉得这款软件有什么改进空间呢?

A:在提交界面内嵌一个 web ide 可能会更舒服。

评分

定性来说,我给这款软件 e) 非常推荐 的评价。

作为一个主要对象是参加 OI 的网站,用户体验整体非常好。小 bug 虽然很多,但瑕不掩瑜,整体的各种功能可谓应有尽有。

定量来说,就部分采用邹欣老师这里给出的评分表格:

描述 评分
核心功能 分析三个核心功能,功能设计和质量。 10
细节 有什么为用户考虑的细节? 9(没发现大的问题就说明细节考虑比较周全)
用户体验 当用户完成功能时,不干扰用户 9(有时候那个过题的星星会阻挡视线)
辅助功能 一些辅助功能如皮肤等 8(现在洛谷博客和主页居然都有皮肤了,赞)
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 9
软件的效能 占用内存, 启动速度, 内存泄漏情况 9(评测偶尔会比较慢)
软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 9(小问题放在 bug 分析部分)
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 10
自选评分项目 问题反馈机制 0
自选评分项目 排版和重点分布 10
总分 83

功能性 Bug

洛谷的功能性 Bug 可谓多之又多。

以下问题均在 Google Chrome 89.0.4389.90 上出现。

Bug 严重性表格:

星级 描述
五星 严重影响用户体验,或者严重导致服务器崩溃或者功能无法使用的 bug。
四星 较严重地影响大部分用户体验。
三星 较严重地影响小部分用户体验,或者较轻微地影响大部分用户体验。
二星 较轻微地影响小部分用户体验,或者较小地影响大部分用户体验。
一星 对少部分用户较小地影响用户体验。
零星 对用户使用没有任何不利的影响,只是一个小问题。

题单通过情况 Bug [稳定复现]

复现步骤
  1. (窗口 1)在编辑题单区,选择一些(这里是 7 个)已通过的题目“添加”,但不点击保存
  2. (窗口 2)任选一道已通过的题加入该题单并保存
  3. (窗口 2)查看题单,正确显示 1/1
  4. (窗口 1)进行保存
  5. Bug 1:回到题单信息,显示通过 1/7并在题目列表里显示七道题都有提交但没有通过
  6. 点击任意一道题,并返回题单信息刷新,恢复正常 7/7
  7. Bug 2:这时候把题全部删掉后,变成了 7/0
Bug 分析
  • 成因:删除浏览器 Cookie,仍然显示错误,排除浏览器缓存没有更新。频繁刷新没有变化,等几分钟刷新,就显示正常了。推断是题单功能实现耦合度大、实现和优化混乱导致的边界情况 bug,或者故意进行的、减少更改次数的优化(feature)。具体推测为:加入一道已通过的题目时对题单中通过数进行了更新,查看题单时更新题单状态为“已更新”,但只在添加题目到题单时添加了更新的判断,而在保存时没有作出判断;或者更新有一个很粗糙的 cd 时间。去年在做 OO 作业的时候也曾经因为优化性能的时候没有合理设计架构,导致出现了很多奇怪的 bug,只能够通过对拍筛出。
  • 严重性:二星(几分钟后就不影响正常使用,仅影响观感)。
  • 改进建议:小范围重构;或者多做一些测试,对每个方法进行一定的规范(如先验条件)。
Bug Report

已经提交报告(唯一的报告渠道就是讨论区“反馈、申请、工单专版”),不得不说洛谷的 bug 反馈机制真的比力扣差远了(毕竟用爱发电的网站),一直没有被回复。

在线 IDE 语法检测 Bug

问题描述

代码能正常编译运行,但还是显示红色波浪下划线。

Bug 分析
  • 成因:使用了配置失败的语法检查器(能正常自动缩进和 tab,说明基本功能正常;能够正常运行,说明只是文本编辑检查出现了问题)。
  • 严重性:三星(没什么人用在线 IDE 编程,基本是用来验证洛谷 IDE 上跑出来的运行情况)。
  • 改进建议:重新配置语法检查器,或者直接不用。

在线 IDE 语言选择菜单 bug

问题描述

在线 IDE 语言选择框的第一个选项飞出边界了。

Bug 分析
  • 成因:猜测是因为前端选取参照系失误,应该在内层 Panel 做参照坐标为 0,但做成了外层。

  • 严重性:二星(选择语言的时候才会遇到,基本用户体验没有影响过大,但大部分用户都会在这里选择语言)。

  • 改进建议:前端更改一下参考位置。

博客 markdown 渲染 Bug [稳定复现]

复现步骤

个人博客中的预览界面与实际渲染不统一,预览界面显示(左图)很正常,而实际渲染(右图)出问题;而且能观察到有一行正常的文字超出了边界。

Bug 分析
  • 成因:其中有不规范应用乘号数学公式的原因(这个之前配 hexo 博客的时候遇到过,通过修改 markdown 配置里的 escapeem 可以避免掉),但主要原因在于两处(预览和正式放出的) markdown 渲染方式不同。

  • 严重性:三星(写题解就会遇到的情况)。

  • 改进建议:统一 markdown 编辑器,统一为正式放出的渲染方式,便于用户根据渲染模式调整书写习惯。

讨论区分页跳转 Bug [稳定复现]

复现步骤
  1. 进入讨论区,看到 >> 形按钮;点击后,地址显示 page=20 ,而下方页码数字显示 7398;点击 7399,会蹦出到 6685 这个界面(继续点击跳转还会一直乱跳):
Bug 分析
  • 成因:应该根本原因是补丁过多导致边界情况大量被遗漏的问题。具体问题应该出在某一次对讨论区删除和”跳转到最后一页“的功能修复上,正常的链接仅链接到了 20 页(应该是想实现一个 20 页以后不允许访问,不允许顶起陈年老帖的功能),而 6685 是实际的讨论帖数。对于 pageforumname 的判断可能只对前 20 页有用,后面的就都乱掉了。

  • 严重性:二星(严重的功能性 bug,但对用户体验影响不大)。

  • 改进建议:为后续页面设置权限,并对“跳转到最后一页”按钮修改。

随机跳题 Bug [随机复现]

复现步骤

点击主页的“随机跳题”,有一定概率会跳到无效题目。在 150 次的随机跳题中,出现了 3 次右图所示情况。

Bug 分析
  • 成因:这个成因很明显,就是没有判断随机出来的页面对于用户有没有权限。

  • 严重性:二星(由于不存在权限的概率较低,而且可以重新随机跳题,对用户体验影响较小)。

  • 改进建议:添加一个用户权限检查,或者题目存在性检查即可。

评测 UKE bug [极少情况]

问题描述

同样的一份代码,前两次提交长时间 waiting,后变为 unknown_error颇有 OO 后端 status=0 长时间后变为 3 的感觉

Bug 分析
  • 成因:两种可能,第一种是恰好遇到测试节点服务器重启,第二种是评测脚本 SPJ 出现随机问题,第一种的可能更大一些。这学期 OO 维护系统评测的时候就遇到类似问题,因评测节点断开连接或者重启、以及评测脚本运行时间超出了后端熔断时间,都有可能导致评测异常。

  • 严重性:一星(出现频率低,影响较小,而且可以重复提交)。

  • 改进建议:后端可以加一个 UKE 检测、重测和刷新机制。

私信日期问题

问题描述

只显示日期,不显示年份,陈年老讨论也没有被区分出来。

Bug 分析
  • 成因:没考虑到用户需求。

  • 严重性:零星(几乎不影响任何使用体验)。

  • 改进建议:非本年的可以添加一个年份显示。

软件分析

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

    A:现在主要的功能大概有:可筛选的题库,带有推荐、评论和题解功能的题目,讨论区,题单,比赛,团队。一周定好大致前后端交互和后端、数据库结构,两周时间搭建主体逻辑(题目、评测、题解、题库和讨论) MVP 并进行测试;再用三周时间加入讨论区、比赛、题单、团队,用户反馈迭代开发几次,不包括现在的商业化功能的话大概十周左右。其实问题主要出现在后面的维护阶段,大量开发的时候没考虑到的情况可能出现,设计架构需要合理的修复这些问题的话需要更多的时间、人力投入。

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

    A:单说软件实现质量,质量不高。名列第几不好说,用完力扣觉得洛谷 bug 也太多了,同类产品更好的有 codeforces,牛客竞赛,LibreOJ,等等;但要是加上用户这一概念的话(无论是用户人数还是用户需求、用户体验),可以说是在中文系列中首屈一指了。

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

    A会开发的人多一点。洛谷开发的时候是一堆没什么经验的 OI 党进行的开发,代码质量想必不会很高。我在知乎上甚至找到过这样一篇文章,说自己啥都不会就被拉进去学前后端,可知洛谷或许是一群没有经过专业计算机技能培训的热情高涨的青年写出的软件。因此,缺乏一个整体良好的架构和体系,又缺乏合理的后端代码,竞赛和软件工程完全是两码事,如果让一群打惯了竞赛的人写软工,往往会思维定式:变量命名不规范,代码风格杂七杂八等等。因此要真的做软件,或许还是要重构(不过洛谷似乎已经在做了)。

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

    A:还是和上面一样的问题,本来代码的可维护性就低,修复 bug 的成本较高,而且对于一个前期用爱发电的组织,对用户正常体验影响不大的问题被这种团队忽略是很明智的选择。

市场规划

现在假装自己是洛谷新项目经理。

市场分析:市场是小初高中的所有 OIer,以及部分想要入门做题的大学生。直接用户和潜在用户都是下一年的潜在参与 OI 的学生。

市场现状:目前市场上针对竞赛党的产品有:国内有LibreOJ牛客竞赛51NodhihocoderVirtual Judge等等,国外有CodeforcesTopCoder等等。定位略有不同,比如 51nod 偏数论,hihocoder 偏算法教学,virtual judge 偏整合题目进行比赛,CF 偏向思维题,等等。LOJ 的界面和设计更有优势;牛客的赞助商更多能支持进行一些大型比赛,以及题目质量不低的周赛和月赛;hihocoder 的算法教学更加生动形象;vjudge 对题目的整合远远超过洛谷的题单功能;Codeforces 上有大量高质量题目。但洛谷比这些 OJ 有两点优势:第一点是功能综合;第二点是用户基数大。国内网站大多都不是商业目的的 OJ,所谓竞品较少,牛客是唯一商业化的网站、唯一竞品。

市场与产品生态核心用户群初高中的 OIer,以及部分想要入门做题的大学生、以及少量 ACMer。典型用户:17 岁,高二,需求就是通过洛谷进行刷题、获得 NOIP/省选/NOI 的好成绩。用户群体间往往是同学关系,或者同为竞赛党的关系。通过相互传播,可以二次构成特定用户生态。

产品规划首先不会做新功能,而是将现有功能做好。首先做大量测试和用户反馈。现有功能有大量漏洞,如很重要的笔记分享的博客功能;修复现有 bug 是一个很重要的事情。修复,实在不能修复就进行重构。然后由于有 OI 学习需求,考虑添加基础 OI 训练营,适当与商业挂钩。同时升级题单功能,将原有试炼场的功能改为算法精品题单;更新团队内容。这是因为,目前用户的基本需求 N 已经基本满足,需要满足的是其兴奋需求 B,即使用感受训练内容,以及校内团队功能的支持。

项目经理:三个测试,三个开发。首先对各部分进行全面详尽的测试(三周),其中每日进行例会进行 bug 分析,并传给开发,第一周测试测评、提交记录、讨论区、比赛等基本需求,第二周测试出现重大问题的博客、题解,以及题库和主页,第三周进行其他功能的测试(在线 IDE,图床,私信,搜索,通知等)。开发在前四周将过去的问题进行重构或修复,测试第四五周对题单功能进行测试,反馈给开发进行修改和重构,以及新功能的开发。第六周进行全部功能基本完善,提供给用户 beta 版本进行内测,同时在第七八周开发测试 OI 训练营内容。两个月的时间基本即可完成后端。前端没做过,因此估计不太出来时间。

关于以上所有估计的时间:由于我没有任何项目经历,只是单纯考虑开发经验丰富的程序员全程投入的可能实现时间,至于涉及到真实情况的真实时间大概要远超以上的预期...

posted @ 2021-03-25 16:03  Potassium  阅读(700)  评论(2编辑  收藏  举报