Формальные модели для системыавтоматизированной генерации тестов по программированию

УДК 004.588:512

Л. Г. Алсынбаева, К. С. Алсынбаев

ФОРМАЛЬНЫЕ МОДЕЛИ ДЛЯ СИСТЕМЫ АВТОМАТИЗИРОВАННОЙ ГЕНЕРАЦИИ ТЕСТОВ ПО ПРОГРАММИРОВАНИЮ

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

Formal approaches to creation of algorithms implemented in automated tests generation system are considered. Structure of a software system of programming tests generation is presented. Problem statements and mathematical models for some modules of the system are described.

Ключевые слова: математическая модель, тестовое задание, программирование, информатика.

Key words: mathematical model, test, programming, informatics.

Введение

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

Вестник Балтийского федерального университета им. И. Канта. 2012. Вып. 10. С. 159-166.

160

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

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

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

Заметим, что данный тип тестов имеет двойную ценность:

а) формирование «внутреннего процессора» обучаемого;

б) контроль знания языка программирования высокого уровня.

Одно из требований использования тестов в учебном процессе — их

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

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

В Югорском НИИ информационных технологий под руководством одного из авторов статьи, Л. Г. Алсынбаевой, проводилась разработка системы автоматизированной генерации тестовых заданий по алгоритмике [1, с. 131]. В качестве базового языка программирования для генерации тестовых заданий выбран Паскаль, который многие годы является одним из лучших инструментов для обучения основам алгоритмизации и программирования в рамках школьного курса «Информатика и ИКТ», а также используется в программах профессиональной подготовки на начальном этапе.

Программная система, позволяющая автоматически генерировать тестовые задания по указанным параметрам, состоит из нескольких модулей (по количеству изучаемых тем), имеющих единый интерфейс. В основе технологии автоматизированной генерации тестов заложен принцип «Один фрагмент программы — одно тестовое задание». Сгенерированные варианты тестовых заданий могут быть «отбракованы» вручную через пользовательский интерфейс системы, выгружены на диск в формате системы электронного обучения МооШеХМЬ, в текстовых форматах. ^с,.Ыт1,.11;£ или распечатаны в виде вариантов тестов для бланочного тестирования. Тестовые задания генерируются в виде фрагментов программы на языке Паскаль.

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

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

Для этой цели был использован формальный математический язык. Учитывая ограничения на размер журнальной статьи, приведем полное описание математических моделей для модулей «Генерация логических функций» и «Одномерные массивы» и краткую характеристику некоторых других моделей. Полное описание модели для модуля «Генерация циклов» приведено в [1, с. 131].

161

162

Формальная модель модуля «Генерация логических функций»

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

1) генерация строк, являющихся корректным представлением записи логической (булевой) функции;

2) вычисление таблиц истинности для каждой сгенерированной булевой функции.

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

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

Согласно [2, с. 45], [3] и [4, с. 107] пусть Е = {0, 1}, X — некоторое множество переменных, Е2 — множество всех наборов (а1, ..., ап) из нулей и единиц, и ^ 1. Булева функция/'"^,..., х„) от и переменных задает отображение Е, и £, п ^ 1, Л',, ..., х„ — переменные из множества X, Е, — область определения, Е — область значений функции.

Каждую булеву функцию можно представить в виде таблицы истинности. В [2] и других учебниках по дискретной математике даются понятия элементарных булевых функций и приводятся их табличные преставления.

В [3] дается понятие формулы над множеством функций А = = {Л (Х1, •  , хпг), /2(х1, •  , хп2), •  }. Формулы над А — это слова определенного вида (конечной длины) в алфавите X и В и V, где X — множество переменных; В — множество функциональных символов, соответствующих функциям из А; V — множество вспомогательных символов, состоящее из символов левой и правой скобок, а также запятой.

Каждой формуле назначается функция алгебры логики / (х1, ., хп). Функция/(х1, ..., хп) — суперпозиция функций %(уу..., ут) и Н1(х1, ..., хп), Н2(ху ..., хп), ., Нт (ху ..., хп), если выполняется следующее равенство:

/ (ху ., хп) = %(п-1(х\, ., хп), Й2(ха, ., хп), ., Нт (хг, ., хп)).

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

Для формирования таблицы истинности для каждой формулы / (ху ..., хп) требуется 2п строк и (п + 1) столбцов. В столбцах с 1-го по п-й формируются все возможные значения аргументов, принимающих значения 0 или 1, в столбце (п + 1) вычисляются значения функции на основе таблицы истинности элементарных булевых функций, используемых на этапе генерации формулы путем их суперпозиции. Очевидно, в модуле должен присутствовать алгоритм интерпретации формул

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

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

п = 2, Е(х1, х2) = —і х1 & х2 ^ х2.

п = 3, Е(х1, х2, х3) = х1 & —х2 V х2 & х1 ^ х3.

п = 3, Е(х1, х2, х3) = х1 V —х2 & х1 & х3

