QTI の徹底調査

テストの設問に対する応答処理と結果処理について学ぶ

IMS QTI (Question and Test Interoperability) 仕様は、e-ラーニングで使われるさまざまな要素 (例えば、設問など) をマークアップするために広く使用されている標準です。QTI アイテムに対する応答処理と結果処理に着目し、受講者が設問に解答すると何が行われるのかを学んでください。

Erik Siegel, XML Specialist, Xatapult

Photo of Erik SiegelErik Siegel はオランダでフリーの XML スペシャリストとして活動しています。彼の経歴は研究者、プログラマー、システム・アナリスト、プロジェクト・マネージャー、システム・アーキテクト、コンサルタントなど多岐にわたっています。最近の 5 年間で、XML がそれに加わりました。主な顧客は出版業界で、XML の分野ではコンサルタント、教育、スキーマ開発、および XSLT プログラミングを行っています。Erik と彼の会社についての詳細は www.xatapult.com をご覧ください。



2012年 2月 16日

アセスメント、テスト、そして個々の設問を XML でマークアップするために現在最も広く使用されている標準は、IMS QTI (Question and Test Interoperability) です。IMS は、e-ラーニングの標準化に関与する組織であり (「参考文献」のリンクを参照)、メタデータから、受講者情報の伝達に至るまでの標準化に関係する作業に取り組んでいます。QTI では、設問を XML でマークアップし、それをテストおよびアセスメントに組み立て、メタデータを追加し、これらすべてのデータをまとめて ZIP ファイルにパッケージ化するまでの方法を標準化しています。

よく使われる頭文字語

  • URI: Uniform Resource Identifier
  • XHTML: Extensible HyperText Markup Language

QTI XML は、設問、アセスメント、テストの静的要素 (テキスト、レイアウト、順序など) を記述するだけでなく、それぞれの動的な振る舞いも記述します。動的な振る舞いとは、例えば受講者の解答が誤っている場合の振る舞い、特定のフィードバックを提供するタイミング、そしてスコアの計算方法などです。このプロセスはいくらでも複雑にすることができます。QTI には、あらゆるプロセスを可能にするプログラミング機能が揃っています。

残念ながら、QTI の機能の仕組みは多少難解です。QTI のドキュメントは、標準の定義を中心に作成されており、標準の説明には重点が置かれていません。参考となるドキュメント「IMS Question and Test Interoperability Implementation Guide」(「参考文献」のリンクを参照) には、例がいくつか記載されていますが、それでもやはり、内部で何が行われるのかについては詳しく説明されていません。

この記事では、QTI の基本構成ブロック、つまりアセスメント・アイテムの中での応答処理と結果処理について詳しく探ります。受講者の応答をどのように評価するのか、そしてその評価を採点という観点からどのように処理するのかを学んでください。

QTI アセスメント・アイテム

QTI に馴染みのない方のために、このセクションではアセスメント・アイテムについて簡単に説明します。

アセスメント・アイテム (または、略して「アイテム」) は、QTI の基本構成ブロックです。アイテムは、テキスト (およびマークアップ)、タイプの異なる複数の設問、サイド情報パネル、マルチメディア・オブジェクトなどを、いくらでも複雑に組み合わせて構成することができます。さらに、アイテムでは受講者の解答が正解とみなされる場合の、そのアイテム固有の結果処理と応答処理、採点方法、フィードバックなども定義します。

実際には、QTI アセスメント・アイテムは複雑ではないのが通常です。これまで私が目にしたアイテムの大多数は、1 つの設問しか含まれていませんでした。QTI アセスメント・アイテムの内部構造は、リスト 1 のとおりです。

リスト 1. QTI アイテムの内部構造
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" ...>

<responseDeclaration ...> 
   <!-- Information about the answers to the questions inside -->
</responseDeclaration>

<outcomeDeclaration ...> 
   <!-- Internal variables for computing scores, controlling feedback, etc. -->
</outcomeDeclaration> 

<itemBody ...> 
   <!-- Text and the interactive parts (questions) --> 
</itemBody> 

<responseProcessing ...> 
   <!-- How to handle the user's response --> 
