有关编程行为特征的分层与综述

2019-04-08 00:46周小涵
现代计算机 2019年6期
关键词:快照日志按键

周小涵

(四川大学计算机学院,成都610065)

1 编程行为的6个分层

1.1 基于总体统计信息的编程行为

基于总体统计信息的编程行为主要是对底层数据的上层描述,不直接反映代码信息或者底层数据信息,但却是底层信息的一种体现,主要表现在时间戳、编程时长、连续快照间的分钟数等信息,在Vihavainen等人[1]的实验中,每个学生在进行一个有截止日期的家庭作业,使用学生编程环境中的插件从学生的实际编程过程中收集快照中的编程时长、距离截止日期的时间、连续快照之间的分钟数以及其他的编程行为的每周的中值、平均值、最小值、最大值和标准差来作为特征数据。利用B-Course[2]的非参数贝叶斯网络工具来建模数据中要素之间的依赖关系,以及构建分类器,使用leave-one-out交叉验证,这篇文章通过检测学生编程中的一些时间数据等总体统计信息能比较准确地预测他们数学课程的结果。

1.2 基于代码快照的编程行为

基于代码快照的编程行为使用的很多,它是指通过时间或者事件触发记录代码内容,利用代码快照来比较代码内容的不同之处,主要可以分为粗粒度和细粒度两种,其中粗粒度是以事件为触发的,细粒度是以时间为触发的。Vihavainen等人[1]使用学生编程环境中的插件从学生的实际编程过程中收集快照,使用连续快照之间的分钟数、顺序快照之间的编辑距离的每周的中值、平均值、最小值、最大值和标准差以及其他的特征来作为特征数据,其中编辑距离通过Bergel和Roach的Ukkonen算法的扩展算法[3]来计算。通过编程行为的数据预测她们数学课程的结果。Watson等人[4]使用BlueJ IDE的扩展从学生的实际编程过程中收集快照以及其他特征,使用WATWIN算法进行评分,定量描述学生常规编程行为方面的数据,该算法分为两个阶段,第一阶段,为学生试图编译的每个文件构建连续对,并估计学生花在处理错误的时间量,使用日志编程行为来构建一组连续的编译事件对,从而可以分析学生对不同错误的响应。在第二阶段,通过根据事先已知的和本文自己的研究已经确定为表现较弱表现学生的表现来分配扣分来对每个配对进行评分。他们比较之前的研究,将编译事件对进行了处理,剔除了两次都正确的对和仅仅增加了注释的对,纠正了连续的对在不同文件上产生解决错误时间的误差,并通过移除所有的标识符将错误信息一般化。Blikstein[5]描述了一种自动化技术评估,分析和可视化学生学习计算机编程,在编程任务期间记录了数百个学生代码的快照,并采用不同的量化技术来提取学生的行为,并根据编程经验对其进行分类。Vihavainen[6]正在调查学生在编程过程中的行为(例如,渴望开始研究刚刚发布的练习,遵循最佳编程实践)会影响课程结果。只充分利用学生编程过程中使用快照自动收集的数据,而不会收集任何额外的背景信息。Spacco等人[7]构建了一个Eclipse插件来解决学生在学习编程技能时,只能提交项目接受严格的测试,却缺少和教师之间的反馈。该插件有两个主要功能。首先,它会在每次保存,添加或删除文件时将中央CVS存储库中的学生项目的完整状态捕获即代码快照。这产生了每个学生项目演变的细致历史。其次,插件允许学生将他或她的项目提交给中央服务器。提交服务器自动编译并对学生提交的作品进行有限测试,提供反馈信息,说明项目与实现项目的要求有多接近。他们的目的是为教师和研究人员提供关于学生学习和工作方式的更详细信息,并提供反馈给学生,帮助他们专注于实现所分配的项目。

1.3 基于编程事件的编程行为

基于事件的编程行为可以分为两大类,分别为按事件类型划分和按事件间相关性划分,其中按事件类型可以分为编译事件和环境事件,环境事件即IDE环境中进行的操作,比如保存。按事件间相关性划分可以分为基于时间的划分和基于频率的划分。基于编程事件的编程行为多使用编译事件作为特征提取的初始数据,编译事件即为记录编译事件时间点附近的数据,像是Vihavainen等人[1]收集编译时的编译结果等数据。Jadud[8]引入了一种名为 Error Quotient(EQ)的算法,该算法通过学生两次编译的时间以及编译的结果,分析学生程序设计过程中的连续状态,并提供了学生能够如何很好地解决任何遇到的语法错误的度量标准。Watson等人[4]使用BlueJ IDE的扩展从学生的实际编程过程中收集除了代码快照数据外,还收集了编译事件结果(编译成功或失败)、报告的错误消息及行号,将编译事件的结果以时间戳为序,两两一组,按照两个连续事件分别基于时间和频率的相关性,使用WATWIN算法进行评分,基于直接记录日志,定量描述学生常规编程行为方面的数据。Munson等人[9]分析了课内和课外的编程活动,记录程序源、编译器错误消息列表、文档名称、学生正在处理的作业、时间戳以及学生的ID,可以用作辅导弱势学生在其过于落后之前对其表现早期的表现进行干预的基础。

