oninejudge需求分析知识交流.docx
《oninejudge需求分析知识交流.docx》由会员分享,可在线阅读,更多相关《oninejudge需求分析知识交流.docx(21页珍藏版)》请在冰点文库上搜索。
oninejudge需求分析知识交流
第一章引言
一、编写目的
OnlineJudge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。
用户可以在线提交多种程序(如C、C++、Java)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。
该系统现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习。
为了方便我校同学的练习、提高同学的编程热情,特地开发此平台。
本需求是在经过了可行性分析与用户调研之后,进一步定制了软件开发的细节问题。
深入分析和描述了子系统的功能和性能,以及系统中各子系统的联系,并细化用户对系统的要求。
本文档面向的读者主要是系统设计编程人员、后期的系统测试人员,以及ACM系统的管理与维护人员。
二、项目背景
1.项目全称:
ACM在线判题系统;
2.项目委托单位:
郑州轻工业学院应急中心;
3.提出经过:
为方便本校学生在线练习,提高学生的综合编程技能。
学校需要一个功能完善的在线评测系统。
三、术语定义
四、参考资料
暂无
第二章任务概述
一、目标
1.提供给广大师生一个ACM练习的平台,实现注册用户平时训练、以及比赛的相关功能。
2.确保数据的精确性,此数据包括时间数据、占用内存大小、以及代码长度。
用户提交的代码在OnlineJudge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。
同时实现服务器编译后返回给用户一个详细验证信息。
3.实现多种查询方式,用户选择不同的查询条件可查询到题目、赛程、排名,提交状况等信息,让用户能够快速的找到自己想要得到的信息。
4.实现个人数据的私有性,用户平时训练以及参加比赛时只可查看自己提交过的代码。
5.人机交互界面的友好,为了让广大师生能够快速的适应本系统,系统界面风格延续了大家熟悉的杭电ACM系统。
6.为以后的扩展留下接口,例如界面风格的扩展,论坛功能的扩展等等。
7.系统具有良好的稳定性、安全性。
二、运行环境需求
1、硬件方面:
✧服务器:
✧计算机:
✧网络:
✧其他:
2、软件方面:
✧服务器操作系统:
Linux/WindowsServer2003
✧WEB发布系统:
JBOSS
✧工作站操作系统:
✧数据库管理软件:
mysql
三、条件与限制
第三章数据描述
第一节静态数据
包括系统登录密码,各数据库所在位置,系统分析原始数据以及系统管理的各类数据。
第二节自定义名称
Public:
公开赛(无条件限制,在比赛时间域内,所有在线用户均可参加);
Private:
内部赛(有条件限制,参赛需要输入合法的比赛密码);
正规赛:
正式的比赛,比赛管理员临时分配账号,账号只在本比赛有效;
第三节动态数据
1、一般用户注册与登陆
这部分主要功能是实现一般用户的注册、用户登陆时进行数据验证。
其数据流图如下:
其数据流图如下:
2、赛事管理员人员添加
系统管理员可增添赛事管理员,赛事管理员拥有创建赛事权限。
其数据流图如下:
3、正规比赛用户添加
在正规比赛时,需要由本次比赛管理员分配比赛人员的账号和密码用来提供给参赛队员使用
其数据流图如下:
4、用户个人信息的修改
可登陆系统的用户,包括赛事管理员、注册用户、正规赛用户均可修改个人信息。
5、题库题目信息添加
系统管理员向题库表中添加题目信息,保证题库的全面性。
其数据流图如下:
6、题库中题目信息修改、删除
系统管理员可以对题库表题目信息进行修改、删除操作。
其数据流图如下:
7、题目信息展示
浏览者可查看题目内容及该题目的提交情况,包括每个题目总的用户提交次数和通过次数,以及统计正确率。
其数据流图如下:
8、题目信息查询
浏览者可输入题号或题目标题进行查询。
返回对应题目的相关信息,包括题目内容、针对该问题用户提交状况统计。
其数据流图如下:
9、判题状态信息展示
系统显示实时判题状态,包括用户在线提交代码的相关信息。
信息包括运行编号、提交时间、判题状态(是否通过)、题号、用户名、运行时间、占有内存、代码长度、所使用的语言。
10、比赛赛事添加
赛事可分为三类public、private和正规赛;public、private由注册用户创建。
正规赛由赛事管理员创建。
系统管理员在分配完毕赛事管理员后,赛事管理员便可以根据需要创建相应的赛程信息。
如此次赛事的比赛题目,赛事的开赛时间和结束时间等信息。
其数据流图如下:
11、比赛赛事信息修改、删除
注册用户和赛事正规赛创建比赛后可对赛事信息进行修改删除。
包括对赛事题目、比赛时间、比赛规则的修改删除等。
12、public、private类赛事题库题目选择
注册用户创建赛事只能从题库选择。
其数据流图如下:
13、正规赛比赛赛事题库题目选择
赛事管理员为已创建的赛事创建比赛题目,即赛事管理员从题库中查询相应数量的题目作为赛事的考题、也可自己添加题目。
14、正规赛赛事通告添加
赛事中由于各类的突发事件的产生,赛事管理员需要及时地发布信息。
其数据流图如下:
15、赛程信息展示
浏览者可浏览赛程信息,赛程信息包括:
1、显示系统赛程列表。
前台现实内容包括赛程名称、赛程状态(是否已经举行)、比赛时间、赛程类型、比赛管理员。
管理员创建的正规赛需要输入管理员分配的账号和密码进行验证,其中账号信息储存在正规赛用户表中。
2、进入某个赛程后可查看该赛程的相关详细信息。
包括该赛程题目、题目提交情况统计、排名、实时提交状态。
其数据流图如下:
注释:
赛程题目:
该场比赛对应的题目列表。
题目提交情况统计:
对某个题目总的用户提交次数、通过此数。
实时提交状态信息:
包括运行编号、提交时间、判题状态(是否通过)、题号、用户名、运行时间、占有内存、代码长度、语言。
16、注册用户发帖、回帖数据流
用户登陆后可发帖、回贴。
论坛账号与在线测试账号相互独立。
其数据流图如下:
17、论坛信息展示
浏览者进入系统后可查看论坛信息。
其中包括查看论坛的模块,浏览帖子信息。
其数据流图如下:
18、论坛信息修改、删除
系统管理员选中各论坛可进行论坛信息管理。
其数据流图如下:
19、系统公告添加
作为一个比较完善的系统,需要对整个网站进行相应的描述和简介,以及对系统更新以及重要赛事进行公布等系统性的信息进行显示。
其数据流图如下:
20、系统公告修改、删除
系统管理员选中公告可进行系统公告修改、删除。
其数据流图如下:
21、邮件发送数据流成图
注册用户登录系统后可相互发送邮件,回复邮件。
其数据流图如下:
第四节数据库描述
系统公用到19个表。
1、注册用户表(users):
主要储存用户的个人信息。
通过此表可查询注册用户的排名等相关信息。
具体数据包括:
用户账号、密码、邮箱、昵称、座右铭、注册时间、总提交次数、通过次数。
2、正规赛中人员信息表(RegularContestUser)
主要储存正规赛中管理员申请的用户账号,供参赛队员使用。
3、管理员表(manager)
储存管理员信息:
包括账号、密码、姓名、类型;管理员包括一般管理员、系统管理员两种。
4、问题表(problem)
储存问题的相关信息,通过此表用户可查询、浏览题库题目相关信息。
具体数据包括问题编号、标题、描述、输入、输出、简单输入、简单输出、作者、输入比对路径、输出比对路径、问题被提交次数、成功提交次数、问题出处、提示信息、运行时间限制(MS)、代码的内存限制(k)、是否为管理员新增题0表示不是;1表示是。
5、用户—问题映射表(User_Problem)
此表用于统计用户在线练习信息。
通过此表可查询用户平时练习成绩,包括排名等信息。
具体数据有编号、问题编号、用户编号、提交状态 、运行时间(ms)、占用内存(k)、字节长度(b)、语言类型 、当前用户ip、源代码、提交时间(精确到秒)。
6、赛程表:
(contest)
用于储存和比赛相关的信息。
通过此表浏览者可获得赛程相关信息。
数据包括竞赛编号、名字、比赛开始时间、结束时间、比赛的类型、状态、创建人、密码(仅在private类型比赛中使用)。
此类赛程包括public和private两种。
7、赛事题库表(contestProblem)
存储练习赛事的题库信息。
通过此表可查询比赛所涉及题目列表。
也可用来查询赛程中各题的提交次数、接收次数。
8、赛事用户提交信息表(conUserInfo)
存储赛事的用户提交信息。
通过此表可以查看用户的比赛成绩,比赛的实时状态。
9、正规赛赛程表(RegularContest)
主要用于存储正规赛的相关信息。
通过此表浏览者可获得相关正规赛赛程信息。
包括竞赛编号、名字、比赛开始时间、结束时间、比赛的类型、状态、创建人、密码。
10、正规赛赛事题库表(contestProblem)
存储正规赛事的题库信息。
通过此表可查询比赛所涉及题目列表。
也可用来查询赛程中各题的提交次数、通过次数。
11、正规赛事用户提交信息表(ReconUserInfo)
存储正规赛事的用户提交信息。
通过此表可以查看用户的比赛成绩,比赛的实时状态。
数据包括提交用户、问题题号、提交时间、状态、用户ip、源代码等数据
12、赛事通知表(ContestNotification)
用于储存管理员关于比赛的各类通知。
通过此表管理员可发布与赛程相关的通知,用户可浏览到通知。
相关数据包括通知的编号、标题、内容、对应赛事、通知下发时间、管理员姓名、比赛类型(public、private、正规赛)。
13、整个网站的各类通知(SystemNotification)
存取系统中由系统管理员下发的各类通知;通过此表用户可浏览关于系统的各类通知。
其中数据包括系统通知的编号、通知下发时间、通知的标题、通知的内容、通知的类别用来标示系统中各类不同的通知(暂不用)。
14、赛事中题目疑问提出表(ContestQuestion)
存储赛事中对于题目提出的疑问;具体数据包括:
赛事问题提问编号、对应问题(竞赛题目)题号、内容标题、对应赛程、时间、比赛类型、提问者。
15、赛事中对于提出问题的答复表(ContestResp)
存储对于赛事题目问题的回复信息。
具体数据包括:
赛事回复问题编号、赛事问题编号、回复内容、回复时间、回复人。
16、论坛信息帖子表(ForumDiscuss)
存储用户发帖信息。
通过此表浏览者可查询论坛中发帖信息。
具体数据包括:
问题编号、帖子标题、内容、发帖人、发帖时间。
17、论坛帖子的回复表(ForumReplay)
存储用户回贴信息。
数据包括:
编号、帖子问题编号、回复人、回复时间、回复内容。
18、mail表中的信息(mail_information)
存储用户发送的mail信息。
通过此表用户可相互发送消息。
具体数据有:
邮件编号、发信人、接收人、发送时间、是否已读。
19、语言表(language)中的信息
此表用于储存用户提交代码所用语言,包括语言类型C/C++JAVA、类型标识。
第五节数据字典
略
第四章功能需求
功能需求是最主要的需求,主要列举出本系统能实现的业务。
本系统功能需求可以分五类:
注册用户平时训练功能需求、注册用户比赛功能需求、正规赛比赛功能需求、系统维护功能需求、赛事管理功能需求。
注册用户平时训练功能需求包括:
提交对应题目答案、对应题目讨论、查看对应题目用户提交情况、对该题目提出疑问;
注册用户比赛功能需求包括:
参加public、private比赛、查看比赛题目、查看比赛排名、查看比赛提交状况、查看题目解决情况数据统计;
正规赛比赛功能需求包括:
参加比赛、查看比赛题目、查看比赛排名、查看比赛自己提交状况、查看题目解决情况数据统计、打印所需文件;
比赛管理功能需求主要包括:
创建比赛、比赛用户管理、比赛试题管理、发布比赛通告,比赛规则制定;
系统维护功能需求主要包括:
赛事管理员管理、注册用户管理、题目管理、赛事管理,公告管理等。
注册用户在功能需求调查中,首先需要对用户单位的业务现状和业务内容进行了解,所要求在该系统支持下解决的问题和实现的功能。
功能需求调查指的是具体的业务用计算机系统进行实现的功能的调查,包括系统数据源的使用流程,每一个业务功能流程包括处理数据的内容及数据入口,数据的中间形式的功能操作和结果表达,具体功能实现的操作方法,模型的计算方法,计算机系统使用中的实现方式的调查等。
第一节功能划分
●注册用户平时训练
●注册用户比赛
●赛事管理员对赛事管理
●正规赛用户进行正规赛
●系统管理员对系统维护
第二节功能描述
一、注册用户平时训练
本功能主要是为了注册用户平时训练,用户可以自由选题。
注册用户可以将写好的代码提交给服务器,由服务器自动判题,并将判题结果返回客户端,显示给注册用户。
对应题目讨论:
注册用户可正对某一问题进行讨论。
查看对应题目用户提交情况:
可统计对某一题对应所有注册用户的提交情况。
二、注册用户比赛
参加public、private比赛:
平时比赛分为public公开赛,和private,公开赛只要在比赛时间内,所有的注册用户均可在线参赛;参加private类型比赛需要输入该比赛的验证密码方可进入;
查看比赛题目:
比赛成员可以看到该比赛的所有题目;
查看比赛排名:
比赛成员在比赛过程中即可看到所有参赛人员的排名;
查看比赛提交状况:
比赛成员提交代码之后,服务器返回判题结果,比赛成员只可看到当前比赛成员的提交状况,并可查看自己提交的代码;
查看题目解决情况数据统计:
可查看本场比赛每道题目的用户提交情况;
三、正规赛用户进行正规赛
正规赛需要赛事管理员申请一批账号供参赛队员使用。
参加比赛:
用户在输入管理员提供的账号、密码后方可进入比赛。
查看比赛题目:
比赛成员可以看到该比赛的所有题目;
查看比赛排名:
比赛成员在比赛过程中即可看到所有参赛人员的排名;
查看比赛提交状况:
比赛成员提交代码之后,服务器返回判题结果,比赛成员只可看到当前比赛成员的提交状况,并仅可看到自己提交的代码;
打印所需文件:
比赛可以是多人一队共用一台电脑,为了方便队员更快的作答,队员可打印题目内容和代码。
四、赛事管理员对赛事管理
比赛是整个系统的核心功能,为了以后的扩展,比赛可由系统管理员与那些申请并通过允许的赛事管理员共同管理
比赛用户管理:
比赛管理员有增、删、改比赛用户的权限;
比赛试题管理:
比赛管理员增、删、改比赛要用的试题。
试题的来源分为两部分:
(1)题库
(2)自主加题
发布比赛通告:
赛程管理员可发布比赛的相关信息;
比赛规则制定:
无规矩不成方圆,比赛的具体规则可以由比赛管理员规定;
五、系统管理员对系统维护
本系统的题库以及赛程等都是动态的,系统管理员需要定期维护,以保证系统的稳定性。
试题管理:
试题的删除、修改或添加新的试题;
赛事管理:
在此功能模块系统管理员拥有和赛事管理员同样的权限;
赛事管理员管理:
添加或删除拥有比赛管理权限的赛事管理员;
系统用户管理:
添加或删除用户(将来扩展可对用户具体某项权限进行管理);
公告管理:
可发布、删除公告,或修改公告内容;
论坛管理:
论坛信息的整理,包括对帖子的管理。
第五章性能需求
主要指名用户对拟建子系统的技术性能指标的要求(运行时间、存储量、安全性等)
第一节数据精度
第二节时间要求
第三节适应性
第四节操作效率
第六章运行需求
第一节用户界面
第二节硬件接口
第三节软件接口
第四节内部接口
第五节故障处理
需求更新:
ACM在线测试系统,需要修改的是:
(1)在添加比赛时,增加一个是否显示题号的功能,这样的话,比如,上实验课时加的比赛,我可以选择显示该题目在题库中的题号,以便学生查阅资料和交流。
而真的带有竞赛性质的比赛,我不希望显示题号,以免学生知道题号后容易搜到答案。
(2)学生以比赛形式做的题目,应该也能统计到该学生帐户中。
比如上实验课,我从题库选了1123、1145等10道题作为一个比赛,让学生练习,比赛后学生不用再重复提交该题相应的代码。
(3)对最高级管理员添加的比赛,不管是新加比赛题目,还是从题库中选题做比赛题目,都需要询问比赛性质是public还是private,因为举办正式的大型网络公开赛,也需要原创题目。
(我看需求分析上,只是对一般比赛管理员添加的比赛询问public还是private,而对最高管理员提供新加比赛题目这一功能的的同时,默认比赛是private)。