</responseProcessing> 

<modalFeedback ...> 
   <!-- Optional feedback messages to the user --> 
</modalFeedback> 

</assessmentItem>

以下に、マークアップの詳細を説明します。

  • <responseDeclaration> は、設問に対する解答 (応答) に関する情報を格納します。その情報とは、正解したのはいつで、(オプションとして) スコアはどうであるか、といった情報です。<responseDeclaration> は、<itemBody> に含まれる個々の設問ごとに必要です。
  • <outcomeDeclaration> は、内部変数を定義します。例えば、環境にスコアを返すための変数、受講者へのフィードバックを制御するための変数です。
  • 単一の <itemBody> 要素の中に、そのアイテムのテキスト、マークアップ、および設問が格納されます。マークアップは XHTML と驚くほど共通していますが、これには注意が必要です。それは、<p><ul> のようなお馴染みの要素があっても、すべての要素は XHTML 名前空間に属しているのではなく、QTI 名前空間 (http://www.imsglobal.org/xsd/imsqti_v2p1) に属していることです。標準にはブラウザーでレンダリングしなければならないという規定があるわけではないため、マークアップがさまざまに解釈される余地が大いにあります。したがって、異なる QTI 処理エンジンの間でコンテンツを交換するときには、一貫性のあるレンダリングをすることが大きな問題となります。
  • <responseProcessing> セクションは、受講者がアイテムに解答した時点で実行するアクションを記述します。この要素のコンテンツは単純なプログラミング言語です。この言語を使って、計算を行うことも、<outcomeDeclaration> 変数を設定することもできます。
  • 最後の <modalFeedback> は、受講者に対するアイテムのフィードバック (解答が正解であれば、「よくできました」と表示するなど) を定義します。

上記のうち、この記事の内容に関係するのは <responseDeclaration><outcomeDeclaration>、および <responseProcessing> セクションです。

対話のタイプ

アイテムを構成する <itemBody> 要素には、受講者との対話が含まれないこともあれば、数多く含まれることもあります。これらの対話のほとんどは、一般的な設問 (例えば、多肢選択問題、要素の並び替え問題、穴埋め問題など) です。「文書のアップロード」、「描画」、「フィルムの開始」といったコマンドを対話に追加することもできます。

リスト 2 に、多肢選択問題の例を記載します。

リスト 2. 多肢選択問題の対話の例
<itemBody> 
   <choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="1">
      <prompt>What is the top color of the Dutch flag?</prompt> 
      <simpleChoice identifier="A">Red</simpleChoice> 
      <simpleChoice >="B">Orange</simpleChoice> 
      <simpleChoice identifier="C">Black</simpleChoice> 
      <simpleChoice identifier="D">White</simpleChoice> 
   </choiceInteraction> 
</itemBody>

リスト 3 には、並び替え問題の例を記載します。

リスト 3. 並び替え問題の対話の例
<itemBody>
   <orderInteraction responseIdentifier="RESPONSE" shuffle="false">
      <prompt>Order these cities from north to south:</prompt> 
      <simpleChoice identifier="A">Tripoli</simpleChoice> 
      <simpleChoice identifier="B">Stockholm</simpleChoice> 
      <simpleChoice identifier="C">Paris</simpleChoice> 
   </orderInteraction> 
</itemBody>

QTI v2.1 では 20 の対話タイプを定義しています。「IMS Question and Test Interoperability Implementation Guide」には、すべてのタイプのサンプルが記載されています。どのタイプを使用するか決めるときには、すべての QTI 処理エンジンがすべての対話タイプをサポートしているわけではないことに注意してください。

上記の例を見るとわかるように、対話には responseIdentifierという属性があります。この属性が、同じ ID を持つ <responseDeclaration> に対話を結び付けます。結果処理と応答処理を結び付けるこのリンクについては、後ほど取り上げます。


QTI データ・モデル

QTI の応答処理と結果処理を理解する上で重要なことは、まず、QTI のデータ・モデルとその明らかな複雑さの理由を理解することです。

受講者が QTI アイテムに解答した後は、受講者の解答をチェックする必要があります。このチェックを行うために、解答はデータとして表現されます。このデータは、時には単純なものです。例えば、複数の選択肢から 1 つの正解を選ぶという設問であれば、その解答の ID だけが返され、数値スライダーによる対話では、数値が返されるといった具合ですが、対話のタイプのほとんどはそれよりも複雑です。以下に、複雑な例を紹介します。

  • 複数の選択肢から複数の正解を選択する問題は、解答 ID のセットを返します (例えば、「チェック・マークが付けられた解答の ID は、A、C、D でした」)。
  • 並び替え問題は、並べ替えられた解答 ID のセットを返します (例えば、「作成された順序の ID は、C、A、B でした」)。
  • 単語同士を関連付ける問題は、ID ペアのセットを返します (例えば、「単語の関連付けは、(A, C)、(B, D)、(E, F) でした」)。
  • 地図にオブジェクトを配置するという問題は、地点のセットを返します (例えば、「オブジェクトは位置 (102, 10)、(125, 653) に配置されました」)。

解答が正解か不正解かを判別するのに使用されるのは、対話に関連付けられた <responseDeclaration> です。つまり、この要素のデータ型は、その特定の対話に適切なデータ型でなければなりません。一例として、リスト 4<positionObjectInteraction> の宣言を記載します。この設問タイプでは、オブジェクトをグラフィック上 (例えば、地図上) に配置します。この設問に対する解答のデータ型は、地点のセットです。

リスト 4. 地点のセットによる応答の宣言
<responseDeclaration identifier="RESPONSE" baseType="point" cardinality="multiple">
   <correctResponse> 
      <value>118 184</value> 
      <value>150 235</value> 
      <value>96 114</value> 
   </correctResponse> 
</responseDeclaration>

QTI データ型は、<responseDeclaration> および <outcomeDeclaration> 要素の baseType 属性と cardinality 属性で定義されます。

  • baseType 属性は、以下の基本データ型を定義します。
    • boolean
    • directedPair
    • duration
    • file
    • float
    • identifier
    • integer
    • pair
    • point
    • string
    • uri
  • cardinality 属性は、baseType 要素の数と、セットを並び替えられているかどうかを定義します。cardinality 属性は、以下の値を取ります。
    • multiple
    • ordered
    • record (この記事では取り上げない、特殊でかなり複雑な型)
    • single

応答処理と結果処理

受講者がアイテムに解答すると、次はそのアイテムの応答処理と結果処理が行われます。処理の際に QTI プロセッサーが行わなければならないタスクは、解答が正解であるかどうかの判定、スコアの計算、フィードバックの提供などです。このプロセスには、<responseDeclaration><outcomeDeclaration>、および <responseProcessing> セクションのすべてが関与します。

応答宣言

<responseDeclaration> 要素はその ID によって常にアイテム本体に含まれる対話に関連付けられます。リスト 5 に、一例を記載します。

リスト 5. 対話とその応答宣言との関連付け
<responseDeclaration identifier="QUESTION1" cardinality="single"
                     baseType="identifier"> 
   <correctResponse> 
      <value>B</value> 
   </correctResponse> 
</responseDeclaration> 
<itemBody> 
   <choiceInteraction responseIdentifier="QUESTION1" shuffle="false" maxChoices="1">
      <prompt>Is a goldfish a mammal?</prompt> 
      <simpleChoice identifier="A">Yes</simpleChoice> 
      <simpleChoice identifier="B">No</simpleChoice> 
   </choiceInteraction> 
</itemBody>

<responseDeclaration> は単純な変数ではありません。変数というよりは、オブジェクト指向という意味でのオブジェクトとして考えたほうが賢明です。このオブジェクトには、以下の 3 つの「メソッド」があります。これらのメソッドを、アイテムの <responseProcessing> セクションでの計算に使用することができます。

  • 設問に対する受講者の応答を取得するメソッド
  • 設問に対する正しい (最適な) 応答を取得するメソッド
  • 解答が単純に正解か不正解かではなく、より微妙な意味合いを持てるように、複数の答えをそれぞれ異なる得点にマッピングするメソッド

リスト 6 に、<responseDeclaration> の例を記載します。この例では、返された解答に応じてスコアが計算されます。

リスト 6. スコアを計算する応答宣言
<responseDeclaration identifier="QUESTION1" cardinality="multiple"
                     baseType="identifier"> 
   <correctResponse> 
      <value>A</value> 
      <value>D</value> 
   </correctResponse> 
   <mapping defaultValue="0" lowerBound="0" upperBound="1"> 
      <mapEntry mapKey="A" mappedValue="0.5"/> 
      <mapEntry mapKey="B" mappedValue="-0.5"/> 
      <mapEntry mapKey="C" mappedValue="-0.5"/> 
      <mapEntry mapKey="D" mappedValue="0.5"/> 
   </mapping> 
</responseDeclaration> 
<itemBody> 
   <choiceInteraction responseIdentifier="QUESTION1" shuffle="false" maxChoices="0">
      <prompt>Which are colors?</prompt> 
      <simpleChoice identifier="A">Red</simpleChoice> 
      <simpleChoice identifier="B">Small</simpleChoice> 
      <simpleChoice identifier="C">Soft</simpleChoice> 
      <simpleChoice identifier="D">Purple</simpleChoice> 
   </choiceInteraction> 
</itemBody>

上記の宣言によると、受講者が A (赤)、B (小)、および D (紫) と解答した場合、<mapping> に従って計算されるスコアは、(A) 0.5 + (B) -0.5 + (D) 0.5 = 0.5 となります。

このプロセスがすべて <responseDeclaration> の中で行われていることに疑問を感じるかもしれません。<responseProcessing> セクションでも、解答が正解であるかどうかを判断してスコアを計算することは可能だからです。スコアを計算できるとしたら、正解およびスコアを宣言する直接的な必要性は見当たりません (逆に、正解およびスコアを宣言すれば、スコアを計算する必要がないようにも思えます)。

この要素の中でプロセス全体が行われている理由は、QTI では標準が単純なケースにも適用できるように意図されているためです。例えば、応答処理を単純に無視したり、定義された正しい応答を調べるだけだったりするレンダリング・エンジンにも、標準を適用できるようにしているからです。これと同じ考えは、定義済み応答処理テンプレートにも当てはまります。

結果宣言

QTI の <outcomeDeclaration> は、変数に相当します。リスト 7 に、一例を記載します。

リスト 7. 結果宣言の例
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float">
   <defaultValue> 
      <value baseType="float">0.5</value> 
   </defaultValue> 
</outcomeDeclaration>

上記のマークアップは、SCORE という float 型の変数を定義し、デフォルト値として 0.5 を指定しています。デフォルト値の指定はオプションです。デフォルト値を指定しない場合、数値型の変数は 0.0 に初期化され、数値型以外の変数は NULL に初期化されます。

注:SCORE は予約語です。SCORE を使用すると、アイテムに対するその受講者の全成績を表す数値スコアが提供されます。

<matchTable> または <interpolationTable> という構造を提供することによって、<outcomeDeclaration> に高度なインテリジェンスを加えることもできますが、今まで私はこれらの構造が使われているのを見たことはありません。おそらくほとんどのレンダリング・エンジンは、これらの構造をサポートしていないと思われるので、ここでは説明しません。

応答処理

アイテムの <responseProcessing> セクションには、レンダリング・エンジンに対する命令として、受講者が解答した後に何を行うかに関する内容が含まれています。命令のフォーマットには、以下の 2 つがあります。

  • 単純な XML ベースのプログラミング言語のプログラムまたはスクリプト。
  • 定義済みテンプレートへの参照。このテンプレートも、同じく応答処理プログラミング言語によるスクリプトです (テンプレートは事前定義されるため、レンダリング・エンジンはこのテンプレートをハード・コーディングすることができます。このオプションを一貫して使用すれば、完全なスクリプト・インタープリターを用意する必要がなくなります)。

スクリプト言語

まずは、応答処理スクリプトから調べてみましょう。リスト 8 に、応答処理スクリプトの一例を記載します。

リスト 8. 単純な応答処理の例
<responseDeclaration identifier="RESPONSE_01" cardinality="single" 
                     baseType="string"> 
   <correctResponse> 
      <value>white</value> 
   </correctResponse> 
</responseDeclaration> 
<responseDeclaration identifier="RESPONSE_02" cardinality="single" 
                     baseType="string"> 
   <correctResponse> 
      <value>green</value> 
   </correctResponse> 
</responseDeclaration> 

<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>

<itemBody> 
   <p>Fill in the right colors:</p> 
   <p>Snow is 
      <textEntryInteraction responseIdentifier="RESPONSE_01" expectedLength="5"/> 
      and grass is 
      <textEntryInteraction responseIdentifier="RESPONSE_02" expectedLength="5"/>.
   </p> 
</itemBody> 

<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <and> 
            <match> 
               <variable identifier="RESPONSE_01"/> 
               <correct identifier="RESPONSE_01"/> 
            </match> 
            <match> 
               <variable identifier="RESPONSE_02"/> 
               <correct identifier="RESPONSE_02"/> 
            </match> 
         </and> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">1.0</baseValue> 
         </setOutcomeValue> 
      </responseIf> 
      <responseElse> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">0.0</baseValue> 
         </setOutcomeValue> 
      </responseElse> 
   </responseCondition> 
</responseProcessing>

上記の応答処理では、受講者の 2 つの応答の値を、定義された正しい (最適な) 応答に照らして検証します。この検証が行われるのは 2 つの <match> 要素の中です。これらの要素は、2 つの要素全体を囲む <and> 要素によって処理されるため、2 つの値が両方とも正しいことが条件となります。どちらも正しい場合には、SCORE が 1.0 に設定され、そうでない場合は 0.0 に設定されます。リスト 9 に、今度はもう少し複雑な例を記載します。

リスト 9. より複雑な応答処理の例
<responseDeclaration identifier="RESPONSE" cardinality="multiple" 
                     baseType="identifier"> 
   <correctResponse> 
      <value>A</value> 
      <value>C</value> 
   </correctResponse> 
   <mapping lowerBound="0.0" upperBound="1.0" defaultValue="0.0"> 
      <mapEntry mapKey="A" mappedValue="0.5"/> 
      <mapEntry mapKey="B" mappedValue="-0.25"/> 
      <mapEntry mapKey="C" mappedValue="0.5"/> 
      <mapEntry mapKey="D" mappedValue="-0.25"/> 
   </mapping> 
</responseDeclaration> 

<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
<outcomeDeclaration identifier="FEEDBACK" cardinality="single" baseType="identifier"/>
<outcomeDeclaration identifier="FEEDBACK_TRESHOLD" cardinality="single" 
                    baseType="float"> 
   <defaultValue> 
      <value baseType="float">0.75</value> 
   </defaultValue> 
</outcomeDeclaration> 

<itemBody> 
   <choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="0">
      <prompt>Which countries are south of the USA?</prompt> 
      <simpleChoice identifier="A">Mexico</simpleChoice> 
      <simpleChoice identifier="B">Canada</simpleChoice> 
      <simpleChoice identifier="C">Brazil</simpleChoice> 
      <simpleChoice identifier="D">Norway</simpleChoice> 
   </choiceInteraction> 
</itemBody> 

<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <isNull> 
            <variable identifier="RESPONSE"/> 
         </isNull> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="float">0.0</baseValue> 
         </setOutcomeValue> 
         <setOutcomeValue identifier="FEEDBACK"> 
            <baseValue baseType="identifier">FAILURE</baseValue>
         </setOutcomeValue>
      </responseIf>
      <responseElse>
         <setOutcomeValue identifier="SCORE">
            <mapResponse identifier="RESPONSE"/> 
         </setOutcomeValue> 
         <responseCondition> 
            <responseIf>
               <gte> 
                  <variable identifier="SCORE"/> 
                  <variable identifier="FEEDBACK_TRESHOLD"/>
               </gte> 
               <setOutcomeValue identifier="FEEDBACK"> 
                  <baseValue baseType="identifier">ANSWER_CORRECT</baseValue>
               </setOutcomeValue>
            </responseIf>
            <responseElse>
               <setOutcomeValue identifier="FEEDBACK">
                  <baseValue baseType="identifier">FAILURE</baseValue>
               </setOutcomeValue>
            </responseElse> 
         </responseCondition>
      </responseElse> 
   </responseCondition> 
</responseProcessing>

上記の応答処理は、スコアを設定するだけでなく、FEEDBACKFAILURE または ANSWER_CORRECT のいずれかに設定します。この宣言を使用して、受講者に適切なフィードバックを提供することができます。

応答処理は、以下のステップに従います。

  1. 解答の有無を判別します (受講者が答えを入力せずに「Continue (続行)」ボタンをクリックする場合もあるからです)。解答がなければ、<responseDeclaration> の値は NULL なので (<isNull> 要素によってチェックされます)、SCORE および FEEDBACK がそれに該当する値に設定されます。
  2. SCORE の値を、<responseDeclaration><mapping> に指定された値に設定します (<mapResponse> 要素を使用)。
  3. SCORE の値を FEEDBACK_TRESHOLD に設定された固定値と比較し (「以上」を意味する <gte> 要素の中で比較し)、その結果に応じて FEEDBACK を設定します。

独自の宣言の他、応答処理では事前定義された以下の変数を使用することができます。

  • duration: 受講者が設問に解答するまでに費やした時間 (秒)。この変数を使用して、例えば受講者が解答するまでにかかった時間が長かった場合にスコアを減点することができます。
  • nunAttempts および completionStatus: この 2 つの変数については、適応型処理に関するセクションで説明します。

プログラミングやスクリプトの作成に慣れていれば、応答処理の作成は難しい作業ではありません。言語の完全な定義は、QTI のドキュメントである「IMS Question and Test Interoperability Assessment Test, Section, and Item Information Model」(「参考文献」のリンクを参照) に記載されています。見てのとおり、この言語は XML であることから、すべてがかなり冗長で、意味のあるアクションを作成するには大量のコードを作成しなければなりません。残念ながら、この標準はそのようになっています。

定義済み応答処理テンプレート

応答宣言」のセクションですでに触れたように、QTI 標準には、単純な応答処理用の組み込みオプションがあります。例えば、<responseDeclaration> 内の正しい応答を使用すれば、応答処理のスクリプトを作成しなくても、受講者の解答が正解か、それとも不正解かを判断することができます。この手法では、単純なコンテンツとそれに付随するレンダリング・エンジンを標準に違反することなく使用することができます。

単純化のためのもう 1 つの機能は、応答処理テンプレートです。QTI では、基本的な応答処理として 3 つのテンプレートを事前定義しています。テンプレートは、以下に例示するような、決められた URI で表されます。

<responseProcessing 
   template="http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct"/>

これらの URI には、実際のスクリプトが対応付けられています。レンダリング・エンジンは、これらのスクリプトを通常のスクリプトと同じように扱うことができます。レンダリング・エンジンが正しいテンプレートを見つけられるようにするには、以下のような方法でロケーションを指定します。

<responseProcessing template="..." templateLocation="/rptemplates/match_correct.xml/>

定義済みテンプレートを使用する場合には、以下の条件を満たす必要があります。

  • アクションには 1 つの対話のみが組み込まれること
  • そのアクションの <responseDeclaration>RESPONSE であること
  • アクションに float 型の SCORE<outcomeDeclaration> が組み込まれること

定義済みテンプレートには以下のものがあります。

  • Match_Correct: 解答が欠落している場合や、正解でない場合にはスコアを 0.0 に設定し、解答が正解である場合は 1.0 に設定します。このテンプレートの URI は以下のとおりです。
    http://www.imsglobal.org/question/qti_v2p0/rptemplates/match_correct
  • Map_Response: 解答がない場合はスコアを 0.0 に設定し、解答がある場合には、RESPONSE <responseDeclaration> 内のマッピングを使用します。URI は以下のとおりです。
    http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response
  • Map_Response_Point: Map_Response と同じですが、グラフィックによる対話タイプを対象としています。このテンプレートは、ID マッピングの代わりにエリア・マッピングを使用します。URI は以下のとおりです。
    http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response_point

定義済みテンプレートはいずれも、応答処理スクリプト言語で表現することができます。QTI サンプルをダウンロードすると、そこにテンプレート・スクリプトが含まれています。一例として、リスト 10Map_Response のコードを記載します。

リスト 10. 定義済みテンプレート Map_Response のスクリプト
<responseProcessing> 
   <responseCondition> 
      <responseIf> 
         <isNull> 
            <variable identifier="RESPONSE"/> 
         </isNull> 
         <setOutcomeValue identifier="SCORE"> 
            <baseValue baseType="integer">0</baseValue> 
         </setOutcomeValue> 
      </responseIf> 
      <responseElse> 
         <setOutcomeValue identifier="SCORE"> 
            <mapResponse identifier="RESPONSE"/> 
         </setOutcomeValue> 
      </responseElse> 
   </responseCondition> 
</responseProcessing>

必ずしも QTI の定義済みテンプレートに従わなければならないというわけではありません。コンテンツ・プロデューサーとレンダリング・エンジン・ビルダーが密接に結合されている場合には、テンプレートを独自に定義することを引き止める理由は何もありません。

適応型処理と非適応型処理

これまで話題にしてきた QTI アイテムの応答処理は、設問に対して受講者が 1 回だけ解答するといったものでした。つまり、設問が提示され、解答が提供されて、スコアが計算されるというものでした。QTI ではこの試験形式を非適応型 (non-adaptive) アイテムと呼んでいます。それとは異なり、受講者に何かを教えるためのメカニズムとして設問を使用することもあります。その場合、受講者が設問に解答する機会は 1 回だけではありません。さらに、より詳細なフィードバックが提供されて (「この解答は誤っています」、「ヒントを提供します」など)、試行回数に応じてスコアを調整できる場合もあります。

このような場合を対象に、QTI では適応型 (adaptive) アイテムを定義しています。アイテムを適応型として特定するには、ルート要素の adaptive 属性を true() に設定します (リスト 11 を参照)。

リスト 11. アイテムを適応型にするためのルート要素の adaptive 属性の設定
<assessmentItem adaptive="true" … >
 … 
</assessmentItem>

適応型アイテムのデフォルトでは、解答が提供された後も受講者との対話が終了するわけではありません。対話を終了するには、以下の 2 つの方法があります。

  • レンダリング・エンジンに定義された明示的な「Stop (停止)」ボタン、タイムアウトなどを使用
  • completionStatus という組み込み変数を明示的に設定した応答処理を使用

completionStatus 変数には、identifier 型の 4 つの値、completedincompletenot_attempted、および unknown のいずれかを設定することができます。completed に設定すると、対話が終了します。

適応型アイテムに役立つ組み込み変数には、numAttempts もあります。ご想像のとおり、この変数は単純に、アイテムに対して受講者が解答を試行した回数をカウントします。リスト 12 に示すのは、受講者による解答の試行回数を 4 回までとし、それを超えると対話を終了する応答処理の一部です。

リスト 12. numAttempts を使用した完了ステータスの設定
<responseIf> 
   <gt> 
      <variable identifier="numAttempts"/> 
      <baseValue baseType="integer">4</baseValue> 
   </gt> 
   <setOutcomeValue identifier="completionStatus"> 
      <baseValue baseType="identifier">completed</baseValue>
   </setOutcomeValue> 
</responseIf>

まとめ

この記事では、受講者が設問に答えた後に、QTI レンダリング・エンジンが応答処理と結果処理を行う方法を説明しました (優れたレンダリング・エンジンは稀なので、「行う方法」ではなく「行うべき方法」と言ったほうが適切かもしれません)。ほとんどの場合には、スコアが設定されますが、スコアを他の目的に使うこともできます。

完全な QTI 応答処理および結果処理を実装したくない場合、あるいはその必要がない場合でも、この標準に従い、指定された正しい応答との比較を行ったり、組み込み応答処理テンプレートを使用したりすることはできます。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Industries
ArticleID=792516
ArticleTitle=QTI の徹底調査
publish-date=02162012