主要内容

学生的测试答案

当您在 MATLAB® Grader™ 中创建练习题时,请定义用于评判学生答案是否符合您设定的成功标准的测试。

定义测试

要定义测试,您可以使用测试类型列表中提供的预定义测试,也可以编写自己的 MATLAB 代码。预定义测试选项包括:

  • 变量等于参考答案 - 检查变量的存在性、数据类型、大小和值。此选项仅在脚本练习题的测试类型列表中可用。默认容差 1e-4 适用于数值。

  • 函数或关键字存在 - 检查是否存在指定函数或关键字。

  • 函数或关键字缺失 - 检查学生答案中是否未包含指定函数或关键字。

例如,如果您希望学生使用 taylor 函数来计算给定函数的泰勒级数逼近值,请指定以下选项:

  • 测试类型列表中,选择函数或关键字存在

  • taylor 函数指定为学生必须使用的函数。

  • 可以选择指定学生在未使用预期函数时收到的补充反馈。

Test options shows boxes for the title, test type, functions and keywords, and feedback. The test type option Function or Keyword Is Present is selected.

对于脚本练习题,您可以使用预定义测试类型变量等于参考答案来评判变量。例如,通过将某个变量与参考答案中具有相同名称的变量进行比较,评判该变量的大小是否合适,以及是否具有期望的值和数据类型。

Test options shows boxes for the title, test type, variable name to compare, functions and keywords, and feedback. The test type option Variable Equals Reference Solution is selected and V is specified as the variable name to compare.

您还可以通过在测试类型列表中选择 MATLAB 代码选项来编写 MATLAB 代码。请遵循以下规范:

  • 评判正确性 - 您可以使用与预定义测试类型对应的函数:assessVariableEqualassessFunctionPresenceassessFunctionAbsence。您也可以编写针对错误结果返回错误的自定义测试。

  • 脚本练习题中的变量名称 - 要引用参考答案中的变量,请添加前缀 referenceVariables,例如 referenceVariables.myvar。要引用学生变量,请使用变量名称。

  • 函数练习题中的函数名称 - 要调用练习测试中的参考答案,请添加前缀 reference,例如 reference.myfunction。要调用学生函数,请使用函数名称。

  • 变量作用域 - 您在测试代码中创建的变量仅存在于练习测试内。

例如,假设学生必须计算变量 X 的值,该值的变化可能会超出默认容差。要将学生答案中的值与参考答案中的值进行比较,请通过调用 assessVariableEqual 函数来指定变量和容差。

The MATLAB code defines X_expected as referenceVariables.X. The code then calls the assessVariableEqual function with arguments 'X', X_expected, and AbsoluteTolerance=1e-2.

要测试函数练习题,请使用测试输入调用学生函数和参考函数,并比较输出。例如,以下代码检查名为 tempF2C 的学生函数是否正确地将温度从华氏度转换为摄氏度。

temp = 78;
tempC = tempF2C(temp);
expectedTemp = reference.tempF2C(temp); 
assessVariableEqual('tempC',expectedTemp);

提示

来自 assessVariableEqual 函数的默认错误消息包含被测变量的名称,例如上述示例中的 XtempC。对于函数练习题,此变量在练习测试脚本中,而不在学生代码中。请使用学生可识别的有意义的名称,例如函数声明中的输出。

单项练习测试可以包含多项测试。例如,以下代码检查学生是否实现了一个名为 normsinc 的函数,该函数可以正确处理零值和非零值。零值情况包括使用 assessVariableEqual 函数中的 Feedback 名称-值参量向学生提供额外反馈。

nonzero = 0.25*randi([1 3]);
y_nonzero = normsinc(nonzero);
expected_y_nonzero = reference.normsinc(nonzero); 
assessVariableEqual('y_nonzero',expected_y_nonzero);

y_zero = normsinc(0);
expected_y_zero = reference.normsinc(0); 
assessVariableEqual('y_zero',expected_y_zero, ...
   Feedback='Inputs of 0 should return 1. Consider an if-else statement or logical indexing.');

提供部分学分

默认情况下,如果所有测试均通过,则软件会将答案视为正确;如果有任何测试失败,则将答案视为错误。要提供部分学分,请将评分方法更改为加权评分,从而分配测试的相对权重。MATLAB Grader 会根据相对权重的总和计算每项测试的百分比,因此,您可以将权重定义为分数或百分比。

例如,若将所有测试的相对权重设置为 1,则会为每项测试分配相等的权重。如果将一些权重设置为 2,则这些测试的权重是权重设置为 1 的测试的两倍。

Four sample tests, two with a relative weight of 1 and two with a relative weight of 2. The corresponding percentages are 17% and 33%, for a total of 100%.

您也可以输入权重的百分比。

The same four sample tests show relative weights of 10, 15, 15, and 60 for a total of 100%

指定自测

自测是练习测试,学生可以运行这些测试来确定他们的答案是否正确,然后再提交进行评分。当多种方法正确但您的测试需要特定方法时,或者当您为作业设置了提交次数限制时,请考虑使用自测来指导学生。

自测与常规练习测试有以下不同之处:

  • 在提交之前,自测结果不会记录在成绩簿中。

  • 运行自测不计入提交次数限制。

  • 无论测试是通过还是失败,学生都可以查看自测代码和详细信息,包括 MATLAB 代码测试的输出。请确保自测不包含练习题答案。

与常规练习测试一样,自测在学生提交答案时运行,并且会影响最终成绩。

例如,假设学生必须定义一个可以用多种方式组织的线性方程组。可以定义一项自测来确保学生答案具有期望的阶数和系数。

The Pretest check box is selected at the bottom of the test details.

如果测试失败,学生会看到错误,并可以修改答案。

Pretest assessment results show an error message "Variable V has an incorrect value."

控制脚本练习题的错误显示

在脚本练习题中,初始错误可能会导致后续错误。您可以鼓励学生首先关注初始错误。

默认情况下,如果选择仅对初始错误显示反馈选项,系统会对初始错误显示详细反馈,而对后续错误隐藏详细信息。学生可以通过点击显示反馈来显示该额外的反馈。

Assessment test results show that 1 of 4 tests passed. An assessment test and error message are shown for the failed second test, and linked text "Show Feedback" appears above the hidden details of the failed third and fourth tests.

另请参阅

主题