Введение 4
Постановка задачи 5
Глава 1. Обзор и сравнение существующих генераторов программного кода 6
1.1. Понятие генерации программного кода 6
1.2. Automated C++ Program Generator using English Language
Interface 7
1.3. Automatic code generation for C and C++programming .... 7
1.4. Csmith 7
1.5. Liveness-Driven Random Program Generation (ldrgen) 7
1.6. Yarpgen 8
1.7. Deepsmith 8
1.8. SL Random Program Generator 8
1.9. Pyfuzz 8
1.10. Сравнительный анализ найденных инструментов и статей . . 8
1.10.1 Результаты сравнения 11
Глава 2. Разработка инструмента генерации программ 12
2.1. Требования к системе генерации 12
2.2. Схема генерации программ 12
2.3. Промежуточное представление 13
2.4. Шаблоны программ 14
2.5. Архитектура системы 15
2.6. Компоненты системы 17
2.6.1 Веб-сервер 17
2.6.2 Исполнитель программ 17
2.6.3 База данных 17
2.6.4 Сторона клиента 17
2.6.5 Менеджер шаблонов 18
Глава 3. Реализация инструмента генерации программ 19
3.1. Используемые технологии 19
3.1.1 Менеджер шаблонов 19
3.1.2 Веб-сервер 20
3.1.3 База данных 20
3.1.4 Исполнитель программ 20
3.2. Шаблоны программ 21
3.2.1 Внутреннее представление шаблона 21
3.2.2 Конструирование шаблонов 23
3.3. Промежуточное представление (AST) 25
3.4. Генерация текста программы 25
3.5. API 26
3.6. Проверка ответов 27
Заключение 28
Список литературы
В настоящее время знание языка программирования является необходимым для специалиста в отрасли информационных технологий, а обучение им - крайне востребованным. На сегодняшний день программы по обучению языкам программирования есть не только в университетах, но и на различных образовательных платформах в интернете. В связи с ростом числа учащихся подобных курсов и ослабления контакта между студентом и преподавателем острее встает проблема создания учебных материалов, в частности практиче¬ских заданий. Требуется создавать их в большем объеме и в то же время де¬лать их разнообразными во избежание списывания. Специфически для курсов по изучению языков программирования возникает необходимость создания множества примеров программ на определенную тему или по конкретному шаблону. Создание подобных примеров вручную в нескольких вариантах (в идеале по отдельности для каждого ученика) затруднительно. Таким образом, создание удобного программного инструмента, позволяющего автоматиче¬ски генерировать примеры кода на различных языках программирования для учебных задач представляет собой актуальную проблему.
Постановка задачи
Целью данной выпускной работы является создать расширяемый генератор случайных программ для учебных задач, используемых в курсах по обучению языкам программирования.
Основные задачи которые необходимо сделать:
a. Изучить существующие системы генерации случайных программ на предмет возможности их настройки и применимости результатов их работы в учебных целях.
b. Создать систему генерации программ с возможностью настройки параметров для одного языка программирования (Python)
c. Адаптировать систему к возможности поддержки других языков программирования.
Объектом моего исследования являются инструменты генерации программного кода, а предметом исследования — применимость инструментов генерации кода для создания учебных задач.
Данная работа является развитием идеи, изложенной в статье [1], в сторону расширяемости и поддержки разных языков программирования.
Целью и основной задачей дипломной работы было создание генератора программ для обучения программированию. В ходе выполнения работы были получены следующие результаты:
1. Было проведено исследование существующих решений по генерации программ на предмет их применимости в обучающих целях. В ходе исследования были выявлены достоинства и недостатки имеющихся решений.
2. Были сформулированы требования к генератору обучающих программ, учитывающие используемые модели в аналогах, их достоинства и недостатки. Из основных недостатков были выявлены: отсутствие возможности задать основную логику программы; мало функциональные модели задания шаблона кода при их наличии; отсутствие веб-интерфейса; отсутствие возможности хранения шаблонов и сгенерированных программ; отсутствие возможности генерации изображений.
3. Был реализован инструмент генерации программ, поддерживающий управление шаблонами кода, имеющий потенциал к расширению в сторону поддержки новых языков программирования, в настоящий момент поддерживающий генерацию кода на языке Python с помощью основных синтаксических конструкций.
Таким образом, цель данной работы достигнута в полном объеме.