Создание тестов без редактора. Часть IV

Аннотация

Этой публикацией мы заканчиваем серию статей, посвященных созданию тестов для VeralTest без использования встроенного редактора. Здесь мы рассмотрим возможности создания секций и сообщений.

Введение

Прежде, чем рассказать, как записываются секции и сообщения на языке XML, позволю себе еще раз кратко описать их назначение.

Секции – это довольно удобные и универсальные конструкции для управления ходом вывода вопросов при тестировании. Если в тесте не указаны секции, то вывод вопросов осуществляется в режиме по умолчанию, а именно: Выводятся все вопросы теста в случайном порядке. Использование секций в тесте позволяет:

  1. Указать порядок вывода вопросов в тесте;

  2. Сгруппировать вопросы по тематике. Указать: сколько вопросов из каждой темы должно быть выведено.

  3. Сгруппировать вопросы по уровням сложности для проведения теста в различных режимах сложности и в адаптивном режиме.

Основное назначение сообщений – выдавать дополнительную справочную информацию по ходу тестирования. К примеру, если был дан неверный ответ на вопрос, то в сообщении могут быть разъяснены причины ошибки, даны ссылки на литературу по теме вопроса и т.д. Сообщения могут выводится после окончания вопросов или секций. Содержание сообщений может различаться в зависимости от количества баллов, набранных за вопрос или секцию.

Раздел секций в XML документе теста определяется элементом <selector>, а раздел сообщений – элементом <messages>. Следует отметить, что в XTF заведен строгий порядок следования разделов вопросов, секций и сообщений: первым всегда должен быть раздел вопросов, затем, если есть, раздел секций, и, наконец, раздел сообщений.

Нумерация объектов

В документе теста каждый вопрос и каждая секция имеет свое уникальное имя – идентификатор. Сделано это для того, чтобы можно было ссылаться на вопросы и секции в других разделах теста. Например, при описании секции, нужно указать, какие вопросы входят в эту секцию, а при описании сообщений можно точно указать идентификатор секции или вопроса, для которого это сообщение предназначено.

Задать идентификатор вопроса или секции можно при помощи атрибута id. Например:

		
		<single id="qs1">
			Сколько в байте бит?
			<answer rating="0">4</answer>
			<answer rating="1">8</answer>
			<answer rating="0">16</answer>
		</single>
		
		

Здесь, для вопроса с единичным выбором ответа был задан идентификатор "qs1".

Однако, идентификатор можно и не задавать явно, при этом системой автоматически будет назначен идентификатор, равный порядковому номеру вопроса или секции в документе:

		
		<questions>
			<single>
				Сколько в байте бит?
				<answer rating="0">4</answer>
				<answer rating="1">8</answer>
				<answer rating="0">16</answer>
			</single>
			<single>
				Автор операционной системы Linux
				<answer rating="0">Билл Гейтс</answer>
				<answer rating="1">Линус Торвальдс</answer>
				<answer rating="0">Никалас Вирт</answer>
			</single>
		</questions>
		
		

В этом примере первый вопрос имеет идентификатор 1, а второй – 2.

Чтобы избежать путаницы в идентификаторах, задаваемых вручную и автоматически, было введено следующее правило:

Идентификаторы, задаваемые вручную, не должны начинаться с цифры.

Например:

		
		<single id="1">
			Сколько в байте бит?
			<answer rating="0">4</answer>
			<answer rating="1">8</answer>
			<answer rating="0">16</answer>
		</single>
		
		

В этом примере идентификатор для вопроса задан неверно (начинается с цифры), и при загрузке теста с таким вопросом система выдаст ошибку.

Поскольку мы пока не рассматривали секции, то все примеры по назначению идентификаторов я рассматривал на вопросах. Однако, для секций ситуация с назначением идентификаторов полностью аналогична: идентификатор назначается при помощи атрибута id, если не назначен, то равен порядковому номеру секции, при назначении вручную не должен начинаться с цифры.

Секции

Как я уже говорил, раздел секций определяется элементом <selector> и должен располагаться сразу после раздела вопросов (<questions>).

Внутри элемента <selector> может содержаться несколько секций, каждая из которых описывается элементом <section>.

Думаю, что лучше сразу начать с примера. И так, пусть мы решили составить тест по русской и зарубежной фантастике. В нашем тесте есть два вопроса по зарубежной фантастике и два вопроса по русской фантастике:

		
		<questions>
			<text>
				Как звали капитана подводного корабля &quot;Наутилус&quot; в романе Жюль Верна 
				&quot;Двадцать тысяч лье под водой&quot;
				<answer rating="1" right="Немо" />
			</text>
			<single>
				Автор романа &quot;Человек невидимка&quot;
				<answer rating="0">Жюль Верн</answer>
				<answer rating="1">Герберт Уэлс</answer>
				<answer rating="0">Рей Бредбери</answer>
			</single>
			<single>
				По какому произведению Кира Булычева был снят мультфильм 
				&quot;Тайна третьей планеты&quot;
				<answer rating="1">Девочка с земли</answer>
				<answer rating="0">Лиловый шар</answer>
				<answer rating="0">Миллион приключений</answer>
			</single>
			<single>
				Какое из этих произведений было написано Сергеем Павловым?
				<answer rating="1">Лунная радуга</answer>
				<answer rating="0">Лабиринт отражений</answer>
				<answer rating="0">Пикник на обочине</answer>
			</single>
		</questions>
		
		

Пусть нам требуется, чтобы в тесте предлагался один вопрос по зарубежной фантастике и один по русской. Тогда, секции должны быть записаны следующим образом:

		
		<selector>
			<section>
				<allout idref="1 2" count="1"/>
			</section>
			<section>
				<allout idref="3 4" count="1"/>
			</section>
		</selector>
		
		

Здесь <selector> - элемент, задающий блок секций, а каждая секция задана элементом <section>. Внутри каждой секции мы видим элемент <allout>. Поговорим о нем более подробно.

Каждая секция может содержать в себе четыре списка вопросов для различных уровней сложности. Каждый список представлен своим элементом:

Любой уровень – элемент <allout>;

Минимальный уровень – элемент <badout>;

Средний уровень – элемент <midlout>;

Максимальный уровень – элемент <goodout>.

Перед выполнением теста можно указать желаемый уровень сложности (легкий, средний, сложный), и вопросы будут выбираться из соответствующего списка. Исключение здесь составляет список вопросов для любого уровня сложности, из него вопросы выбираются вне зависимости от того, какой уровень сложности был установлен перед выполнением теста.

В нашем примере мы не делали разделение на уровни сложности, поэтому список вопросов указали в элементе <allout>. Элемент содержит два атрибута: idref и count. Атрибут idref задает вопросы, которые должны быть включены в список. Значением атрибута является список идентификаторов вопросов, разделенных пробелом. Поскольку мы явно не задавали идентификаторы у вопросов, то в значение атрибута idref указали список порядковых номеров. Атрибут count задает количество вопросов, которые будут выбираться из списка и предлагаться тестируемому. В нашем случае значение атрибута равно единице, поскольку мы хотели выводить по одному вопросу из каждой темы.

Как будут выбираться вопросы? В нашем примере в каждой секции будет выбран случайным образом один вопрос из двух. Так как секции, в отличие от вопросов, всегда выводятся последовательно друг за другом, то сначала будет задан вопрос по зарубежной фантастике, а затем – по русской.

Если мы хотим, чтобы вопросы из списка выводились последовательно, то нужно указать атрибут random="n". Например:

		
		<selector>
			<section>
				<allout idref="1 2" count="1" random="n"/>
			</section>
			<section>
				<allout idref="3 4" count="1" random="n"/>
			</section>
		</selector>
		
		

В этом примере тестируемому будет предложен первый и третий вопрос теста.

Звучит забавно, но давайте представим, что в нашем наборе вопросов первый и третий вопросы являются сложными, а второй и четвертый – нет. Представим, что мы задались целью составить тест для пользователей с разным уровнем подготовки, и хотим чтобы на низком и среднем уровне сложности задавались вопросы 2 и 4, а на максимальном уровне сложности – 1 и 3. Тогда следует составить секции так:

		
		<selector>
			<section>
				<badout idref="2" />
				<midlout idref="2"/>
				<goodout idref="1"/>
			</section>
			<section>
				<badout idref="4"/>
				<midlout idref="4"/>
				<goodout idref="3"/>
			</section>
		</selector>
		
		

Если же мы хотим, чтобы на минимальном и среднем уровне сложности задавались вопросы 2 и 4, а на максимальном еще дополнительно к этим вопросы 1 и 3, тогда секции нужно записать так:

		
		<selector>
			<section>
				<allout idref="2" />
				<goodout idref="1"/>
			</section> 
			<section>
				<allout idref="4"/>
				<goodout idref="3"/>
			</section>
		</selector>
		
		

Сообщения

Раздел сообщений должен следовать за разделом секций, или, если секции не используются, за разделом вопросов. Раздел сообщений задается элементом <messages>. Существует два различных типа сообщений: сообщения, которые выводятся после выполнения секций и сообщения, которые выводятся после выполнения вопросов. Двум типам сообщений соответствуют два элемента: <sectmsg> и <questmsg>.

Давайте сделаем так, чтобы в нашем примере теста по фантастике после ответа на каждый вопрос выводилось сообщение с результатом ответа: "Правильно"/"Неправильно". Вот как нужно записать сообщения для этого примера:

		
		<messages>
			<questmsg idrating="bad" idref="all">Неправильно</questmsg>
			<questmsg idrating="good" idref="all">Правильно</questmsg>
		</messagest>
		
		

Обратите внимание на атрибут idrating – он указывает результат выполнения вопроса, при котором должно быть показано сообщение. Значениями могут быть bad – дан неправильный ответ на вопрос, middle – дан неполный ответ на вопрос, good – дан правильный ответ на вопрос. Существует еще значение "all", которое означает, что сообщение будет выведено при любом ответе.

Атрибут idref, так же как и в секциях, указывает идентификаторы вопросов, для которых составлено сообщение. В нашем случае значение атрибута idref равно "all", это означает, что сообщение подходит для всех вопросов теста.

Точно так же назначаются сообщения и для секций:

		
		<messages>
			<sectmsg idrating="bad" idref="1">
				Вы плохо разбираетесь в зарубежной фантастике. 
			</sectmsg>
			<sectmsg idrating="middle" idref="1">
				Ваши знания зарубежной фантастики поверхностны.
			</sectmsg>
			<sectmsg idrating="good" idref="1">
				Вы отлично знаете зарубежную фантастику!
			</secmsg>
			<sectmsg idrating="bad" idref="2">
				Вы плохо разбираетесь в русской фантастике.
			</sectmsg>
			<sectmsg idrating="middle" idref="2">
				Ваши знания русской фантастики поверхностны.
			</sectmsg>
			<sectmsg idrating="good" idref="2">
				Вы отлично знаете русскую фантастику!
			</secmsg>
		</messages>
		
		

Заключение

Мы рассмотрели все аспекты создания тестов для системы VeralTest на языке XML. При написании тестов, рекомендую пользоваться спецификацией формата XTF, которую вы найдете на нашем сайте