В качестве второго способа автоматизированной генерации логиче-

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

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

Для получения множества уникальных заданий при формировании таблицы истинности для значений логической функции, то есть столбца (п + 1), применяется генератор случайных чисел, который выдает значения 0 или 1. Уникальность обеспечивается большим количеством возможных функций [4, с. 108].

Формальная модель модуля «Одномерные массивы»

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

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

Математическая модель. Для формального описания алгоритмов, демонстрирующих работу с одномерными массивами, использовано математическое понятие «перестановка» из области комбинаторики. Всякое расположение чисел 1, 2, ..., п в некотором определенном порядке называется перестановкой из п чисел [4, с. 184; 5, с. 28], обычно трактуемое как биекция (взаимно-однозначное соответствие) на множестве {1, 2, ., п}. Число п при этом называется порядком перестановки.

Перестановка п множества X может быть записана в виде подстановки, например I 1, , п I, где {%, ., хп} = {у1,..., уп} = Xи п(х;) = у.

Vу1, •••, уп )

163

164

Собственно, для генерации фрагментов алгоритмов перестановки местами элементов одномерного массива A мы можем воспользоваться подстановкой порядка п, где числа от 1 до п будут указывать индексы элементов массива A. Таким образом, требуется сконструировать подстановку л: n(xi) = уi и оформить ее в виде программного кода на Паскале, изменяющего порядок элементов в некотором одномерном массиве A. При конструировании используется утверждение, что всякая подстановка представима в виде произведения транспозиций (обмен местами двух элементов перестановки) [5, с. 34] и любое произведение транспозиций является подстановкой.

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

Пусть п — размерность исходного массива A, m — количество перестановок элементов в массиве A (соответствует также числу итераций цикла).

Значения массива А генерируются случайным образом. Перестановка элементов массива А производится при участии элементов вспомогательного массива В в качестве индексов элементов массива А. Размерность массива В соответствует количеству итераций цикла, умноженному на 2, и каждая последовательная пара элементов массива B определяет транспозицию. Значения элементов массива В формируются случайным образом из множества значений индексов элементов массива А с помощью функций /1(х) и /2(х) (х — лежит в диапазоне от 1 до 2m, значения функций /1(х) и /2(х) находятся в пределах от 1 до 2п).

Общий вид генерируемых фрагментов программы:

for i:=1 to m do begin

t:= A[B[f1(i)]];

A[B[f1(i)]]:= A[B[f2(i)]];

A[B[f2(i)]]:= t; end;

Тело цикла на шаге i формирует транспозицию, определяющую подстановку ni. Функция л имеет вид: л = лплп-1 ... л1 (A).

Одним из примеров функций /1(х) и /2(х) могут быть такие: /1(х) — вычисление индекса очередного четного значения элемента массива A, /2(х) — вычисление индекса очередного нечетного значения элемента массива B.

Формальная модель модуля «Работа с записями»

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

--------------------------------------------------------------

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

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

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

Модуль «Работа с процедурами»

Для описания математической модели модуля «Работа с процедурами» применен подход, описанный в работе профессора А. С. Устенко «Основы математического моделирования и алгоритмизации процессов функционирования сложных систем», выложенной на сайте http://ustenko.fromru.com, в котором используется понятие типового алгоритмического процесса как совокупности действий и причинноследственных связей между ними.

Заключение

Использование программы «Система автоматизированной генерации тестовых заданий» позволяет преподавателю за короткое время подготовить необходимое количество индивидуальных вариантов тестов, равноценных по сложности. Практика показала, что подготовка индивидуальных тестов для учебной группы из 30 человек и загрузка их в систему дистанционного обучения занимает у преподавателя не более 15 минут.

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

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

165

166

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

Список литературы

1. Алсынбаева Л. Г. Система автоматизированной генерации тестовых заданий // Программные продукты и системы. 2009. № 4.

2. Морозенко В. В. Дискретная математика. Пермь, 2008.

3. Фонд знаний «Ломоносов». URL: http://www.lomonosov-fund.ru/enc/ru/ encyclopedia:0135750.

4. Новиков Ф. А. Дискретная математика для программистов. СПб., 2009.

5. Курош А. Г. Курс высшей алгебры. М., 1965.

Об авторах

Людмила Георгиевна Алсынбаева — канд. физ.-мат. наук, доц., Балтийский федеральный университет им. И. Канта.

E-mail: lalsynbaeva @kantiana.ru

Камил Салихович Алсынбаев — канд. техн. наук, доц., Балтийский федеральный университет им. И. Канта.

E-mail: kalsynbaev@kantiana.ru

Authors

Dr Ludmila Alsynbaeva — assistant professor, I. Kant Baltic Federal University.

E-mail: lalsynbaeva@kantiana.ru

Dr Kamil Alsynbaev — assistant professor, I. Kant Baltic Federal University.

E-mail: kalsynbaev@kantiana.ru