# --------------------------------------------------------------------------- # Инструменты контроля качества и безопасности кода. # # Само учебное приложение НЕ ТРЕБУЕТ НИЧЕГО, кроме Python: и sqlite3, # и unittest входят в стандартную библиотеку. Этот файл нужен только для # пятой пары — и только если на рабочем месте есть интернет. # # Установка: # py -m pip install -r requirements-dev.txt # # Если интернета нет — пропустите установку и работайте по бумажному # чек-листу правил кодирования из файла «04 - Практические задания.md». # Ни одно задание дня на этих пакетах не завязано. # # Версии ограничены сверху, чтобы новая мажорная версия инструмента не сломала # конвейер внезапно. ВАЖНО понимать границу этого приёма: # # Диапазон версий — это НЕ воспроизводимая сборка. Установка сегодня и # через месяц даст разный набор пакетов: подтянутся новые минорные версии # и другие транзитивные зависимости. Для настоящей воспроизводимости нужен # lock-файл с точными версиями и хешами каждого пакета — например, # `pip-compile --generate-hashes` (pip-tools), `uv lock` или `poetry.lock`, # а установка выполняется с `--require-hashes`. Тогда сборка на машине # разработчика, на сборочном сервере и у проверяющего даёт бит в бит # одинаковый результат. # # Здесь диапазоны оставлены сознательно: на учебном занятии lock-файл только # мешал бы (он привязан к платформе и версии Python), а сам приём разбирается # отдельно в тематическом модуле о воспроизводимых сборках. # # Точно так же и `pip-audit` в конвейере — это лишь одна операция процесса # 5.16 «Композиционный анализ» ГОСТ Р 56939-2024, а не весь процесс. Полный # процесс включает ещё перечень компонентов (SBOM), правила допуска # компонентов, контроль лицензий, регламент реагирования на найденные # уязвимости и записи обо всём этом. # --------------------------------------------------------------------------- ruff>=0.5,<1.0 # линтер и форматтер: стиль, мёртвый код, опечатки bandit>=1.7,<2.0 # SAST для Python: ищет опасные конструкции pip-audit>=2.7,<3.0 # SCA: проверяет зависимости по базам уязвимостей pytest>=8.0,<10.0 # запуск тестов (unittest-тесты он тоже понимает) mypy>=1.10,<2.0 # проверка аннотаций типов # Перед демонстрацией преподаватель проверяет доступность инструментов: # py -m ruff --version # py -m pytest --version # py -X utf8 -m bandit --version # py -m pip_audit --version # py -m mypy --version