Similar presentations:
Презентация_Резяков_22ВП1
1.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФФГБОУ ВО «ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет вычислительной техники
Кафедра «Математическое обеспечение и применение ЭВМ»
Серверная часть комплекса программных средств
для автоматизации написания игровых скриптов
Направление подготовки: 09.03.04 – Программная инженерия
Студент: 22ВП1
Резяков Ильнур Равильевич
Руководитель: Заведующий кафедрой (д/н,
профессор)
Козлов Андрей Юрьевич
Пенза, 2026
2.
Объект, предмет, цель и требования к разработкеОбъект разработки: процесс модификации игровых рецептов
Предмет разработки: алгоритмы автоматизированной генерации
валидного JavaScript-кода
Цель разработки:
Удобное и надежное приложение для создания и редактирования
внутриигровых рецептов.
Техническое задание к предмету разработки
1. Основное требование: Разработка ПО для автоматизации генерации кода
2. Требования к среде функционирования (аппаратно-программные
требования): Программа должна функционировать на ОС Windows 10
3. Требования к среде разработки: Язык программирования C#
4. Основные функции разрабатываемой программы: Генерация кода на
основе простейших конфигураций, на основе JSON-объектов, извлечение
игровых метаданных, синтаксический анализ и сериализация, работа с
шаблонными JSON-объектами для генерации кода.
5. Специальные требования: для модуля извлечения данных необходимо
установить на игровой сервер модификацию «icon-exporters».
2
3.
Этапы разработки1. Актуальность темы разработки: Обоснована потребность в автоматизации
создания кода для снижения порога входа.
2. Анализ требований: Изучена предметная область, сформулированы требования к
анализу AST, генерации кода.
3. Анализ аналогов: Проведено сравнение с CraftTweaker и ручным написанием
скриптов; выявлены недостатки существующих решений, обоснована необходимость
собственного инструмента.
4. Выбор методов и средств разработки: C#, .NET 8, библиотека Esprima для
анализа JavaScript
5. Проектирование: Разработаны объектная модель, реестр экстракторов, стратегии
генерации и сохранения.
6. Реализация: Созданы модули парсинга, 5 типов экстракторов, полиморфные
генераторы кода, подсистема извлечения метаданных
7. Отладка и тестирование: Проведены unit-тесты, roundtrip-тестирование, проверка
граничных условий.
8. Контроль качества: Выполнено приёмочное тестирование в натурной среде;
подтверждена 100% загрузка сгенерированного кода без ошибок.
9. Расчет бюджета разработки: Трудозатраты (97 дней); подтверждена
экономическая целесообразность проекта.
3
4.
Актуальность темы разработкиПроблема: Ручное написание кода требует глубоких знаний
JavaScript, подвержено ошибкам и не масштабируется в
крупных проектах.
Недостатки аналогов: Существующие инструменты
(CraftTweaker, KubeJS) либо слишком сложны, либо не имеют
средств автоматической генерации кода и встроенной
валидации.
Техническая специфика: Требуется учёт особенностей
AST-анализа, разнообразия форматов вызовов.
Решение: Специализированный API на C# с ASTанализатором и типизированными моделями конфигураций,
обеспечивающий полную автоматизацию генерации,
валидацию параметров и низкий порог входа без ручного
редактирования кода.
4
5.
Анализ требований к постановленной задаче ипредметной области
Специфика предметной области: Модификация Minecraft
через KubeJS требует не просто генерации текста, а формирования
семантически корректных JavaScript-конструкций, учитывающих
цепочки модификаторов, вероятностные выходы и жидкостные
компоненты.
Функциональные требования: Система должна обеспечивать
три ключевых процесса:
1. Извлечение метаданных из игровой среды.
2. Преобразование пользовательских настроек в типизированные
конфигурации и генерацию валидного кода.
3. Поддержка импорта существующих скриптов через ASTанализ
Нефункциональные
ограничения:
Автономное
функционирование, синтаксически корректный генерируемый код.
5
6.
Анализ аналоговCraftTweaker
KubeJS
Разрабатываемое
ПО
Целевая
аудитория
Опытные
разработчики
Опытные
разработчики
Начинающие
разработчики
Язык
ZenScript
JavaScript
Нет
Порог входа
Высокий
Средний
Низкий
Автоматизация Отсутствует
генерации
Полуавтоматическая
Автоматическая
Поддержка
модификаций
Нативная интеграция Универсальный
адаптер
Критерии
Через
расширения
Разрабатываемое программное обеспечение будет отличаться от
существующих решений акцентом на автоматизацию типовых
операций.
6
7.
Выбор методов и средств разработкиСтек: C# / .NET 8 n библиотека Esprima для AST-анализа
JavaScript. Обеспечивает строгую типизацию и
производительность.
Архитектура: Модульная структура с паттернами
«Стратегия» и «Цепочка ответственности». Позволяет
расширять поддержку рецептов без изменения ядра.
Хранение данных: Локальные JSON-файлы и in-memory
структуры вместо СУБД. Гарантирует автономность и
отсутствие внешних зависимостей.
Тестирование: Автоматизированные модульные тесты,
roundtrip-верификация и приёмочное тестирование в
натурной среде.
7
8.
Выбор методов и средств разработкиДиаграмма варинтов использования для разрабатываемого ПО.
8
9.
Концептуальная архитектура системыПринцип: Последовательный конвейер обработки данных с
независимыми модулями
1. Извлечение: Сбор метаданных предметов, жидкостей и
тегов из файловой структуры игрового клиента.
Формирование единого реестра для валидации
идентификаторов.
2. Анализ: Преобразование исходного JavaScript-кода в
абстрактное синтаксическое дерево (AST) с
последующей маршрутизацией узлов через реестр
экстракторов.
3. Валидация: Многоуровневая проверка типизированных
конфигураций: синтаксис, диапазоны значений,
совместимость модификаторов и бизнес-ограничения
предметной области.
4. Генерация: Полиморфная сериализация конфигураций в
формат JavaScript с автоматическим форматированием
отступов, массивов.
5. Сохранение: Атомарная запись результатов в файловую
9
10.
Проектирование структур данныхКонфигурации рецептов. Необходимы для хранения и генерации кода.
10
11.
Проектирование структур данныхКлассы экстракторов необходимы для извлечения
конфигураций из исходного JavaScript-кода. Работают на
основе библиотеки Esprima.
11
12.
Проектирование алгоритмовСинтаксический анализатор
преобразует исходные
JavaScript-файлы в
типизированные
конфигурации рецептов,
проверяя структуру кода и
делегируя извлечение данных
специализированным
экстракторам. Это
обеспечивает автоматический
импорт существующих
скриптов без ручного разбора
синтаксиса.
12
13.
Проектирование алгоритмовИтеративный цикл разработки через извлечение,
редактирование и сохранение шаблонов.
13
14.
РеализацияОписание диаграммы
деятельности класса
CustomExtractor
Экстрактор обрабатывает
вызовы произвольных JSONрецептов, преобразуя объектные
выражения в типизированные
конфигурации без потери
структуры. Это обеспечивает
универсальную поддержку
любых рецептов, выходящих за
рамки специализированных
шаблонов.
14
15.
РеализацияОписание диаграммы
деятельности извлечения
метаданных
Модуль извлекает атрибуты
предметов и жидкостей из
JSON-метаданных,
сопоставляет их с
графическими ресурсами
клиента и фильтрует
дубликаты текстур. Так как
имеется необходимость
корректного отображения
локализованных названий.
15
16.
Отладка и тестированиеВыбор методов тестирования
1. Модульное тестирование («белый ящик») для
генератора кода. Необходим доступ к исходному
коду, проверка внутренней логики, покрытие
условий и граничных значений
2. Приёмочное тестирование в натурной среде
для библиотеки извлечения данных. Зависимость от
игровой сессии и сторонних модификаций делает
невозможным изолированное тестирование.
3. Roundtrip-тестирование для проверки
целостности данных при циклических
преобразованиях JSON
16
17.
Отладка и тестированиеУправляющий граф прецедента «Генерировать рецепт»
17
18.
Отладка и тестированиеТаблица результатов тестирования методом покрытия
маршрутов
Маршрут
1, 2, 3
1, 2, 4, 5, 7
1, 2, 4, 5, 6, 7
Тест
Предполагаемы Фактический рез
й результат
ультат
Ошибка
Функция
Успешно.
валидации
выбросила
входных данных. исключение.
Создан базовый Функция вернула Успешно.
код
без строку
без
дополнительных дополнительных
данных об опыте. данных
Создан код с Функция вернула Успешно.
дополнительными строку
с
данными
об дополнительными
опыте.
данными
18
19.
Отладка и тестированиеПроверка граничных условий
Таблица. Проверка граничных условий для прецедента "Создать рецепт"
Проверка параметра Диапазон Подано
Ожидаемый
результат
Фактический
результат
outputItem.Amount
[1, 64]
0
Ошибка
Ошибка
outputItem.Amount
[1, 64]
1
Успешно
Успешно
outputItem.Amount
[1, 64]
64
Успешно
Успешно
outputItem.Amount
[1, 64]
65
Ошибка
Ошибка
experience
[0, 100]
-1
Ошибка
Ошибка
experience
[0, 100]
0
Успешно
Успешно
experience
[0, 100]
100
Успешно
Успешно
experience
[0, 100]
101
Ошибка
Ошибка
19
20.
Контроль качестваОбоснование выбора метрик
Цикломатическая сложность – оценка
количества независимых путей выполнения,
выявление избыточной вложенности
SLOC – измерение объёма кода для прогноза
трудозатрат на поддержку
Метрика Холстеда – оценка
вычислительной сложности на основе
операторов и операндов
Maintainability Index – комплексный
показатель сопровождаемости
20
21.
Контроль качестваВычисление метрик
Метрика
Значение Оценка
Цикломатическая
5
сложность
Низкая (< 10)
Логические
строки (SLOC)
7
Минимальный объём
Сложность
Холстеда
294.6
Лёгкий код (< 300)
62
Приемлемая
сопровождаемость
Maintainability
Index
21
22.
Расчет бюджета разработкиДиаграмма Ганта
22
23.
Расчет бюджета разработкиБюджет проекта
23
24.
ЗаключениеПроанализирована предметная область и изучены аналоги.
Спроектирована модульная архитектура с AST-анализатором и
полиморфными генераторами кода.
Реализованы 5 типов экстракторов рецептов, система валидации и
стратегии сохранения.
Проведено комплексное тестирование: 36 unit-тестов, roundtripпроверка целостности данных, приёмочное тестирование в игровой
среде.
Рассчитаны метрики качества кода.
Поставленная задача решена в полном объёме. Разработанное ПО
обеспечивает автоматизацию создания игровых рецептов без ручного
написания JavaScript-кода, что подтверждено приёмочным
тестированием в натурной среде и готово к практическому
применению.
24
25.
Демонстрация результатов (достижения)KubeJS-скрипт для модификации игры
Результаты работы модификации игры сгенерированным кодом
25
26.
Доклад окончен.СПАСИБО ЗА ВНИМАНИЕ!