Вычислитель отличий (Python)
В этом проекте отрабатывается работа с коллекциями. Изучаются способы построения и обхода деревьев. Вы познакомитесь с разными форматами данных (JSON, YAML), научитесь их парсить и формировать. Начнете писать тесты (pytest) и освоите разработку через них. Познакомитесь с непрерывной интеграцией (CI) и элементами экстремального программирования (XP)
Цель
Вычислитель отличий – проект, который прокачивает даже опытных разработчиков. Здесь вам придется столкнуться с принятием сложных архитектурных решений, автоматизированным тестированием и непрерывной интеграцией, функциональным программированием, работе с древовидными структурами данных и рекурсивными алгоритмами.
Структуры данных и алгоритмы
Выбор правильных структур данных в коде – один из ключей к удачной архитектуре и простому коду. От этого зависит удобство анализа и обработки, количество и сложность условных конструкций.
Главный вопрос в проекте: как описать внутреннее представление дифа между файлами, чтобы оно было максимально удобным. И хотя для этого существует множество разных способов, лишь некоторые из них приводят к простому коду.
Работа с деревьями и древовидной рекурсией очень хорошо прокачивает алгоритмическое мышление. Это важно, так как реальная разработка сопряжена с постоянной обработкой данных, различными преобразованиями и выводом коллекций.
Архитектура
Для построения дифа между двумя структурами нужно проделать множество операций: чтение файлов, парсинг входящих данных, построение дерева различий, формирование необходимого вывода. Все это требует хорошей организации кода. Модульность и абстракции выходят в этом проекте на новый уровень.
Помимо внутренней архитектуры в этом проекте появляется необходимость работать с параметрами командной строки. Происходит углубление понимания работы операционных систем в целом и командных интерпретаторов в частности. Для организации этой части кода в Python есть встроенный модуль argparse, который позволяет легко строить консольные утилиты.
Тестирование и Отладка
Автоматизированные тесты — неотъемлемая часть профессиональной разработки. Вычислитель отличий идеальный проект для прокачки навыка тестирования. Он достаточно простой и удобный для написания тестов и достаточно сложный, чтобы прочувствовать важность этих тестов во время рефакторинга и отладки. В отличие от практики Хекслета здесь предстоит писать тесты самостоятельно. Причем это можно делать до кода, практикуя TDD.
Для написания тестов используется фреймворк Pytest.
Описание
Вычислитель отличий – программа, которая определяет разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн-сервисов, например, jsondiff. Подобный механизм, например, используется при выводе тестов или при автоматическом отслеживании изменений в конфигурационных файлах.
Возможности утилиты:
- Поддержка разных входных форматов: yaml, json
- Генерация отчета в виде plain text, stylish и json
Пример использования:
gendiff --format plain filepath1.json filepath2.yml
Setting "common.setting4" was added with value: False
Setting "group1.baz" was updated. From 'bas' to 'bars'
Section "group2" was removed