黎孟雄,郭鹏飞
(1.江苏师范大学 连云港校区计算机系,江苏 连云港 222006;2.连云港师范高等专科学校 计算机系,江苏 连云港 222006)
在计算机各专业都开设有软件类课程,其教学特点是在强化课堂理论教学的同时注重学生的实践技能和创新能力的培养。学生在软件实验室的实验课上进行编程设计训练是实践教学环节的重要组成部分,对加深相关理论知识的理解和到实践知识的快速转化起着不可或缺的积极作用。但由于软件实验课本身的特殊性导致在实验过程管理上具有相当的难度,比如:(1)学生在实验课上玩游戏、QQ聊天和看网络视频等行为难以监控[1];(2)软件程序抄袭和不良编程风格的纠查工作繁重、低效。因此,针对软件实验室管理过程中的特点设计一个功能强大的智能管理系统,不仅可以降低教师的管理强度,提高实验课教学效率,也符合实验教学管理过程的信息化发展趋势,而且对于推进软件实验的教学改革同样意义重大。
软件实验室智能管理系统的总体结构主要包括4个核心部分:实验教学文档管理、学生上机行为监控、实验作业代码检测和自动答疑机器人。
(1)实验教学文档管理。教学文档是指与实验相关的文件资料,包括实验教学计划、实验教学资料、单元实验任务表、项目实验设计书、学生实验报表、模块开发卷宗、项目开发总结报告等电子文档的上传、下载和自动分类管理。
(2)学生上机行为监控。对学生机的所有软件运行状态进行监控和分析,系统如果发现有玩游戏、QQ聊天、上网娱乐等跟实验教学无关的上机行为,就会立刻将该学生的计算机锁屏,同时以弹屏消息通知到教师机,并记录下来作学生平时成绩的参考。
(3)实验作业代码检测。对学生提交实验作业的软件源代码进行防抄袭和编程规范检查,系统会自动对所有同一实验程序源代码的相似性进行判断,对相似度超过一定阈值的作业文件拒绝接收并予以警告;另外会对接收的源程序中存在的不良编程风格问题进行纠查,并及时以信息报告的形式反馈到学生机供学生分析和改正。
(4)自动答疑机器人。在实验过程中大部分学生遇到的所谓难点都是些常见问题,或在实验教学资源库中可查询到满意答案的问题,为了减轻教师咨询的工作量和降低学生检索难度,系统还设计了能实时在线进行辅助答疑的智能导学机器人。机器人在对会话语言的理解和拟人化方面采用了自动分词和自然语言生成技术,在个性化辅助教学上采用了基于模糊聚类的推理机制,还采用了机器学习技术以使导学机器人能自动更新和完善FAQ知识库。
对学生机上运行的程序进行自动监视就需对被监视端系统中所有开启的进程进行监控。学生机在开机后实验室管理系统在后台运行时进程监控程序首先会调用合法进程列表和非法进程列表,进程列表可以在教师机上动态更新,进程列表包含了进程ID、进程映像名称、进程全路径、进程描述以及该进程的相关动态链接库DLL等详细信息[2]。教师可以把上课所需的软件 Visual Studio、SQL Server、Visual Basic、Turbo C、DELPHI、PhotoShop等软件的进程设为合法进程,把使命召唤、极品飞车、反恐精英、孤岛惊魂、QQ游戏、暴风影音、风行电影、MSN、腾讯QQ等游戏、娱乐和聊天软件的进程设为非法进程。
监控程序随后将创建实时拦截的新进程,并获取该进程相应的信息,包括当前进程的映像名称和全路径;同时拦截该进程所调用的动态链接库DLL,获取相应加载的动态链接库信息,如动态链接库的名称及其全路径等;然后将所获得的当前进程的映像名称及其全路径、动态链接库名称及其全路径等信息与合法进程列表中的信息进行比对,如果所有信息相符,表示该进程是合法进程,允许继续运行,如果不相符,则再跟非法进程列表进行匹配,如果是非法进程,终止其运行,否则列为可疑进程上报到教师机作进一步核查。
在具体实现时,操作系统中的进程快照句柄及进程信息获取是通过Tlhelp32.h中定义的函数CreateToolhelp 32Snapshot()、Process32First()和 Process32Next()来予以实现[3],TerminateProcess()函数用来终止指定的非法进程及其所有线程。
函数CreateToolhelp32Snapshot()为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD]建立一个快照[snapshot]:
HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,//用来指定快照中需要返回的对象,可以是TH32CS_SNAPPROCESS等DWORD th32ProcessID//一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取当前进程快照时可以设为0)
函数Process32First()用来得到快照链表中第一个进程的信息,Process32Next()用来得到快照链表中下一个进程的信息。这样,利用函数Process32First()和Process32Next()即可对操作系统中所有已经开启的进程实现枚举遍历。
网页内容监控程序是利用基于BHO钩子技术开发的浏览器扩展插件来实时截获网页,该插件依附于浏览器窗口启动,捕获浏览器核心控件 WebBrowser的事件参数,得到用户的上网信息,以此实现监控。
网页内容监控的任务是根据学生机有效的上网访问记录URL地址获取其所指向网页的Web页面。网页通常包括2个方面的内容:一是网页的主题信息,如奥运会赛事报道网页中的体育新闻内容等信息;另一些则是导航、广告、版权等与主题无关的信息,也称之为噪音内容。在对截获的Web页面内容进行分析之前,必须先对其进行清洗降噪[4],不然会导致抽取的被监控网页的特征词不够明显,降低监控程序的性能和精度。
降噪之后程序利用经典的TF*IDF(Term Frequency * Inverse Document Frequency)算 法[5-7]对Web页面文档进行中文词性分词处理,得出页面文档的分词结构,把副词、助词、连词、介词、叹词、拟声词等虚词(如“非常、很、的、着、也、因为、所以、啊”这些对抽取文档主题特征没有帮助的词)去除,计算剩下词的TF*IDF值,根据设定的阈值提取作为被监控页面的文档特征词。
特征词被抽取出来后可以跟敏感词列表进行匹配、比对。敏感词列表也可以在教师机动态更新,可以包含如“游戏、电影、电视剧、综艺、音乐、动漫、笑话、小说”等需要被监控的违例词。学生机打开游戏网页时被监控界面如图1所示。
图1 学生机游戏网页被监控界面图
作业代码检测是指程序代码防抄袭检查和编程规范检查。
(1)程序代码防抄袭检查也被称为代码相似性检测或副本检测,商业上经常应用于软件知识产权保护和软件信息检索等方面,主要技术方法有属性计数法(attribute counting)和 结 构 度 量 法 (structure metrics)。SIM、YAP系列、MOSS[8]和JPlag[9]都是当前著名的程序相似性检测系统,都是基于结构度量法。此外还有基于案例推理、PDG图和神经网络的一些检测方法,效果也相当不错。考虑到学生编写程序作业时的风格特点和实际情况,如果采用过于严格的商业检测技术可能会产生大量误判。针对学生作业代码中的整段复制、重命名标志符、改变表达式操作符和操作数、等价变换程序控制结构、增加冗余语句、代码块重排和修改注释等常见抄袭方法,实验室管理系统使用了更为合理和适度的、基于抽象语法树的防抄袭技术,该系统支持多种编程语言,符合软件实验室的多种编程开发环境。
基于抽象语法树的防抄袭检测过程分预处理、代码转换和相似度计算3个步骤:①预处理即系统对源代码进行格式化,如删除所有空行、多余的空格和注释语句,包括统一表达式操作符等;②代码转换就是将预处理后的代码文本经过词法和语法分析后转换成对应的抽象语法树,从而为相似度计算提供规范的数学模型;③相似度计算采用贪婪式字符串匹配算法(greedy string tilin),该算法用来解决文本中字符串或者提交的文本文件之间的相似性问题[10]。系统会对相似度超过设定阈值的作业拒绝接收并发出警告,同时把该情况记录下来上传到教师机。
(2)编程规范检查主要是系统对学生上交的作业进行代码风格的自动纠查,目的是帮助学生养成良好的编程风格以保持代码的可扩展性、易读性及高维护性,检查内容包括命名规范、排版布局、注释和代码结构等。该模块的设计是基于开源工具NSIQCpp-Style[11],其内置了47条C/C++语言编程规范检测规则,由于采用规则和分析引擎分离的技术架构,所以开发人员可以修改配置文件filefilter.txt来增、删适合自己风格的自定义规则。分析引擎采用触发的方式分析源码,不包含具体的语法风险,所以适合于大多数编程环境,支持批量文件检测。调用命令如下:
参数-o output_file_name指定输出报告文件(只有—output设置为cvs或xml时才有效),如果缺省,则在源码目录下生成nsiqcppstyle_result.xxx报告;如果指定多个源码目录,就可以通过此选项指定报告文件的位置和名称;参数-output=(csv|xml|vs7|emacs)指定输出报告格式。
答疑机器人模块的逻辑结构包括应用表现层、逻辑处理层和数据存储层3层。
(1)应用表现层主要负责机器人和学生用户的交互。当学生需要提供咨询或导学服务的时候,可通过对话方式在聊天窗口中输入请求语句或感兴趣的话题,如果机器人通过智能会话模块不能反馈给学生满意的信息,则机器人将起到中转作用把学生的会话信息发送给教师,由教师提供人工咨询、辅导服务。
(2)逻辑处理层主要负责会话信息数据的分析处理。智能会话模块首先把学生的自然语言进行数据预处理和非法文本过滤,然后进行分词,根据该学生的学生模型信息了解其个性化信息,如果学生咨询的是常规的问题,则从FAQ知识库中予以检索反馈(机器人还可以通过学习机跟学生和教师互动获取知识来不断丰富FAQ知识库);如果学生请教的是教学方面的问题,则根据其学识水平由推理机从云端教学资源库中进行模糊聚类,推荐给学生最优的答案;如果从教学资源库和FAQ知识库中都不能得到反馈信息的话,则启动内置的垂直搜索引擎从Internet上进行检索。
(3)数据存储层主要负责系统后台数据的存储管理。由于云计算所带来的资源共享优势,教学资源库可以部署在云端数据库服务器上,而FAQ知识库可以就近部署在本地数据库服务器上。
逻辑处理层中的分词词典是机器人分析处理用户自然语言的基础,也是智能会话模块在聊天反馈信息中拟人化时自然语言生成算法的核心。经过对比测试研究,在多种开源分词器中,答疑机器人模块中嵌入了中国科学院计算技术研究所研制的汉语词法分析系统ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System)[12],该分词器还支持新词识别和用户词典。答疑机器人功能界面见图2。
图2 答疑机器人功能界面图
本文针对软件实验室的教学管理和信息化过程中面临的问题,以降低教师管理强度和提高实验课教学效率为目标,设计并实现了软件实验室智能管理系统。实际应用情况证明:该系统能对学生在编程实验过程中进行有效监控,基本杜绝了学生在实验课上玩游戏、上网娱乐和程序代码抄袭等学风不端行为。由于机器人在答疑时未能根据学生的学识水平进行个性化答疑和推荐答案,所以,在未来对管理系统中答疑机器人的进一步研究中将在监测学生模型和以往聊天记录进行分析推理的同时,结合基于知识库的错误诊断模型,以能够准确地探测定位到学生在软件实验过程中的错误知识点,在运行出错时给出错误原因分析,并把定位的相关知识点信息反馈给学生模型,以便及时地动态调整推理机制。
(
)
[1]林先津.机房实验教学管理系统学生状态监控的设计与实现[J].实验技术与管理,2011,28(10):96-99.
[2]孟庆倩,李清宝,魏珉.基于 Windows环境进程监控的设计与实现[J].信息工程大学学报,2007,8(1):26-29.
[3]徐江峰,邵向阳.基于HOOK API技术的进程监控系统设计与实现[J].计算机工程与设计,2011,32(4):1330-1333.
[4]吴思竹,张智雄.基于网页特征识别的噪音网页过滤方法研究[J].情报理论与实践,2011,34(4):111-114.
[5]王园,龚尚福.基于二次TF*IDF的互信息文本特征选择算法研究[J].计算机应用与软件,2011,28(4):129-131.
[6]Tang Xijin,Yoshida T,Wen Zhang.TFIDF,LSI and multi-word in information retrieval and text categorization[C]//IEEE International Conference on Systems Man and Cybernetics,2008:108-113.
[7]Ho Chung Wu,Robert Wing Pong Luk,Kam Fai Wong,et al.Interpreting TF-IDF term weights as making relevance decisions[J].ACM Transaction on Information Systems,2008,26(3):10-13.
[8]Schleimers S,Wilkerson D,Aiken A.Winnowing:Local Algorithms for Document Fingerprinting[C]//Proceedings of the ACM SIGMOD International Conference on Management of Data,2003:76-85.
[9]Prechelt L,Malpohl G,Philippsen M.Finding plagiarisms among a set of programs with JPlag[J].Journal of Universal Computer Science,2002,8(11):1016-1038.
[10]张丽萍,刘东升,李彦臣,等.一种基于AST的代码抄袭检测方法[J].计算机应用研究,211,28(12):4616-4620.
[11]NSIQCppStyle User’s Manual[EB/OL].[2012-07-10].http://dev.naver.com/projects/nsiqcppstyle/.
[12]中科院计算技术研究所.汉语词法分析系统(ICTCLAS)[CP/OL].[2012-07-15].http://ictclas.org/.