Что такое статическое тестирование программного обеспечения?

«Что такое статическое тестирование программного обеспечения?» — вопрос из категории Основы тестирования, который задают на 30% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статическое тестирование — это метод проверки артефактов разработки ПО (кода, требований, дизайна, документации) без выполнения программы.

Цели:

  • Раннее выявление дефектов (на этапах написания требований и кода).
  • Улучшение читаемости и поддерживаемости кода.
  • Соблюдение стандартов кодирования и архитектурных принципов.
  • Выявление потенциальных уязвимостей безопасности.

Основные техники:

  • Ревью (Reviews): Коллегиальный анализ документации, требований, кода.
  • Инспекции (Inspections): Формальный, структурированный процесс ревью с четкими ролями.
  • Статический анализ кода (Static Code Analysis): Автоматизированная проверка с помощью специальных инструментов.

Примеры инструментов статического анализа:

  • Общего назначения: SonarQube, ESLint (для JavaScript), Pylint (для Python).
  • Для безопасности: Bandit (Python), SpotBugs (Java).

Пример кода с проблемой, обнаруживаемой статически:

def process_data(user_input):
    # Статический анализатор безопасности может предупредить:
    # "Possible SQL injection vulnerability"
    query = f"SELECT * FROM users WHERE name = '{user_input}'"
    # ... выполнение запроса ...

Анализатор укажет на риск SQL-инъекции, даже не запуская код.

Преимущества:

  • Дефекты обнаруживаются на самых ранних и дешевых для исправления стадиях.
  • Помогает предотвратить, а не просто найти ошибки.
  • Способствует передаче знаний и единым стандартам в команде.

Связь с динамическим тестированием: Эти методы не заменяют, а дополняют друг друга для обеспечения высокого качества ПО.