主要是向初学者提供功能完整性检测服务。对有些初学者来说,他根据试题的要求编完了一个程序,并在客户端编译通过了编译器,这个时候需要判断是否完成了设计所要求的功能。我们在服务器端设计了庞大的测试用例库,学生从服务器端的试题库读取相应的试题进行练习,我们把不同的试题进行了分类,对于不同的题目我们调用不同的测试用例进行检测,针对不同的
程序采用不同的分析方法。同时,在进行程序检测的过程中,也考虑了系统的安全性。提供了安全检测机制。系统根据面向对象程序设计方法和反射技术实现了复杂的测试用例的调度。逻辑检错的实现主要由文件管理、编译检测、安全检测、输入输出接管、用例检测和反馈信息六个服务功能组成。一个完整的程序文件从提交到服务器开始就执行相应的功能,当前功能段报错,说明源程序有问题,将不能进行下一层的功能检测服务。系统将把程序返回给客户端,保证系统的安全性和实时性。文件管理主要接收处理客户端传来的Java源程序文件。编译检测模块对传来的Java源程序文件进行编译运行,如果程序存在错误,则返回给客户端程序,提示用户先进行编译检错。如编译通过,则进入安全性检错。判断程序可能出现的死循环状态,如出现死循环状态,则服务器将会死机。本系统利用J2EE平台提供的Process组件特性,
8
运行可执行文件。Process组件可获取当前运行进程的信息,包括线程集、加载模块(.dll和.exe文件)和性能信息。根据进程的管理信息,判断进程是否结束。系统周期性检测运行进程一次,若已正常结束,则表示程序不存在死循环,自动进行下一步操作,若超过设定时间,进程仍未结束,则表明该程序是一个死循环或者恶意代码,系统自动调用Process组件的强制中断方法,结束进程,同时进行其它相关安全操作。输入输出接管确保Java语言源程序代码的编译正确性和安全性的前提下进行输入输出重定向操作。系统读取源程序代码进行分析,接管原有的键盘输入输出及文件输入输出操作,比如,将键盘输出函数System.Out类替换为Java.io.FileInputStream类。键盘输出类System.Out转化为JAVA.io.FileOutputStream类。成功的将原有的程序输入输出转化为系统指定的输入输出,对后面的用例检测(CaseChecker)提供支持。用例检测模块和数据库通过用例调度机制进行交互。主要判断程序的逻辑正确性。系统通过调用Jdk包,对程序的源程序进行编译运行,并通过重定向处理,替换为在服务器上运行的.Class文件。同时,通过测试用例调用数据库,生成相应的测试用例类,对程序进行测试。系统通过分析检测的结果,将结果返回给用户。用例调度机制是逻辑检测功能得以实现的重要组成部分,系统采用面向对象开发方法,具有可重用性、灵活性和扩展性等优点。不同的程序用不同的测试用例和方法。如果为同一类题目单独编制测试用
9
例和测试函数,不利于程序的升级和扩展。因此,程序根据面向对象模块化的思路,将每类题目组成一个用例测试类库,通过统一的调度模块调用相应的类信息来生成一个具体的事例对