1、 湖南科技大学Online Judge系统开发 精品文档 IT项目软件管理报告 LAMP环境下Online Judge系统开发 学号:0855010206 班级:计算机002 姓名: 李 坚 时间:2011-11-29 目 录 一、项目定义 二、可行性分析 1、需求上分析 2、技术上分析 3、经济上分析 三、功能需求分析 四、模块概要设计 五、详细设计分工 1、前台组 2、后台组 3、数据库组 4、判题模块组 5、运维组 六、
2、设计说明 一、 项目定义 本网站是为了湖南科技大学ACM竞赛爱好者练习竞赛而设计开发的网站系统,提供了题目浏览,在线判题,在线竞赛等功能。除了非正式的ACM程序设计学习交流,本网站还可以用作课程设计作业和举办ACM程序设计竞赛。 二、 可行性分析 1、 从需求上分析: ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest(ACM-ICPC或ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞
3、赛。经过近30多年的发展,ACM国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。与ACM息息相关的必然就是Online Judge网上判题系统了,随着ACM的流行,各大高校都建立了自己的Online Judge系统以便同学们的学习交流以及各种程序设计的比赛。我们学校对ACM程序设计竞赛越来越重视,设计一个属于我们学校自己的Online Judge可以更好的学习交流程序设计技术。 2、 技术可行性分析: 开发这个Online Judge系统需要很多方面的技术,包括网页前台html div+css、后台php、数据库mysql、以及linux下的c\c++和一部分网络通信。
4、由于目前开发人员仅仅只有我一人,所以难度系数比较大,但是以上的技术我基本具备,开发出来也只是时间问题。初步预计开发周期,前台5天、后台5天、数据库3天、judge模块20天、通信3天、模块衔接2天、调试试用10天,目前预算48天时间可以初步完成、由于计划的误差会有10天左右的弹性时间。 3、 经济可行性分析: 目前拥有良好的网速和一台自用台式电脑提供开发,时间上也足够设计开发、试用以及正式投入运行。另外在设备方面拥有一台性能稳定的服务器,由于本系统暂时定义为校内使用,所以安全性以及一些设备要求比较低,基本符合开发使用要求。 三、 功能需求分析 本网站和其他高校Onl
5、ine Judge系统类似,可以提供程序设计爱好者一个学习交流的平台。 用户能在系统内查看题目和运行状态,登录后可以拥有提交代码、查看本人已经提交的代码、发表留言等功能。系统需要对用户提交的代码入库并测试运行、并将结果保存以统计数据。 四、 模块概要设计: 功能 简要说明 用户登录登出 在数据库存储用户账户信息,登录时比对,并用session记录用户登录情况 题目列表查看 从数据库获取题目信息并经php加工最终显示在web页面上,用户可以用proid查看具体题目 代码提交 用户在登录后可以提交某个题目的解决代码,后台将代码存入数据库并给判题模块发出信号 代码编译
6、并测试运行 判题模块接收到后台信号之后取出代码进行编译并尝试运行,并将运行的结构输出到数据库 结果查看 后台在存入代码并给出判题信号之后将判题队列里面的代码运行结果显示在状态页面 用户排名 系统会根据用户的做题状况以某种形式排名 比赛功能 系统可以将一部分题目划分成一次比赛并限定可提交时间,同时应用更严格的排名系统 简单论坛功能 本系统可提供一个类似留言板的微型论坛,可用于技术交流以及这个系统本身的改进意见 FAQ 对系统的功能以及一些限制条件进行说明 系统结构图 数据库 Web前端显示 题目 用户 代码 Php后台控制 判题模块 编
7、译模块 测试运行模块 图1、系统结构体系 五、 详细设计分工 首先假设设计是一个团队,将所有设计部分分成小组开发,这样将我在同一设计过程要处理的问题大大简化以及要面对的技术减少,有利于开发过程的计划与管理、同时消减各种不同语言代码差异造成编码困难。 根据需要的技术以及系统的结构,我将系统开发组一共分成了五个小组(web前台、php后台、数据库、判题模块、运维),其中每个小组的工作以及技术比较专一,负责内容和编辑环境根据设计需要有部分差异。组与组之间的交互具体设计由开发过程中视情况而定。 1、Web前台组: 要求:熟悉html标签、css样式表、js脚本语言
8、根据页面内容编写php表示页面,在不同页面尽量使用统一风格,尽量使用分离的css样式表,使用简单的js实现表单的验证。 任务:编写静态页面,包括题目列表页面、题目展示页面、题目提交页面(与题目展示页面合并)、代码转台页面、代码展示页面、排名页面、综合主页、比赛页面、FAQ页面。 资源:5天时间(不包括维护以及其他组设计过程中修改)、设计环境Windows XP Sp3、Adobe Dreamweaver CS5、测试服务器 2、Php后台组: 要求:熟悉php代码基础以及常用函数以及工作原理(SESSION、POST、GET等)、熟悉Mysql常用语句。根据各个页面的功能要求嵌入
9、相应的处理代码、实现页面功能,同时要探索php与linux C交互问题(socket)实现后台和判题模块的通信。 任务:根据已有的静态页面和功能需求完善各种页面,包括题目列表页面、题目展示页面、题目提交页面(与题目展示页面合并)、代码转台页面、代码展示页面、排名页面、综合主页、比赛页面,同时要编写纯后台处理程序,包括登录登出处理、代码接收以及处理、比赛数据处理。 资源:5天时间(不包括维护以及更新功能)、设计环境Windows XP Sp3、Adobe Dreamweaver CS5、CoreAMP集成环境。 3、数据库设计组: 要求:熟悉Mysql数据库和基本操作语言、会使用ph
10、pmyadmin工具。根据网站功能及对使用数据分析建造数据库并编写一些相应的处理语句。 任务:在系统需求分析之后立即构造数据库并在设计过程中根据设计要求进行修改,同时配合后台组和判题模块组的要求编写处理语句。 资源:3天时间、设计环境WindowsXP Sp3、CoreAMP、phpmyadmin。 4、判题模块组: 要求:熟悉linux操作系统及其常用shell和基本api函数、熟悉C\C++语言(线程、进程、数据库、socket通信)。编写linux下的judge程序,要求与后台和数据库进行特定的交互。 任务:在后台发出信号之后将信号打入判题队列,分别进行编译和测试运行操作、
11、并将结果存入数据库。其中过程包括取出代码并写入缓存、危险代码判断、编译代码、权限以及资源限定、重定向输入输出、测试运行代码、监控程序运行、回收结束信息,比对运行结果、代码运行结果入库。 资源:20天时间、操作系统Fedora Core 10、编辑器gedit、编译器g++。 5、运维组: 要求:熟悉linux操作系统、理解各个模块的功能以及工作原理、理解用户的需求。 任务:搭建LAMP环境并将各个模块布置到位、初始化系统并监视其运行、体验用户感受、测试各个功能、将遇到的bug调试并将有问题的模块回炉。 资源:5天(搭建环境并部署系统)、操作系统linux(详细版本待定)、Apac
12、he Tomcat、Mysql、PHP、G++/GCC。 各组任务的依赖关系 前台组 后台组 数据库组 判题模块组 运维组 图2、任务小组依赖关系 根据依赖关系,前台组、数据库组和判题模块组可以同时开始设计开发、而后台组需要得到前台组的产品才能开始、运维组在所有其他组开发完成时才能开始。由于本次开发比较特殊(只有我一个人,单线程),所以开发线路很单调,基本不会出现两个组同时开发的情形。在实际分组开发中,我更注重的是各个分组之间的效率以及工作的质量,避免短板效应的发生。适当的调整工作的分配问题,在有问题的环节注意加强。 六、设计说明 本系统纯手
13、工编写,不借鉴抄袭其他系统源代码,开发周期较长,难度系数比较大。此系统在功能上初步实现Online Judge在线判题,并将在之后的修改更新中实现更多功能以及强化稳定性的安全性。 作为一个“项目经理”,我感觉在计划设计过程中头脑比较清晰,即便在实际开发中遇到的问题与计划中不同甚至部分相悖。实际操作证明了有实际需求分析以及设计分组能使开发过程更容易理解,更方便维护和管理。目前我具备了一些软件开发的基础技术,有一定的结构分析能力,能简单的将项目划分;不足之处在于部分技术不是很了解导致某些模块的开发周期与计划相差很大,另外还有技术安排和分工可能有不平均的现象,这个需要在以后实际的操作中改进了。 在项目开发前期主要是对项目的可行性分析、需求分析以及开发的预算,这对后面的设计开发非常重要。实施中主要是按照计划书进行编码,同时对部分细节动态调整以优化系统设计。项目收尾需要对项目的功能审核,另外也要做相应的设计总结。 目前这个项目已经完成了75%左右,按照目前的进度可以在十二月中旬开始内测,在今年年底正式投入运行。 李坚 2011-11-30 收集于网络,如有侵权请联系管理员删除






