Научная статья на тему 'Особенности формулировок тестовых заданий по программированию'

Особенности формулировок тестовых заданий по программированию Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
190
38
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Подбельский Вадим Валерьевич, Максименкова Ольга Вениаминовна

В работе рассматривается применение общих рекомендаций по работе над формулировками тестовых заданий в контексте дисциплины «Программирование». Приводятся примеры некорректных заданий и варианты их исправления. Формулируются дополнительные рекомендации для тестовых заданий, связанных с программированием.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Особенности формулировок тестовых заданий по программированию»

Подбельский В.В.,

НИУ ВШЭ, профессор vpodbelskiy@hse.ru

Максименкова О.В.

НИУ ВШЭ, старший преподаватель omaksimenkova@hse.ru

Особенности формулировок тестовых заданий по

программированию

Аннотация

В работе рассматривается применение общих рекомендаций по работе над формулировками тестовых заданий в контексте дисциплины «Программирование». Приводятся примеры некорректных заданий и варианты их исправления. Формулируются дополнительные рекомендации для тестовых заданий, связанных с программированием.

Введение

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

При дихотомической оценке тестовых заданий (за решенное задание начисляется 1 балл, а за нерешенное 0 баллов) в соответствии со статистическими методами классической теории тестирования коэффициент трудности вычисляется как доля испытуемых, справившихся с тестовым заданием:

где п - количество испытуемых верно решивших задание, N - общее количество испытуемых. Традиционно задания с коэффициентом не превосходящим 0,2 относят к трудным, а задания с коэффициентом не меньшим 0,8 - к легким.

На основе метода контрастных групп коэффициент

дискриминативности тестового задания вычисляется по формуле:

в=_

Nb

^-количество испытуемых в группе лучших, набравших 1 балл за

задание;

^-количество испытуемых в группе худших, набравших 1 балл за задание;

Nb- общее количество испытуемых в группе лучших; Nw- общее количество испытуемых в группе худших; Принято подвергать пересмотру и отбраковке задания, имеющие показатель дискриминативности меньший 0,3.

Говоря о структуре тестовых заданий, будем придерживаться следующей терминологии:

• стем - содержательная постановка задачи;

• опции - варианты ответов на тестовое задание;

• ключ - правильный ответ на тестовое задание;

• дистрактор - неправильный ответ на тестовое задание.

В российской и зарубежной литературе встречаются рекомендации по составлению и исправлению содержания тестовых заданий, которые можно обобщить следующим образом [1, 2, 7, 11, 8]:

• в тексте задания должна отсутствовать двусмысленность и неясность формулировок;

• следует избегать слов-подсказок и общих грамматических подсказок, таких как род, число или падеж, позволяющих «вычислить» верный ответ;

• стем (основная часть) задания должен быть сформулирован в утвердительной форме;

• предложения, составляющие стем, следует формулировать максимально полно, оставляя в ответах и дистракторах как можно меньше слов;

• желательно избегать частично верных дистракторов;

• дистракторы должны быть разумны, правдоподобны и привлекательны для испытуемых;

• варианты ответов, выраженные числами, следует упорядочивать по убыванию или возрастанию;

• варианты ответов, выраженные словами, следует упорядочивать по алфавиту;

• желательно избегать повторяющихся слов в начале ответов и дистракторов, повторения должны быть вынесены в стем;

• и др.

Кроме того, при составлении тестовых заданий необходимо учитывать такие индивидуальные особенности студентов, как, например, слабое зрение или отсутствие определенных навыков [11]. О тестовых заданиях по программированию

Несмотря на то, что эти рекомендации являются достаточно общими, в публикациях [1, 4, 8] они сопровождаются, в основном, примерами тестовых заданий по гуманитарным и естественнонаучным дисциплинам.

Отдельные источники [7] опираются на абстрактные и искусственные примеры заданий. Разбор заданий, связанных с программированием, встречается редко и соотносится, преимущественно, с процедурными учебными языками программирования (школьный алгоритмический, Бейсик и Паскаль).

В высших учебных заведениях в дисциплинах, связанных с объектно-ориентированным программированием, в качестве учебных используются современные языки программирования (C#, C++, Java) и интегрированные среды разработки (MS Visual Studio, NetBeans IDE и проч). Нарушение перечисленных выше рекомендаций для тестовых заданий по таким дисциплинам редко анализируются в публикациях и не всегда очевидно.

Количество решивших задание

1

1 ■ 1 1

123456739 10111213141516171S1920212223242526272B29 30

Рисунок 1

В данной работе рассмотрены особенности некорректных тестовых заданий, ориентированных на язык программирования C#. Задания с низкими показателями качества отобраны из тестов промежуточного контроля по дисциплине «Программирование», преподающейся на первом курсе бакалавриата Отделения программной инженерии Национального исследовательского университета Высшая школа экономики. Более подробно о форме и содержании тестов и их результатах написано в работах [3, 9, 10]. Отметим, что указанные тесты в целом имеют удовлетворительные показатели надежности и валидности [10]. То, что появление некачественных заданий в этих тестах является достаточно редким событием, видно из рисунков 1 и 2, демонстрирующих количество испытуемых, решивших отдельные задания некоторых конкретных тестирований. Исходя из приведенных на рисунках гистограмм, можно обратить внимание на задания с номерами 17 (один верный ответ) и 25 (два верных ответа), на рис.1 и задание 29 на рис.2.

Покажем на конкретных примерах как могут быть сформулированы такие «провальные» задания и каким образом можно их модифицировать с целью повышения их качества. Еще раз подчеркиваем, что работа посвящена заданиям по дисциплине «Программирование»._

50 45 40 35 ЗО 25 20 15 Ю 5 О Количество решивших задание

■ № задания

1

12345673 9 Ю1112131415161713 19 20 2122 23242526272329 ЗО

Рисунок 2

Исправление некорректных тестовых заданий проведем на основе перечисленных выше рекомендаций.

Примеры модификации заданий _Задание 1 закрытого типа с несколькими верными ответами_

Верно ли, что:

+ 1) При объявлении локальной переменной её тип может определяться типом инициализирующего значения.

2) Локальная переменная, объявленная во вложенном блоке, может иметь то же имя, что и переменные охватывающего блока.

3) Локальная переменная, объявленная во вложенном блоке, доступна во всех операторах охватывающего блока.

4) Локальная переменная, объявленная во вложенном блоке, доступна в операторах охватывающего блока, размещенных вслед за вложенным блоком.

+ 5) Локальная переменная доступна для всех операторов вложенных блоков.

Здесь и далее верные варианты ответов тестового задания отмечены знаком «+».

Существует несколько способов повышения качества приведенного задания.

Вопросительная формулировка стема неявно подразумевает ответы «верно»/«не верно», что соответствует форме задания с двумя ответами.

Первый способ. Создание пяти заданий с двумя ответами с

переформулированным в утверждение стемом. Варианты заданий:_

Верно, что при объявлении локальной переменной её тип может

определяться типом инициализирующего значения._

+ 1) да

_2) нет_

Верно, что локальная переменная, объявленная во вложенном блоке, может иметь то же имя, что и переменные охватывающего блока. 1) да

_+ 2) нет_

Локальная переменная, объявленная во вложенном блоке,

доступна во всех операторах охватывающего блока._

1) да

_+ 2) нет_

Локальная переменная, объявленная во вложенном блоке, доступна в операторах охватывающего блока, размещенных вслед за

вложенным блоком._

1) да

_+ 2) нет_

Верно, что локальная переменная доступна для всех операторов

вложенных блоков._

+ 1) да

_2) нет_

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

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

Задание 2 открытого типа с кратким ответом_

_В результате выполнения следующего фрагмента кода:_

int x = 14;

Console.Write("{0,3:f4)", x*1000);_

на экране появится представление числа, содержащее X нулей.

_Укажите значение X: _

Ответ: 7

Во фрагменте кода использована переменная с именем x, инициализированная числом 14, в формулировке задания требуется указать некоторое значение X, под которым подразумевается количество отобразившихся на экране нулей. Апробация данного тестового задания показала, что сильные студенты, подозревая подвох, в качестве ответа указывают не 7, а 14 (значение переменной x). Одинаковые имена переменной и неизвестной вносят в задание двусмысленность, которую

легко ликвидировать, заменив одно из имен:_

_В результате выполнения следующего фрагмента кода:_

int a = 14;

Console.Write("{0,3:f4}", a*1000);

на экране появится представление числа, содержащее X нулей.

_Укажите значение X: _

Ответ: 7

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

_Задание 3. Закрытого типа с одним верным ответом_

Полная форма условного оператора имеет вид:

if (<выражение_условие>)

<оператор_1>

else

<оператор_2>

_В сокращенной форме условного оператора отсутствует:_

1) (<выражение_условие>)

2) <выражение_условие>

3) <оператор_1>и<оператор_2>

4)else

_+ 5)е^еи<оператор_2>_

Низкие показатели качества данного задания связаны с тем, что дистрактор №4 является частично верным. Студенты ошибочно выбирают его вместо верного ответа №5. Это во многом связано с шаблонной формулировкой, встречающейся в учебной литературе: «В сокращенной форме условного оператора отсутствует else». Также из формулировки задания не очевидно, что речь идет об анализе структуры оператора, приведенной в стеме.

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

Структура полной формы условного оператора имеет вид:

if (<выражение_условие>)

