非计算机专业程序设计课程教学改革与作业批改系统的构建

2021-11-05 08:03蒋银珍
电子技术与软件工程 2021年17期
关键词:测试点关键字任课教师

蒋银珍

(苏州大学东吴学院 江苏省苏州市 215006)

程序设计课程是理工科学生的一门必修主干课程[1]。计算机程序设计语言种类繁多。目前,我校针对不同的非计算机专业学生开设的计算机程序设计通识课程也不同,主要有C 语言程序设计、C++程序设计、Python 程序设计、C#程序设计以及Java 程序设计。上述五门程序设计课程每周安排3 课时的课堂教学,3 课时的机房实验教学。课堂教学在教室进行,主要由任课教师讲授相关课程知识,实验教学主要是安排学生完成实验指导书上的编程题,任课教师和助教对学生练习过程中提出的问题进行解答。实验结束后,学生将源代码打包提交给任课教师进行批阅。由于计算机程序设计通识课程面向全校学生,任课教师在不同学期面向不同学院不同专业的学生授课,任教班级人数较多。针对不同专业,程序设计课程的编程练习题与专业特色缺乏关联性,作业设计不够合理,学生的学习兴趣不够浓厚,这是导致目前教学效果不够理想的主要原因[2]。此外,对程序设计课程作业采用传统的布置和人工批改方式,效率低下、费时费力,已远远不能满足课程的实践环节的需要[3]。

为了激发学生对程序设计课程的学习兴趣,体验编程带来的成就感,让任课教师实时了解学生的编程作业完成情况,及时调整课堂教学侧重点,同时也实现任课教师之间资源共享,减少重复工作量,笔者开发了基于B/S 结构的通用在线作业提交与批阅系统,目前适用于C、C++、Python、C#以及Java 程序设计等五门课程。过程性学习评价能更全面客观的考核学生的学习活动[4],实践证明,借助于作业批阅系统,任课教师能更轻易地从宏观上掌握学生的平时学习状态。

1 系统功能

程序设计课程作业批阅系统以网站形式发布。该系统用户角色有课程管理员、任课教师和学生。

课程管理员的主要职能是为其负责的课程划分好知识模块。以C 语言程序设计课程为例,知识模块可划分为运算符与表达式、顺序结构、单分支结构、双分支结构、多分支结构、while循环、for 循环、循环嵌套、函数、结构体、链表等,并为各知识模块有针对性地设计编程作业供学生进行专项练习。

任课教师主要负责管理自己的授课班级信息、班级资料和学生名单。在教学过程中,任课教师根据自己的教学进度和面向的学生专业方向,为所授班级选择合适的编程作业进行发布,同时设置起始时间和截止时间。此外,任课教师也可以根据自己班级的实际情况新增编程作业作为补充。根据实际情况,任课教师对已经发布的作业也可调整截止时间,或取消发布。

在作业发布期内,学生登录后可查看编程题题目要求和运行示例,启动相关程序设计语言开发环境,编写程序代码进行调试,完成后提交程序源代码文件,系统接收源代码文件后自动批阅,然后显示作业成绩并登记入系统。

2 系统开发与实现

本系统是基于ASP.NET 的B/S 架构的Web 应用程序,开发语言采用C#。通过综合考察C 语言程序设计、C#程序设计、Java 程序设计以及Python 程序设计等四门课程的教学要求的异同点,设计编程作业布置与批改的流程为:设计编程题→任课教师发布编程作业→学生完成并提交作业→系统自动批阅→任课教师查看成绩。

编程题设计要素包括题目要求、图片(仅支持一张)、关键字、输入输出以及参考答案(可为空)。其中,关键字是指代码中必须包含的内容,程序设计课程类别不同,则关键字有所不同(例如C语言程序作业的关键字可设为:include/main/scanf/printf)。每题至少一对、最多5 对输入输出用作批阅时的测试数据。在设计无输入的编程作业(如:输出100 以内的素数)时,输入测试内容任意。图1 显示的是C 语言程序设计课程中for 循环部分的一道编程作业,共设置了5 个关键字,两对输入输出。

图1:设计编程题界面

设计完编程题作业后,任课教师可发布作业供学生查看。同一编程题可向不同班级发布,发布时设置允许提交作业的开始时间和截止时间,以及截止时间过后是否向学生公布参考答案。

