отчет-2
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Кафедра «Программная инженерия»
Лабораторная работа №2
по дисциплине «Рефакторинг баз данных и приложений» на тему
«Рефакторинг приложений с изучением модульного тестирования»
Выполнил: Студент гр. БПИ 2304
Афанасьев
А.C.
Москва 2025
Цель работы
Научиться разрабатывать модульные тесты для проверки функциональности отдельных частей приложения.
Применить модульное тестирование для контроля качества кода в процессе рефакторинга.
Освоить использование инструментов для написания и запуска модульных тестов.
Задание
Ознакомьтесь с теоретическими основами модульного тестирования, его задачами и целями. Изучите, как модульное тестирование помогает проверять функциональность отдельных частей программы (модулей) и выявлять ошибки на ранних этапах разработки.
Выберите небольшой проект или модуль, который вы ранее разработали, либо используйте предоставленный преподавателем пример.
Определите ключевые функции или классы, которые требуют тестирования.
Выявите участки кода, которые могут быть улучшены в процессе рефакторинга.
Напишите модульные тесты для выбранных функций или классов. Используйте подходы, описанные в теории, такие как тестирование граничных условий, проверка исключений и тестирование на корректность данных. Примените инструменты для модульного тестирования, такие как JUnit (для Java), pytest (для Python) или аналогичные для вашего языка программирования.
Проведите рефакторинг выбранного кода, улучшая его структуру, читаемость и производительность. После каждого изменения запускайте модульные тесты, чтобы убедиться, что функциональность программы не нарушена.
Подготовьте отчет, включающий описание исходного состояния кода, список написанных модульных тестов с пояснениями, внесенные изменения в код и их обоснование, результаты выполнения тестов до и после рефакторинга.
Ход выполнения
Я подготовил пример лабораторной работы с проектом около 150 строк кода на Python с использованием pytest в Visual Studio Code. Проект будет представлять собой систему управления библиотекой (учет книг и их выдачи). Мы проведем рефакторинг, напишем тесты и последовательно загрузим код на GitHub.
Рисунок 1. Исходный код
Рисунок 2. library_manager.py после рефакторинга
Рисунок 4. Добавление тестов
Рисунок 5. Запуск тестов
Рисунок 6. Загрузка проекта на гит
Подробное описание изменений 1.Структура хранения данных:
До: self.books был списком словарей ([]), где каждая книга представлялась как
{"title": title, "author": author, "available": True}.
После: self.books стал словарем ({}), где ключ — это title, а значение — словарь
{"author": author, "available": True}.
Обоснование: Список требовал линейного поиска для проверки наличия книги или изменения статуса.
Словарь обеспечивает доступ по ключу , что повышает производительность, упрощает проверку дубликатов (title in self.books).
Проверка входных данных: До: Методы принимали любые значения без валидации.
Например, add_book мог добавить книгу с пустым названием или числом вместо строки, borrow_book принимал пустого пользователя.
После: Добавлены проверки типов и значений
Обработка дубликатов:
До: Метод add_book позволял добавлять одинаковые книги без проверки.
После:
Рис 7.
В реальной библиотеке книги с одинаковым названием не должны дублироваться без уникального идентификатора.
Тест test_add_book_duplicate подтверждает, что дубликаты запрещены.
Тесты
До: Тестов не было.
После: Добавлены тесты для проверки:
-Корректности добавления книги (test_add_book).
-Обработки дубликатов (test_add_book_duplicate).
-Выдачи книги (test_borrow_book_success).
-Ошибки при некорректном пользователе (test_borrow_book_invalid_user).
-Возврата книги (test_return_book_success).
-Списка доступных книг (test_get_available_books).
Обоснование:
Тесты подтверждают, что рефакторинг не нарушил функциональность. Проверяют новые проверки исключений и улучшенную логику.
Итоговые преимущества рефакторинга Производительность: Переход со списка на словарь ускорил доступ к данным.
Надежность: Проверки входных данных предотвращают ошибки.
Читаемость: Документация и улучшенная структура делают код понятнее.
Тестируемость: Тесты гарантируют, что изменения не ломают функциональность.
Вывод
В ходе выполнения данной лабораторной работы были изучены и практически применены ключевые принципы модульного тестирования и рефакторинга кода. Для демонстрации этих подходов был выбран небольшой проект — система управления библиотекой, что позволило наглядно показать их преимущества и значимость в процессе разработки программного обеспечения.
Ссылка на гит - https://github.com/andsee18/library-manager