<оператор_1>

else

<оператор_2>

_В структуре сокращенной формы условного оператора отсутствует:

ljif

2) <выражение_условие>

3) <оператор_1> + 4)else

_+ 5)<оператор_2>_

Задание 4 открытого типа с кратким ответом_

Что будет выведено на экран в результате выполнения следующего

фрагмента кода:_

static void Main(){ int i = 7; while (i > 0) { do

if (i > 3) Console.Write(i); while (i-- > 2); Console.WriteLine(i); break;

} }

Если Вы считаете, что код содержит ошибки - укажите в качестве

ответа ***_

Ответ: 76541

Очевидным расхождением с рекомендациями по составлению тестовых заданий является, во-первых, вопросительная форма формулировки текстовой части стема. Второе затруднение связано с особенностью средств языка программирования С#. В приведенном в задании коде использован оператор Console.WriteLine(), выводящий в консольное окно строку и переводящий курсор на новую строку в консольном окне. Применение такого оператора вывода с переводом строки не желательно для заданий с открытым ответом, так как вызывает дополнительные сложности у студентов при вводе ответа в случае компьютерного тестирования, а также при оформлении ответа в случае бланкового тестирования. Комментарий «Если Вы считаете, что код содержит ошибки - укажите в качестве ответа ***» к заданию описывает только случай наличия ошибки в коде. Из приведенной формулировки задания не ясно, например, что именно требуется ввести (внести в бланк) в качестве ответа от испытуемого в случае, если программа не выведет на

экран ничего.

_Исправить задание предлагается следующим образом:_

В результате выполнения следующего фрагмента кода: static void Main() { int i = 7; while (i > 0) { do

if (i > 3) Console.Write(i); while (i-- > 2); Console.Write(i); break;

} }

на экран будет выведено:_

Примечание:

Если возникнет ошибка компиляции, введите: *** Если ошибок и исключений нет, но на экран не выведется ничего, введите: ---

_Если возникнет ошибка исполнения или исключение, введите: +++

Ответ: 76541

Заметим, что задание представляет собой комбинацию заданий отрытого и закрытого типов.

_Задание 5 открытого типа с кратким ответом_

В результате выполнения следующего фрагмента программы: char s, beg = 'S', end = (char)(beg+5); for ( s = beg; s < end; s++) if (s % beg == 0) Console.Write(s);

_на экран будет выведено: _

Ответ: S

В качестве значения переменной beg выбран символ S, имеющий одинаковый вид как в строчном, так и заглавном начертании. Имя другой переменной, выводимой на экран, с точностью до регистра совпадает с верным ответом. Разбор кода займет больше времени у студентов со слабым зрением. Кроме того, в некоторых случаях при выводе на дисплей символ S можно спутать с цифрой 5.

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

Устранить перечисленные трудности можно переформулировав

задание:_

В результате выполнения следующего фрагмента программы: char s, beg = 'G', end = (char)(beg+5); for ( s = beg; s < end; s++)

if (s % beg == 0) Console.Write(s); на экран будет выведено:__ Примечание:

ABCDEFGHIJKLMNOPQRSTUVWXYZ_

Ответ: G

Задание 6 закрытого типа с одним верным ответом_

В результате выполнения следующего фрагмента программы: intdif;

char ch1 = 'A'; char ch2 = 'c';

dif = Char.ToUpper(ch2).CompareTo(ch1); Console.WriteLine(dif);

на экран будет выведено:_

1)-1 2)l + 3)2 4)34

5)0_

В результате работы метода CompareTo() с символами будет получено «расстояние» между ними в алфавите (разность значений числовых кодов символов). В задании использованы символы A и c, имеющие одинаковое начертание в русском и латинском алфавитах. Догадаться, что используется латинский алфавит можно из анализа дистракторов, но это повышает время выполнения задания. Кроме того, дистрактор №4 неправдоподобен. Напомним, что в случае, когда в качестве вариантов ответа приводят цифры, рекомендовано упорядочивать их.

Важным изменением в задании является замена букв А и с истинно латинскими буквами. Кроме того, аналогично изменениям задания №5 в формулировку следует добавить латинский алфавит, заменить дистрактор №4 на более правдоподобный и упорядочить варианты ответов по

возрастанию (убыванию):_

В результате выполнения следующего фрагмента программы: intdif;

char ch1 = 'L'; char ch2 = 'n';

dif = Char.ToUpper(ch2).CompareTo(ch1); _Console.WriteLine(dif);_

на экран будет выведено: Примечание:

ABCDEFGHIJKLMNOPQRSTUVWXYZ_

1)0 2)-1 3)1 +4)2

5)3_

Задание 7 открытого типа с кратким ответом_

В результате выполнения следующей программы: using System; namespace Тест{ class A { public int Fieldl;

}

class B:A { public int Field2;

}

class Program { static void Main() { A myVarl = new A(); B myVar2 = (B)myVar1;

}

}

}

на экран будет выведено:_

Примечание:

Если возникнет ошибка компиляции, введите: *** Если ошибок и исключений нет, но на экран не выведется ничего, введите: ---

_Если возникнет ошибка исполнения или исключение, введите: +++

Ответ: +++

В формулировке задания предлагается определить результат вывода при выполнении фрагмента кода. Отметим, что в коде отсутствуют обращения к методам вывода на экран. В коде присутствует ошибка, приводящая к возникновению исключения.

При исправлении задания следует уточнить формулировку (код

программы), добавив оператор вывода на экран._

В результате выполнения следующей программы: using System; namespace Тест{

_class A {_

public int Fieldl;

}

class B : A { public int Field2;

}

class Program { static void Main() { A myVarl = new A(); B myVar2 = (B)myVar1;

Console.Write(myVar2.Field1);

}

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

}

}

на экран будет выведено:_

Примечание:

Если возникнет ошибка компиляции, введите: *** Если ошибок и исключений нет, то на экран не выведется ничего, введите: ---

_Если возникнет ошибка исполнения или исключение, введите: +++

Ответ: +++

Задание 8 закрытого типа с несколькими ответами_

Верно, что декларация интерфейса может быть снабжена

модификаторами:_

+ 1) new + 2) public + 3)protected + 4)internal

_+ 5)private_

Все приведенные варианты ответов являются верными. Отсутствие дистракторов повышает вероятность угадывания ответа на задания и повышает время его выполнения, так как испытуемые (в особенности группа сильнейших) подозревают скрытые в задании хитрости.

Рекомендуется заменить некоторые верные ответы на дистракторы,

или создать несколько новых заданий._

Верно, что декларация интерфейса может быть снабжена

модификаторами:_

1) static + 2) public + 3) protected + 4)internal

_+ 5) private_

Заключение

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

• Не использовать в кодах операторы вывода на экран, переводящие после вывода курсор на новую строку.

• В инструкции к заданию или в формулировке задания с открытым ответом, содержащим код, предусматривать все возможные варианты, такие как возникновение ошибок компиляции, ошибки исполнения или пустой вывод (отсутствие результата).

• В заданиях, содержащих в кодах символы и строки, приводить (при необходимости) в качестве справки алфавит, используемый в задании.

• В заданиях, содержащих в кодах символы и строки, применять хорошо различимые символы, не одинаковые в строчном и прописном начертании, и не совпадающие по начертанию в русском и латинском алфавитах.

Литература

1. Майоров А.Н. Теория и практика создания тестов для системы образования. (Как выбирать, создавать и использовать тесты для целей образования). М.: «Интеллект-центр», 2001. 296 с.

2. Звонников В.И., Челышкова М.Б. Современные средства оценивания результатов обучения. М.: Издательский центр «Академия», 2009. 224 с.

3. Подбельский В.В., Максименкова О.В. Разработка тестов по программированию для тестирования в компьютерной форме // Информатизация образования - 2011: материалы Международной научно-практической конференции. Елец: ЕГУ им. И.А. Бунина, 2011. 192-195 с.

4. Бурлачук Л.Ф., Морозов С.М. Словарь-справочник по психодиагностике. С-Пб.: Питер, 2008.

5. Карданова Е.Ю. Моделирование и параметризация тестов: основы теории и приложения. М.: ФГУ «Федеральный центр тестирования», 2008.

6. McKenna C., Bull J. Designing effective objective test questions: an intoructory workshop, CAA Centre, June, 1999.

7. Anderson P. , Morgan G. National assessments of educational achievement, volume 2: Developing tests and questionnaires for a national assessment of educationa achievement, World Bank Publications, 2008.

8. Osterfind S.J. Constructing Test Items: Multiple-Choice, Constructed-Response, Performance and Other Formats. Kluwer academic publishers, 1997.

9. Podbelskiy V.V., Maksimenkova O.V. Programming as a part of the Software Engineering education // Proceedings of the 4-th Spring/Summer Young Researchers' Colloquium on Software Engineering (SYRCoSE 2010), 2010. 165 - 168 pp.

10. Podbelskiy V.V., Maksimenkova O.V. Educationaltestsin "Programming" academicsubjectdevelopment // SYRCoSE 2011. Proceeding of the 5-th Spring/Summer Young Reseachers' Colloquium on Software Engineering, 2011. 88—93 pp.

11. Alabama professional development modules [Электронный ресурс] http://www.alabamapepe.com/profdevmodule/index.htm (дата обращения: 15.05.2012)

i Надоели баннеры? Вы всегда можете отключить рекламу.