Алсынбаева Л.Г. (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.
Для генерации тестовых заданий в модуль генерации циклов передается входная информация, введенная пользователем: количество переменных, количество итераций цикла, количество вариантов тестовых заданий. После запуска данного модуля случайным образом генерируются матрица преобразования переменных, их начальные значения, вектор сдвига, а также логическое условие путем выбора арифметических операций (при построении арифметических выражений) и операций отношения. Далее формируется фрагмент кода, содержащий циклический алгоритм, удовлетворяющий заданным условиям. После вычисления значений переменных, участвующих в сгенерированном фрагменте, пользователю выдается результат – тестовое задание в виде фрагмента программного кода и конечных значений переменных. Сгенерированные варианты тестовых заданий могут быть отбракованы вручную через пользовательский интерфейс системы, выгружены на диск в формате системы электронного обучения – 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 |
|