ISSN 0236-235X (P)
ISSN 2311-2735 (E)
3

13 Сентября 2024

Система автоматизированной генерации тестовых заданий


Алсынбаева Л.Г. (alg@uriit.ru) - Югорский НИИ информационных технологий, г. Ханты-Мансийск, кандидат физико-математических наук
Ключевые слова: тестовое задание, информатика, программирование
Keywords: test assignment, informatics, programming


     

В настоящее время информационные технологии стремительно внедряются во все сферы жизни и деятельности общества. Растет потребность в специалистах в области использования существующих и создания новых информационных технологий.

Результативность обучения таких специалистов на начальном этапе в большой степени зависит от исходного уровня знаний, а также от того, насколько развито алгоритмическое мышление. Для проверки данных характеристик автором статьи в ходе исследований формирования системы обучения профессиональной информатике на базовом уровне были разработаны тестовые задания, которые оказались эффективным инструментом для определения уровня подготовки по алгоритмике [1].

Результаты тестирования студентов и учащихся в течение ряда лет говорят о низком уровне школьной подготовки. Так, например, тестирование, проведенное в 2007–2008 учебном году в одном из региональных российских вузов, показало, что подавляющее большинство студентов-первокурс­ников нуждается в обучении основам алгоритмизации и программирования практически с нуля. Наилучшую оценку – 75 % от максимально возможного балла получили 12 % испытуемых, не смогли выполнить ни одного задания 30 % испытуемых.

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

Важно создать у обучаемого внутренний процессор, то есть развить способность к алгоритмизации умственных действий. Один из эффективных способов формирования внутреннего процессора – прокручивание фрагментов программ в уме. По такому принципу создаются тесты по алгоритмике типа: «Что будет в результате работы данного фрагмента программы?».

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

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

В Центре информационных технологий тес- тирования Югорского НИИ информационных технологий создана программная система, позволяющая автоматически генерировать тестовые задания по указанным параметрам. Система состоит из нескольких модулей (по количеству изучаемых тем), имеющих единый интерфейс и специализированный редактор для отбраковки и ручного редактирования тестовых заданий по усмотрению преподавателя. Тестовые задания генерируются в виде фрагментов программы на языке Паскаль.

В основе технологии автоматизированной генерации тестов заложен принцип «один фрагмент программы – одно тестовое задание». Эффективность достигается за счет автоматизации процесса генерации фрагментов программ и автоматической отбраковки заданий по указанным крите- риям.

В качестве примера реализации алгоритмов автоматизированной генерации тестовых заданий рассмотрим модуль генерации циклов упомянутой программной системы.

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

Приведем синтаксис и алгоритмы работы инструкций цикла на языке Паскаль [2], которые были положены в основу работы данного модуля.

Цикл с предусловием имеет вид: while B do S, где B – логическое выражение; S – инструкция.

Цикл может закончиться только в том случае, если инструкция S так влияет на выражение B, что через конечное число повторений значением выражения B станет false. Следовательно, в S должно быть по крайней мере одно присваивание переменной, которая встречается в B. Обозначим через V множество всех переменных, встречающихся в генерируемом фрагменте программы. Тогда циклическую инструкцию можно представить в виде схемы программы:

V:=v0; while p(V) do V:=f(V),

где p – условие (логическое выражение); f – функция. Заменяя соответствующим образом V, p и f, можно получить различные конкретные фрагменты программы, имеющие одинаковую структуру.

Цикл с постусловием имеет вид: repeat S until B, где B – логическое выражение; S – инструкция.

Инструкция S выполняется до тех пор, пока значение логического выражения B равно false. Обозначим через V множество всех переменных, встречающихся в генерируемом фрагменте программы. Циклическую инструкцию можно представить в виде схемы программы:

V:=v0; repeat V:=f(V) until p(V),

где p – условие (логическое выражение); f – функция. Как и в цикле с предусловием, заменяя соответствующим образом V, p и f, также можно получить различные конкретные фрагменты программы, имеющие одинаковую структуру.

Цикл со счетчиком имеет вид:

for V:= a to b do S,

где S – повторяемая инструкция; V – скалярная переменная (параметр цикла); a и b – выражения того же типа, что и V.

Данная циклическая инструкция означает, что две инструкции V:=x; S выполняются для каждого значения x в интервале от a до b. Повторные действия выполняются последовательно для значений x, выбираемых в возрастающем (на 1) порядке в интервале от a до b.

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

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

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

Пусть n – количество переменных; N – максимальное количество итераций; V – множество переменных, используемых в генерируемом фрагменте программы; V0 – множество констант, задающих начальные значения переменным множества V; p(V) – логическая функция; С – матрица преобразования переменных размером n´n, каждый элемент матрицы – целое число в диапазоне от -9 до 9; с – вектор сдвига переменных, состоящий из n целых чисел в диапазоне от -9 до 9.

В качестве логического выражения p(V) используем функции типа p(V)q(V) <операция сравнения> g(V), где q(V), g(V) – арифметические выражения с переменными; <операция сравнения> – это одна из операций сравнения: <, >, , , =, .

В таблице приведен общий вид тестовых заданий для различных типов циклов. Тело цикла формируется как последовательность операторов присваивания, сгенерированных на основе множества переменных V, матрицы преобразования переменных C и вектора сдвига c. Функция f(V), которая используется для генерации тела цикла, имеет вид f(V)=V*C+c.

Тип цикла

Общий вид цикла

while

V:=V0; while(p(V)) do V:=V*C + c; 

for

V:=V0; for i:=0 to N do V:=V*C + c;

repeat

V:=V0; repeat V:=V*C + c; until(p(V));

Для генерации тестовых заданий в модуль генерации циклов передается входная информация, введенная пользователем: количество переменных, количество итераций цикла, количество вариантов тестовых заданий.

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

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

Сгенерированные варианты тестовых заданий могут быть отбракованы вручную через пользовательский интерфейс системы, выгружены на диск в формате системы электронного обучения – Moodle XML в текстовых форматах .doc, .html, .rtf или распечатаны в виде вариантов тестов для бланочного тестирования.

Следует отметить, что «Система автоматизированной генерации тестовых заданий» зарегистрирована Федеральной службой по интеллектуальной собственности, патентам и товарным знакам в реестре программ для ЭВМ (№ 2006613619) и применяется в учебном процессе Югорского физико-математического лицея и Института прикладной математики, информатики и управления Югорского государственного университета.

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

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

Литература

1.   Алсынбаева Л.Г. Система стартового обучения профессиональной информатике: дис. … канд. физ.-мат. наук. Новосибирск: НГУ, 1997. 105 с.

2.   Вирт Н. Систематическое программирование. Введение. М.: Мир, 1977. 183 с.



http://swsys.ru/index.php?id=2394&lang=%E2%8C%A9%3Den&like=1&page=article


Perhaps, you might be interested in the following articles of similar topics: