Пошаговое руководство · Разработка через тестирование
Эмулятор NES через TDD
Соберите эмулятор Nintendo Entertainment System с нуля на Python, пройдя 356 уроков, управляемых тестами.
Автор: linkfy · 14 глав · 356 уроков
Что это за руководство
Это стартовый проект, содержащий только тесты. Готовый эмулятор в него намеренно не входит: каталог tests/ и есть учебная программа. Каждый пронумерованный тест объясняет, почему важно следующее поведение, какой файл рабочего кода создать или обновить и какая минимальная реализация ожидается на этом шаге.
Это руководство идёт осознанным путём, а не быстрым.
Первые главы строят и проверяют CPU, память, картридж и основы PPU. Графика игры и интерактивный фронтенд появятся позже, когда поддерживающие их компоненты заслужат своё место через тесты. Не ждите картинки на экране в первых уроках; ждите понимания того, почему всё работает, когда она наконец появится.
Как начать
1. Клонируйте репозиторий
git clone https://github.com/linkfy/nes-emulator-tutorial-tdd cd nes-emulator-tutorial-tdd2. Установите uv и создайте зафиксированное окружение
Не запускайте uv init внутри репозитория: проект уже инициализирован. Из корня проекта установите зависимости, зафиксированные в uv.lock.
uv --version uv sync3. Откройте урок 001 и запустите только этот тест
Прочитайте документацию модуля от начала до конца, прежде чем писать рабочий код. Затем запустите только этот урок:
uv run pytest tests/chapter_01_cpu/test_001_initial_files.py -v4. Повторяйте цикл Красный → Зелёный → Рефакторинг
Продвигайтесь по одному пронумерованному тесту за раз. Каждый пройденный урок должен оставаться зелёным, прежде чем двигаться дальше. Запускайте только завершённые тесты; пока не запускайте будущие главы.
После урока 356 запустите полный набор тестов:
uv run pytest
Цикл TDD
Красный
Запустите тест урока и убедитесь, что он падает.
Зелёный
Напишите минимальную реализацию, которая заставит его пройти.
Рефакторинг
Наведите порядок в коде, сохраняя все предыдущие тесты зелёными.
Маркеры в коде
В примерах уроков могут встречаться NEW LINE / NEW BLOCK для нового кода, UPDATED LINE / UPDATED BLOCK для изменений, DELETED LINE / DELETED BLOCK для устаревшего кода и ... там, где существующий код остаётся без изменений.
Карта курса
Четырнадцать глав и 356 упорядоченных уроков. По диапазонам номеров видно, где вы сейчас и что будет дальше.
ROM-файлы для ручной проверки
Некоторые поздние уроки включают ручные проверки на легально полученных реальных ROM (например, Super Mario Bros. или Mario Bros.). Они нужны только тогда, когда урок доходит до ручной контрольной точки.