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