这个作业属于哪个课程 | 2021春季软件工程(罗杰 任健) |
这个作业的要求在哪里 | 案例分析作业 |
我在这个课程的目标是 | 合作开发出一个具有实用性的项目,并锻炼自己的工程能力 |
这个作业在哪个具体方面帮助我实现目标 | 对比评测各类软件,提升工程素养 |
第一部分:调研,评测
我选择调研的是Online Judge相关产品,包括洛谷以及力扣(Leetcode)平台。这些平台我都有过多次使用,对于它们的特点也有着一定的理解。
1.洛谷
1.1介绍
洛谷是创办于2013年,致力于为oiers/acmers提供清爽、快捷的编程体验的OJ平台。它不仅仅能够在线测题,还拥有强大的社区、在线学习功能。同时,许多教程内容都是由五湖四海的oiers提供的,保证了内容的广泛性。无论是初学oi的蒟蒻,还是久经沙场的神犇,均可从洛谷获益,也可以帮助他人,共同进步。
洛谷登录界面:
洛谷可以使用邮箱注册,并绑定手机号、微信号,账号的安全性很高,使用也很便捷。主界面比较简约,有题库、比赛、讨论等功能,同时,广告也占据页面相当大的空间(毕竟运营者也需要恰饭)。如果正常刷题的话,所有功能是完全免费的。具体的一些界面:
题库
比赛
讨论
1.2 使用体验
洛谷的使用体验是目前为止我使用过的OJ平台中最好的。首先,洛谷的评测机环境与我们平时编程的环境中最为接近(比如gcc、Java 8、Python 3),因此不容易出现环境上的玄学bug,并且报错的反馈信息也是比较易于理解的。大多数题目都支持主流的十几种编程语言(甚至包含神奇的文言文)。提交页面如图所示:
系统可以自动识别语言,也可以自选语言,能够开启O2优化。
对于测试点反馈的信息,能够清楚地看到所用时间及内存;对于第一个未通过的点,可以下载输入及答案(有次数限制),这样的机制对于经常滥用评测机的我是十分友好的,不会出现无从debug的情况。同时,对于下载测试点的限制也避免了不加思考的情况。
1.3 bug分析
bug序号:1
bug严重程度:★★★☆☆
bug描述:java代码评测bug
出现概率:5%
测试环境:windows10、Microsoft Edge浏览器
对于这样一段代码(即使用展示部分的代码),显然是没有任何bug的,但是我在之前提交时却出现了报错信息:
import java.util.*;
import java.Math.BigInteger;
public class Main {
public static void main(String []args) {
Scanner input = new Scanner(System.in);
int floor = input.nextInt();
System.out.print(BigInteger.ONE.shiftLeft(floor).subtract(BigInteger.ONE));
}
}
奇怪的是,过了一段时间之后提交,程序顺利通过编译并AC。我问过其他使用过洛谷的同学,其中一个也有过类似的经历。我认为是网站的java评测机制出现了问题。由于本网站主要面向NOIP以及ACM等比赛,使用的主流语言是C/C++,java评测平台不常维护,因此有时会出现bug(该bug只是偶尔出现)。所以为了获得最好的体验,最好使用推荐的C/C++语言。
bug序号:2
bug严重程度:★★★★☆
bug描述:跨服务器OJ平台长时间无反馈
测试环境:windows10、Microsoft Edge浏览器
出现概率:对于特定题目,出现概率99%,其余题目0%
洛谷上有一些题目来自于外网,评测时也需经过外网的OJ平台,但是有时这些题目提交时迟迟得不到反馈(示例来自于日本Atcoder的49题),而且概率还相当高。
我认为主要原因是因为将本地数据提交到原OJ平台的操作需要进行类似于kx上网的操作,而该操作是不稳定的,因此会出现数据无法提交的情况。
1.4 优缺点分析
洛谷对于编程新手来说十分友好,试炼场是一个很不错的适合新手村的地方。有各种板块的题,搜索、动态规划...包括树、堆等数据结构部分还有算法部分,都分得很详细,想练习哪一部分就可以针对这一部分练习。洛谷的题解筛选很严格,看每一个都有所收获。对于准备比赛的同学来说,时常举办的比赛也很适合参加(比赛的质量很高)。
在洛谷可以看到很多高级的数据结构和技巧,但是并不一定能够系统学会,毕竟那里的题解还是有些花哨或者说难以直入正题的。因此,如果想要提高工程能力,洛谷并不是一个好的选择。另外,洛谷的题目评级比较神奇,比如某些结论题,结论都很难推,但是有的被评成了省选有的只有普及,以及题目评出来的难度都有点过高。这在一定程度上影响了体验(特别是新手)。
1.5 量化评价及结论
核心功能 | 功能的设计和质量 | 8 |
细节 | 有什么为用户考虑的细节 | 8 |
用户体验 | 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告) | 10(从不弹出广告) |
辅助功能 | 一些辅助功能如皮肤等 | 5 |
软件的效能 | 占用内存, 启动速度, 内存泄漏情况 | 10(十分流畅) |
软件的适应性 | 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 | 10(任何平台都能操作) |
成长性 | 记住用户的选择, 适应用户的特点,用户越用越方便 | 8 |
结论:总体十分推荐
2.力扣
2.1 介绍
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。力扣提供的OJ平台可使得程序员得到大量训练。
力扣登录界面:
需要注意的是,力扣官网有力扣中国和力扣美国,应注意区分。可以看到,力扣中国的登录界面明显比洛谷要花哨很多,当然,广告也更多。力扣提供手机APP下载,可以让我们在手机端更方便地获取信息。
题库:
可以看出,力扣的题库覆盖面明显更广,并且侧重点也有所不同,更多地是偏向实用的题型(例如多线程)。
力扣的讨论区不仅有技术贴,还有人生经历以及心灵鸡汤。在力扣逛讨论区不仅能收获技术,还能对自己的认知产生影响,方便我们规划未来的道路。
2.2 使用体验
我尝试去做了多线程的一道水题,感觉和洛谷的体验有所不同。
做题界面:
可以看到,力扣的提交界面不仅可以提交代码,还可以预运行测试样例,检查环境是否有问题以及是否有低级错误,这样可以避免用户盲目提交,节省服务器资源。和洛谷不同的是,力扣的题目往往要求完成一个函数或者一个类,不需要给出整个程序,同时,代码的整体框架已经给出,不应被修改,因此在提交时应注意需求。
评测结果:
力扣的题目评测反馈可以看到执行用时、内存消耗,以及其他人的整体情况。遗憾的是,我们并不能获得测试数据的任何信息,这对于只求通过的我来说并不友好。
2.3 bug分析及调研
我的力扣使用经历不是很多,没有发现什么影响使用体验的bug。但是我一个同学(属于欧阳元新软件工程班的学生)在力扣上刷了很多题,遇到过不少bug,以下是对该同学的调研(遇到过的bug以及使用体验方面)。
2.4 优缺点分析
力扣的题目中面试题偏多,实用性很强。同时,力扣对于不同题型的分类非常精准,适合做针对练习。可以说,只要把力扣的某一类题型吃透,大多数大厂的面试题都不是大问题。力扣功能强大,支持在线调试,还支持在线模拟面试,提供企业面试真题。
不过,由于主要面向程序员,力扣的新手体验不是很好(我大一的时候注册过账号并尝试使用,然后就没有然后了)。而且,个人感觉讨论区的水平参差不齐,有些内容容易传递负能量。
2.5 量化评价及结论
核心功能 | 功能的设计和质量 | 10(功能很多) |
细节 | 有什么为用户考虑的细节 | 9 |
用户体验 | 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告) | 8 |
辅助功能 | 一些辅助功能如皮肤等 | 9 |
软件的效能 | 占用内存, 启动速度, 内存泄漏情况 | 8 |
软件的适应性 | 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 | 10(与本地操作系统完全无关) |
成长性 | 记住用户的选择, 适应用户的特点,用户越用越方便 | 10(采用了大数据推荐算法) |
第二部分:分析
1. 使用此服务的所有功能,估计这个网站做到这个程度大约需要多少时间(团队人数6人左右,计算机大学毕业生,并有专业UI支持)?
在这里使用结对编程项目的PSP2.1表进行评估(有一定修改)。对于洛谷,预计的工作量:
PSP2.1 | Personal Software Process Stages | 耗时(天) |
---|---|---|
· Analysis | · 需求分析 (包括学习新技术) | 2 |
· Design Spec | · 生成设计文档 | 3 |
· Design Review | · 设计复审 (和同事审核设计文档) | 2 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 |
· Design | · 具体设计 | 3 |
· Coding | · 具体编码 | 7 |
· Code Review | · 代码复审 | 7 |
· Test | · 测试(自我测试,修改代码,提交修改) | 5 |
· Test Report | · 测试报告 | 2 |
· Size Measurement | · 计算工作量 | 0.5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1 |
合计 | 33.5 |
洛谷的整体设计没有那么复杂,因此对于6人团队1个月多一点的时间足够设计出整个网站。当然,后续题库还需要不断地完善,这个过程会持续很长一段时间。
对于力扣,预计的工作量:
PSP2.1 | Personal Software Process Stages | 耗时(天) |
---|---|---|
· Analysis | · 需求分析 (包括学习新技术) | 4 |
· Design Spec | · 生成设计文档 | 4 |
· Design Review | · 设计复审 (和同事审核设计文档) | 3 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 |
· Design | · 具体设计 | 7 |
· Coding | · 具体编码 | 14 |
· Code Review | · 代码复审 | 10 |
· Test | · 测试(自我测试,修改代码,提交修改) | 10 |
· Test Report | · 测试报告 | 3 |
· Size Measurement | · 计算工作量 | 1 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 2 |
合计 | 59 |
力扣的整体设计远比洛谷复杂,我认为需要差不多两个月的时间。
2.分析这个软件目前的优劣(和类似软件相比),这个产品的质量在同类产品中估计名列第几?
力扣和洛谷本身不算是同类软件,需要和不同的平台相比。
力扣都是些面试题,所以普遍难度不会很大,相对于CodeWar来说,力扣相当于CW的4,5,6kyu。某些3kyu的老题可能会相当于力扣的Hard级。像1kyu中最简单的Tiny 3-pass编译器,面试这短短几十分钟也就能弄懂题意。CodeWar中中既包含基础算法题,也包含语言特性题,设计模式题,系统设计题,编译器题。总之,非常广泛,不拘一格。力扣其中很多都是原创,体现了这个社区,非常活跃,有活力。力扣练习算法更好,更讲究效率,对于大学生来说显然更加适合。并且在方便程度上力扣更占优势。对于我而言,力扣在同类产品中排第一。面试都建议刷力扣不是没有原因的。
洛谷几乎是清一色的算法题,面向的是参加各类竞赛的人。由于我接触的OJ平台并不多,我认为和其类似的产品有北京航空航天大学的OJ平台。该平台同样是面向刷题设计,但也是部分课程联系以及考核的平台。在使用体验上,由于北航OJ平台的反馈信息不到位,debug过程很困难,因此体验并不好。在我用过的OJ平台中,我认为洛谷也是排第一的。
第三部分:建议和规划
1.市场概况
对于OJ平台来说,我认为市场正在逐步扩张,并且集中在大城市。案例分析中的两个OJ平台分别面向竞赛生以及程序员,而这两者目前在中国的区域分布是极为不平衡的,至少目前几乎都集中在一线及二线城市。级别更低的城市由于教育理念的差异以及互联网公司的缺乏,需求很低。
就用户人数来说,对于洛谷这类平台,2018年NOIP参加的人数约为25000人(包括普及组和提高组),由于自主招生政策的变化,2019年和2020年参加的人数更少。2019年ACM竞赛的参赛人数约为3000人,这些可以看作直接用户的数量。对于潜在用户,我认为可以统计各高校以及职校计算机相关专业的学生人数。自2014年开始,计算机专业毕业生人数就在10万人以上,这些学生都可以看作潜在用户。
对于力扣平台,近3年力扣平台的活跃用户总数量约为20万人,而我国每年IT行业人才供给为200万人,这些人都是力扣平台的潜在用户。
2.市场现状
力扣和洛谷都是同类产品中的佼佼者。和力扣竞争的主要平台有CodeWar以及牛客网等,和洛谷竞争的平台主要有C语言网以及各大高校的OJ平台。不过,从目前的用户数量以及活跃度来看,这两个在市场上都占有最高的份额。大多数人给其他人推荐相关平台时,也常常会推荐这两个平台,而其他平台则提及较少。
3.市场与产品生态
总体来说,OJ平台的市场核心用户群为学生、IT行业从业人员、求职人员。绝大多数学生及大部分IT从业者年龄低于35岁,一部分在35~40岁,极少数在40岁以上,因此用户年龄集中分布在18至30岁之间。典型用户1:我的大一同班同学,目前20岁,目前在网络空间安全专业学习,考虑参加ACM竞赛。典型用户2:我的室友,正在寻求面试机会,在力扣上疯狂刷题。他们的表面需求都是提高计算机相关知识以及编程水平,潜在需求就是赚钱(我相信如果平台推出相关功能他们一定会考虑使用)。
至于用户之间的关系,就我的经历来说,普遍存在的是“前浪带后浪”的关系。高年级或者已经就职的学长学姐们往往愿意向学弟学妹们分享相关经历,以及帮助寻求实习及就职机会,这是一种双赢的合作关系。因此,可以利用这种关系,在平台上发布一些功能,方便各方获取自身的需求,同时再带动年龄更小的用户群体进入该功能圈,拓宽用户面。这也是当前OJ平台积极开发社交功能的原因之一。
4.产品规划
我会增加和各大高校的联动,推出网课功能,方便大家系统性地学习相关知识。以下是有关NABCD分析:
Need
相当多的竞赛生和程序员未接受过系统性的教学,对于一些关键性的细节内容,他们很乐于学习并接受。
Approach
首先要和各大高校合作,取得他们的网课使用权利;然后在一个类型的题目页面中推送包含相关知识的课程。
Benefit
有助于用户系统性地掌握相关知识,避免学了就忘、忘了再学等事倍功半的情况。
Competitors
各大网课平台以及视频网站。但由于我们的产品是OJ平台,因此并不一定会产生激烈的竞争。
Delivery
主要还是靠学校的人员推广以及相关广告,但由于现有产品缺失该项功能,因此并不需要做过多宣传。
如果你是项目经理,可以招聘6个人,并且有4个月的时间,我会分配1人美工,4人开发,1人测试。该项功能并不需要过多美工,因此1人美工足矣;获取到网课资源需要多方面的关系,应充分利用现有的人脉关系,所以需要4人开发;由于并不需要过多代码开发,同时新增功能的代码框架可以在开源网站上找到,因此产生bug的概率并不大,一人测试足矣。