1.4 基于日志的编程行为

基于日志的编程行为可以记录所有的日志文件信息,例如在Watson等人[4]的实验中使用BlueJ IDE的扩展从学生的实际编程过程中收集除了代码快照、编程事件、总体信息等数据外,他们还收集了报告的错误消息及行号这两个基于日志的编程行为,使用WATWIN算法进行评分,基于直接记录日志,定量描述学生常规编程行为方面的数据。他们对收集的错误信息进行处理,去掉了标识符来判断学生是否一直在犯同一种错误,也得到了不错的结果。Carter J[10]开发一个不依赖于距离自动确认和传达开发人员难度的系统,其中他们针对日志的不同片段,计算每个片段中各类别命令占全部命令总数的百分比,并将这些百分比用作识别模式的特征,其中共有5类命令分别为:导航(用户从一个文件切换到另一个文件)、编辑(用户插入或删除文本)、删除(用户删除整个方法或类)、调试(用户使用调试器显式调试代码)、焦点(用户在IDE和其他打开的窗口之间切换)。

1.5 基于按键的编程行为

基于按键的编程行为顾名思义,就是编程人员在编程过程中敲击键盘所产生的数据,一般是按键间的释放时间、按键的驻留时间和使用特殊按键(例如,空格、回车、delete等按键)的频率。Richard等人[11]通过记录学生编程时击键的类型和时间戳,来测试击键速度和表现间是否存在相关性。按键的这种行为也被应用在除了编程行为外的其他领域,也有一定的参考价值,主要是用来做用户情感状态识别等方面,A.Kolakowska等人[12]介绍了在通过按键的动态分析来识别用户情绪状态和验证用户身份这一领域的一些研究,主要提取的特征为键间的释放时间、按键的驻留时间、使用特殊按键的频率,但是他们的研究在识别用户情绪状态方面的结果并不理想;Clayton等人[13]通过按键和用户的情感信息,确定表现最好的情绪状态模式。

1.6 基于鼠标的编程行为

基于鼠标的编程行为主要收集鼠标的跳跃活动、运动轨迹的x、y坐标,加速度等信息,主要有两种应用,第一种是利用鼠标的在编程过程中的运动轨迹或点击来分析编程过程;Green等人[14]通过检测代码编辑过程中的非线性行为来调查编程活动的策略方案。Blikstein[5]描述了一种自动化技术评估,分析和可视化学生学习计算机编程,在编程任务期间记录了数百个学生代码的快照,以及鼠标点击这种非代码事件总数,并采用不同的量化技术来提取学生的行为,并根据编程经验对其进行分类。Gray等人[15]通过检测鼠标的移动,引入了“改变事件”的概念来描述编码过程中的这些关键时刻。他们认为,改变事件可以通过两种不同的方式来实施:或者是对项目的局部小修改,或者是对项目目标结构的重大转变。这项工作的重要性在于它清楚地确定了可能发生这种变化的情况。Estey等人[16]通过学生在学习工具中的交互行为预测学习艰难的学生,通过的交互行为为学生对一下按钮——编译代码、运行代码、提交解决方案、获得提示以及提出问题的点击,并且为了能更好地区分持续性和暂时性挣扎,她们进一步提出了一种测量编程行为变化的轨迹度量;第二种不是编程行为,但是同样可以借鉴,利用鼠标反应时间和鼠标轨迹和加速度等特征进行欺骗检查,Freeman等人[17]作者通过使用鼠标追踪技术,记录鼠标运动的x,y坐标,来测量人们的心里状态。Zhang[18]等人通过利用鼠标反应时间和鼠标轨迹特征进行欺骗检测。

2 各层次编程行为的优缺点比较

如表1。

表1

3 结语

现有的有关编程行为的研究大多集中在对于一到两种的编程行为进行研究,很少有将多种编程行为进行结合研究的。从上文中可以看出,每一种编程行为都有着自己的优势和劣势,在今后的研究中,我们想将各个层次的编程行为进行结合,实现趋利避害的效果,使得利用编程行为的预测得到更加准确的结果。

猜你喜欢
快照日志按键
一名老党员的工作日志
基于有限状态机的按键检测程序设计
读扶贫日志
非触勿动 秒治键盘误触
巧破困局,快速恢复本本活力
雅皮的心情日志
雅皮的心情日志
注册表拍个照 软件别瞎闹
让时间停止 保留网页游戏进度
其实真的很简单教你轻松关闭WP8.1手机按键灯