版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
在線評測系統(tǒng)的設(shè)計與實現(xiàn)目錄TOC\o"1-3"\h\z\t"參考文獻,1,英文摘要,1,致謝,1,保證書,1"189741前言 在線評測系統(tǒng)的設(shè)計與實現(xiàn)專業(yè):軟件工程學號:201812300313學生姓名:吳家毅指導老師:王金艷【內(nèi)容摘要】程序在線評測系統(tǒng)(簡稱OJ,OnlineJudge)指針對用戶所提交的代碼進行運行時間、運行所占用內(nèi)存和準確性進行自動檢測和判斷的趨于智能化的系統(tǒng),其主要用于ICPC、學生能力提升、編程學習、課程教學等領(lǐng)域。近年來,編程設(shè)計類競賽不僅僅是學生在學校中爭取各類獎項,也是即將畢業(yè)的學生簡歷中的閃光點。那么學生對于算法的學習也就越加的迫切,為學生提供高效、簡便、輕量的學習算法的平臺也是迫在眉睫。為了高效的對大量的評測進行同時評測,評測系統(tǒng)的設(shè)計需要擺脫常規(guī)的單機評測,采取多機共存的方式提高系統(tǒng)的性能?!娟P(guān)鍵詞】B/S架構(gòu);在線評測;Vue;高性能1前言1.1研究的背景和意義近年來,算法類競賽在各大國內(nèi)高校不斷的發(fā)展和推廣,越來越多的學生開始學習算法,評測系統(tǒng)成為了學習算法和教師檢驗學生的學習情況不可或缺的工具。教師布置編程作業(yè),學生在作業(yè)本上手寫程序的老舊方法已然不能帶來學生學習編程上的成效,同時教師還得花費大量的時間批改作業(yè),不僅耗時還成效低。在線評測系統(tǒng)的研究和使用不僅能夠不僅便于教師對于學生的管理,讓學生能夠真實的編寫程序,同時還提供準確的程序評判功能,對于學生的日益繁重的編程學習帶來了高效性。目前雖然已有很多趨于穩(wěn)定的在線評測系統(tǒng)經(jīng)過研究并開發(fā)出來,但是目前開源的評測系統(tǒng)一是大多數(shù)針對于非校園的用戶使用,二是功能過多不夠輕量,三是使用不夠便捷,四是不具備可再開發(fā)且不方便學生管理,影響了教師對于學生學習情況的獲取。為提高高校對于學生編程學習和算法的普及,研究如何一個輕量、便捷、高性能的服務(wù)于高校的在線評測系統(tǒng)對于國內(nèi)高校進一步法陣和推廣算法類競賽和學生學習編程帶來了重要意義。在線評測系統(tǒng)還可以將統(tǒng)一類型的題目匯總的一個題單,不僅讓學生免于查找同類型題目所消耗的時間,還可以方便教師統(tǒng)計學生們對于不同類型題目知識點所掌握的深度進行比對。在線評測系統(tǒng)還可以提供比賽功能,教師可以創(chuàng)建比賽來考察學生對于不同的編程語言、題目類型、思維能力等進行考察,更可以通過比賽讓學生們處于一種緊張、高度思考的狀態(tài)進行磨煉,有利于參與其他大型比賽做準備。在線評測系統(tǒng)還可以統(tǒng)計每位學生自注冊以來所有的寫題過程,諸如做題次數(shù)、通過次數(shù)、參與比賽次數(shù)、每日做題次數(shù)等,通過這些數(shù)據(jù),教師可以更好的掌握每位學生編程習慣、學習效率等進行有效的評估。1.2國內(nèi)外研究現(xiàn)狀1.2.1國外研究現(xiàn)狀近20年來,在線評測系統(tǒng)在國外都有出現(xiàn)。俄羅斯的Codeforces,日本的信息學奧賽網(wǎng)站AtCoder,面向平面設(shè)計師和程序員的TopCoder,印度的CodeChef,波蘭的SPOJ,面向求職者的刷題網(wǎng)站LeetCode等均是國外有名的或存在時間較長的在線評測系統(tǒng),這些在線評測系統(tǒng)服務(wù)著他們各自的用戶,為用戶提供高效、便捷的在線評測體驗。Codeforces,一個俄羅斯的在線評測系統(tǒng),創(chuàng)建該系統(tǒng)的是來自俄羅斯薩拉托夫州立大學的MikeMirzayanov領(lǐng)導的一支團隊,該系統(tǒng)會定期開展公開和私有的比賽,用戶同樣可以在改系統(tǒng)進行刷題和交流。在Codeforces中每位用戶都有一個Rating分數(shù),根據(jù)Rating分數(shù)不同用戶姓名的顏色也不相同。Rating分只能通過參加比賽后通過后臺的算法進行改變。在比賽中,參賽的用戶不僅可以隨時查看自己的排名,還可以選擇只查看自己所關(guān)注的所有用戶在本場比賽中的排行榜。此外,比賽中還提供每個題目的通過和提交信息。LeetCode,一個建于美國硅谷的程序員學習平臺,其開發(fā)的內(nèi)容豐富和專業(yè)度高的職業(yè)提升平臺給全世界程序員帶來了福音,幫助了大部分程序員實現(xiàn)技術(shù)上的提升和鞏固。除此之外,LeetCode還提供高效的在線評測系統(tǒng),不僅提供各種類型的題目,還提供了目前主流的面試題。LeetCode提供了目前主流C、C++、Java、Python、Rust、JavaScript等十幾種編程語言的支持,用戶可以使用自己擅長的語言進行編程。LeetCode的編程模式為模板編程,不需要用戶編寫完整的代碼,只需要完成能夠解決題目問題的主要代碼即可,最終編寫好的代碼將會被LeetCode獨特的類似單元測試的技術(shù)進行編譯并載入到整體的測試框架中運行評測,即用戶無需關(guān)注數(shù)據(jù)的輸入,只需給出結(jié)果,剩余的邏輯將由LeetCode獨特的評測技術(shù)提供。當然,為了吸引更多的程序員前來學習,LeetCode還提供了比賽系統(tǒng)和積分獎勵機制,激勵平臺用戶[1]??偟膩碚f,國外對于在線評測系統(tǒng)的相關(guān)研究和發(fā)展是廣闊的,面向各類人群的,高穩(wěn)定的,高效率的。1.2.2國內(nèi)研究現(xiàn)狀近些年來,我國的在線教育發(fā)展快速,諸如好未來、新東方、隆海生物、全通教育等公司占據(jù)了半壁江山,從一開始的線下課堂到如今大多數(shù)轉(zhuǎn)為線上課堂進行教學,其實都擺不脫一個原因,即我國的很多家庭已經(jīng)不滿足與普通教育帶來的效果,越來越多家長開始在教育上展開競爭,導致了教育上的“內(nèi)卷”。編程教育也是如此,隨著這些年來編程方向崗位的不斷吃香,大部分程序員的薪資已然高于其他行業(yè)太多,所以學習編程的人也是越來越多。學習編程自然逃不開需要反復的動手編寫程序,從而提高自己的編程水平。而對于國內(nèi)的高校而言,編程課程所布置的作業(yè)日益繁重,若學生只是在作業(yè)本上完成編程作業(yè),其實并不能給學生帶來實質(zhì)性的實踐效果,而且教師需要花費大量時間于批改作業(yè)中,利大于弊。不過隨著近年來諸如清華大學、北京大學、杭州電子科技大學等都開發(fā)了自己的在線評測系統(tǒng),并將其用于日常教學和算法競賽中,其中所得到的成效比以前的人工式教學和學習有了很大的提升,也彌補了傳統(tǒng)計算機編程教學方面的不足。當然,不只是高校開始自研各自的在線評測系統(tǒng),國內(nèi)的也崛起了很多服務(wù)于大眾的在線評測系統(tǒng),如服務(wù)于初高中信息學競賽學子的洛谷,又如同樣如LeetCode一樣服務(wù)于程序員編程提升和學習的牛客,又如近兩年異軍突起的社區(qū)型在線評測系統(tǒng)Acwing,他們都是目前國內(nèi)比較出名的在線評測平臺,不僅僅給用戶提供了題目的評測,還提供了如題單、比賽、排行榜等豐富的功能,用戶也可以根據(jù)不同的題目難度進行編程學習和挑戰(zhàn),循序漸進的提高自己的編程能力。1.3研究內(nèi)容本文將講述如何設(shè)計并實現(xiàn)一個基于高校管理的在線評測系統(tǒng),將支持主流的如C、C++、Java、Python語言的在線編程和提交評測并實時監(jiān)控評測,并結(jié)合國內(nèi)外現(xiàn)有的在線評測系統(tǒng)的功能,支持如題單、比賽、排行版、用戶信息統(tǒng)計等功能的設(shè)計與實現(xiàn)。本文主要研究內(nèi)容包括:(1)探索了在線評測系統(tǒng)的研究背景和意義以及國內(nèi)外的相關(guān)發(fā)展情況,并結(jié)合現(xiàn)有的在線評測系統(tǒng)所提供的功能明確了本文將要實現(xiàn)的評測系統(tǒng)的主要功能。(2)探實并研究了系統(tǒng)的總體設(shè)計方案,將使用Vue框架、NaiveUI和ElementUI進行前端和后臺頁面的編寫,使用Express框架進行后端的編寫并配合Redis服務(wù)器進行數(shù)據(jù)緩存,采取類似Nginx負載均衡的思想對判題系統(tǒng)進行整體的框架設(shè)計,最終使用Docker容器技術(shù)進行部署運行雖有的服務(wù)。進行總體設(shè)計,確定游戲的功能需求,給出主要功能的用例圖。(4)研究了微服務(wù)的思想架構(gòu),分離系統(tǒng)中的如資源上傳、爬蟲服務(wù)等占用大帶寬的服務(wù)進行單獨實現(xiàn)和部署運行,為降低后端服務(wù)的整體壓力開辟了新方法。(5)對系統(tǒng)進行詳細設(shè)計,確定系統(tǒng)整體的架構(gòu)、用例模型、數(shù)據(jù)庫表結(jié)構(gòu)等,為系統(tǒng)設(shè)計奠定了基礎(chǔ)。(6)實現(xiàn)系統(tǒng)所有功能,并對系統(tǒng)進行功能開展各項測試,確保系統(tǒng)能夠正常的運行。2關(guān)鍵技術(shù)概述2.1Vue框架Vue是一個用于構(gòu)建用戶界面的漸進式框架,誕生于2014年,其作者是叫做尤雨溪的中國人。Vue是前端三大框架中最容易入手的框架,不同于React和Angular,其有著完整且全面的中文文檔供社區(qū)用戶學習。Vue提供的設(shè)計模式為MVVM模式[2],即Model->View->View->Model,如圖2-1所示,MVVM是對MVC和MVP兩種模式的進一步改進,開發(fā)者主需要關(guān)注數(shù)據(jù)邏輯的改變和一些簡單的HTML+CSS的頁面搭建即可完成可交互式的Web界面,Vue內(nèi)部已經(jīng)將開發(fā)者定義的數(shù)據(jù)進行響應(yīng)式處理,數(shù)據(jù)改變即可實現(xiàn)頁面中引用到了該數(shù)據(jù)的結(jié)點更新。圖2-1MVVM模式模型最左邊為視圖層,即View,其主要負責通過自身設(shè)計的模板語法將數(shù)據(jù)和HTML進行結(jié)合最終渲染到界面中。模式中間為視圖模型層,即ViewModel,其負責將Model層和View層建立其通信的橋梁,即連接。View中的數(shù)據(jù)改變或Model中的數(shù)據(jù)改變都將由ViewModel進行處理并進行反向反饋。模式最右邊為模型層,即Model,負責處理業(yè)務(wù)邏輯以及和服務(wù)器端進行數(shù)據(jù)交互處理。在MVVM模式下,View層和Model層并不需要有硬聯(lián)系,而是通過ViewModel層自動完成他們之間的關(guān)聯(lián),無需人為干涉,因此Vue得以通過該模式實現(xiàn)開發(fā)者只需操作數(shù)據(jù)和業(yè)務(wù)邏輯的一大特色,開發(fā)者完全看不到DOM操作,也無需關(guān)注,開發(fā)效率在前端三大框架中是最好的。Vue框架對比其他框架具有低耦合、可重用性、獨立開發(fā)、方便測試、易用的優(yōu)點,簡要介紹如下:低耦合。視圖可以獨立使用和運行,即HTML中的內(nèi)容可以自行改變而無需依賴于Model層,而一個ViewModel允許我們將同一個Model綁定到不同的“View”上使用??芍赜眯???梢园旬愋砸晥D邏輯放在一個ViewModel中,使得很多View均可以重用這段視圖邏輯,即Vue提供的Minxins。獨立性。開發(fā)頁面的研發(fā)人員可以無需關(guān)注UI的設(shè)計,而只對整體的邏輯和數(shù)據(jù)的變更進行操作。便于測試。因前端界面一直以來在測試上存在難度,開發(fā)中大部分Bug來自于邏輯處理,而由于ViewModel分離了大部分的邏輯,使得測試人員可以直接對ViewModel進行構(gòu)造相應(yīng)的單元測試。易于使用。研發(fā)人員從頭到尾只需要操作數(shù)據(jù)邏輯,沒有了DOM操作的煩惱,且Vue提供了諸如v-if、v-for、v-bind、v-on等指令,使開發(fā)者的開發(fā)效率更加高效。2.1.1前端組件庫現(xiàn)代的前端開發(fā)突破了老舊的懶式開發(fā),不為每個甚至每部分頁面或區(qū)塊單獨編寫不重樣的界面,而是基于組件式的開發(fā)方式,所有具有同一類型的界面、按鈕、區(qū)塊抽離成一個個可重復使用和配置的組件,即Component,這種方式稱為組件化開發(fā)[3]。組件式開發(fā)固然提高了現(xiàn)代的界面開發(fā)效率,但為每一個項目開發(fā)一個配套的組件庫仍造成了人力浪費且占用了大量的時間,故開發(fā)社區(qū)中出現(xiàn)了很多具有不同風格和組件的開源組件庫,開發(fā)者同樣可以自定義所有組件的樣式數(shù)據(jù)以達到區(qū)分度,從而避免了為每個項目開發(fā)一個組件庫的消耗,使得整個項目的開發(fā)效率至少提高30%,開發(fā)和只需關(guān)注業(yè)務(wù)邏輯,而不需要考慮基礎(chǔ)組件的復用性、擴展性、穩(wěn)定性等問題。目前流行的組件庫有ElementUI、Bootstrap、AntdDesign等。2.1.2前端構(gòu)建工具前端工程化是將軟件工程中的工程化的方法和思想運用到了前端開發(fā)中,而其并沒有權(quán)威和準確的定義。我們可以將其分為兩種理解方式:狹義上,將開發(fā)階段的代碼發(fā)布到生產(chǎn)環(huán)境,包含:構(gòu)建,分支管理,自動化測試。廣義上,前端工程化應(yīng)該包含從編碼到發(fā)布,運行和維護的所有階段。當然,最準確的定義為在前端整個開發(fā)的過程中所使用的到的方法和工具可以成為前端工程化。而前端構(gòu)建工具[4]就是用于前端開發(fā)過程中進行諸如將SASS轉(zhuǎn)為CSS、運行本地服務(wù)器、將所有分散的代碼整合成Bundle、打包第三方包、壓縮代碼等操作。構(gòu)建是將工程化、自動化思想進行結(jié)合,而構(gòu)建過程中所有的流程都可以使用代碼實現(xiàn),代碼將會自動的為我們執(zhí)行所有復雜的構(gòu)建過程的操作??偟膩碚f,構(gòu)建引入前端,不僅為前端開發(fā)帶來了活性,同時也釋放了我們的生產(chǎn)力。目前最火的前端構(gòu)建工具有Webpack、Vite、Gulp、Parcel等,每個前端構(gòu)建工具所提供的功能基本類似,區(qū)別在于各自的運行機制不一。Webpack是一個模塊打包器,其視HTML,JS,CSS,圖片等文件和資源為同一種資源,每個資源文件都是一個模塊文件,Webpack可以根據(jù)每個模塊文件之間的相互依賴關(guān)系將所有的模塊進行打包。Webpack對于不是JS的文件需要通過loader機制進行解析為JS代碼,最終根據(jù)開發(fā)者的配置文件和默認配置信息進行整合,將所有模塊打包為至少一個Bundle。Wepback還提供Plugin機制,供開發(fā)者們在生產(chǎn)和打包過程中進行更好的開發(fā)體驗和提升開發(fā)效率。Vite是基于現(xiàn)代瀏覽器的一個更快速、更簡潔的Web應(yīng)用開發(fā)工具和構(gòu)建工具。Vite基于瀏覽器原生支持的ESM模塊系統(tǒng)進行實現(xiàn),其出現(xiàn)的主要原因之一是為了解決在開發(fā)過程中Webpack的啟動、編譯和熱更新隨著項目體積變得龐大而變得緩慢的問題。Vite在打包階段使用成熟穩(wěn)定的Rollup進行打包,而在開發(fā)時使用ESBuild對一些資源進行快速打包。其最佳成就就是極大的減少了開發(fā)者在開發(fā)過程中因更改某些文件而進行熱更新所帶來的反應(yīng)時間。2.1.3WebSocketWebSocket[5]是一種單個TCP連接上進行全雙工通信的協(xié)議。其于2011年被IETF設(shè)定了一個新的標準RFC6455,之后又由RFC7936標簽進行補充規(guī)范。WebSocketAPI也被W3C定義為標準。WebSocket的出現(xiàn)使得客戶端和服務(wù)器之間的數(shù)據(jù)傳輸不僅僅是由客戶端進行單向發(fā)起的通信問題,它允許構(gòu)建好通信的雙方均具有獨立發(fā)送數(shù)據(jù)的能力,且雙方簡歷的連接是具有持久性的,這減少了在純粹使用HTTP協(xié)議上發(fā)送多個信息所需要構(gòu)建多次TCP協(xié)議的資源消耗和時間消耗。2.2Express框架Express[6]是基于Node.js開發(fā)的一個更具輕量型的Web開發(fā)框架,開發(fā)人員可以使用Express快速的構(gòu)建和開發(fā)Web和移動端的應(yīng)用。Express不對Node.js原本的特性進行二次抽象,而是在其基本功能上進行擴充,且Express完全是由路由和中間件構(gòu)成的框架,本質(zhì)上來說一個Express應(yīng)用就是調(diào)用各種中間件完成開發(fā)者所需要的功能。如今很多的Web開發(fā)框架,如Django、Koa等均提供了完善的后臺開發(fā)體驗和架構(gòu),Express可以用作存后端開發(fā)服務(wù),不僅僅是因為Express內(nèi)部已經(jīng)實現(xiàn)了完善的路由系統(tǒng),開發(fā)者更可以基于流式的中間件排布對所有的API進行諸如權(quán)限控制、用戶鑒權(quán)等重復操作,極大的減少了開發(fā)者所需編寫的代碼量,也使得整個邏輯更加的清晰。2.2.1Express中間件Express中的中間件可以看做一個函數(shù),所有的中間件均通過Express實例進行注冊并使用,每個中間件均可以接受到Request、Response、Next三個參數(shù)實例。Request。記錄了一個HTTP請求中所攜帶的所有諸如請求頭、請求體等信息。Response。將要發(fā)送給客戶端的HTTP請求實例,同Requst的結(jié)構(gòu)類似,可由開發(fā)者自行設(shè)置回傳信息。Next。調(diào)用下一個中間件的函數(shù),若不調(diào)用,則中間件執(zhí)行流將到此結(jié)束,后續(xù)的所有中間件將不會被執(zhí)行。2.3評測技術(shù)在線評測系統(tǒng)不可或缺的就是程序的評測,而為了去除人工編譯和運行程序,就誕生除了使用自動化的程序解決人工的程序操作。除此之外,提供給外界使用的系統(tǒng)將會暴露出很多安全問題,諸如用戶提交的程序?qū)?zhí)行關(guān)閉整個服務(wù)器的運行等安全隱患。容器和沙箱是談?wù)擃A(yù)防惡意軟件防護時經(jīng)常提到的2個術(shù)語,而沙箱技術(shù)是在線評測系統(tǒng)中使用的最廣泛的技術(shù)。從本質(zhì)上講,沙箱是關(guān)于創(chuàng)建隔離的獨立環(huán)境,可將其用于特定安全目的[7],而對于具有威脅的代碼,沙箱將限制整個程序的系統(tǒng)調(diào)用,最終導致程序?qū)?zhí)行出錯,而不會成功的運行。而容器技術(shù)其實現(xiàn)在已經(jīng)很流行了,如Docker容器技術(shù)等。一個容器就相當于一個小型的服務(wù)系統(tǒng),用戶所要執(zhí)行的任務(wù)將會運行于獨立的容器中,容器的崩潰不會引起宿主機的崩潰,從而解決了惡意程序引起的系統(tǒng)安全問題。以上介紹了評測技術(shù)中安全問題的解決方案,而限制程序運行的時間和內(nèi)存使用的最頻繁的技術(shù)是Cgroup,借助于Linux系統(tǒng)下自帶的Cgroup,能很好的限制程序的運行過程。2.4Docker容器與虛擬化技術(shù)虛擬化技術(shù)是一種資源管理技術(shù),計算機中的不同實體將會被抽象、轉(zhuǎn)化后以一種比原生態(tài)更好的方式展示給用戶的技術(shù)。它的核心是對資源的抽象,目標是為了在一個主機上同時運行多個系統(tǒng)或應(yīng)用,從而提高系統(tǒng)資源的利用率。虛擬化技術(shù)從宏觀上可分為基于硬件的虛擬化和基于軟件的虛擬化[8]?;谟布奶摂M化:又稱之為傳統(tǒng)的虛擬化技術(shù),其利用虛擬宿主機底層硬件環(huán)境,在硬件物理資源的基礎(chǔ)上,虛擬成多個OS,進而在OS資源的基礎(chǔ)上形成相對單獨的程序運行環(huán)境,如常用的VMwareWorkstation和VirtualBox等都采用了該技術(shù)[8]?;谲浖奶摂M化:操作系統(tǒng)的內(nèi)核通過創(chuàng)建多個虛擬的操作系統(tǒng)實例(內(nèi)核和庫)來隔離不同的進程。Docker容器技術(shù)就是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復用宿主機的操作系統(tǒng),因此更加輕量級[8]。3系統(tǒng)總體設(shè)計此章節(jié)包含了需求分析、概要設(shè)計兩個部分。需求分析對游戲的功能需求做出詳細的說明,概要設(shè)計給出功能模塊之間的交互設(shè)計和數(shù)據(jù)結(jié)構(gòu),是實施開發(fā)工作的基礎(chǔ)。3.1需求分析3.1.1系統(tǒng)需求概述本系統(tǒng)是一個基于瀏覽器端的在線評測系統(tǒng),后端、判題服務(wù)器等服務(wù)均運行于服務(wù)器的Docker容器中。該系統(tǒng)提供主要給高校提供獨立的,自主可控的在線評測服務(wù),用于給學生進行編程相關(guān)的訓練、刷題和比賽。學生可以直接在電腦的瀏覽器中進入在線評測系統(tǒng)選擇想要刷的題目并在線編寫程序進行實時的評測,為學生省去了自己編譯、運行、評判的步驟,提高了學生學習編程的效率和成本。同時,高校可以通過后臺錄入更多的題目,安排定時比賽,監(jiān)測一日內(nèi)的訪客量、提交量等數(shù)據(jù),實時分析學生的學習情況,進一步強化學生對于編程學習的效率。除了刷題和比賽外,本系統(tǒng)還提供了登錄和注冊的基本功能,學生需輸入正確的手機號,學號,學校信息,真實姓名等信息進行注冊,注冊過程中要求進行驗證碼查驗。而登錄過程僅需手機號和密碼即可登錄。為了限制同一用戶多機登錄的情況,增加IP的查驗,實現(xiàn)用戶僅能單機登錄的功能。網(wǎng)絡(luò)上現(xiàn)有的在線評測系統(tǒng)僅有少部分提供了比賽的實時廣播功能,當比賽進行中因一些題目或測試數(shù)據(jù)有誤引起的問題出現(xiàn)時并不能很好的通知正在進行比賽的用戶,這反而使得某些用戶錯失了題目的通過機會。所以,提供一個賽時實時廣播功能更能有利于后臺管理員或教師管控比賽,也有利于學生在賽時及時獲取正確的信息。本系統(tǒng)劃分為六個子塊組成:前臺、后臺、后端服務(wù)、判題服務(wù)、文件上傳微服務(wù)、爬蟲微服務(wù)。本系統(tǒng)的總功能模塊如圖3-1所示。圖3-SEQ圖\*ARABIC1評測系統(tǒng)總功能模塊本系統(tǒng)的前臺模塊的詳細功能劃分如圖3-2所示。圖3-2前臺模塊功能模塊本系統(tǒng)的后臺模塊的詳細功能劃分如圖3-3所示。圖3-3后臺模塊功能模塊3.1.2系統(tǒng)功能需求分析本系統(tǒng)前臺模塊應(yīng)具備以下七個基本功能:(1)登錄和注冊在前臺即瀏覽器網(wǎng)頁中,通過不同頁面的權(quán)限進行限制非登錄和登錄的用戶所能訪問到的頁面,大部分涉及重要數(shù)據(jù)信息的展示的頁面強制用戶登錄后方可訪問,這是安全防范的首要目標。本系統(tǒng)的前臺允許用戶通過填寫手機號、真實姓名、學號、郵箱、所在學校、密碼和昵稱完畢后在經(jīng)過合法數(shù)據(jù)驗證機制驗信息通過后方可進行注冊,且為了進一步限制一個手機號僅能注冊一個賬戶和手機號的有效性,增加了短信驗證碼作為二次驗證后方可最終注冊。本系統(tǒng)的前臺登錄機制僅需用戶通過手機號和密碼進行登錄,并無圖片驗證碼和短信驗證碼等驗證機制,降低了用戶在登錄過程中的復雜度。用戶填寫的手機號和密碼發(fā)送到后端服務(wù)中進行驗證,若數(shù)據(jù)庫中存在該手機號的賬戶且密碼對應(yīng)則允許登錄。若無該手機號的用戶將提示用戶“該手機號未注冊”,若密碼不正確則提示用戶“密碼錯誤”。該部分用例圖如圖3-4所示。圖3-4前臺登錄和注冊用例圖(2)公告模塊在前臺中,為了更好的提供一些即時的或重要的信息供所有用戶獲取,完整公告模塊依然必須。用戶通過頭部導航進入到公告模塊界面,公告模塊界面的所有公共可分為三類:信息公告、重要通知和工作動態(tài),并提供按照公告標題進行對應(yīng)的公告分類下的公告進行搜素的功能。當當前分類下沒有公告或者用戶所搜索的公告不存在時,將會展示空的狀態(tài)告知用戶。對于每個公告,均可以被管理員設(shè)置為置頂?shù)幕蚱胀ǖ?,設(shè)置為置頂?shù)墓鎸旁诋斍胺诸愊滤泄娴那懊妫菀鬃層脩魹g覽。用戶可以點擊任意一個公告的標題瀏覽當前公告的詳細信息,公告的內(nèi)容展示使用簡潔美觀的Markdown進行渲染,用戶可以通過點擊瀏覽導航區(qū)域的每個標題滑動到指定的內(nèi)容位置進行閱讀,當然隨著用戶的滾動,導航區(qū)域也會自動的提示用戶當前所在的內(nèi)容位置。該部分用例圖如圖3-5所示。圖3-5前臺公告模塊用例圖(3)題庫模塊題庫模塊主要有兩個功能,題目檢索和題目列表展示。用戶通過界面的導航進入到題庫界面,題庫的默認篩選為目前用戶可見的所有題目。題目的檢索鍵可以為根據(jù)題目標題、題目ID、題目等級和題目的標簽進行精細化篩選,其中題目標題和題目ID不能同時起作用。題目標簽是通過用戶自主選擇的方式進行有意的選擇想要篩選的標簽進行篩查,可選擇多個,而題目等級只能選擇一到五級。地根據(jù)用戶的篩選規(guī)則,在篩選的下方提供當前篩選項下的所有題目的列表,一頁最多提供15條題目信息,通過分頁進行切換。每個題目展示的信息有題目ID、題目標題、題目標簽、題目等級和題目的通過率。用戶可以點擊某個題目的標題瀏覽該題并進行編寫代碼提交評測。當用戶的鼠標移動到任意一個題目的通過率區(qū)域時,將提供一個懸浮的提示表格告知用戶該題的提交信息,包括提交數(shù)、通過數(shù)等數(shù)據(jù)。當用戶點擊某個題目的標題進入該題的詳情頁后,整個頁面將會默認的為橫屏模式,即在該模式下將會分為兩個區(qū)域,左邊的區(qū)域用于顯示題目的詳細信息,如題目描述、輸入格式、輸出格式、樣例等。右邊區(qū)域為代碼編輯區(qū),用戶可以修改所編寫的代碼的語言標識和代碼編輯區(qū)的一些特性設(shè)置。還有一個模式為豎屏模式,該模式默認在用戶屏幕寬度小于800px的情況下強制切換,或者在800px以上通過一定的操作進行切換,該模式下題目的信息和編輯區(qū)域?qū)舷逻B接。用戶可以編輯好代碼后點擊編輯區(qū)上部分的“提交評測”按鈕進行代碼評測,若用戶沒有寫任何代碼,將給出“請編寫代碼后再提交”的提示。當提交過后會彈出一個評測狀態(tài)Dialog,用于實時顯示當前評測的狀態(tài)和信息,若用戶在運行到某個測試點出現(xiàn)錯誤后將會停止評測并給出響應(yīng)的狀態(tài)反饋,若所有測試點均通過將會展示“Accepted”的字樣,表示用戶的代碼是正確的。每個測試點都將會給出用戶的代碼運行所用時間和所用內(nèi)存。在題目的內(nèi)容展示部分的最上方提供了“歷史提交”的Tab供用戶進行跳轉(zhuǎn)到歷史提交列表查看所有的對于當前題目的提交,已列表的形式展示。該部分用例圖如圖3-6所示。圖3-6前臺題庫模塊用例圖(4)排行榜模塊為了方便系統(tǒng)使用者、教師等對所有用戶的某個指標進行排序后的排行,前臺界面提供了排行榜模塊,即排行榜界面。進入排行榜界面,首先會提示用戶排行榜的數(shù)據(jù)將于每天晚上的10點整進行更新,每次更新的內(nèi)容為前一天晚上10點后到當天晚上10點時間段所有用戶的數(shù)據(jù)匯總變化排序。排行榜主要有兩個分類,一為根據(jù)總分排序,二為根據(jù)用戶通過題目數(shù)進行排序,由用戶進行隨意切換。排行榜提供用戶搜索功能,輸入某個用戶的真名進行查詢該人在真?zhèn)€榜單中的位置信息并單獨列出。排行榜會詳細的列出每個用戶新舊數(shù)據(jù)的一個變化細節(jié),如排名前后變化、分數(shù)前后變化、過題數(shù)前后變化等,在簡潔的前提下提高全面性和細節(jié)性。該部分用例圖如圖3-7所示。圖3-7前臺排行榜模塊用例圖(5)題單模塊用戶通過前臺界面的導航進入題單界面,題單界面是從題庫模塊中抽離出來的功能模塊。每個題單都可以看做是一個小型的題庫,題單中的所有題目都是具有同一性質(zhì)或者處于同一個分類的所有題目的集合。通過管理員的整合,將題庫中的題目匯集成一個題單,每個題單都有題單簡介、題單題目列表等功能。用戶可以在題單界面根據(jù)題單標題進行搜索,填寫好需要搜索的題單標題后點擊搜索框右邊的搜索圖標按鈕即可進行搜索。每個題單中的題目列表和題庫中的題目列表所展示的內(nèi)容一致,即題目的標題、題目的ID、題目的等級、題目的標簽和題目的通過率。題單可以由管理員創(chuàng)建多個,故題單界面提供分頁功能,每一個展示不超過20個題單,用戶可以通過頁面底部的分頁條進行跳轉(zhuǎn)對應(yīng)的頁面。該部分用例圖如圖3-8所示。圖3-8前臺題單模塊用例圖(6)比賽模塊用戶可以通過前臺界面的導航進入比賽模塊界面。比賽模塊界面主要展示用戶可以查看的所有比賽列表和一個前20名用戶報名比賽次數(shù)的排行榜。報名次數(shù)排行榜展示了用戶的排名、用戶名稱用戶所在學校和用戶參加的比賽次數(shù),可以通過點擊用戶的名稱進入該用戶的個人中心查看其詳細信息。比賽列表從上到下依次列出,列出了每個比賽的標題、開始時間、結(jié)束時間、是否是私密的、用戶是有報名和比賽的規(guī)則類型。只有當前登錄的用戶報名了某場比賽才能在對應(yīng)的比賽上顯示“已報名”的字樣。用戶通過點擊某場比賽的標題查閱該場比賽的一些有效信息,如比賽的狀態(tài)、比賽的起止時間、比賽的報名人數(shù)、比賽主辦方和比賽簡介,均展示在一個Dialog中。若該場比賽“未開始”,則在Dialog的下方將會提供“報名”按鈕供用戶進行報名,此時若用戶點擊報名且該場比賽是私密的,用戶輸入正確的報名密碼后方可完成報名。若該場比賽“正在進行中”,Dialog的下方將會根據(jù)用戶是否報名顯示不同的字樣,如“進入比賽”或“為報名本場比賽”,只有報名的用戶方可進入該場比賽。若比賽處于“已結(jié)束”,則Dialog下方的按鈕顯示規(guī)同“正在進行中”一致。任何未報名的用戶鼠標移到按鈕上均為禁用狀態(tài)。用戶通過“進入比賽”或“查看比賽”的Dialog按鈕進入某場比賽的詳情頁后,將會展示三部分操作區(qū)域給用戶——左邊的導航切換區(qū)域,中間的當前選中導航信息展示區(qū)域,右邊的固定比賽信息展示區(qū)域。導航區(qū)域分為:比賽簡介,題目列表,提交列表,排行榜,比賽廣播共五大塊,默認選擇比賽簡介,則中間的內(nèi)容區(qū)域?qū)故井攬霰荣惖暮喗樾畔ⅰS脩敉ㄟ^切換導航從而改變中間區(qū)域顯示的內(nèi)容。切到題目列表和排行榜時,中間的顯示區(qū)域?qū)幸粋€共同的刷新按鈕,用于刷新題目數(shù)據(jù)和排行榜數(shù)據(jù),每30秒可刷新一次,若30秒內(nèi)多次點擊將會提示“請30秒后再來操作”的警告彈窗。若用戶選擇提交列表,則中間顯示區(qū)域不僅僅會顯示當場比賽所有用戶的所有提交列表,同時直接根據(jù)用戶名稱、題目和“只看自己”的篩選,也提供重置按鈕進行篩選重置。該部分用例圖如圖3-9所示。圖3-9前臺比賽模塊用例圖本系統(tǒng)后臺模塊應(yīng)具備以下八個基本功能:(1)登錄后臺僅提供給管理員或教師進行登錄訪問,不對外開放直接的注冊功能,所有賬號的注冊僅能通過有相關(guān)權(quán)限的管理員進行添加和賦予對應(yīng)的權(quán)限。后臺的登錄僅需要輸入手機號和密碼即可,若手機號不正確,那么會提示用戶“手機號有誤”的字樣,當用戶手機號輸入正確后調(diào)用后端服務(wù)接口進行登錄,在登錄過程中若用戶輸入的手機號尚未注冊過,則在后臺提示“用戶不存在”,若密碼不正確則會提示“密碼錯誤”,當所有的驗證流程均無誤后方用戶方可正式進入后臺的操作界面。該部分用例圖如圖3-10所示。圖3-10后臺登錄模塊用例圖(2)首頁信息展示模塊前臺不提供展示本日的所有用戶的所有提交,故為了供教師能夠監(jiān)控和實時獲得每日用戶的編程學習狀態(tài)和效率,在后臺的首頁中顯示當天所有用戶的所有提交,不區(qū)分普通提交和比賽提交。管理員或教師通過點擊提交列表中的“通過狀態(tài)”列后將彈出一個Dialog,用于顯示當前用戶所提交的代碼。若用戶的提交是編譯不通過的或產(chǎn)生了系統(tǒng)錯誤,Dialog顯示的信息將會額外增加編譯錯誤的信息或系統(tǒng)錯誤的信息,以供管理員進行查修。除了在首頁提供當天的所有提交外,管理員還能看到當日的所有訪客記錄、新注冊的用戶數(shù)、總提交數(shù)、當前賬號所處的地理位置等豐富的信息。該部分用例圖如圖3-11所示。圖3-11后臺首頁信息展示模塊用例圖(3)用戶管理模塊用戶管理模塊用于管理普通用戶和管理員用戶,若某個用戶沒有普通用戶管理和管理員用戶管理的權(quán)限,則后臺將不提供用戶管理模塊的導航給用戶切換,即使用戶手動修改URL進行切換仍會提示“無權(quán)限”的懸浮提示,并取消本次切換。擁有普通用戶或者管理員用戶管理的權(quán)限的賬號將可以進入對應(yīng)的管理界面,操作頁面的上方將提供篩選功能,用戶可以通過姓名、封禁狀態(tài)、手機號等信息進行賬號篩選。下方將會顯示每次篩選后的所有賬戶信息的列表,每一頁顯示不超過20條信息。擁有權(quán)限的用戶可以添加、刪除、修改、查看和封禁一個賬戶。用戶可以點擊整個頁面最上方的“添加賬戶”按鈕進行手動添加賬戶,手動添加賬戶需要填寫賬戶的手機號、姓名、郵箱等信息,并經(jīng)過一定的驗證后方可添加成功。刪除賬戶需要用戶通過勾選界面下方的列表項進行多個賬戶同時刪除,若用戶未勾選任何賬戶,則會提示“請選擇需要刪除的賬戶”,若刪除成功后將提示“刪除成功”,若刪除失敗將提示“刪除失敗”。封禁賬戶僅能單個進行封禁,用戶需要點擊賬號列表的一行中最后一列的“封禁”按鈕方可封禁該用戶,不提供多個同時封禁的功能。若封禁成功,該用戶將被移除當前列表并提示“封禁成功”,若封禁失敗則提示“封禁失敗”。用戶通過點擊賬戶列表的一行中的最后一列的“查看”按鈕,將會彈出一個Dialog,用于查看某個賬戶的詳細信息,包括手機號、姓名、注冊時間、郵箱、最近一次修改信息的時間等。用戶通過點擊賬戶列表的一行中的最后一列的“修改”按鈕,將會彈出一個Dialog,用于修改某個賬戶的信息,包括重置密碼、手機號、姓名、郵箱等。若完成修改則點擊Dialog最下方的“確定”按鈕進行保存修改,若修改成功則會提示“修改成功”且自動關(guān)閉Dialog,若修改失敗則會提示“修改失敗”并且Dialog不會關(guān)閉。若放棄更改可以點擊Dialog右上角的關(guān)閉圖標或者最下方的“取消”按鈕關(guān)閉當前Dialog。該部分用例圖如圖3-12所示。圖3-12后臺用戶管理模塊用例圖(4)題庫管理模塊題庫管理分為三個子管理系統(tǒng)——題目管理,測試數(shù)據(jù)管理和題目標簽管理,且均需要對應(yīng)的權(quán)限方能進入。首先,題目管理的操作邏輯和用戶管理大體相同,提供對題目的增、刪、改、查功能。增添一個題目同樣是點擊界面最上方的“添加題目”按鈕并在彈出的Dialog中輸入所有必填的題目信息后點擊Dialog最下面的“確定”按鈕經(jīng)過信息驗證后即可添加,若信息驗證失敗,則提示“信息驗證失敗”,若提交添加成功后提示“添加成功”并關(guān)閉Dialog,若失敗則提示“添加失敗”。其余操作均同用戶管理。再者,測試數(shù)據(jù)管理提供對系統(tǒng)所有題目的測試數(shù)據(jù)進行上傳、下載的操作,進入該界面后左邊提供根據(jù)題目ID、題目標題進行檢索題目的功能,點擊確定后會在右邊的題目列表中顯示查到的所有相關(guān)的題目,若無對應(yīng)的題目則提示“無數(shù)據(jù)”的字樣。對于列表的每一行,最后一列均提供“上傳”和“下載”兩個按鈕,通過點擊“上傳”按鈕彈出Dialog,Dialog中提供上傳功能和“確定”按鈕,用戶或管理員選擇對應(yīng)的系統(tǒng)上的“.zip”文件后點擊“確定”按鈕即可上傳,若上傳的數(shù)據(jù)有誤則會給出對應(yīng)的提示,若成功則提示“上傳并解壓成功”。若一個題目已上傳了數(shù)據(jù),則“下載”按鈕可點擊,否則不可點擊。點擊后即可下載上傳的“.zip”文件,若下載失敗則提示“下載超時或失敗”。最后,題目標簽管理主要供管理員或教師用戶對整個系統(tǒng)的標簽進行搜索、增加和刪除的操作。增加的標簽將會用戶前臺和后臺中供用戶進行對應(yīng)的標簽進行題目的篩選。管理員或教師用戶可以在搜索框中輸入標簽名稱進行檢索,下方的標簽列表將會顯示所有檢索到的標簽,若無內(nèi)容則提示“無數(shù)據(jù)”的字樣。用戶可以點擊搜索框右邊的下拉框中的“添加標簽”或“刪除標簽”選項對標簽進行操作,若操作成功則給出提示,若用戶沒有選擇需要刪除的標簽則提示“請選擇需要刪除的標簽”。該部分用例圖如圖3-13所示。圖3-13后臺題庫管理模塊用例圖(5)比賽管理模塊比賽管理分為比賽列表管理和比賽廣播,即有對應(yīng)權(quán)限的管理員或教師用戶可以管理所有的比賽,并對正在進行的比賽發(fā)送全場的廣播消息。首先,比賽列表管理提供對所有比賽的搜索、新建、編輯、刪除和查看的操作,操作界面同用戶管理和題目管理,均為一套模板。用戶通過點擊比賽列表管理界面左上方的“新建比賽”按鈕進入新建比賽的步驟界面,分為填寫比賽信息,選擇賽題,賽題排序和設(shè)置,創(chuàng)建完成四個步驟。用戶需完成上一步并通過相應(yīng)的表單驗證后方能點擊界面下方的“下一步”按鈕跳轉(zhuǎn)到下一步,若需要更改上一步驟的信息可點擊界面下方的“上一步”回到上一個步驟。在選擇賽題步驟中提供題目的賽選和選擇操作,用戶通過勾選相應(yīng)的題目后方可進入下一步。若任何一步操作中不夠完善則給出提示“數(shù)據(jù)不完整”。到了倒數(shù)第二步后點擊“創(chuàng)建”按鈕即可發(fā)起創(chuàng)建,若成功創(chuàng)建則提示“創(chuàng)建成功”,否則提示“創(chuàng)建失敗”。用戶可以通過點擊比賽列表管理界面下方的比賽列表中任意一個“編輯”按鈕進入新增編輯比賽界面進行編輯,同上有四步操作。其余的如刪除和查看均同用戶管理和題目管理操作和效果一致。最后,比賽廣播功能界面左邊列舉了所有正在進行的比賽,用戶選中一個比賽后右側(cè)會顯示該場比賽中所有已經(jīng)發(fā)布的廣播和條數(shù),用戶通過點擊右下方的“喇叭”按鈕對選中的比賽進行發(fā)布廣播內(nèi)容的操作。若發(fā)布成功則提示“發(fā)布成功”,否則提示“發(fā)布失敗”。 該部分用例圖如圖3-14所示。圖3-14后臺比賽管理模塊用例圖(6)題單管理模塊題目管理同比賽列表管理操作一致,需要用戶有響應(yīng)權(quán)限方可進入,提供對題單的新增、編輯、刪除、搜索和查看的功能。用戶通過點擊界面左上方的“新增題單”按鈕進入新增編輯題單界面進行操作,新增成功后將提示“新增成功”,若在新增的任意一步驗證失敗則不允許繼續(xù)進行,若最后點擊“新增”按鈕失敗則提示“新增失敗”。用戶通過點擊題單管理界面下方的題單列表的操作列的“編輯”和“查看”按鈕對某個題單進行編輯和查閱。編輯同新增使用同一界面,僅提示詞不同。用戶通過點擊題單管理界面上方的“刪除”圖標,對選中的題單進行刪除,若刪除成功則提示“刪除成功”,否則提示“刪除失敗”。若沒有選擇任何的題單,則提示“請選擇需要刪除的題單”。該部分用例圖如圖3-15所示。圖3-15后臺題單管理模塊用例圖(7)公告管理模塊公告管理同用戶管理和題目管理操作一致,提供發(fā)布、刪除、查看、編輯和搜索題單的功能,同樣僅有相關(guān)權(quán)限的用戶方可操作。用戶通過點擊界面左上角的“發(fā)布新公告”按鈕打開一個Dialog并填寫公告標題、公告內(nèi)容、公告所屬分類、是否置頂?shù)刃畔⒑簏c擊Dialog下方的“確定”按鈕即可發(fā)布新的公告,若信息填寫有誤則提示“信息有誤,發(fā)布失敗”,信息無誤則提示“發(fā)布成功”并關(guān)閉Dialog。用戶通過點擊界面下方的公告列表的“操作”列中的“查看”和“編輯”按鈕對某個公告進行查看和編輯操作。編輯操作同發(fā)布操作一致。用戶通過界面中間的篩選框進行相應(yīng)的公告篩選,可填寫公告標題、公告編號、是否置頂進行關(guān)鍵篩選。該部分用例圖如圖3-16所示。圖3-16后臺公告管理模塊用例圖(8)權(quán)限管理模塊為了有效管控后臺的每一位管理員或教師賬號所能使用到的模塊,且一些涉及管理員增刪改查等操作的功能并不能每個賬號都可以操作,故需要對每個賬號進行權(quán)限管理。有權(quán)限管理權(quán)限的賬號可以通過后臺界面的導航進入管理界面,權(quán)限管理界面僅提供一個操作,即編輯對應(yīng)賬號的權(quán)限。用戶可以點擊賬號列表中最后一列的“編輯”按鈕,對一個賬號進行權(quán)限的分配,若某個用戶需要“用戶管理”的權(quán)限,則在對應(yīng)列打上勾后即可,其他權(quán)限以此類推。選擇好后點擊最后一列中的“保存”按鈕即可完成保存。若保存失敗則提示“編輯失敗”,否則提示“編輯成功”。該部分用例圖如圖3-17所示。圖3-17后臺權(quán)限管理模塊用例圖3.2概要設(shè)計3.2.1功能模塊之間的信息交互設(shè)計(1)前臺系統(tǒng)主界面用戶在瀏覽器中輸入前臺系統(tǒng)的URL后,頁面的最上方提供了頁面導航和系統(tǒng)名稱展示,前臺系統(tǒng)的每個界面模塊之間的交互通過頁面導航即可實現(xiàn)轉(zhuǎn)換。頁面導航包含“首頁”、“公告”、“題庫”、“題單”、“榜單”、“比賽”六個按鈕。若用戶未登錄,則將額外增加兩個按鈕“登錄”和“注冊”,進行登錄或注冊功能的切換操作。若用戶已登錄,則將額外增加“個人中心”和“退出登錄”兩個下拉選擇,用戶可點擊“個人中心”切換到“個人中心”模塊界面。(2)題目展示和代碼編輯頁題目展示和代碼編輯頁中提供“返回”按鈕,供用戶切回上一個模塊界面。同時編輯區(qū)域提供“格式化”、“清空”、“調(diào)試”、“全屏”、“編輯器設(shè)置”和“提交評測”六個按鈕。(3)公告界面通過頁面導航進入公告界面后,點擊公告的不同分類按鈕即可切換到不同的公告進行展示。在公告界面上方的輸入框輸入需要搜索的公告標題后,點擊任意一條公告的標題即可打開公告詳情展示頁面。(4)比賽界面設(shè)置界面包含畫質(zhì)和畫面兩個部分。如功能需求分析中所述,從上至下排列。點擊每一欄的左右選擇按鈕進行設(shè)置。點擊應(yīng)用按鈕,彈出應(yīng)用設(shè)置詢問框。按下鍵盤ESC鍵,返回系統(tǒng)主界面。(5)個人中心界面登錄后點擊“個人中心”進入,展示用戶在系統(tǒng)中的如提交、比賽、排行等信息統(tǒng)計和圖表展示。點擊個人資料卡右方的“編輯資料”按鈕進入個人資料編輯頁面,編輯好新的資料后點擊“保存”按鈕進行提交,點擊“返回”按鈕返回到個人中心,點擊“撤銷”按鈕撤銷本次編輯。(6)后臺系統(tǒng)主界面用戶在瀏覽器中輸入后臺系統(tǒng)的URL后,頁面的左側(cè)提供了頁面導航和系統(tǒng)名稱展示,前臺系統(tǒng)的每個界面模塊之間的交互通過頁面導航即可實現(xiàn)轉(zhuǎn)換。頁面導航包含“首頁”、“用戶管理”、“題庫管理”、“比賽管理”、“題單管理”、“爬蟲管理”、“公告管理”、“反饋管理”、“權(quán)限管理”九個按鈕。(7)管理界面所有管理界面均提供“添加”、“刪除”、“編輯”、“查看”、“搜索”五個基本操作。(8)刪除詢問框點擊確定按鈕,選中的項將會被刪除。點擊取消按鈕或者關(guān)閉圖標,關(guān)閉詢問框。(9)封禁詢問框點擊確定按鈕,封禁選中的賬戶,賬戶將被正常移除列表。點擊取消按鈕或關(guān)閉圖標,關(guān)閉詢問框。解禁詢問框點擊確定按鈕,解禁選中的賬戶,賬戶將被封禁移除列表。點擊取消按鈕或關(guān)閉圖標,關(guān)閉詢問框。3.3數(shù)據(jù)庫設(shè)計3.3.1數(shù)據(jù)庫實體屬性圖根據(jù)本文的相關(guān)研究和數(shù)據(jù)分析,可以得出本系統(tǒng)主要的數(shù)據(jù)庫實體,分別為普通用戶信息、管理員用戶信息、題目信息、比賽信息、題單信息和評測信息實體,下面將給出各個實體的屬性圖。普通用戶信息實體在線評測系統(tǒng)分為前臺系統(tǒng)和后臺系統(tǒng),所有的訪客用戶均只能使用前臺系統(tǒng),而后臺系統(tǒng)只允許管理員用戶進行操作。前臺系統(tǒng)的普通用戶信息實體如圖3-18所示。圖3-18普通用戶信息實體屬性圖管理員用戶信息實體在線評測系統(tǒng)的后臺系統(tǒng)跟前臺是獨立運行的系統(tǒng),前臺賬戶無法登錄后臺,且后臺系統(tǒng)中的用戶信息不需要前臺這么繁雜,為了降低不必要的內(nèi)存浪費,為此需要創(chuàng)建一個獨立的管理員信息實體,如圖3-19所示。圖3-19管理員用戶信息實體屬性圖題目信息實體系統(tǒng)中最主要的就是題目的管理和展示,為了充分突出每個題目的信息豐富度,創(chuàng)建一個題目信息實體如圖3-20所示。圖3-20題目信息實體屬性圖比賽信息實體在線評測系統(tǒng)不僅支持題目的評測,完善的比賽模塊將給系統(tǒng)增加可用率和廣度,為此創(chuàng)建比賽信息實體,如圖3-21所示。圖3-21比賽信息實體屬性圖題單信息實體為了便于收集同類型的題目供用戶查閱,題單模塊的完善提高了系統(tǒng)高可用性和便捷性,為此創(chuàng)建題單信息實體,如圖3-22所示。圖3-22題單信息實體屬性圖評測信息實體評測服務(wù)是本系統(tǒng)的重要功能,為了能給用戶提供高性能的評測和信息豐富度,創(chuàng)建一個完備的評測信息實體是必不可少的,如圖3-23所示。圖3-23評測信息實體屬性圖3.3.2實體間關(guān)系根據(jù)研究和分析,可以得出上述介紹的各個實體間的關(guān)系。一個普通用戶可以查閱多個題目,一個題目也可以被多個用戶查閱,關(guān)系為多對多。一個普通用戶可以參加多場比賽,一場比賽也可以供多個用戶參與,關(guān)系為多對多。一個普通用戶可以提交多個評測,一個評測信息只對應(yīng)一個用戶,關(guān)系為一對多。一個普通用戶可以檢索多個題單,一個題單也可以被多個用戶檢索,關(guān)系為多對多。一個管理員用戶可以管理多個題目,一個題目也可以被多個管理員進行管理,關(guān)系為多對多。一個管理員用戶可以管理多個題單,一個題單也可以被多個管理員進行管理,關(guān)系為多對多。一個管理員用戶可以管理多個比賽,一個比賽也可以被多個管理員進行管理,關(guān)系為多對多。從上面的分析可以得到各個實體間的關(guān)系,如圖3-24和3-25。圖3-24實體關(guān)系圖1圖3-25實體關(guān)系圖23.3.3數(shù)據(jù)庫表設(shè)計數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計更好的為開發(fā)人員提供了間接直觀的數(shù)據(jù)框架,使得在開發(fā)過程中有框架可以依靠。本系統(tǒng)的實體-屬性模型描述如下。普通用戶信息表(用戶ID,真實姓名,昵稱,簡介,手機號,密碼,郵箱,學號,所在學校,頭像URL,封禁狀態(tài),提交相關(guān)信息)管理員用戶信息表(管理員ID,真實姓名,手機號,郵箱,密碼,權(quán)限信息,封禁狀態(tài),頭像URL)題目信息表(題目ID,標題,內(nèi)容,輸入格式,輸出格式,提示信息,分數(shù),等級,來源,標簽,可見狀態(tài),時間限制,空間限制,總提交數(shù),總通過數(shù))比賽信息表(比賽ID,標題,簡介,比賽時間,可見狀態(tài),比賽賽制,私密性,比賽密碼,主辦方)題單信息表(題單ID,標題,簡介,可見狀態(tài),題單題目信息)評測信息表(評測ID,用戶ID,比賽ID,題目ID,提交時間,評測完成時間,代碼,評測過程信息,評測結(jié)果,語言,最大運行時間,最大運行內(nèi)存)3.3.4數(shù)據(jù)庫表設(shè)計在線評測系統(tǒng)數(shù)據(jù)庫主要有以下數(shù)據(jù)表,如表3-1所示。表3-1在線評測系統(tǒng)數(shù)據(jù)表表名描述user普通用戶信息表admin管理員用戶信息表problem題目信息表contest比賽信息表problem_cell題單信息表submission評測信息表結(jié)合以上數(shù)據(jù)表,使用NavicatPremium進行創(chuàng)建所有需要的數(shù)據(jù)表。(1)user(普通用戶信息表)為了存儲更多的用戶信息數(shù)據(jù),user表的字段如下表3-2所示。表3-2普通用戶信息表字段名類型是否允許為空是否是為主外鍵描述user_idint否主鍵用戶IDmobilevarchar否否手機號real_namevarchar否否真實姓名nicknamevarchar是否昵稱schoolvarchar否否所在學校desctext是否簡介avatarvarchar否否頭像URLemailvarchar是否郵箱lockedchar否否封禁狀態(tài)passwordvarchar否否密碼student_numbervarchar否否學號(2)admin(管理員用戶信息表)admin表主要有admin_id、real_name、mobile等字段,如下表3-3所示。表3-3管理員用戶信息表字段名類型是否允許為空是否是為主外鍵描述admin_idint否主鍵管理員IDmobilevarchar否否手機號real_namevarchar否否真實姓名avatarvarchar否否頭像URLemailvarchar是否郵箱lockedchar否否封禁狀態(tài)passwordvarchar否否密碼(3)problem(題目信息表)problem表主要有problem_id、title、desc等字段,如下表3-4所示。表3-4題目信息表字段名類型是否允許為空是否是為主外鍵描述problem_idint否主鍵題目IDtitlevarchar否否標題desclongtext否否內(nèi)容hintvarchar是否提示信息sourcevarchar否否來源input_formattext是否輸入格式output_formatvarchar否否輸出格式tagsvarchar是否標簽visiblechar否否可見狀態(tài)scorevarchar否否分數(shù)levelvarchar否否等級submit_countint是否總提交數(shù)pass_countint是否總通過數(shù)(4)contest(普通用戶信息表)contest表主要有contest_id、title、sponsor等字段,如下表3-5所示。表3-5比賽信息表字段名類型是否允許為空是否是為主外鍵描述contest_idint否主鍵比賽IDtitlevarchar否否標題sponsorvarchar否否主辦方desclongtext是否簡介contest_rulevarchar否否比賽賽制start_timetimestamp否否開始時間end_timetimestamp否否結(jié)束時間visiblechar否否可見狀態(tài)passwordvarchar是否比賽密碼durationdouble否否持續(xù)時間create_timetimestamp否否創(chuàng)建時間(5)submission(評測信息表)submission表主要有submission_id、user_id、problem_id等字段,如下表3-6所示。表3-6評測信息表字段名類型是否允許為空是否是為主外鍵描述submission_idint否主鍵評測IDuser_idint否外鍵用戶IDproblem_idint否外鍵題目IDcontest_idint否外鍵比賽IDstatusint否否評測狀態(tài)/結(jié)果codelongtext否否代碼languagevarchar否否語言submit_timetimestamp否否提交時間max_run_timeint否否最大運行時間max_run_memoryint否否最大運行內(nèi)存finish_timetimestamp否否完成評測時間msglongtext是否評測過程信息(6)problem_cell(題單信息表)problem_cell表主要有cell_id、cell_title、cell_desc等字段,如下表3-3所示。表3-2普通用戶信息表字段名類型是否允許為空是否是為主外鍵描述cell_idint否主鍵題單IDcell_titlevarchar否否題單標題cell_desclongtext否否題單簡介create_datetimestamp否否創(chuàng)建時間problemslongtest否否題單題目visiblechar否否可見狀態(tài)4系統(tǒng)詳細設(shè)計此部分將在上一章的基礎(chǔ)上,對整個系統(tǒng)進行詳細設(shè)計,介紹系統(tǒng)的總體結(jié)構(gòu),從程序邏輯角度說明各模塊的實現(xiàn)細節(jié)。4.1系統(tǒng)開發(fā)環(huán)境及工具開發(fā)環(huán)境:Windows64位操作系統(tǒng),Chrome瀏覽器,Ubuntu18.04操作系統(tǒng)。開發(fā)工具:使用VisualStudioCode進行系統(tǒng)所有模塊的編碼。4.2系統(tǒng)結(jié)構(gòu)概述本系統(tǒng)結(jié)構(gòu)如圖4-1所示。圖4-1在線評測系統(tǒng)結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)最上層為請求層,即用戶在客戶端中操作過程中產(chǎn)生了所有請求。系統(tǒng)第二層為接入層,主要用來攔截所有請求層發(fā)送的請求,并進行IP限制和資源轉(zhuǎn)發(fā)的操作。系統(tǒng)第三層為服務(wù)層,主要提供給客戶端的所有服務(wù),即數(shù)據(jù)提供層或連接層。低筒最后一層為持久層,即系統(tǒng)中所有使用到的數(shù)據(jù)的持久存放處,服務(wù)于上一層——服務(wù)層。4.3前臺系統(tǒng)模塊流程4.3.1登錄和注冊進入前臺系統(tǒng)首頁,未登錄的情況下可以點擊右上方的“登錄”和“注冊”按鈕進行相關(guān)操作。若用戶未注冊過賬戶,點擊“注冊”按鈕彈出注冊Dialog,用戶需輸入手機號、密碼、真實姓名、郵箱、學號、所在學校共六個信息后方可點擊“SignUp”按鈕進行下一步驗證驗證碼的操作,后端會發(fā)送一個短信驗證碼給用戶進行驗證,若輸入的驗證碼是正確的的則最終注冊成功,若失敗則給出提示,直至驗證成功。若用戶已經(jīng)注冊過賬戶,則通過點擊“登錄”按鈕彈出登錄的Dialog,用戶需輸入手機號和密碼進行登錄,若驗證失敗則給出對應(yīng)的提示,驗證成功則允許登錄。此部分功能流程圖如圖4-2所示。圖4-2前臺登錄和注冊功能流程圖4.3.2提交評測和程序Debug用戶在編寫完一個題目的程序后點擊編輯區(qū)域上方的“提交評測”按鈕即可開始評測流程。首先會彈出評測狀態(tài)Dialog,本次評測的狀態(tài)將會實時的展示在Dialog中,從Pending、Compiling、Judging的全過程和測試點詳情都會進行相應(yīng)的展示。若用戶的代碼是正確的,將會給出“Accepted”的提示,否則將給出其他錯誤的提示,如“WrongAnswer”、“CompileError”等。除了提交評測外,用戶可以點擊編輯器區(qū)域上方的“Debug”圖標進入在線測試運行模塊,用戶需要輸入程序的自測輸入,然后點擊自測抽屜框右上角的“Run”按鈕進行運行,若運行是成功的,將會給出用戶對于當前測試輸入的對應(yīng)輸出結(jié)果。若運行時出錯,則會給出對應(yīng)的錯誤字樣,并不會給出程序輸出。此部分功能流程圖如圖4-3所示。圖4-3前臺提交評測和程序Debug功能流程圖4.3.3修改個人信息用戶通過“個人中心”按鈕進入個人中心,點擊個人資料卡右方的“修改信息”按鈕進入編輯頁面。用戶更改一定的信息,如密碼、真實姓名、用戶昵稱、手機號、郵箱、所在學校、學號、用戶簡介中的任意一個將會額外在頁面下方增加“撤回”按鈕,用于撤回用戶當前的更改。當用戶更改完信息后點擊“保存”按鈕,將會判斷用戶更改后的信息是否合法,若不合法將不予保存并給出提示,若合法則保存成功并去除“撤回”按鈕。此部分功能流程圖如圖4-4所示。圖4-4修改個人信息流程圖4.3.4報名比賽若用戶已經(jīng)報名了某場比賽,將在前臺對應(yīng)的比賽上顯示“已報名”的字樣,否則將不予顯示。這時用戶點擊該場未報名的比賽打開一個Dialog,Dialog下方將會渲染一個“報名”的按鈕。讓用戶點擊“報名”按鈕時,判斷當前比賽是不是私密的,若是私密的將要求用戶輸入報名密碼,此時若輸入的密碼正確,則會報名成功,否則將報名失敗。若比賽是開放的,則點擊報名后將直接報名成功。若整場比賽是已經(jīng)開始或者已經(jīng)結(jié)束的,將不予再進行報名操作。此部分功能流程圖如圖4-5所示。圖4-5報名比賽流程圖4.4后臺系統(tǒng)模塊流程4.4.1增刪改用戶管理員或教師用戶進入用戶管理界面,對普通用戶或者管理員用戶進行增刪改的操作。當點擊界面上方的“添加用戶”按鈕后彈出Dialog窗口,要求填寫用戶的必要信息后點擊Dialog下方的“確定”按鈕進行數(shù)據(jù)驗證,若驗證失敗將提示“添加失敗”,否則提示“添加成功”。當選中需要刪除的賬戶時,點擊界面上方的“刪除”按鈕判斷是否有選中至少一個賬戶,沒選中則提示“請選擇需要刪除的賬戶”,否則將詢問用戶是否確定刪除,點擊“確定”則直接刪除,點擊“取消”則取消刪除。通過點擊某一行賬戶的操作列下的“編輯”按鈕,將會彈出編輯Dialog,修改任意信息后點擊“確定”按鈕將核驗修改后的數(shù)據(jù)是否合法,若不合法則給出提示,否則將編輯成功。 該功能流程圖如圖4-6所示。圖4-6增刪改查用戶功能流程圖4.4.2增刪改題目管理員或教師用戶進入題目列表管理界面,對題庫中的所有題目進行增刪改的操作。當點擊界面上方的“添加題目”按鈕后彈出Dialog窗口,要求填寫題目的必要信息后點擊Dialog下方的“確定”按鈕進行數(shù)據(jù)驗證,若驗證失敗將提示“添加失敗”,否則提示“添加成功”。當選中需要刪除的題目時,點擊界面上方的“刪除”按鈕判斷是否有選中至少一個題目,沒選中則提示“請選擇需要刪除的賬戶”,否則將詢問用戶是否確定刪除,點擊“確定”則直接刪除,點擊“取消”則取消刪除。通過點擊某一行題目的操作列下的“編輯”按鈕,將會彈出編輯Dialog,修改任意信息后點擊“確定”按鈕將核驗修改后的數(shù)據(jù)是否合法,若不合法則給出提示,否則將編輯成功使用物品的功能流程圖如圖4-7所示。圖4-7增刪改查題目功能流程圖4.4.3上傳和下載測試數(shù)據(jù)管理員或教師用戶進入測試數(shù)據(jù)管理界面,點擊需要上傳測試數(shù)據(jù)的題目,然后點擊列表最后一列的“上傳”按鈕,即可打開上傳Dialog,用戶通過拖拽或瀏覽文件兩種方式上傳測試數(shù)據(jù)文件。若上傳的文件不是Zip格式,則本次上傳無效并提示用戶。若上傳的文件大小大于限定,同樣不予上傳并給出提示。當前臺的檢測通過后將會上傳文件到后端服務(wù),后端服務(wù)接收到文件后將其解壓并判斷每個測試文件是否一一對應(yīng)且文件后綴是否滿足固定要求。若任意一項不滿足將取消本次上傳并給出提示,否則將成功上傳。管理員或教師用戶通過選擇想要下載測試數(shù)據(jù)的題目,點擊改行最后一列的“下載”按鈕,若該題并未上傳過測試數(shù)據(jù),則點擊無效,否則提示用戶是否確定下載。點擊“確定”按鈕后將成功完成下載,否則取消本次下載。該的功能流程圖如圖4-8所示。圖4-8上傳和下載測試數(shù)據(jù)功能流程圖4.4.4發(fā)布比賽廣播管理員或教師用戶進入比賽廣播界面,若無正在進行的比賽,將不予進行任何操作。若有正在進行的比賽,用戶可以選擇任意一個進入該比賽的廣播通信信道。用戶通過點擊右下角的“廣播”圖標打開輸入框,輸入需要廣播的信息后點擊“發(fā)布”按鈕,若信道無障礙則發(fā)送成功,否則發(fā)送失敗并給出提示。該的功能流程圖如圖4-9所示。圖4-9發(fā)布比賽廣播功能流程圖5系統(tǒng)實現(xiàn)及測試此章節(jié)根據(jù)總體設(shè)計和詳細設(shè)計實現(xiàn)在線評測系統(tǒng)的各部分功能,給出部分功能的實現(xiàn)方法并測試這些功能。功能測試測試方法為黑盒測試,通過測試檢驗是否每個功能都能正常使用。測試環(huán)境如下表5-1所示。表5-SEQ表\*ARABIC\s11測試環(huán)境字段名類型操作系統(tǒng)Window10服務(wù)器Ubuntu18.04數(shù)據(jù)庫MySQL8.0客戶端Chrome5.1系統(tǒng)主要功能設(shè)計與實現(xiàn)5.1.1前臺系統(tǒng)(1)題目檢索功能進入題庫界面,最上方的部分為檢索功能區(qū)。用戶可以通過題目ID、題目標題、題目等級和題目標簽進行題目的篩選。如下圖5-2所示。圖5-2題目檢索區(qū)題目標簽的選擇需要用戶自行在所有的標簽中進行勾選,在題目標簽過多的情況下,用戶可通過篩選框上方的檢索功能搜索需要的標簽。如下圖5-3所示。圖5-3題目標簽選擇框(2)提交評測功能在前臺系統(tǒng)中,當用戶編寫完某個題目的代碼后,點擊編輯區(qū)域上方的“提交評測”按鈕即可進行評測。如下圖5-4所示。圖5-4提交評測功能當點擊提交評測后將彈出評測狀態(tài)監(jiān)控的Dialog,用戶可以實時獲取到當前提交的評測的運行過程和測試點評判狀態(tài)。如下圖5-5所示。圖5-5評測狀態(tài)監(jiān)控提交評測功能主要是通過將題目ID、題目最大用時、題目最大使用內(nèi)存、用戶代碼等信息通過WebSocket傳給判題服務(wù)器進行安排判題任務(wù),并實時監(jiān)聽判題服務(wù)器返回的判題結(jié)果渲染到界面上。(3)登錄和注冊功能在前臺系統(tǒng)中,用戶通過點擊最上方的導航欄的“登錄”和“注冊”按鈕打開對應(yīng)的Dialog。如下圖5-6所示。圖5-6登錄和注冊按鈕當點擊“登錄”按鈕后,將打開一個Dialog,用戶輸入手機號和密碼后點擊“SignIn”按鈕進行登錄。如下圖5-7所示。圖5-7登錄Dialog登錄功能的主要實現(xiàn)即發(fā)送用戶輸入的手機號和密碼到后端服務(wù)器進行檢驗,若通過則予以登錄,否則提示錯誤。用戶點擊“注冊”按鈕同樣是打開一個Dialog,用戶需要輸入手機號、郵箱、密碼、學號、所在學校等信息后點擊“SignUp”按鈕進行注冊,同時需要用戶接受并驗證短信驗證碼。如下圖5-8所示。圖5-8注冊Dialog(4)報名比賽功能在比賽模塊中,用戶通過選擇需要報名的比賽,點擊比賽標題打開相應(yīng)的Dialog信息框。如下圖5-9所示。圖5-9打開比賽信息介紹Dialog通過點擊Dialog下方的“報名”按鈕進行報名。若該場比賽為私密的,需要用戶輸入報名密碼后方可進行報名。如下圖5-10所示。圖5-10報名密碼輸入框5.1.2后臺系統(tǒng)(1)題庫管理功能在后臺系統(tǒng)中,題庫管理功能是使用最頻繁的。為管理員提供了添加、刪除、查看、編輯、搜索、上傳和下載題目測試數(shù)據(jù)的功能。如下圖5-11所示。圖5-11題庫管理主要功能模塊題目列表管理中提供對所有題目的增刪改查的操作,后臺系統(tǒng)中的諸如比賽列表管理界面、用戶管理界面、管理員管理界面、題單管理界面等均使用同一模板。如下圖5-12所示。圖5-12題目列表模塊界面測試數(shù)據(jù)管理界面的左側(cè)為題目檢索區(qū)域,用戶可以通過題目編號和題目標題進行所需上傳和下載測試數(shù)據(jù)的題目進行檢索,而界面的右側(cè)則顯示了當前檢索下的所有題目,主要信息為題目標號、題目標題、狀態(tài)和最近一次上傳時間。列表的最后一列提供了“上傳”和“下載”兩種操作。如下圖5-13所示。圖5-13測試數(shù)據(jù)管理模塊界面5.1.3判題服務(wù)系統(tǒng)判題服務(wù)系統(tǒng)的設(shè)計主要參考了Nginx中負載均衡的思路,架設(shè)一個同客戶端和所部屬的判題機通信的服務(wù)器,將客戶端中的信息和判題機中的信息進行雙向交互,做到了中間人的效果,從而擺脫了在每個判題機中進行客戶端通信功能的冗余操作。負載均衡的思路在于,一個總的服務(wù)對多個微服務(wù)或任務(wù)進行數(shù)據(jù)傳輸管控操作,將所有訪問壓力根據(jù)不同的規(guī)則分散到下屬的所有微服務(wù)或任務(wù)中執(zhí)行。而整個通信交互采用Socket技術(shù)進行全雙工通信,確保了數(shù)據(jù)的快速交互和通信,提高了整個系統(tǒng)判題過程的通信效率,給用戶更直觀的快速的判題體驗。本文介紹的在線評測系統(tǒng)的判題服務(wù)架構(gòu)設(shè)計如下圖5-14所示。圖5-14判題服務(wù)系統(tǒng)的基本架構(gòu)判題服務(wù)器接受所有連接進行的客戶端的判題請求,此時判斷是否有空閑的判題機,若有則將該判題任務(wù)分發(fā)給空閑的判題機,并將該判題機移除空閑隊列,若空閑的判題機則將當前判題請求存到待判題任務(wù)隊列中。判題機接受到判題任務(wù)后將自己的狀態(tài)發(fā)送給判題服務(wù)器進行收集并開始判題,判題過程中的所有步驟,如程序編譯、讀取測試文件數(shù)據(jù)、進行測試點的評測、比較結(jié)果等獲得的結(jié)果均會打包成小的過程結(jié)果發(fā)給判題服務(wù)器進行匯總,當判題結(jié)束后將判題機發(fā)出判題結(jié)束信號給判題服務(wù)器并將自己的狀態(tài)置為空閑的,此時判題服務(wù)器將所有數(shù)據(jù)返回到客戶端中。若判題服務(wù)器收到判題機的空閑信號,則先查詢待判題任務(wù)隊列是否為空,若不空則分配一個任務(wù)給當前空閑的判題機,否則將判題機加到判題機空閑隊列中進行等待。整體的執(zhí)行流程如下圖5-15所示。圖5-15判題服務(wù)的運行流程5.2主要功能測試5.2.1前臺系統(tǒng)主要功能測試(1)題目檢索功能在題目ID的輸入框中輸入除數(shù)字以外的內(nèi)容、根據(jù)不同條件檢索題目。測試用例如表5-1所示。表5-1題目檢索功能測試用例編號預(yù)期輸入預(yù)期輸出實際輸入實際輸出測試結(jié)果1在題目ID輸入框中輸入數(shù)字并檢索正確篩選對應(yīng)ID的題目在題目ID輸入框中輸入數(shù)字并檢索正確篩選對應(yīng)ID的題目測試通過2在題目ID輸入框中輸入非數(shù)字并檢索彈出“必須輸入數(shù)字”的提示在題目ID輸入框中輸入非數(shù)字并檢索彈出“必須輸入數(shù)字”的提示測試通過3選擇不同題目等級進行檢索列出的所有題目的等級為檢索的等級選擇不同題目等級進行檢索列出的所有題目的等級為檢索的等級測試通過4選擇不同的題目標簽進行檢索列出的所有題目的標簽均帶有選擇的標簽選擇不同的題目標簽進行檢索列出的所有題目的標簽均帶有選擇的標簽測試通過(2)提交評測功能通過提交空的代碼、提交錯誤的代碼、提交正確的代碼、提交的代碼所用的語言和所選擇的語言不一致進行測試。測試用例如表5-2所示。表5-2提交評測功能測試用例編號預(yù)期輸入預(yù)期輸出實際輸入實際輸出測試結(jié)果1不編寫任何代碼并提交評測彈出“提交代碼為空”的提示不編寫任何代碼進行提交評測彈出“提交代碼為空”的提示測試通過2編寫錯誤的代碼并提交評測給出的評測結(jié)果為不通過編寫錯誤的代碼并提交評測給出的評測結(jié)果為不通過測試通過3編寫正確的代碼并提交評測給出的評測結(jié)果為通過編寫正確的代碼并提交評測給出的評測結(jié)果為通過測試通過4選擇和編寫的代碼所用的語言不一致并提交評測給出的評測結(jié)果為編譯失敗選擇和編寫的代碼所用的語言不一致并提交評測給出的評測結(jié)果為編譯失敗測試通過(3)報名比賽功能通過報名公開的比賽、報名私密的比賽、在比賽進行時或結(jié)束后嘗試報名進行測試。測試用例如表5-3所示。表5-3報名比賽功能測試用例編號預(yù)期輸入預(yù)期輸出實際輸入實際輸出測試結(jié)果1報名公開的比賽成功報名報名公開的比賽成功報名測試通過2報名私密的比賽并輸入錯誤的密碼彈出”密碼錯誤”提示報名私密的比賽并輸入錯誤的密碼彈出”密碼錯誤”提示測試通過3報名私密的比賽并輸入正確的密碼成功報名報名私密的比賽并輸入正確的密碼成功報名測試通過4嘗試報名正在進行或已結(jié)束的比賽不提供報名途徑試報名正在進行或已結(jié)束的比賽不提供報名途徑測試通過(4)登錄和注冊功能通過輸入正確和錯誤的數(shù)據(jù)進行登錄、輸入不同的信息進行注冊、輸入錯誤的驗證碼進行注冊、輸入正確的驗證碼進行注冊進行測試。測試用例如表5-4所示。表5-4報名比賽功能測試用例編號預(yù)期輸入預(yù)期輸出實際輸入實際輸出測試結(jié)果1不輸入手機號進行登錄提示“輸入手機號和密碼”不輸入手機號進行登錄提示“輸入手機號和密碼”測試通過2輸入手機號不輸入密碼并登錄提示“輸入密碼”輸入手機號不輸入密碼并登錄提示“輸入密碼”測試通過3輸入錯誤的手機號并登錄彈出“手機號未注冊”提示輸入錯誤的手機號并登錄彈出“手機號未注冊”提示測試通過4輸入正確的手機號和密碼進行登錄彈出“密碼錯誤”輸入正確的手機號和密碼進行登錄彈出“密碼錯誤”測試通過5輸入正確的手機號和密碼并登錄成功登錄輸入正確的手機號和密碼并登錄成功登錄測試通過6輸入不合法的信息并進行注冊提示“信息不合法”輸入不合法的信息并進行注冊提示“信息不合法”測試通過7輸入合法的信息并注冊彈出輸入驗證碼的對話框輸入合法的信息并注冊彈出輸入驗證碼的對話框測試通過8輸入錯誤的驗證碼進行注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC/IEEE 8802-1AE:2020/Amd 4:2024 EN Telecommunications and exchange between information technology systems - Requirements for local and metropolitan area networks - Par
- 2024年度山西省高校教師資格證之高等教育心理學題庫檢測試卷B卷附答案
- 2023年激光診斷設(shè)備資金籌措計劃書
- 福建省泉州市高一上學期期末英語試題與參考答案
- 小學幼兒園智慧監(jiān)控系統(tǒng)方案建議書
- 2024奶牛養(yǎng)殖基地施工承包協(xié)議
- 2024暑期工勤工儉學勞動協(xié)議示例
- 2024年借款居間協(xié)議格式樣本
- 2024年度采石場租賃運營權(quán)轉(zhuǎn)移協(xié)議
- 2024陶瓷燒制加工承攬協(xié)議
- 外貿(mào)報關(guān)用發(fā)票、裝箱單、合同、報關(guān)單模板
- 液壓技術(shù)與氣動技術(shù)課程設(shè)計
- 建設(shè)項目全過程工程咨詢管理實施規(guī)劃
- 部編版小學語文四年級上冊習作七《寫信》PPT教學講座課件
- EN10130-2006冷成形用低碳鋼冷軋鋼板和鋼帶交貨技術(shù)條件
- 山東省產(chǎn)前篩查與診斷管理辦法實施細則
- 機械基礎(chǔ)軸上零件軸向固定公開課課件
- 管線工程測量施工方案(雨污分流管網(wǎng)工程)
- 上海鏈家房地產(chǎn)經(jīng)紀公司人員激勵機制存在的問題與對策分析
- 醫(yī)院基本建設(shè)存在的問題及對策
- 農(nóng)機修理工培訓大綱
評論
0/150
提交評論