Ответ
Статический анализ кода — это процесс выявления дефектов, уязвимостей и "запахов кода" (code smells) без выполнения программы, путём анализа её исходного кода или байт-кода.
Как это работает в тестировании: Статический анализ выполняется на этапе написания кода или в CI/CD пайплайне, выступая как "нулевой уровень" тестирования, который находит проблемы до запуска юнит-тестов.
Категории обнаруживаемых проблем:
- Баг-паттерны: Вероятные ошибки.
// ESLint: 'eqeqeq' rule if (x == y) { } // Предупреждение: используйте строгое равенство (===) - Уязвимости безопасности:
# Bandit: 'B608' rule - возможная SQL-инъекция query = "SELECT * FROM users WHERE id = " + user_input # ОПАСНО - Нарушения стиля кода и best practices:
# Pylint: 'C0103' rule myVariable = 10 # Предупреждение: имя переменной должно быть в snake_case - Избыточная сложность: Высокая цикломатическая сложность функций.
- Дублирование кода (code clones).
Интеграция в процесс разработки:
- В редакторе кода (IDE): Мгновенные подсказки через плагины (ESLint, Pylint, SonarLint).
- В pre-commit хуках: Запуск анализаторов перед коммитом для предотвращения попадания проблем в репозиторий.
# Пример хука в .pre-commit-config.yaml - repo: local hooks: - id: pylint name: pylint entry: pylint args: [--errors-only, src/] language: system - В CI/CD пайплайне: Автоматический запуск и блокировка сборки при критических нарушениях.
# Пример шага в GitHub Actions - name: Run Static Analysis run: | npm run lint # Запуск ESLint для JS/TS sonar-scanner # Запуск SonarQube анализа
Популярные инструменты:
- Универсальные/серверные: SonarQube, Coverity.
- Для языков: ESLint/TSLint (JavaScript/TypeScript), Pylint/Flake8 (Python), Checkstyle/PMD (Java), RuboCop (Ruby).