Введение 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
Список литературы 29
В настоящее время знание языка программирования является необходимым для специалиста в отрасли информационных технологий, а обучение им - крайне востребованным. На сегодняшний день программы по обучению языкам программирования есть не только в университетах, но и на различных образовательных платформах в интернете. В связи с ростом числа учащихся подобных курсов и ослабления контакта между студентом и преподавателем острее встает проблема создания учебных материалов, в частности практических заданий. Требуется создавать их в большем объеме и в то же время делать их разнообразными во избежание списывания. Специфически для курсов по изучению языков программирования возникает необходимость создания множества примеров программ на определенную тему или по конкретному шаблону. Создание подобных примеров вручную в нескольких вариантах (в идеале по отдельности для каждого ученика) затруднительно. Таким образом, создание удобного программного инструмента, позволяющего автоматически генерировать примеры кода на различных языках программирования для учебных задач представляет собой актуальную проблему.
Целью и основной задачей дипломной работы было создание генератора программ для обучения программированию. В ходе выполнения работы были получены следующие результаты:
1. Было проведено исследование существующих решений по генерации программ на предмет их применимости в обучающих целях. В ходе исследования были выявлены достоинства и недостатки имеющихся решений.
2. Были сформулированы требования к генератору обучающих программ, учитывающие используемые модели в аналогах, их достоинства и недостатки. Из основных недостатков были выявлены: отсутствие возможности задать основную логику программы; мало функциональные модели задания шаблона кода при их наличии; отсутствие веб-интерфейса; отсутствие возможности хранения шаблонов и сгенерированных программ; отсутствие возможности генерации изображений.
3. Был реализован инструмент генерации программ, поддерживающий управление шаблонами кода, имеющий потенциал к расширению в сторону поддержки новых языков программирования, в настоящий момент поддерживающий генерацию кода на языке Python с помощью основных синтаксических конструкций.
Таким образом, цель данной работы достигнута в полном объеме.
[1] А Хафизова и М Заславский. «Генератор случайных программ как инструмент обучения программированию». В: СБОРНИК ДОКЛАДОВ СТУДЕНТОВ И АСПИРАНТОВ НА КОНФЕРЕНЦИИ ПРОФЕССОРСКО-ПРЕПОДАВАТЕЛЬСКОГО СОСТАВА. 2019, с. 191.
[2] Ambuj Kumar и Saroj Kaushik. «Automated C++ Program Generator using English Language Interface». В: ().
[3] S. Patade и др. «AUTOMATIC CODE GENERATION FOR C AND C++ PROGRAMMING». В: IRJET 08 (05 2021), с. 4732—4736.
[4] Xuejun Yang и др. Csmith. URL: https : / /embed . cs . utah . edu/ csmith/ (дата обр. 10.05.2022).
[5] Gergo Barany. «Liveness-driven random program generation». В: International Symposium on Logic-Based Program Synthesis and Transformation. Springer. 2017, с. 112—127.
[6] Intel. Yarpgen. URL: https : //github . com/intel/yarpgen (дата обр. 10.05.2022).
[7] Chris Cummins и др. «Compiler fuzzing through deep learning». В: Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis. 2018, с. 95—105.
[8] Ariel Baruch. SL Random Program Generator. URL: https : //www . cs.bgu.ac.il/~arielbar/sl/#/code (дата обр. 10.05.2022).
[9] Steven Myint. pyfuzz. URL: https : / /github . com/myint/pyfuzz (дата обр. 10.05.2022).
[10] Steven Myint. Random Python Program Generator. URL: https : // www.4geeks.de/cgi-bin/webgen.py (дата обр. 10.05.2022).
[11] AST. URL: https://en.wikipedia.org/wiki/Abstract_syntax_ tree (дата обр. 15.05.2022).
[12] ECMA International. Standard ECMA-404. The JSONData Interchange Format. 2017.
[13] Moodle. URL: https : / / moodle . org / ?lang = ru (дата обр. 15.05.2022).
[14] Jemerov D. и Isakova S. Kotlin in action. Manning Publications Company, 2017.
[15] Docker. URL: https://www.docker.com/ (дата обр. 10.05.2022)....29