学生登录系统后,在允许提交作业的时间段内,可根据题目要求编写程序源代码文件,通常要借助相关程序开发环境(如Dev-CPP、Visual Studio 等)调试程序。当学生在本地调试完程序后,将源程序文件提交至本系统(界面如图2所示),系统给出关键字和每组数据的测试结果得分,并显示该题总得分。每道作业满分为100 分,其中关键字满分10 分,关键字个数不限。若关键字个数为n,则每个关键字得分为10/n。1 至5 个测试点共90 分,每个测试点满分相同。如某道作业设置了一个测试点,则该测试点满分为90 分;若设置了两个测试点,则每个测试点满分为45 分,若设置了3 个测试点,则每个测试点满分为30 分,依此类推。在截止时间之前,学生可反复提交,系统保留最后一次的作业结果和成绩。任课教师则随时可以查看每位学生的完成题数、总得分、平均分以及每题的完成情况(包括每个测试点得分、测试输入、期望的输出结果以及学生程序的输出结果等),从而掌握学生学习的薄弱环节,及时调整课堂教学侧重点,不断提高教学质量。若截止时间已过,学生不能再提交文件进行批阅,但能查看得分,并在设置为允许查看答案的情况下浏览参考答案代码。

图2:学生提交源程序文件批阅界面

自动批阅源程序文件是本系统的实现难点。在图2所示界面中,系统接收到学生提交的源程序文件后,则按以下步骤完成批阅:

(1)在服务器端创建一个以学生学号命名的文件夹;

(2)将学生提交的源程序文件上传到学号文件夹;

(3)将该编程作业的输入数据转存为输入文本文件;

(4)比对学生代码中的关键字,并计算得分(记作A);

(5)根据源程序文件的扩展名(目前支持.c、.cpp、.cs、.py、.java 扩展名),获取相应的编译程序或解释程序的路径配置信息,然后使用自定义的Compile 类的ExecuteCompile 方法,通过使用Process 类调用cmd 命令设置PATH 路径、运行预先安装在服务器端的编译器或解释器程序命令,从而实现编译或解释学生程序代码的目的;例如:

对于.c 源程序文件,处理的关键代码是:

对于.cpp、.cs 以及.java 源程序文件,处理代码类似,仅仅是编译程序路径和文件名称不同而已。

若对于.py 源程序文件,直接调用Python 解释器解释学生程序。

(6)通过检查是否产生了.exe 文件判断学生程序是否成功编译链接。若成功则再次使用Process 类调用cmd 命令,运行学生程序(采用管道操作,以输入文本文件作为标准输入,运行结果重定向写入指定结果文本文件);关键代码如下:

(7)读取结果文本文件的内容,与编程作业的输出数据进行比对,并计算得分(记作B);

(8)将学生代码、测试结果以及得分(A+B)存入数据库;

为提高系统的可维护性,在系统配置文件Web.Config 中的appSettings 节点下为编译器或解释器程序路径设置键对值,例如各种语言编译器对应的键对值可设置如下(根据实际安装情况路径有所不同):

为避免大量存在死循环的学生程序占用服务器CPU,在使用Process 类调用cmd 命令运行学生程序时,可指定等待时间。若在指定时间内,学生程序仍未执行结束,则调用taskkill 命令强制结束学生程序。

作业批阅系统后台数据库为Sql Server 2008,与编程作业相关的数据表有三张,分别为编程题表、作业发布表和作业成绩表。编程题表用于存放编程题信息,字段包括:题目编号、章节编号、出题人、题目要求、图片名称、关键字以及5 组输入输出等。作业发布表存放作业发布信息,字段包括:发布编号、班级编号、开放时间、截止时间以及是否在截止时间之后允许查看答案等。作业成绩表登记学生编程题的完成情况,包括学号、姓名、成绩、学生答案、测试结果等。

3 结束语

程序设计类课程重在实践[5]。如何设计作业,合理设置作业发布时间的先后顺序也至关重要。例如,教材中有例题:输入一个整数,输出它的每位数字之和。通过课堂讲解让学生领会其中的算法。为了帮助学生灵活运用该算法,可依次设计并发布作业:

(1)输入一个整数,输出它的逆序数;

(2)输入一个整数,判断其是否为对称数;

(3)输出1000 以内所有的对称数。循序渐进,逐步加大作业难度,不断提高学生对所学知识的灵活运用能力。

经过一学年的使用,基于Web 的程序设计课程作业自动批阅系统运行状态良好,学生完成编程作业后即刻提交验证并查看得分,体会到成功带来的喜悦。任课教师也能及时发现学生对所学知识掌握的薄弱点。目前该系统已是全校从事计算机程序设计课程教学教师的得力助手,同时也是学生的好帮手,对于提高教学质量、增强师生之间的互动具有积极的推广意义。

猜你喜欢
测试点关键字任课教师
一种新型模拟电路故障字典测点选择方法研究
基于信息熵可信度的测试点选择方法研究
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
逻辑内建自测试双重过滤测试点选取策略
成功避开“关键字”
班主任与任课教师合作发展的实践与思考
论高职班主任与任课教师的协作与沟通
要善于树立任课教师的威信
任课教师在班级管理中发挥的作用
测试点的优化选择