Ответ
Статическое тестирование — это метод проверки артефактов разработки ПО (кода, требований, дизайна, документации) без выполнения программы.
Цели:
- Раннее выявление дефектов (на этапах написания требований и кода).
- Улучшение читаемости и поддерживаемости кода.
- Соблюдение стандартов кодирования и архитектурных принципов.
- Выявление потенциальных уязвимостей безопасности.
Основные техники:
- Ревью (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-инъекции, даже не запуская код.
Преимущества:
- Дефекты обнаруживаются на самых ранних и дешевых для исправления стадиях.
- Помогает предотвратить, а не просто найти ошибки.
- Способствует передаче знаний и единым стандартам в команде.
Связь с динамическим тестированием: Эти методы не заменяют, а дополняют друг друга для обеспечения высокого качества ПО.