Добавил:
МТУСИ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет 4

.docx
Скачиваний:
1
Добавлен:
10.10.2025
Размер:
942.62 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Кафедра «Программная инженерия»

Лабораторная работа №5

по дисциплине «Рефакторинг баз данных и приложений» на тему

«Рефакторинг приложений с целью оптимизации запросов и индексов базы данных»

Выполнил: Студент гр. БПИ 2304

Афанасьев А.С.

2025

Цель работы

  1. Ознакомиться с основными принципами и задачами код-ревью.

  2. Научиться проводить перекрестное код-ревью, выявлять проблемы в коде и предлагать улучшения.

  3. Применить полученные рекомендации для рефакторинга кода.

  4. Развить навыки командной работы и взаимодействия в процессе разработки.

Задание

1. Ознакомьтесь с теоретическими основами код-ревью, его целями и преимуществами. Изучите лучшие практики проведения код-ревью, такие как фокус на читаемости, тестируемости и соблюдении стандартов кодирования.

2. Разделитесь на команды по 2 человека. Обменяйтесь кодом проектов (можно использовать проект с учебной практики).

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

4. Получив рекомендации от коллеги, внесите изменения в свой код, применяя техники рефакторинга (например, устранение дублирования, улучшение именования, разделение больших функций). Убедитесь, что после рефакторинга программа сохраняет свою функциональность.

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

6. Обсудите результаты код-ревью с коллегой. Укажите, какие рекомендации были полезны, а какие могли быть улучшены.

Ход выполнения

Я нашёл себе пару из группы для выполнения лабораторной работы, а именно – Марию Алексееву. Она мне предоставила проект на 250 строк для рефакторинга.

Этот код представляет собой простую игру на память (Memory Game), написанную с использованием библиотеки Pygame в Visual Studio Code.

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

Мы проведем рефакторинг и последовательно загрузим код на GitHub.

Рисунок 1. Исходный код

Рисунок 2. Исходный код

Рисунок 4. Исходный код

Рисунок 5. Исходный код

Рисунок 6. Исходный код

1. Анализ кода и рекомендации.

Прежде чем приступить к рефакторингу, выделим потенциальные области для улучшений:

Читаемость и понятность кода:

-Имена переменных и функций могут быть более описательными.

-Комментарии могут быть добавлены для пояснения сложных участков кода.

-Отступы и форматирование должны быть последовательными.

Наличие дублирующегося или избыточного кода:

-Есть повторяющиеся блоки кода, например, при обработке выбора первой и второй карточки.

-Функции drawBoxCovers и drawBoard выполняют похожие действия по отрисовке.

Соответствие стандартам кодирования (PEP 8):

-Некоторые отступы не соответствуют PEP 8 (4 пробела на уровень).

-Могут быть длинные строки, которые стоит разбить.

Возможности для улучшения структуры:

-Код можно разбить на классы для лучшей организации (например, Card, Board, Game).

-Логику игры и отрисовку можно разделить на отдельные модули.

Возможности для улучшения производительности:

-Оптимизация отрисовки (например, обновление только изменившихся областей экрана).

Разделение кода на логические модули:

-Чёткая структура проекта и упрощение поддержки с расширением функциональности в будущем.

2. Процесс рефакторинга.

Я сразу изменил структура проекта, она представлена на рисунке ниже.

Рисунок 7. Новая структура проекта

Наличие __init__.py в папке memory_game позволяет нам импортировать модули из этой папки (например, game_graphics и game_logic) в другие файлы (например, в main.py) с использованием синтаксиса from memory_game import game_graphics.

Такая структура разбивает код на логические модули (game_graphics.py, game_logic.py, main.py), что делает его более организованным, читаемым и поддерживаемым. Каждый модуль отвечает за свою часть функциональности игры.  

game_graphics.py: содержит код, отвечающий за отрисовку элементов игры, анимации и взаимодействие с Pygame.

game_logic.py: содержит логику игры, правила, обработку данных и т.п.

main.py: точка входа в программу, запускает игру и координирует работу между модулями.

Р исунок 8. main.py после рефакторинга

Рисунок 9. game_logic.py

Рисунок 9. game_graphics.py

Рисунок 10. game_graphics.py

3. Описание изменений

1) Читаемость и понятность кода

Проблема в исходном коде: Исходный код содержал неинформативные имена переменных (WINDOWWIDTH, BOXSIZE), не консистентное форматирование (отступы, пробелы), и сложные для понимания конструкции.

Рефакторинг:

-Переименование переменных (WINDOW_WIDTH, BOX_SIZE, draw_icon и т.д.).

-Форматирование кода (отступы, пробелы).

-Упрощение логики (использование //, распаковка кортежей).

2) Наличие дублирующегося или избыточного кода.

Проблема в исходном коде: В исходном коде были повторяющиеся блоки кода, например, при получении формы и цвета иконки, и избыточные вызовы pagane.display.update().

Рефакторинг:

-Выделение функций (get_shape_and_color).

-Удаление лишних вызовов pygame.display.update().

3) Улучшение структуры кода (Рефакторинг и разделение больших функций).

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

Рефакторинг:

-Создание структуры пакета memory_game с модулями game_graphics.py, game_logic.py и main.py.

-Перемещение функций между модулями в соответствии с их ответственностью.

4) Производительность (Оптимизация).

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

Рефакторинг:

-Удаление лишних вызовов pygame.display.update().

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

5) Соответствие стандартам кодирования.

Проблема в исходном коде: Исходный код не полностью соответствовал стандартам PEP 8 (например, в части именования и форматирования).

Рефакторинг:

-Соблюдение PEP 8 в именовании, отступах, пробелах и т.д.

6) Сохранение функциональности.

Рисунок 11. Запуск игры

7) Структура проекта (Модульность).

Код с процессом рефакторинга последовательно загружен на github.

Рисунок 12. Загрузка всех изменений на гит.

4. Вывод

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

Ссылка на гит - https://github.com/andsee18/refactlab4

Соседние файлы в предмете Рефакторинг