受講者の解答のテスト
MATLAB® Grader™ で評価項目を作成するときは、受講者の解答が合格の基準を満たしているかどうかを評価するテストを定義します。
テストの定義
テストを定義するには、[テスト タイプ] リストにある事前定義されたテストを使用するか、独自の MATLAB コードを記述します。事前定義されたテストのオプションは、次のとおりです。
変数が模範解答と等しい— 変数の存在、データ型、サイズ、および値をチェックします。このオプションは、スクリプト評価項目の [テスト タイプ] リストでのみ使用できます。数値には既定の許容誤差1e-4が適用されます。関数またはキーワードが存在する— 特定の関数またはキーワードが存在するかどうかをチェックします。関数またはキーワードが存在しない— 特定の関数またはキーワードが受講者の解答に含まれていないことをチェックします。
たとえば、受講者に taylor 関数を使用して特定の関数のテイラー級数近似を計算させたい場合、次のオプションを指定します。
[テスト タイプ] リストで
[関数またはキーワードが存在する]を選択する。受講者が使用しなければならない関数として
taylor関数を指定する。オプションで、受講者が必要な関数を使用していない場合に受け取る補助的なフィードバックを指定する。

スクリプト評価項目では、事前定義されたテスト タイプ [変数が模範解答と等しい] を使用して変数を評価できます。たとえば、模範解答内の同じ名前の変数と比較して、変数のサイズが適切であり、必要な値とデータ型をもっているかどうかを評価します。

[テスト タイプ] リストで [MATLAB コード] オプションを選択して MATLAB コードを記述することもできます。次のガイドラインに従ってください。
正確性の評価 — 事前定義されたテスト タイプに対応する関数 (
assessVariableEqual、assessFunctionPresence、およびassessFunctionAbsence) を使用できます。あるいは、不正解の結果に対してエラーを返すカスタム テストを作成することもできます。スクリプト評価項目内の変数名 — 模範解答内の変数を参照するには、
referenceVariables.のようにプレフィックスmyvarreferenceVariablesを追加します。受講者の変数を参照するには、変数名を使用します。関数評価項目内の関数名 — 評価テスト内の模範解答関数を呼び出すには、
reference.のようにプレフィックスmyfunctionreferenceを追加します。受講者の関数を呼び出すには、関数名を使用します。変数のスコープ – テスト コード内で作成した変数は、評価テスト内にのみ存在します。
たとえば、受講者が既定の許容誤差よりも大きく変化する可能性のある変数 X の値を計算しなければならないとします。受講者の解答の値を模範解答の値と比較するには、assessVariableEqual 関数を呼び出して変数と許容誤差を指定します。

関数の評価項目をテストするには、テスト入力を使用して受講者の関数と模範解答の関数を呼び出し、出力を比較します。たとえば、次のコードは、受講者の tempF2C という名前の関数が温度を華氏から摂氏に正しく変換することをチェックします。
temp = 78;
tempC = tempF2C(temp);
expectedTemp = reference.tempF2C(temp);
assessVariableEqual('tempC',expectedTemp);
ヒント
assessVariableEqual 関数からの既定のエラー メッセージには、前の例の X や tempC など、テスト対象の変数の名前が含まれます。関数の評価項目の場合、この変数は受講者コードではなく評価テスト スクリプトにあります。関数宣言の出力など、受講者が認識できる意味のある名前を使用します。
1 つの評価テストに複数のテストを含めることができます。たとえば、次のコードは、受講者がゼロと非ゼロの両方の値を正しく処理する 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.');
部分点の付与
既定では、ソフトウェアは、すべてのテストに合格した場合に解答が正解であると見なし、いずれかのテストに不合格だった場合に解答が不正解であると見なします。部分点を付与するには、[Scoring method] を [重み付け] に変更して、テストに相対的な重みを割り当てます。MATLAB Grader は、相対的な重みの合計に基づいて各テストのパーセンテージを計算するため、重みは点数としてもパーセンテージとしても定義できます。
たとえば、すべてのテストの相対的な重みを 1 に設定すると、各テストの重みが等しくなります。いくつかの重みを 2 に設定すると、それらのテストの重みは、重みが 1 に設定されたテストの 2 倍になります。

あるいは、重みのパーセンテージを入力することもできます。

プレテストの指定
"プレテスト" は、受講者が採点のために解答を提出する前に、自分の解答の方向性が正しいかを判断するために実行できる評価テストです。正解のアプローチは複数あるが、テストでは特定のアプローチを要件としたい場合、または課題に提出回数の制限を設定している場合は、プレテストを使用して受講者を指導することを検討してください。
プレテストは、通常の評価テストと次の点で異なります。
プレテストの結果が提出に先立って成績表に記録されることはありません。
プレテストの実行は提出の制限にはカウントされません。
受講者は、プレテストの合格/不合格に関係なく、MATLAB コード テストからの出力を含むプレテスト コードと詳細を表示できます。プレテストに評価項目の解答が含まれていないことを確認してください。
通常の評価テストと同様に、プレテストは受講者が解答を提出したときに実行され、最終成績に影響します。
たとえば、受講者が複数の方法で構成できる連立線形方程式を定義しなければならないとします。受講者の解答において順序と係数が期待どおりであることを確認するためにプレテストを定義します。

受講者は不合格となったテストのエラーを確認し、解答を修正できます。

スクリプト評価項目のエラー表示の制御
スクリプト評価項目では、最初のエラーによって後続のエラーが引き起こされる可能性があります。受講者には、最初のエラーにまず焦点を当てるように促すことができます。
[最初のエラーのみフィードバックを表示] オプションを選択すると、既定で最初のエラーについては詳細なフィードバックが表示され、それ以降のエラーの詳細は非表示になります。受講者は [フィードバックを表示] をクリックすることで、この追加のフィードバックを表示できます。
