软工案例分析作业

软工案例分析作业

项目 内容
这个作业属于哪个课程 这个课程
这个作业的要求在哪里 在这里
我在这个课程的目标是 体会软件工程的时间流程,锻炼团队协作能力和开发能力
这个作业在哪个具体方面帮助我实现目标 通过实践学习如何体验及测评软件、网站等,提升寻找bug、提出建议的能力,提升软件测试等开发能力

第一部分 调研,评测

功能

网站进入界面比较

洛谷:

Leetcode:

点开网站的第一印象对于使用者而言非常重要,洛谷与leetcode的首页界面有非常大的区别。洛谷的首页功能访问不需要用户登录,而leetcode必须登录才能使用,从这一点就能够看出Leetcode的流程性比较突出。

登录之后,洛谷比较抢眼的版块是比赛板块:

而leetcode则是面试题板块:

并且,洛谷左侧功能栏也有比赛选项,滚动推荐(广告)栏多推送比赛、竞赛书籍等,而leetcode上方功能栏特有“求职”选项,且推送广告多与招聘有关。

通过网站的界面可以推测,洛谷主要是面向比赛,而leetcode则关注实习、求职

题库界面

通过对比可以发现,洛谷的题库比较纯粹,而leetcode的题库内容比较杂糅,广告连题库都不放过

二者都具备题的查找功能,leetcode具有很明显的题目分类功能,有算法、数据库、Shell、多线程等分类。而洛谷则在题目难度以及通过率上有较为美观的设计,特别是题目难度的分类比较具体,给做题者提供了很好的参考价值。

题目界面

二者在题目界面都有题解可供查询,也有讨论区的入口,不同的是,leetcode将题面跟在线IDE合成在一个页面,方便了做题者审题、做题,并且需要实现的框架已经提供,做题者只需要补充关键函数或方法即可,并且有执行代码选项直接测试样例,可以说是非常方便。

而洛谷界面比较简单,其在线IDE的入口在如下图所示位置:

并且界面极其简约:

相比较而言,leetcode的在线IDE实用性还是很强的,由于笔者是第一次使用leetcode,所以对于其做题界面感到十分新鲜且感兴趣,这样便利的coding方式的吸引力还是很大的。

提交界面

二者提交界面的内容十分相似,但是洛谷的显示更加美观,绿色而又大大的AC多么惹人喜爱。

评论区

可以发现洛谷评论区大致是寻求答疑解惑的,而leetcode有写做题历程的,也有评论与题无关的(令人迷惑的水评论),二者的差异应该是部分受众的不同。

题解

leetcode的题解中还有视频题解,这是一个非常便利的功能,让题解更加直观、易懂。并且可以搜索题解,通过实现方式搜索“贪心”、“栈”或者编程语言类型来筛选,而洛谷则只有按时间或默认排序,当做题者想要寻找自己所使用的语言的题解时,经常要翻不少页面,效率很低。

使用体验及改进意见

由于笔者使用洛谷的年代已然久远,而对于leetcode则完全没有使用过。

出于入门编程以及提升代码能力的目的而使用了洛谷,在当时是通过试炼场过任务来一步步接触算法、数据结构的(现在好像找不到了),通关的模式给予编程新手很大的帮助,而且它的难度循序渐进、分类明显,而且界面也十分清新,可以说是入门的好地方。

在使用leetcode期间,可以体会到它的便利性,无论是在线IDE还是补充方法的提交模式,都给做题者提高了效率。但是leetcode作为一个偏向于面向求职的OJ网站,广告是非常多的,并且有很多针对实习面试的模块,例如“模拟面试”功能。同时,leetcode并不是完全免费的网站,很多功能都是要开通会员才能够使用,这也是其商业性质明显的地方。

采访

首先简单采访了一下软件学院具有面试需求的同学:

然后是一位宇航学院有自学编程需求的大佬:

通过采访可以发现,两位同学对于leetcode的评价颇为相似,针对的都是代码补全问题。而由于需求的不同,leetcode给编程初学者和刷题者都能带来不错的体验。

评分

对于洛谷,当初初学编程的我 e) 非常推荐,它给我带来的指引作用还是非常大的。

对于leetcode,在线ide以及提交模式是非常吸引我的,e) 非常推荐

对于定量分析:

描述 洛谷/leetcode评分
核心功能 分析三个核心功能,功能设计和质量。 10/10(核心功能完善的OJ平台)
细节 有什么为用户考虑的细节? 9/9
用户体验 当用户完成功能时,不干扰用户 10/10(完成功能等于AC,我就很满足了)
辅助功能 一些辅助功能如皮肤等 7/5(洛谷打卡:又是诸事不宜的一天,而leetcode的辅助功能特点并不是很明显)
差异化功能 这个软件独特的功能. 它对用户的吸引力有多大? 7/10(对于初次使用,吸引力还是不如leetcode)
软件的效能 占用内存, 启动速度, 内存泄漏情况 9/9(没有碰到评测的锅)
软件的适应性 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 9/9
用户有控制权 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 10/10
总分 80 71/72

功能性 Bug

测试环境:Google Chrome 89.0.4389.90

在洛谷简约的在线IDE里找到两个界面的稳定复现bug。

第一个是输入时显示的右侧的矩形框:

在未输入时也会显示并交叉:

第二个是选择语言框第一个选项Pascal飞出浏览器外而不能正确向上滚动将其对齐:

这两个界面bug的严重程度都很小,只是让用户体验在线IDE时感到其设计的粗糙,并且给本就简约的界面带来突兀,不是很美观。

成因应该是前端问题,只在输入时显示矩形框,并将选项正确对齐即可。

第二部分 分析

预估时间

这两个网站的功能还是十分丰富的,下预估实现基本功能的时间。平台包括题库、评论区、题解、模拟面试以及比赛的发起与维护等。大概一到两周时间决定前后端、数据库的任务分配,大概两到三周时间完成基本功能,如题库、题目、提交、评论、题解这五项基本功能,实现单个用户的功能。再花费大概四到六周时间加入用户交互,如比赛、讨论区、用户反馈bug等。故一共花费十周左右时间可以完成基本功能。

产品排名

在用户使用层面上看,洛谷和leetcode是周围不少同学都在使用的OJ平台,能够满足不少同学的考研、学习算法、面试等需求,尤其是leetcode满足了当代大学生高涨的面试需求。作为中文网站,虽然存在界面和其他bug问题,但洛谷和leetcode都是国内顶尖产品。

建议

对于洛谷,它是由没有许多开发经验的OI选手进行开发的平台,因此缺乏系统性的开发学习,导致洛谷的代码架构不够良好,代码质量可能不够高,并且洛谷的创造者也称之为自己年轻时写的“某山代码”。从身边同学的经历可以发现,竞赛选手的代码风格是极具个性的,导致集成的平台架构设计比较拉跨,重构也比较困难,因此做软件还是需要系统性地学习软件工程,学会软件开发能够有效提高软件质量。

为什么不修复bug

对于界面的一些bug也许无足轻重,没有什么维护的必要,毕竟对于用户的体验没有很大的影响。

第三部分 建议和规划

市场概况

OJ平台的市场还是很大的,就我而言,身边的九成人群都要接触OJ,并且一个优秀的OJ平台能够带来的收益也是很大的(用爱发电除外),例如广告收益、商城收益。所有参与信息竞赛的小初高学生,以及几乎所有工科大学生都要接触OJ,这是直接用户,同时对于希望加入到新兴科技产业工作的人群而言,学习编程也是必不可少的。而且随着科学技术的发展与进步,越来越多人群学习编程,这是时代的潮流,也许公园里遛狗的小朋友都是潜在的用户。因此OJ平台的市场十分广阔。

市场现状

目前市场上的产品有很多,包括口碑较好的LibreOJ,牛客竞赛,Codeforces等,但在国内,洛谷和leetcode的用户极多,市场极为广阔,很多大厂都在leetcode提供面试资源、内推等,这些产品的定位大多是针对竞赛,而leetcode主要针对求职。在国内,这些产品的竞争关系不是非常明显,几乎所有用户都会尝试多种平台,牛客竞赛是商业化最为明显的网站,竞争力比较强。

市场与产品生态

核心用户群是初中、高中要参加信息竞赛的学生,多是大城市里竞赛培养制度比较完备的学校内的学生,还有需要学习编程的大学生和参加ACM竞赛的大牛。

典型用户:我的高中同学,17岁高二,需求通过OJ平台刷题提高成绩,拿到省一等奖能够帮助自己参加自招进入好的大学。

用户群体之间的关系大多是同学、网上认识的竞赛友友,通过相互传播可以二次构成特定用户生态。

产品规划

在例如洛谷这类代码需要重构的OJ平台,应该不需要增加新的功能,而是着重于修复用户反馈的bug以及重构平台代码,提高代码的质量,之后再考虑增加新功能的可能性。

洛谷没有了试炼场这一功能是非常可惜的,故可以重新补充这个功能,给加入编程大家庭的新鲜血液一个良好的试炼(劝退)环境。

对于NABCD:用户的基本需求N现有平台完全可以满足,平台需要做的A是进行代码重构,修复不断产生的用户反馈的bug,这也是提升C竞争力的方式(比谁bug少),而关于B主要是提高界面美观程度,还有评论区审核,关于推广D由于用户性质特殊,没必要对潜在用户过多推广(靠已有用户去抓捕潜在用户)。

如果我是项目经理,我会招聘6位:

工作 人员
开发 A B C D
测试 E F
美工 C

其中协助前端开发的C也同时负责界面美工的优化,在十六个周期内:

时间 任务
1 重构基本功能的任务分配
2-3 完成重构题库、题目、提交评测、评论、题解等基本功能
4 对基本功能进行测试,并且分配用户交互功能的重构任务
5-8 完成重构用户交互功能:比赛、讨论区、用户反馈bug等
9-10 完成初版后,进行交互功能部分测试,着手准备内测,收集用户反馈
11-12 完成第二次测试,开放内测,同时重构在线IDE界面以及试炼场,并完善功能
13-14 收集用户反馈,修复功能性bug,上线在线IDE以及试炼场
15 收集用户反馈,修复发现较晚的潜藏的功能性bug、在线IDE以及试炼场bug
16 结束内测,进行推广并发布产品
原文地址:https://www.cnblogs.com/nya0/p/14638888.html