| 專案 | 內容 |
|---|---|
| 這個作業屬于哪個課程 | 2021春季計算機學院軟體工程(羅杰 任健) |
| 這個作業的要求在哪里 | 案例分析作業要求 |
| 我在這個課程的目標是 | 和我的團隊開發一個真正的軟體,一起提升開發與合作的能力 |
| 這個作業在哪個具體方面幫助我實作目標 | 分析現有具體的軟體,用軟工的方法論進行表里兩面的剖析 |
在線評測系統(英語:Online Judge,縮寫OJ)是一種在演算法競賽中用來測驗參賽程式的在線系統,也可以用于平時練習,近年來(2016年或更早)亦出現一些針對求職面試的在線評測系統,許多OJ網站會自發組織一些競賽,此外,OJ網站通常會設立用戶排名,以用戶的提交答案通過數多少或某個題目執行時間快慢為排名依據, (from wikipedia)
下文中,我將對曾經有所接觸過的兩個OJ平臺: Luogu(洛谷)與LeetCode(力扣)重新上手使用并進行各功能的評測,當然我也會將找出一些軟體Bug作為使用程序中的目標之一,因此我先給出一個非專業的Bug分級標準如下
| 嚴重程度 | 備注 |
|---|---|
| ?? | 不明顯的小缺陷,可能只是個顯示問題,不影響用戶后續操作 |
| ???? | 對用戶有誤導作用,或軟體邏輯與用戶預期的使用邏輯相悖 |
| ?????? | 阻礙用戶完成預期操作,但可以自動或通過軟體其他操作恢復 |
| ???????? | 用戶無法完成預期的操作、獲取想要的資訊,并且短期內找不到解決方案 |
| ?????????? | 軟體系統性的安全性問題、不可逆的崩潰問題 |
Luogu
"在洛谷,享受Coding的歡樂"
洛谷創辦于2013年,其目標用戶主要是參與NOI/NOIP的OIers以及ACMers,洛谷的各功能圍繞著兩個核心功能進行開發, 一是基于大量題庫的快速、便捷的在線評測功能,二是包括題解、討論帖子、博客在內的相對完備的社區功能,這一點不僅增加了用戶粘性,而且通過社區內的引導,編程新手也能獲得比較好的體驗,
筆者沒有參與過演算法競賽,但洛谷確實是我使用最多的OJ,這是因為洛谷的題解功能實在是出色,相比于POJ/SPOJ等基本每一道題目都有相應的題解,而且審核機制保證了題解的高質量,大一程設時期我在遇到困難時經常學習題解,豐富的思路與技巧對新手很有幫助!
一、使用及體驗
1.洛谷主站
首先來到洛谷的主頁,先入眼的是一個偌大的幾個青少年演算法競賽的countdown,其下方是一個記錄做題量的圖表,這個記錄的粒度大概是最近一年的每個月和最近一個月的每一天,為用戶統計自己的做題量是挺好的功能,主頁下方是一些比賽與帖子的串列,洛谷整體的UI風格比較簡潔,基本沒有冗余資訊,主頁中左側邊欄功能劃分清晰,新用戶也能很快上手,
接下來我們來看一下和題目直接相關的界面,首先是難度劃分,可以看到難度也是針對競賽而劃分的,同時難度共7個等級,比力扣(只有簡中難3種)更細,用戶更能了解自己所處的“段位”,洛谷也有排名系統(下圖右側上方),這里的排名是按近期各種參與度(咕值)產生的動態排名,但是這個題目串列看起來比較混亂,每個鏈接只是標了題號,在這個界面并不知道是什么題,是何種型別的題,我更希望在這里看到按型別(如標簽)分類的題目串列來了解自己哪方面需要加強,我不明白直接把所有題號羅列出來的意義何在,
題庫界面相當的專業!首先是題量方面,洛谷本體題庫有6,387道題目,而算上使用Remote Judge(Vitural Judge)的四個附加題庫,洛谷的總題量高達23,979;其次題目的型別(標簽)基本涵蓋了演算法競賽中具體的各種演算法與問題,而且十分細致(比如dp還細分為了插頭dp,區間dp等);同時對于源語言為外文的題目也進行了大量的翻譯
現在我先隨手選一道題目(),可以看到題目界面也很清爽,左側是標準的題面,右側顯示一些題目資訊和此題目對應的討論區與題解區,討論區類似貼吧的模式,可以向他人請教DEBUG,題解區類似知憾訓答的模式,由于有審核機制,題解的技術力普遍較高
記錄界面可進行歷史提交資訊的檢索,點開一條非AC的記錄可以看到各個測驗點的情況,根據本人的使用經驗,很多題目有10個以上的測驗點資訊,同時可以下載首個錯誤點的IO資訊方便DEBUG,而不是對著一聲WA不知所措,這也是洛谷對新手友好的方面之一
題解區大佬很多,而且題解對內容與排版進行了審核并支持markdown/latex,從而保證了用戶的瀏覽體驗,通過題解可以學到很多競賽中的奇技淫巧調優自己的程式,也能學習到不少新奇的解題思路哦
題單取代了“試煉場”,主要是加入了用戶題單,題單好啊,可以找自己感興趣的方向有針對性的刷題,這個功能現在的OJ大多都有實作;洛谷的論壇是帖子-回復模式,可以直接與管理員聯系,給我的感覺比較親切,簡單地瀏覽一些帖子,可以發現洛谷OI亞文化與二次元氛圍濃厚
同時我注意到洛谷有一個團隊功能(右上角頭像 \(\Rightarrow\) 我的團隊),支持團隊內自定義題目、團隊內舉辦比賽、團隊作業等功能,這部分功能不是所有OJ都有開放的,這個功能主要還是針對開展資訊學競賽訓練的學校與機構的,下面是我對團隊功能的試用:團隊自定義題目的題面編輯(下圖左上)與資料點編輯(下圖右上),團隊作業監督(下圖左下)與團隊內舉辦比賽(下圖右下,支持OI/ACM等多種賽制)
(插播采訪)
采訪環節-1
- 采訪物件: Kumo君
- 被訪者介紹: 編程小能手,有扎實的編碼能力,曾三天自通資料庫全堆疊,自主研發過
qq小助手,同時榮任過大一資訊類《程式設計基礎》與《資料結構》的助教 - 采訪動機/需求介紹:因為我在使用上文的團隊功能時覺得這個和他當助教時在校內
OJ后臺出題的功能很像,于是邀請他從助教的角度試用團隊功能,同時他也用過luogu刷題,我也想知道他對luogu的評價 - 實際使用欄目:洛谷-我的團隊
zixfy: Hey, Kumo, 我注意到洛谷的團隊功能可能可以滿足作為助教進行出題的需求,同時你也曾在校內的Accoding(oj4th)上出過題目,能采訪一下你體驗的異同嗎?
(試用題面編輯中) Kumo: 洛谷的題面編輯結構清晰,有
md快捷鍵,只要填寫背景、樣例等部分就行,相比之下oj4th只有一個樸素的富文本編輯器,整個題面靠手擼(試用測驗點設定中) Kumo: 洛谷可以批量打包上傳測驗點,而oj4th要一個一個點設定
I/O,不太人性化,但沒看到洛谷提供評測對比標準的設定或Special Judge功能zixfy: 嗯嗯,總體看來洛谷在出題人方面做的比較細膩,你覺得洛谷的團隊功能能勝任程設課程的作業與比賽嗎?
Kumo: 相比于校內
OJ的話,洛谷給我的體驗可能比較流暢吧,校內OJ有一些bug,如測驗點不能洗掉過多次、題解功能雞肋的問題,洛谷大家都在用的話相關功能可以得到及時的維護,但校內OJ對于課程管理而言是必需的,它的靈活性是洛谷肯定替代不了的zixfy: 瞭解了,你覺得團隊模塊里有什么吸引你的功能嗎?
Kumo: 其實我覺得不一定非要有什么亮眼的功能,我覺得軟體用起來順手才是重點,團隊功能還可以,洛谷整體也稱得上是這樣“好用”的網站
zixfy: 我看到你也有
luogu賬號,用來刷題感覺如何呢?Kumo: 我是在大一時注冊的,當時經常刷練習賽,選擇洛谷的主要原因是題量大,而且難度覆寫廣,可以循序漸進地做題,而且題解功能很棒!
zixfy: 同感!那你覺得洛谷的
UI做得怎么樣,我認為它顯然十分簡明,但其界面在當代有些樸素,Kumo: 確實,自己有寫一些前端后,感覺洛谷的
UI也比較好自己復現出來,其實沒有特別高端的感覺zixfy: ありがとう
btw洛谷還有個相當厲害的功能Remote Judge(Vitural Judge),其核心思想是從遠程題庫爬取題目題面資訊放到本站上 ,當用戶在相應題目進行代碼提交時,洛谷后臺運行腳本通過公用號或用戶提供的賬號在遠程題庫提交并抓取結果
稍微試用了一下UVa,速度其實還蠻快的嘛,Vitural Judge這方面做的最好最全的應該是vjudge吧,當然洛谷的也很好用,支持系結個人用戶,拓展的題量也不少
2.Bugs
bug A
-
測驗環境:
OS:
Win10 18363.1440(家庭版);Browser:Google Chrome x64(v89.0.4389.114),全文都是此環境,下文不再贅述 -
bug復現: (必然發生)
洛谷主頁 \(\Rightarrow\) 右上角頭像 \(\Rightarrow\) "個人設定" \(\Rightarrow\)"選擇圖片" \(\Rightarrow\) 選擇一張比列不為
1 : 1的圖片上傳 -
具體描述:
洛谷頭像的比例是
1 : 1,但上傳一張比列不為1 : 1的圖片圖片后沒有出現預期中的裁剪選項,導致我上傳的二次元頭像被擠壓型變以適應比例
-
bug分析:
- 嚴重性:????, 完全不影響使用,畢竟只是個頭像(,但可能用戶確實想正常上傳頭像就需要自行裁剪,有些麻煩
- 成因: 沒做這個功能,小細節對于整個
OJ而言不重要
bug B
-
bug復現:(偶爾發生, 20次嘗試中復現了5、6次)
- 通過主頁右上頭像 \(\Rightarrow\) “我的題庫” \(\Rightarrow\) 選擇一道創建的題目或主頁右上頭像 \(\Rightarrow\) “我的團隊” \(\Rightarrow\) "題目" \(\Rightarrow\) 選擇一道創建的題目
- "編輯題目" \(\Rightarrow\) “資料點配置” \(\Rightarrow\) “上傳資料” \(\Rightarrow\) 選擇非
.zip格式的檔案上傳
-
具體描述:
洛谷測驗點檔案只能為
ZIP壓縮包,上傳錯誤格式后上傳按鈕被禁用,并顯示"等待系統校驗"字樣,這個系統校驗不是指因為格式不對而要校驗,因為我觀察到上傳ZIP后也有此字樣,隨后成功上傳,所以此時上傳卡在了校驗階段,但按鈕被禁用無法重傳
-
bug分析:
- 嚴重性:??????,遇到這個
Bug只能重繪頁面重置按鈕 - 可能成因: 可能是前端或者前后互動上的鍋,沒有及時更新
UI,同時可能是軟體測驗不足,沒有充分測驗這種例外情況下的輸入 - 改進建議: 當后端決議到錯誤格式時不進行測驗點檔案的覆寫,回傳給前端錯誤資訊,前端及時更新
UI,將按鈕設定為重新上傳,醒目地給用戶警告
- 嚴重性:??????,遇到這個
bug C
-
bug復現:(必然發生)
洛谷主頁 \(\Rightarrow\) 切換到"記錄"模塊 \(\Rightarrow\) 切換記錄狀態為
Unaccepted\(\Rightarrow\) 點擊藍色的"清除所有篩選條件" -
具體描述:
切到"記錄"模塊時我能看到自己所有的提交記錄,下圖中的"用戶名或ID"默認是我自己的,在復現第三步后可以看到所有失敗的提交,我在第四步時期望的是篩選選項重置,我又可以看到所有提交,但此時報錯了,可以觀察到清除條件時用戶ID的文本框也被清除了,導致無法重新檢索,事實上,無論篩選選項是什么狀態,只要點擊“清除”都會引發這個問題,
-
bug分析
- 嚴重性:????????,這是一個永遠觸發例外的按鈕,無法通過其他操作修正
- 可能成因:前端邏輯有問題,沒注意清除ID后已無法正常檢索,卻還是自動重新進行了一次檢索
- 改進建議:1.清除時前端不重置ID對應的文本框 2.或者后端增加特殊判斷,當傳入的用戶名/ID為空時重定向為請求用戶的ID
3.總評
總體而言,洛谷既具備一個競賽OJ的硬核性,也有良好的社區功能完善用戶體驗,因此我認為是e) 非常推薦
采用鄒欣老師給出的表格,我具體的量化評價如下:
| 類別 | 描述 | 評價 | 評分([-3, 10]) |
|---|---|---|---|
| 核心功能 | 分析三個核心功能,功能設計和質量 | 題庫充實,評測快,社區硬核 | 10 |
| 細節 | 有什么為用戶考慮的細節? | 有一些沒有為用戶考慮的細節,見Bugs | 7 |
| 用戶體驗 | 當用戶完成功能時,不干擾用戶 , | 基本沒有彈窗,資訊簡明 | 10 |
| 輔助功能 | 一些輔助功能如皮膚等 | 博客、圖床以及在線IDE、洛谷日報、網課和資訊學競賽真題 |
9 |
| 差異化功能 | 這個軟體獨特的功能. 它對用戶的吸引力? | Remote Judge,完整的團隊功能 |
9 |
| 軟體的效能 | 占用記憶體, 啟動速度, 記憶體泄漏情況 | 擁有專利“一種高并發的在執行緒式評測系統(申請中)”,可以應對每5分鐘1200個評測量(據官方) | 10 |
| 軟體的適應性 | 在聯網/斷網, 大小螢屏, 沒有滑鼠的情況下都可以順暢操作,跨平臺 | 一般 | 7 |
| 成長性 | 記住用戶的選擇, 適應用戶的特點,越用越方便 | 有題目推薦系統,但有時會推薦已做過的題目 | 9 |
| 用戶有控制權 | 系統狀態有反饋,等待時間合適,關鍵操作有確認提示,有明確的錯誤資訊, | 用戶資料非實時,按一定的周期更新一次 | 8 |
| 總計 | 87.78% |
二、評估分析
1.使用此服務的所有功能,估計這個軟體/網站/服務做到這個程度大約需要多少時間(團隊人數6人左右,計算機大學畢業生,并有專業UI支持)
需要實作的功能:評測機、題面界面及題庫資料庫、用戶系統與博客、比賽、討論區等很多功能,預估耗時為3.5個月,半個月搭建各種語言的評測機,設計題庫的資料庫,同時前端寫好題面的界面;半個月完善題庫資料庫,加入題目檢索、題目標簽的功能;一個半月全力進行用戶系統、提交記錄的開發,同時在系統整合時展開大規模測驗;半個月前端進行討論、題解界面的開發,后端開發比賽等功能;最后半個月模塊整合,并針對評測機進行性能優化,
當然如果使用開源的OJ系統或許會更輕松?
2.分析這個軟體目前的優劣(和類似軟體相比),這個產品的質量在同類產品中估計名列第幾?
優勢:基于大量(Remote Judge)題庫的快速、便捷的在線評測功能,以及包括題解、討論帖子、博客在內的相對完備的社區功能 劣勢:網站做的比較粗,有許多細節沒有完善;與其他面向競賽的OJ相比,洛谷應該有前三吧,洛谷持續增加的題庫與例賽以及社區為這個網站維系著生命力,其他一些老牌的OJ有些因為缺乏管理倒倍訓者很少有人記得了
3.從各方面的問題,推理出這個軟體團隊在軟體工程方面可以提高的一個重要方面
- 界面好好捯飭一下,可以做得更美觀,洛谷的前端雖說是
vue寫的,但感覺靜態的頁面還是比較多吧 - 作為
PM考慮擴大目標用戶,網站給我的感徑訓是主要為OIer服務,可以考慮把網站規模進一步做大,吸納ICPC/PAT/lanqiao等參賽者
三、建議與規劃
1.市場概況
市場面向參與各類資訊學競賽的青少年,據洛谷官方,在2019年已有30萬注冊用戶,累計3000萬次評測,當然對演算法或ACM感興趣的人群和想要入門OI的人群也可看作洛谷龐大的潛在用戶
2.市場現狀
目前市場上的競賽OJ: Vjudge, CodeForces , 牛客, ZOJ, POJ, HDOJ, LibreOJ與各大高校校內的OJ,上述產品定位均為IO/ACM題庫,這些OJ也很好用,但社交性相對較弱,不像洛谷這般吸引新用戶,因此遠沒有洛谷這樣火,圖源:百度指數
OJ中由高校開設的非盈利OJ居多,而牛客競賽的定位最接近洛谷,后者面向CSP-J/CSP-S/NOI/ACM競賽的參與者提供題庫與培訓,可以看作洛谷的商業化競品,
3.產品生態
這個產品的核心用戶群是正在參與資訊學競賽的高中生,包括其在內可能有以下幾種典型用戶:
| 條目 | 用戶A | 用戶B | 用戶C |
|---|---|---|---|
| 名字 | 寧友千 | 張甫劍 | 趙子飛 |
| 基本資訊 | 高中在讀,17歲 | 35歲,校內負責組織OI訓練的老師 |
24歲,是學生 |
| 使用背景 | 為了備戰資訊學競賽而進行編程刷題 | 為了給同學們找編程題目作為作業/考核 | 對演算法感興趣,同時想提升編程能力 |
| 偏好 | 可以有各種型別的題目做 | 題目難度適中,能體現知識點 | 遇到困難可以學習題解 |
| 基本需求 | 使用題庫系統進行做題訓練 | 通過篩選功能快速找題 | 在學習某一演算法知識后在洛谷上找一些相關題目 |
| 潛在需求 | 參與洛谷比賽鍛煉實力,購買洛谷相關網課 | 購買洛谷的高級團隊功能,自主命題并對學生進行監督 | 因為要參與藍橋杯等大學生程設競賽,開始尋找相關題單針對性訓練 |
其中用戶B在使用洛谷后如果覺得還不錯,很可能驅動其教學班中的用戶A也加入洛谷,反之亦然,某用戶C在使用洛谷后也有可能將其安利給友人,因為洛谷社區系統還蠻不錯的,大家可以互關,一齊刷一個題單進行討論
洛谷除了主站之外還有洛谷網校和洛谷有題這兩個子站點,前者提供了洛谷主站一些比賽的講解(這是一個新的產品生態點)與集訓營課程以供購買,后者是一些NOIP/NOI的非編程題題庫,整體上三個站點內容比較相互獨立
4.產品規劃
我想開發兩個簡單的新功能,一個是完善洛谷的"在線IDE",從洛谷的官方引導貼可見在線IDE也是官方推薦的編碼方式之一

