测试学生答案
使用评判来确定学生的答案是否满足您设置的条件。编写测试时,请考虑学生常犯的错误,并针对这些错误添加评判。以下示例说明了在创建评判时要考虑的一些更常见的情况。这些示例包括在测试运行后作为输出提供给学生的消息的建议。
评判方法
创建评判时:
您可以将评判方法设置为正确/错误或加权评分。评判方法决定了如何为习题打分。
您可以指示评判为自测。
测试类型可以包含以下选项:
将学生答案中的变量与参考答案中的变量进行比较。
确定是否包含函数或关键字。
确定是否不包含函数或关键字。
使用 MATLAB® 代码创建您自己的评判。
您可以将这些选项中的任何一个(MATLAB 代码除外)转换为 MATLAB 代码。
有关这些类型的详细信息,请参阅为函数类型的学生答案编写评判和为脚本类型的学生答案编写评判。
正确/错误评判
如果您选择正确/错误方法,习题将被视为通过/未通过测试。如果通过所有测试,则定义为正确/错误的评判条件将返回 1;如果未通过任一测试,则返回 0。如果所有结果都是正确的,则给予满分。凡是标记为错误的结果均不得分。
MATLAB Grader™ 通过分别将答案标记为绿色和红色来指示答案是否通过。
加权评分评判
可以选择通过加权评分方法来提供部分学分。您可以为每个评判分配可能的总分的百分比。您可以通过更改赋给每个评判的点值(加权)来修改百分比。所给分数的计算方法是将标记为正确评判结果的百分比相加再乘以满分。
要表明评判已加权,请选择加权评分作为评判方法。
创建多个评判时,可以通过分数来分配您希望每个评判具有的权重。
当您选择加权评分时,还可以选择向学生显示百分比。
针对错误答案的反馈
显示额外反馈
您可以在未通过评判时向学生提供额外反馈。该反馈可以采用富文本格式编写,其中可以添加超文本链接、图像和数学方程。
下图显示了包含项目符号、数学方程、格式化代码和图片的额外反馈。
此图来自示例 Predator-Prey model: lynxes and snow hares,您可以在 MATLAB Grader 习题目录中找到该习题。
仅对初始错误显示反馈(脚本类型的习题)
在脚本类型的习题中,初始错误可能会导致后续错误。您可能需要鼓励学生首先关注初始错误。
如果您选择仅对初始错误显示反馈选项,系统将对初始错误显示详细反馈,而对后续错误默认隐藏反馈。学生可以通过点击显示反馈来显示该额外的反馈。
自测
自测是学生无需提交答案进行评分即可运行的评判。使用自测为学生提供一种在提交前确定答案是否正确的方法。
请注意,当学生提交答案时,系统还会运行自测,并以常规评判的方式处理自测,因此其结果将会计入最终成绩。
自测与常规评判有以下不同之处:
当学生运行自测时,自测结果不会记录在成绩簿中。
运行自测不计入提交次数限制。
学生可以查看自测中的评判代码以及该代码生成的输出(仅适用于 MATLAB 代码测试类型)。
可使用自测来指导学生解答多种方法均正确或有提交次数限制的习题。例如,考虑 Getting Started with MATLAB Grader下的 MATLAB Grader 习题目录中的“Calculating voltage using Kirchhoff loops”。要解答此习题,学生必须编写一个方程组。有多种正确的方法可以做到这一点,但只有与参考答案匹配的答案才会标记为正确。因此,教师为学生添加了一项自测,以在提交之前检查他们的方程是否按预期顺序排列。
提交的时间限制
MATLAB Grader 强制实施 60 秒的执行时间限制。当学生点击运行或提交时,时钟开始计时,并在系统向学生显示输出或评判结果时停止。如果达到时间限制,则系统会显示一条错误消息,说明服务器已超时。影响总执行时间的因素取决于学生是要运行还是提交答案,以及他们解答的习题是脚本类型还是函数类型。
本主题中的信息说明了脚本类型的习题和函数类型的习题如何实施时间限制。有关为学生提供建议的指导,请参阅执行时间限制。
要估计执行参考答案所需的时间,请使用 MATLAB Online™ 运行参考答案,因为用于执行 MATLAB 代码的计算环境与 MATLAB Grader 使用的计算环境最相似。
注意
学生可能会发现,当他们点击运行脚本/函数时可以看到代码的输出,但在提交时,他们会收到错误消息“运行和评判您的答案时服务器发生超时”。出现此错误的原因是,运行参考答案和所有评判需要更长的执行时间。
脚本类型的习题答案的时间顺序
脚本类型的习题按以下顺序运行:
运行脚本 | 提交 |
---|---|
运行一次学生答案 |
|
假如有以下示例:
示例 1:超出执行时间限制的概率较低
要执行的代码 | 执行时间 |
---|---|
参考答案 | 约 20 秒 |
典型的学生答案 | 约 20 秒 |
评判(假设此习题有三个评判) | 每项评判约 1 秒(总共约 3 秒) |
典型的总执行时间:约 45 秒(包括网络开销)
在此例中,超时错误可能是由于学生答案中有错误、代码效率低下或屏幕上显示的输出内容过多造成的。
示例 2:超出执行时间限制的概率较高
要执行的代码 | 执行时间 |
---|---|
参考答案 | 约 25 秒 |
典型的学生答案 | 约 25 秒 |
评判(假设此习题有三个评判) | 每项评判约 1 秒(总共约 3 秒) |
典型的总执行时间:约 65 秒(包括网络开销)
在此例中,学生能够运行其答案,但在提交答案时可能会遇到执行时间限制。可能需要重新设计或删除此习题。
函数类型的习题答案的时间顺序
函数类型的习题答案按以下顺序运行:
运行函数 | 提交 |
---|---|
运行调用函数的代码中的代码。 | 按顺序运行所有评判。 |
要测试某个函数,必须调用该函数。当学生提交函数类型的习题答案时,系统将仅运行评判。通常,每项评判通过使用相同的输入调用参考函数和学生函数并比较生成的输出来检查正确性。因此,单个函数类型的习题可能会多次运行参考函数和学生函数。
假如有以下示例:
示例 1:超出执行时间限制的概率较低
在此示例中,每项评判使用不同的输入来评估学生的函数。运行参考函数和典型的学生答案都需要约 5 秒的时间。
要执行的代码 | 执行时间 |
---|---|
评判(假设此习题有三个评判) | 每项评判约 10 秒(总共约 30 秒) |
典型的总执行时间:约 32 秒(包括网络开销)
在此例中,超时错误可能是由于学生答案中有错误、代码效率低下或屏幕上显示的输出内容过多造成的。
示例 2:超出执行时间限制的概率较高
在此示例中,每项评判使用不同的输入来评估学生的函数。运行参考函数和典型的学生答案都需要约 10 秒的时间。
要执行的代码 | 执行时间 |
---|---|
评判(假设此习题有三个评判) | 每项评判约 20 秒(总共约 60 秒) |
典型的总执行时间:约 62 秒(包括网络开销)
在此例中,学生能够运行其答案,但在提交答案时可能会遇到执行时间限制。可能需要重新设计或删除此习题。