韩磊 胡建鹏
摘 要: 针对高校选修C语言程序设计课程人数日益增多,初学者无法自主查找出程序中的Bug以修正,指导教师无暇帮助所有学生找出Bug等问题,设计和实现了基于Web版的C语言Bug信息采集与查询反馈系统。信息采集系统对初学者在日常C语言编程中出现的Bug信息进行采集,然后对数据进行分析与清洗,并导入数据库;查询反馈系统对编译器报错信息进行检索并给出错误类型与修改建议等。该系统的应用显著降低了初学者编程报错次数,提升了编程能力。
关键词: 程序设计; 信息采集; C 语言Bug; 查询反馈
中图分类号:TP312 文献标志码:A 文章编号:1006-8228(2019)10-61-04
Abstract: In view of the increasing number of students taking C language programming course in colleges and universities, beginners are unable to find bug in the program independently to correct it, and instructors have no time to help all students find bugs. A Web based C language bug information collection and query feedback system is designed and implemented. The information collection system collects the bug information appearing in beginners' daily C programming, then analyses and cleans the data, and imports it into the database. The query feedback system retrieves the error information given by compiler and gives the error types and modification suggestions. The application of the system significantly reduces the number of programming errors for beginners, and improves their programming ability.
Key words: programming; information collection; C programming bug; query feedback
0 引言
C语言是当今高校计算机专业最重要的专业基础课之一,作为使用最为广泛的面向过程的语言,高校许多计算机专业的课程,如数据结构、算法设计、操作系统、软件工程等都是以C语言作为编程语言。因此,C语言程序设计这门课是众多专业课程的前置课程,对其掌握的熟练与否,在很大程度上决定了学生专业素养的高低。
随着社会不断发展,国家教育的普及,高校教育也从精英教育模式转变成大众化教育,因而对于以应用型人才培养为办学目标的众多本科院校,如何在学生人数逐年增加、上机实验课指导老师无暇回复所有学生编程问题的情况下提高教学质量,已成为了C语言程序设计课程迫在眉睫需解决的问题[1]。
中国的大学对于高级计算机语言的程序设计课程的教学多是培养目标学习程序设计的思想和方法,通过大量实践编程练习,来掌握程序设计的流程与技巧;同样,也只有通过大量的练习才能了解和避免程序中常出现的Bug[2]。许多初学者对开发环境陌生,不懂编译器提示的错误信息进而发现、纠正错误。在许多大学缺乏功能完善的在线Bug查询辅助系统,多是由程序设计指导教师帮助初学者查找程序中的Bug,费时费力还无法兼顾到所有学生。因此,需要一套有效的C语言错误信息采集、数据分析及Bug信息反馈的系统来辅助学生的程序设计课程学习。
1 C语言Bug信息在线采集系统
笔者所在高校对C语言程序设计这门课程的教学进行了有益的探索[3]。本着实践出真知的原则,设计了一个C语言Bug信息在线采集系统,旨在采集大量初学者易犯的错误数据信息加以分析。在每学期的C语言程序设计课程中,每位学生在每次课上需要完成三道编程题和一道思考改错题。
基于Web版的C语言Bug信息采集系统需要学生填写在完成代码编写进行编译时的错误信息,包含以下信息:姓名、学号、编译器(VC++、Dev-C++和VS2008等)、题目编号(如P23-2,表示23页第2题)、错误编号、整段错误代码、错误语句行号(编译器提供)、错误语句、报错信息(编译器提供)、错误类型(语法、逻辑、运行)、错误分析(學生自我分析)、修改措施、修改后语句。
在教学周期方面,上海工程技术大学的专业必修课“C语言程序设计”每学期有18周共36学时的教学周期,理论课程要求学生能够掌握结构化程序设计的一般方法,养成严谨的程序设计及逻辑思维方式;而程序设计课程的课时一般不少于16课时,每个课时90分钟,要求学生掌握C语言语法规范,培养灵活思维和解决实际问题的能力。学生在完成随堂测验后,将他们在编程中出现并解决的Bug信息导入采集系统,其中有编译器报错信息、错误类型、错误分析以及修改措施等,要培养学生规范填写以方便后期对数据分析处理。
系统主要包括学生用户管理、问卷管理、数据统计分析三大功能模块。用户管理包括学生信息导入、学生账户维护以及学生学号班级信息验证等功能。问卷管理包括问卷问题修改维护、问卷时间戳设定等功能。数据统计分析主要将采集的数据导入数据库中并实现以图表形式呈现定量与定性的分析结果。系统设三种角色:管理员、指导老师与学生用户。其中的管理员权限包括有初始化数据库、配置系统、导入学生数据、修改需采集的问题与格式、统计与分析所采集的问题等;指导教师具有修改学生信息、修改需采集的问题与格式、查询分析统计结果等权限;学生则验证身份、修改登录密码及完成错误信息的采集。
信息采集系统流程大致为,在实验机房的教师主机上配置服务器,学生通过局域网访问采集信息的主页。以学生姓名和学号为登录用户名和登录密码,整个问卷的问题设置为必填选项,其中的编译器、错误类型则设置下拉选择菜单,其余信息则为学生自主填写,每一个问题旁边设置提示信息如问题“错误代码”提示“仅填错误语句的代码不是全部代码”避免信息的重复。一个学生一学期的所有C语言错误数据信息作为一个单元存入数据库。系统采集的数据以*xlsx格式存储便于后期处理。
2 bug信息分析处理
将采集的17、18级两届学生的程序设计错误信息在初步数据处理后,绘制语法、逻辑、运行三种错误的百分比饼状图,如图1所示,可以直观的发现,语法错误所占比例最高,逻辑错误其次,至于一般程序不具有“健壮性”才会出现的运行错误则占最小的比例。初学者在学习C语言这一门程序设计类语言时,大多会犯单词拼写错误、中文字符下输入等低级语法错误,这是语法错误比例最大的原因,而逻辑错误则是学生前期没有养成良好的逻辑思维造成的,至于运行错误多是初学者不熟悉编译器的使用造成。
本着以实际数据揭示教学工作中不足的原则,将归类的语法错误、逻辑错误、运行错误再次深入分析,挖掘其深层次信息,细化各编程报错信息,以便在后续教学工作中加以改进。同时,细化分析各类型的错误能将同一类型的报错信息中的关键词提取分析方便后期的查询反馈系统设计。
图2是将所采集的学生错误信息深入分类处理后得到的初学者易犯错误类型及其占比情况。从中可以直观的了解初学编程语言学生常犯的错误及比例,便于指导老师针对性的改进授课。同样,利用其数据统计分析系统将数据可视化呈现,依据C语言Bug采集系统的时间戳来处理归类数据,在同一段时间对比三种类型的错误比例变化发现,在“C语言程序设计”开课之初学生的语法错误比例明显高于逻辑与运行错误;而到了课程的中后期,随着指导老师针对编程中出现的常见错误则语法错误进行纠正,语法错误比例下降,逻辑错误比例上升。这就可以帮助教学导师在往后的不同教学阶段中加以改进教学方案。
3 Web版查询与反馈系统设计
3.1 数据库设计
在采集了两届学生的C语言Bug信息并处理后,为解决上机实验课程指导老师人手不够、初学者大多会犯的同样的错误等问题设计了基于WEB版的C语言Bug信息查询与反馈系统。与C语言Bug信息采集系统一样,系统设置允许管理员与指导教师采用*.xls和*.xlsx格式导入学生数据信息,以学生的学号为用户名和初始密码,给学生修改登录密码的权限[4]。
因为查询与反馈系统旨在帮助初学者明白bug的错误类型以及分析错误原因提示修改建议,因此采集系统所采集的数据中有些不需要进行再次分析,因此需要重新建立一个查询与反馈信息的数据库。将采集与处理后的“错误语句”、“报错信息(编译器提供)”、“错误类型(语法、逻辑、运行)”、“错误分析(学生自我分析)”、“修改措施”及“修改后语句”导入查询反馈系统数据库中。由于初学者在前期不了解C语言bug信息采集系统的使用因此会不可避免出现错误,所以需要对以上数据进行二次清洗。
3.2 查询与反馈系统设计
在数据二次清洗以及导入数据库之后,开始设计C语言Bug信息的查询与反馈系统。设计之初考虑到初学者便于上手使用,设计成类似于“百度”“谷歌”等搜索引擎形式,同时在页面显示提示信息,指导学生操作。其工作原理是基于分类目录(Directory)即通过之前人工采集的Bug信息形成数据库进行搜索[5]。依据之前对Bug信息的归类处理,对提取的“编译器报错信息”中的字组频度进行统计,抽出高频出现的词组作为搜索关键字。对于关键词搜索还使用热点优先策略,比如编译器报错提示信息: [Error] expected ';' before 'else'这种占比极大、热点关键词进行优先抓取策略,而不需要经过去重与过滤处理。在抓取信息时,采用广度优先策略便于显示更多信息,为初学者提供多种解决方案。图3为分类目录检索系统的结构示意图。
3.3 应用实例
在设计理念和开发方法明确之后,通过各种UI对比后,C语言Bug信息查询与反馈系统的首页最终如图4所示,其使用流程大致为:学生可以通过直接搜索编译器提供的报错信息以检索出该错误的类型、错误原因分析以及错误修改措施;同样学生也可以通过编译器报错信息中的关键字检索,这样通过广泛索引,反馈系统会提供大量同类型信息。图5是根据编译器提供的报错信息“expected ';' before ')'”进行查询Bug信息的反馈的示例。
4 结束语
C语言程序设计的教学正朝着多元化、现代化、信息可视化的方向发展[6]。本文设计了一套C语言Bug信息采集与查询反馈系统,以提高“C语言程序设计”课程的教学成效。自2017年以来,上海工程技术大学电子电气工程学院对修习“C语言程序设计”课程的学生投入使用该系统,学生在编程课上的提問次数显著下降,同时,编程能力较往届均有了较大提升。由于前期信息采集数量较少,且信息格式相对不够规范,因此在未来的工作中,将不断完善C语言Bug信息数据库,同时不断优化Bug信息的查询与反馈系统,做到更加精确化、便捷化。
参考文献(References):
[1] 龚文胜.关于新形势下的C语言有效教学模式探究[J].科学大众(科学教育),2019.2:162.
[2] 李霞.基于专业应用的C语言程序设计课程教学研究[J].计算机时代,2019.2:95-97
[3] 伞宏力.电子信息工程专业C语言程序设计课程教学改革建议[J].教育教学论坛,2019.4:136-137
[4] 洪晓彬.数据库在分布式应用软件中的应用与设计研究[J].无线互联科技,2019.3:53-54
[5] 帅应,罗文琪,熊丽珍,舒忠.一种改进的垂直搜索引擎研究与设计[J].现代计算机(专业版),2018.34:90-95,100
[6] 李延军,李明,马金刚,王晓燕,何雪英.混合学习模式在C语言程序设计移动课堂中的应用研究[J].计算机教育,2018. 1:71-74