但這個IDE用起來比較吃力,沒有任何形式的補全,部分語言如Python連高亮也沒有(牛客競賽這方面就做的比較成熟),另一個要做的功能是類似OI Wiki的演算法知識庫,這兩個功能是為了進一步降低洛谷使用的門檻,讓洛谷成為更好用的工具,讓更多沒有硬體條件或是缺乏指導的想參與OI的人群也能加入洛谷,同時演算法知識庫可以只提供基礎演算法,用戶體驗感覺良好則可以付費解鎖高級內容或引流到洛谷網校
人員分配方面,我將6人按Backend/Frontend/Test分為2-2-2
| 時間 | 規劃 |
|---|---|
| week 1-2 | 修復現有bug,在洛谷社區就新功能發表意見征集帖 |
| week 3 | wiki,IDE界面設計,生成新功能整體的設計檔案 |
| week 4 | 在線IDE完善各種語言的高亮,后端開始實作c/c++的關鍵字/庫函式的聯想 |
| week 5 | 在線IDE添加c/c++關鍵字補全,后端模仿實作JB系IDE的特殊符號({}()""'')補全機制 |
| week 6 | 對部分關鍵字如for/foreach添加自動生成模板的功能,前端整合現階段所有功能,展開集成測驗 |
| week 7 | 發布0.1(\(\alpha\))階段的IDE,展開站內用戶測驗,收集反饋意見,決定是否開發其他語言的補全(洛谷主要是c/c++) |
| week 8 | 為IDE加入代碼風格與主題設定 |
| week 9 | 為IDE加入"當前題目"的功能,后端協同資料庫使得能在IDE界面拉取題目資訊,像力扣一樣單頁面內就可以方便查看題面,網站在用戶修改代碼后及時保存到資料庫,方便用戶下次繼續撰寫,集成測驗 |
| week 10 | 發布IDE體驗版(\(\beta\)),收集反饋,并發布wiki意見征集帖,優先做呼聲最高的內容 |
| week 11 | 完成wiki的文章界面,后端開始wiki資料庫搭建,測驗繼續測驗發布中的IDE |
| week 12 | 前端完成搜索、文章串列、面包屑導航的UI,后端完成文章的增刪查改邏輯 |
| week 13 | 前后端整合,集成測驗,周末開啟\(\alpha\)階段的用戶測驗 |
| week 14 | 收集反饋,在原題目界面的題目標簽增加一個"查看相關知識點"的鏈接,wiki加入知識圖譜,人員調整為2-1-3,對現有所有新功能再次測驗 |
| week 15 | wiki文章加入相關例題串列,加入主站的評論功能,考慮開啟用戶編輯以盡快完善wiki內容 |
| week 16 | 正式上線新功能,進行站內站外的推廣 |
LeetCode
"見證每 1 bit 成長"
力扣2011年起源于美利堅,2018.2推出中國版,力扣"是一個專注于程式員技術成長和企業技術人才服務的品牌, 致力于解決程式員技術評估、培訓、職業匹配的痛點,逐步引領互聯網技術求職和招聘邁向專業化",可以看出力扣志在提高用戶的程式員職業技能水平,基于此開發了幾大核心功能:OJ、LeetBook(教程)、社區和模擬面試
用過LeetCode后才發現它和競賽OJ有很大不同,首先力扣不使用演算法競賽題,而是1000+的原創題目與大廠面試題(據官方),其次力扣并不像洛谷一樣緊緊圍繞題目評測展開功能,而是注重從多方面提高用戶水平
一、使用及體驗
1. LeetCode-cn
我先進入中國力扣的首頁看一下,好家伙,首頁條目這么多就離譜,我該先看哪個..可以看到主頁是大量推薦的討論以及名企面試題,右方側欄也是大量推薦的題解與帖子..但力扣的新版UI很不錯哦,不同模塊間保持了一致的扁平簡色風格,過渡效果也做得很平滑
這里是力扣的個人界面,可以清晰看到個人的做題進度和動態,其中還有一個git風格的每日提交統計,這個每月勛章嘛,實際上是需要每天完成"每日一題"當月全勤才能拿到的,可以看作力扣為用戶提供的自我驅動的一個指標吧
力扣的的題庫是從美國版翻譯來的,總題量為2,035,客觀上題目難度肯定沒有競賽題高,大部分題目面向面試,對競賽中的高級演算法涉及較少
點開一道題,可以看到力扣題目界面相當獨特,頁面分為兩欄,左側是題面,右側則是一個在線的代碼編輯器,當然可以自由調整二者的比例或僅顯示一欄,代碼編輯器支持樣式設定與線上代碼保存,而且可以使用"執行代碼"快速地測驗程式,對于想要長期想在網頁中編程的用戶還是相當貼心的,同時可以注意到力扣代碼提交的格式不同,在洛谷等演算法OJ中用戶要自己處理程式的I/O,而在力扣大多數用戶以填寫函式(方法)的方式完成核心演算法,而輸入輸出的處理與資料結構的定義由評測腳本負責,這是力扣的便捷性所在,用戶只要關注題目相關演算法,力扣為2k+題目,每道題10+的語言都定義好了介面,這樣也比較接近面試題的情景,
力扣的題目界面就是一個很完備的單頁面應用,刷題時通過"題目串列"可以快速切題,而且題解/評論都是內嵌在網頁中的,相比于洛谷,網頁整體是回應式的,不需要來回切換不同的頁面,每道題評論/題解都很多,大部分有官方題解,題解支持latex和力扣擴展的md語法,但題解沒有審核,所以質量良莠不齊,(而且我這里是在用c寫代碼欸,為什么不自動幫我過濾出所有c撰寫的題解呢?我看其他語言的作用大嗎),我認為力扣注重的是用戶通過做題學會相關演算法應對面試,因此為了照顧廣大用戶群體不過分追求題解的硬核性,而是培養一個自由交流的龐大學習社區,這一點無可厚非,提交記錄方面,對于非AC提交,可以直接在線看到一條相應的測驗用例,因為力扣的測驗用例格式并不復雜,
力扣還有兩個核心模塊:學習(下左)與討論(下右),其中學習模塊是一系列介紹演算法的電子書,其中內嵌了一些代碼題目,粗略試讀了一部分后感覺此模塊面向的是零基礎入門的編程或語言新手,文章質量不見得比知乎上的好,討論區大多是面經內推和組賽資訊,這里我沒有深入使用
2. Bugs
bug D
-
bug復現: (必然發生)
力扣-我的題解 \(\Rightarrow\) 選擇一篇寫好的題解,點擊"編輯"字樣 \(\Rightarrow\) 題解詳情頁面點擊"編輯" \(\Rightarrow\) 點擊“洗掉”按鈕 \(\Rightarrow\) 回到題解串列
-
具體描述:
題解仍在題解串列中,但再次點擊"編輯"字樣無法找到題解,會回到題目主界面,而且這里還有個互動邏輯的問題,1.我在題解串列不能進行洗掉 2.我在題解串列點擊"編輯",在跳轉的頁面中沒有進入編輯,需要再在題解詳情頁面點擊"編輯"
-
bug分析:
- 嚴重性:????, 雖然說不影響使用,但無法找回題解的情況下串列里再留著題解記錄也沒有意義吧
- 可能成因: 可能就是沒有洗掉用戶歷史題解串列里的記錄,或者本意就是保存所有題解記錄
- 改進建議: 已洗掉題解標注出來,同時不能跳轉到詳情
bug E
-
bug復現: (必然發生)
點開上文的這道題 \(\Rightarrow\) 點擊"題解"選項卡點 \(\Rightarrow\) 擊右上角個人頭像 \(\Rightarrow\) "切換到舊版本"
-
具體描述:
題解都消失了
-
bug分析:
- 嚴重性:??????, 原本確實是有題解的,切換到新版本界面可恢復
- 可能成因: 我注意到在舊版本點擊討論/題解會直接重定向到新版本的界面中,同時復現程序中如果切換的是"討論"選項卡,則會跳轉到舊界面的題目描述界面,因此雖然無法使用舊版本的討論/題解,但我認為力扣已經移除了舊界面中的這兩個模塊,可能原因是相應的界面重構了,舊界面無法再加載新的題解,
- 改進建議: 在這種情況下,禁止切換到舊界面或者切換到舊界面的題目描述區域
bug F(真·bug)
-
bug復現: (必然發生)
-
提交一次Prob#135分發糖果
-
隨便點開一道題 \(\Rightarrow\) 點擊"題目串列" \(\Rightarrow\) 切換至"?? LeetCode 熱題 HOT 100" \(\Rightarrow\) 關閉當前頁面
-
右上角頭像 \(\Rightarrow\) "做題分析" \(\Rightarrow\) 跳轉到Prob#135分發糖果的提交詳情 \(\Rightarrow\) 點擊最下側的“回傳題目”
-
-
具體描述:
(人類早期馴服野生小bug的珍貴錄像)
可以看到題單編號成了錯誤圖示,且不能切換題目了,打開題目串列,題目串列也沒了
-
bug分析:
- 嚴重性:??????, 用戶暫時使用不了題單,但切換題單或者重繪當前頁面可恢復
- 可能成因: 這是因為分發糖果這道題并不是我們當前題單內的題,但力扣仍然試圖在提單內尋找這道題目導致例外情況,具體原因可能是提交記錄回到題目的入口比較隱蔽,沒有充分測驗
- 改進建議: 明確跳轉題目不在當前題單時的行為邏輯,可以將跳轉的題目加入到當前題單中,或將當前題單切換成包含所有題目的總題單,而不是不作例外處理破壞用戶體驗
同時力扣的討論區有"意見反饋"專區,我按照官方建議的格式給出了bug F的反饋,但仍未得到及時回復:
3. LeetCode On VSC
同時我注意到LeetCode還有IDEA以及Visual Studio Code的相關插件,下面我是我對vsc版力扣插件的試用流程:
插件的安裝比較簡單,首先配置好10.0版本以上的Node.js(npm),并把Node加入PATH變數,因為這個插件的核心代碼是JavaScript寫的,通過js抓取遠端網站的題解、題目進行本地刷題,同時通過npm install -g skygragon/leetcode-cli安裝力扣命令列,隨后在vsc的插件市場安裝LeetCode 0.17.0,可以發現vsc的側邊欄多了一個力扣的選項卡,第一次切換進去后需要首先進行登錄,此插件大部分互動使用vsc的全域命令列(Ctrl + shift + P)進行
登錄后可以查看題目串列,點擊題名便抓取到了題面,題面以Markdown Preview的形式展示(可能要安裝md相關插件),設定好力扣作業區后就可以開始刷題了!
可以看到自動生成的原始碼檔案自動增加了提交與測驗的按鈕,同時右鍵也有快捷鍵,但這個Show Top Voted Solution獲取的是美版的題解..題面中的Discussion|Solution實際也只是超鏈接,需要在瀏覽器中打開,還要吐槽的是偶爾發生的連接失敗問題,就不展開了
總體來說,插件版力扣體驗還是比網頁版好的,不用管那么多滿天飛的其他資訊,可以專注于題目本身,更重要的是可以使用自己熟悉的IDE并且使用代碼補全功能了!網頁版里代碼著作權好像是付費功能,好耶
試用題目測驗,反饋結果也是md,很簡潔
采訪環節-2
-
采訪物件: C9H13O3N
-
被訪者介紹: 化競人,CSGO高手,工程小專家,曾經接觸使用過各種語言、框架,玩過
opencv/gl,在服務器上搭過mybatis,也做過微信小程式和APP -
采訪動機/需求介紹:因為我知道他一直在堅持在力扣上刷題呀,起碼每日一題一直有在keep,也算力扣資深用戶了
-
實際使用欄目:力扣-每日一題,
vsc版力扣
zixfy: Hola, C9H13O3N,請問你使用力扣時最常用的功能是什么呢?
C9H13O3N: 其他的沒怎么用過,主要就是題庫,具體而言就是每日一題吧
zixfy: 你是為了什么開始刷題呢?
C9H13O3N: 主要還是提升自己的演算法能力,力扣有不少基礎演算法題,可以起到比較好的復習作用
zixfy: 那你為何會選擇力扣呢,有使用過其他
OJ嗎?C9H13O3N: 其他
OJ的話主要就是校內OJ吧,選擇力扣還是主要因為他的名氣大吧,我的老師也有安利我多在上面刷些題目zixfy: 我注意到力扣的一大特點是對在線編碼的支持,你是在網頁編碼還是在本地編碼的呢?
C9H13O3N: 簡單題的話就直接在瀏覽器里寫了,復雜一點的就用自己的
IDE寫,因為沒有開會員時是無法使用力扣的代碼補全與DEBUGGER的,寫起來比較折磨zixfy: 那這樣你覺得一年氪三百大洋買力扣會員值得嗎,會員還有名企題庫誒
C9H13O3N: 力扣會員還是比較雞肋吧,現在我現在也不是不能寫,而且題庫也充足啊,等到以后需要專門刷企業面試題再考慮吧
zixfy: 我注意到有一個
vsc版的力扣插件,使用這個插件可以本地刷題,還能有vsc的代碼補全,要不要康康?C9H13O3N: 彳亍(試用中)
C9H13O3N: 原來可以直接爬取題目啊,不錯,哦哦,本地檔案也有補全了,不過你這個
vsc的代碼補全完全比不上JB系的IDE啊(...),哦,檔案內可以直接提交與測驗,還有題單和搜索功能,確實比網頁版體驗好一些zixfy: ..對,它可以讓你在刷題時開啟專注模式
zixfy: 那么你會給力扣整體打多少分呢(10分制)
C9H13O3N: 8分吧?扣分點是是總是有些內購推廣,而且有些題和功能只能付費后解鎖
4.總評
總體而言,力扣體量大,發展潛力大,但仍然需要進一步擴充題庫(資料庫/shell方面題較少),同時把"學習"模塊做好做大,因此我認為是d+/e-) 好,非常不錯
采用鄒欣老師給出的表格,我具體的量化評價如下:
| 類別 | 描述 | 評價 | 評分([-3, 10]) |
|---|---|---|---|
| 核心功能 | 分析三個核心功能,功能設計和質量 | OJ/學習/討論,后兩者缺乏突出特點 |
8 |
| 細節 | 有什么為用戶考慮的細節? | 題單、筆記本、做題分析,方便用戶制定學習計劃 | 9 |
| 用戶體驗 | 當用戶完成功能時,不干擾用戶 , | 資訊泛濫,頂部工具列晃眼,刷題時常見內購廣告和比賽推廣 | 7 |
| 輔助功能 | 一些輔助功能如皮膚等 | 模擬面試、代碼補全、企業題庫,但需要付費獲得體驗 | 8 |
| 差異化功能 | 這個軟體獨特的功能. 它對用戶的吸引力? | 原創面試題庫,在線撰寫代碼的解決方案 | 10 |
| 軟體的效能 | 占用記憶體, 啟動速度, 記憶體泄漏情況 | 代碼提交/測驗耗時為秒級,且拒絕頻繁提交 | 8 |
| 軟體的適應性 | 在聯網/斷網, 大小螢屏, 沒有滑鼠的情況下都可以順暢操作,跨平臺 | 支持相關IDE本地插件,有相關APP |
9 |
| 成長性 | 記住用戶的選擇, 適應用戶的特點,越用越方便 | 在線代碼編輯器支持長期使用 | 7 |
| 用戶有控制權 | 系統狀態有反饋,等待時間合適,關鍵操作有確認提示,有明確的錯誤資訊, | 系統整體完備,但不一定有明確的錯誤資訊 | 9 |
| 總計 | 82.22% |
二、評估分析
1.使用此服務的所有功能,估計這個軟體/網站/服務做到這個程度大約需要多少時間(團隊人數6人左右,計算機大學畢業生,并有專業UI支持)
力扣功能還蠻多,不考慮力扣APP與相關插件的話,對于力扣主站的開發我認為需要6個月以上(非996),一個半月完成評測機、題庫系統與在線代碼編輯器,一個半月完成用戶系統,包括收藏夾、筆記本、進度管理、提交記錄、做題分析、題解等等等(那就兩個月吧),剩下三個月逐個完成比賽、討論、學習模塊并進行集成測驗,這樣大概還是只能完成力扣的基本功能
2.分析這個軟體目前的優劣(和類似軟體相比),這個產品的質量在同類產品中估計名列第幾?
優勢:每道題10+的語言都定義好了介面,方便用戶專注于核心演算法,用戶基數大,已經形成了比較大型的學習交流社區,提供相關的入門教程,界面流暢好看; 劣勢:就面向面試而言,缺乏非編程題目,非完全免費可能會勸退部分用戶,但是事實上力扣已經可以稱之為國內最大的IT技術職業化提升與學習平臺,在線面試、企業題庫我也感覺比較驚艷,因此這個產品的質量在同類產品中估計名列第一
3.從各方面的問題,推理出這個軟體團隊在軟體工程方面可以提高的一個重要方面
我認為力扣最大的問題是沒有體現出成長性,我在使用程序中沒有注意到力扣有題目推薦的功能,以及缺乏對專業技能的評估系統,歷史題目只就用來查看下進度,如果力扣結合用戶所有做過的題,分析出用戶易錯點或短板,也許可以能給用戶比較有意義的引導,也更契合力扣"助力程式員終身成長"的價值觀,其次可以充實一下可憐的shell/database題庫,提高核心功能的質量
三、建議與規劃
1.市場概況
市場面向所有想要提高專業水平的待業或在職的程式員,力扣的用戶主要來自北上廣等程式員扎堆的地域(百度指數),力扣具體注冊用戶難以考證,官方表明已經累積了約1億次代碼提交,故可估計力扣的用戶規模達到了百萬級別,遠超于洛谷,力扣的潛在用戶是跨專業,或想要快速入門企業面試題或一門編程語言的人群
2.市場現狀
目前市場上面向Offer的廣義OJ還有: nowcoder(牛客網), LintCode, hihocoder, hackerrank, codewars等,其中LintCode整體網站功能設計與力扣雷同;hihocoder是一個專注于高水平的程式設計比賽與題目的網站,hackerrank定位比較清晰,網站題庫基于業界實用的各種前后端的語言,并為用戶提供專業的評估與高頻的比賽;codewars支持數十種語言,同樣更加接近實際開發所用的技術堆疊,牛客網產品定位和力扣相近,但牛客網的功能更多更雜(適用于大學生學習、備考、求職,涉及領域也不止IT),社區也相對花哨一點
而且就熱度而言,國內這樣的OJ比較有名的也只有力扣和牛客網
牛客網提供筆試題、面試編程題、高校期末考試題,甚至還可以在里面做一套961?就刷演算法題而言,牛客網的體驗沒有力扣好,做的比較粗糙,牛客同時還有簡歷投遞、技術堆疊學習等一堆雜亂的功能,可以看出牛客和力扣存在一定的競爭關系,但牛客面向資訊類技能(包括通用技能)的方方面面,而力扣的用戶還是以刷題為直接目的的為主,二者也可以共生,比如某程式員在成長階段可能用力扣更多,但在四處投簡歷時會到牛客網尋求更詳細的求職資訊
3.產品生態
力扣的核心用戶群是正在準備互聯網企業校招以及社招的各階段人群,包括其在內可能有以下幾種典型用戶:
| 條目 | 用戶A | 用戶B | 用戶C |
|---|---|---|---|
| 名字 | 劉啾九 | 王馬龍 | 許可多 |
| 基本資訊 | 25歲,在位元跳動公司上班 | 23歲,應屆生,準備校招中 | 24歲,學數學的,想轉行做資料分析師 |
| 使用背景 | 做了好久的測驗,想跳槽成后端資料庫開發 | 投遞的位元跳動公司對演算法要求高 | 想在短時間內掌握python/c++ |
| 偏好 | 學習作業可用的編程技巧 | 喜歡更貼近真實面試的場景 | 有及時的幫助與反饋 |
| 基本需求 | 針對mysql等資料庫題目練習 |
按知識點展開刷題計劃 | 通過學習模塊快速夯實基礎知識 |
| 潛在需求 | 深入參與社區,發掘最適合自己的企業 | 開通力扣會員享受位元跳動的企業題庫 | 不會配IDE,開通會員享受力扣的在線IDE |
力扣致力全程服務程式員的成長,那么最好情況下就是用戶在角色C \(\Rightarrow\) B \(\Rightarrow\) A \(\Leftrightarrow\) A的轉變程序中都能作為力扣的忠實用戶,當然這需要力扣進一步自然地將刷題/學習/求職三個功能銜接起來,C類用戶可能對演算法、編程完全不熟悉,TA可能往往是被有經驗的A/B類用戶安利過來的
力扣有對應的APP,基本上除了代碼提交其他功能都搬過去了,但其實沒必要,移動端的力扣可以專注于學習與社區這兩個內容,著力優化移動端用戶的瀏覽體驗,并且在用戶有做題需求時引導其使用網頁版力扣
4.產品規劃
其實力扣定位相當清晰了,刷題找作業方面很完善,再添加新功能反而有些冗余,不過我注意到力扣介紹稱"為用戶提供了多種多樣的開發工具,適用于真實的日常技術開發和學習場景,其中,Playground (*另一個比較完整的在線IDE)無需設定環境...",但實際上力扣對業界技術堆疊與所用框架涉及甚少,Playground 僅有一個React前端開發框架(只有這個比較接近開發環境)的環境,可以進一步開發,
以添加資料庫框架MyBatis(當然也可以是其他前后端庫或者機器學習框架)為例:
N(Need,需求):部分求職者想做后端工程師,而投遞的公司使用MyBatis,TA想熟悉相關基礎,做個小DEMO啥的方便作業中使用
A(Approach,做法):在學習模塊加入相關技術堆疊教程,Playground 新開發MyBatis的在線編程環境,同時題庫可以新增一類綜合編程題,讓用戶在Playground 上使用框架完成一個小專案,當然對于前端這種不好進行量化評測的我還沒想好怎么做
B(Benefit,好處):同時提高用戶的演算法能力和工程能力,從容面對面試
C(Competitors,競爭):上文提到的競品缺乏這種功能,可以考慮重點發展成為差異化功能
D(Delivery,推廣):在站內與相應具體技術的社區進行推廣
人力方面, 按Backend/Frontend/Test分為2-2-2
(胡言警告)
| 日期 | 描述 |
|---|---|
| week 1 | 在討論區就新功能發表意見征集帖,PM作需求調整 |
| week 2-4 | 開始學習模塊的文章編輯,生成新Playground 與綜合編程題的設計檔案 |
| week 5-8 | 后端搭建MyBatis/Java/JDBC的開發環境,同時前端復用已有的Playground 的UI,開始撰寫新Playground 的多檔案IDE界面 |
| week 9 | 前后端對接,進行大量集成測驗 |
| week 10 | 發布\(\alpha\)階段的Playground DEMO,視反饋意見作出調整 |
| week 11-12 | 增加新的題庫區,前端進行綜合編程題樣題界面的開發,用戶會在綜合編程題收到一份詳盡的指導書(), 后端在開發環境中建立題目所需的資料庫,部署評測腳本,驗證用戶用MyBatis寫的資料庫應用程式是否能正確操作資料庫 |
| week 13-14 | 考慮到用戶是多檔案開發,同時為了更加貼近開發環境,在力扣部署一個git服務器,給用戶使用git提交的選項,使用CI功能進行評測 |
| week 15 | 整合新功能,開展一輪回歸測驗與集成測驗 |
| week 16 | 完成\(\beta\)版本的發布,開啟用戶內測,增加更多的綜合編程題 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/274005.html
標籤:其他
上一篇:軟工案例分析之OJ
