数据挖掘技术在程序设计课程教学中的应用

时间:2022-09-16 12:56:04

数据挖掘技术在程序设计课程教学中的应用

摘要:本文介绍了在程序设计课程教学中教师如何对学生程序作业进行数据挖掘的一种方法。这种方法即将学生源程序文件分解为语法元素数据,对语法元素数据和成绩进行分析和统计,帮助教师发现导致学生程序错误的主要因素,从而调整教学内容和方式。

关键词:数据挖掘;程序设计;教学

中图分类号:G64 文献标识码:B 文章编号:1672-5913(2007)02-0057-03

1程序设计课程与数据挖掘技术概述

程序设计课程是培养学生软件开发能力的一门课程。目前国内的理工类学校或相关专业普遍都为学生开设了程序设计课程。一直以来,如何了解多数学生在学习程序设计中所遇到的困难,如何帮助学生克服学习中的障碍,都要靠教师多年的教学经验来解决。这种传统的教学方法显然不能满足知识更新迅速的计算机教学过程。因此需要研究如何从学生提交的程序作业中利用数据库技术及时发现问题和解决问题。数据挖掘(Data Mining)技术是近年来新兴的数据管理与分析技术,主要用于发现数据中隐藏的线索,辅助人们进行科学分析和决策。数据挖掘普遍需要三个阶段:数据准备、挖掘操作和结果表达。下面以C语言为例介绍在程序设计课程教学中,对学生程序作业进行数据挖掘的一种应用方案。

2程序设计课程的数据挖掘过程

2.1 数据准备

根据程序设计课程的教学特点,我们按错误的严重程度将所有学生提交的程序作业的评阅结果归纳为以下5类,即题目错误、编译时语法错误、编译时语法警告、编译后运行结果不完全正确、编译后运行结果完全正确。为了对学生程序作业中的问题进一步分析原因,我们对以下8类数据进行分析,即功能模块函数序列、逻辑结构序列、语句类型序列、表达式序列、运算符序列、标识符序列、数值常量序列以及简化的字符常量序列。

要将文件形式的源程序分解为以上8项数据,就需要按语法规则完成以下步骤:

(1) 过滤程序中的注释信息和空白字符,产生预处理元素序列;

(2) 根据#include和#define等标记替换用户指定的包含文件和宏定义等预处理元素;

(3) 对照语法元素表,进一步将程序分解为关键字、标识符、常量、运算符、定界符等语法元素序列;

(4) 将数值常量以空格为连接符连接为一个数值常量序列;

(5) 将字符及字符串常量保留%d等格式字符和\n等转义字符后删去多余字符,以空格为连接符连接为一个简化的字符常量序列;

(6) 将所有运算符以空格为连接符连接为一个运算符序列;

(7) 将用户变量名和函数名统一编码后与程序中的关键字构成标识符序列;

(8) 将运算符与标识符及常量以空格为连接符连接为一个表达式序列;

(9) 将程序中的语句分类为表达式语句、函数调用语句、空语句、复合语句、if语句、else语句、switch语句、case语句、while语句、do语句、for语句、break语句、continue语句、return语句和goto语句,并组织成语句类型序列;

(10) 对语句按分号和大括号等定界符划分为模块函数序列;

(11) 将模块内语句按顺序、选择、循环的分类构成逻辑结构序列。

2.2 挖掘操作的过程

由于篇幅所限,下面仅以程序设计教学中的典型题目“温度转换”的数值常量序列和运算符序列为考察数据具体描述挖掘过程。

(1)数据清理

首先将数据准备阶段的各类数据与评阅结果组成一个数据记录集(如表1所示)。由于分析的目的是找出教学中造成学生程序错误的主要因素,而题目错误仅仅是因为学生操作马虎,与掌握程序设计的能力并不相关,因此把评阅结果全部正确的和题目错误的记录过滤掉,只保留评阅结果为语法错误、语法警告和运行错误的记录(如表2所示)。

(2)构造1项侯选集,发现频繁1项集

将所有数据作为1项集中的元素,构造1项侯选集,并计算不同元素的数量,如表3所示。保留其中数量较多的元素,滤掉其它元素,得到频繁1项集,如表4所示。

(3)构造2项侯选集,发现频繁2项集

将所有频繁1项集元素两两组合,构成侯选2项集,并计算组合后的数量,如表5所示。保留其中数量比较多的元素,滤掉其它元素,得到频繁2项集{=/*(-),编译警告}。

2.3 结果表达和解释

保留下来的2项集的两个元素分别代表了错误类型和造成该类型错误的主要语法元素序列,即现有数据表明(输入函数中)未使用取地址运算符是造成编译警告的主要原因。

3数据挖掘应用效果

在现实的教学过程中,我们对2005级8个班275名学生的5385个程序进行了统计和分析,发现题目错误的比例约占1.49%,编译错误的比例约占3.38%,编译时警告的比例约占1.21%,运行错误的比例约占8.10%,运行正确的比例约占85.82%。其中造成编译错误的主要原因是注释信息或各级括号定界符未配对;造成编译警告的主要原因是格式输入函数调用时缺少地址运算符或用户变量定义后未使用;造成运行错误的主要原因是除法运算符两侧运算量为整型常量。下面的图表反映了在程序设计课程的教学中没有使用数据挖掘技术和使用了数据挖掘技术的教学效果对比。

图1为未采用本方法指导教学的10次学生程序作业评阅结果统计图,其中靠上的折线表示每次学生作业的平均分数,靠下的折线表示每次学生作业的严重语法错误发生率。可以发现,学生每次作业的平均成绩基本呈水平小波动随机形状,表明学生成绩在学习过程中没有明显变化,同样严重语法错误发生率也没有明显变化。图2为一直采用本方法指导教学的10次学生程序作业评阅结果统计图,可以发现学生的成绩随着系统的使用时间增加而稳定的上升。在第三次作业以后基本保持在90分以上的水平,同时严重语法错误的比例也快速的下降,在第二次作业以后就控制在5%以下。以上对比说明本方法比较准确地发现了学生程序中的语法错误和算法错误的主要因素,使学生得到及时地反馈并在以后的程序设计中避免相似的错误,从而明显的改善了教学效果。

参考文献:

[1] 李建中,王珊 . 数据库系统原理[M] . 北京:电子工业出版社,2004.

[2] Richard J. Roiger,Michael W.Geatz . 数据挖掘教程[M] .北京:清华大学出版社,2003.

[3] GB/T 15272-94.程序设计语言C[S].

投稿日期:2006-08-08

作者简介:梅险(1975-),男(汉族),黑龙江省哈尔滨市人,工程师,研究方向:数据库与软件工程。

上一篇:计算机网络实验分层次教学的探索与实践 下一篇:嵌入式Internet常见接入方式的研究