gadget59.ru лекции
Тестирование ПО · Лекция 7 · 24 слайда

Формальные инспекции и верификация: как проверять код без запуска

Формальные инспекции и верификация

До этого мы тестировали программы запуская их. Но есть и другой способ найти ошибки — прочитать код и документацию глазами. Это называется статическим тестированием или инспекцией.

Сегодня мы разберём, что такое формальные инспекции, code review (обзор кода) и как они связаны с верификацией и валидацией.

🔍 Инспекции 👀 Code Review 📋 Верификация ✅ Валидация
Это седьмая лекция из цикла. Она посвящена статическим методам проверки качества. Без них невозможно представить профессиональную разработку.
Формат: лекция + практика в конце. В следующей лекции — документирование и тестирование в MSF.

План лекции

Сегодня мы разберём, как проверять код и документацию без запуска программы.

  • 1 Что такое верификация и валидация
  • 2 V-модель разработки
  • 3 Что такое инспекция
  • 4 Виды инспекций: формальные и неформальные
  • 5 Этапы формальной инспекции
  • 6 Code Review — обзор кода в команде
  • 7 Как проводить code review
  • 8 Статический анализ кода
  • 9 Инструменты статического анализа
  • 10 Типичные ошибки при инспекции
  • 11 Итоги и практика
Если вы пропустили предыдущие лекции — вернитесь. Без понимания тестирования инспекции будут непонятны.

Верификация и валидация

Эти два термина часто путают. Но у них разные задачи.

📋
Верификация
«Правильно ли мы строим систему?»

Проверка соответствия требованиям и спецификации. Отвечает на вопрос: «Мы делаем то, что запланировали?»
✅
Валидация
«Ту ли систему мы строим?»

Проверка соответствия потребностям пользователя. Отвечает на вопрос: «Мы делаем то, что нужно пользователю?»
Аналогия. Верификация — это проверить, что дом построен по чертежу. Валидация — это проверить, что в доме можно жить.
Инспекции и code review — это методы верификации. Они проверяют, что код соответствует требованиям и стандартам.

V-модель разработки

V-модель — это схема жизненного цикла разработки, которая показывает связь между этапами разработки и этапами тестирования.

Требования
Приёмочное тестирование
Архитектура
Системное тестирование
Проектирование
Интеграционное тестирование
Кодирование
Модульное тестирование
V-модель показывает: каждому этапу разработки соответствует свой этап тестирования. Чем раньше начато тестирование, тем дешевле исправлять ошибки.

Что такое инспекция

Инспекция (inspection) — это метод проверки кода или документации без запуска программы. Группа специалистов читает код и ищет ошибки, несоответствия и потенциальные проблемы.

Аналогия. Представьте, что вы написали сочинение. Вы можете отдать его другу, чтобы он прочитал и нашёл ошибки. Инспекция — это то же самое, но для кода.
СвойствоЧто значит Без запускапрограмма не выполняется Группанесколько человек проверяют Структурированностьпо чёткому плану Результатсписок замечаний
Инспекция позволяет найти ошибки, которые не видны при тестировании: неправильные комментарии, неиспользуемые переменные, нарушения стандартов кодирования.

Виды инспекций

Инспекции бывают разными — от простого «посмотреть код» до строгого формального процесса.

ВидФормальностьКто участвует Неформальнаянизкая1–2 человека Code Reviewсредняявся команда Формальнаявысокая4–6 человек по ролям
В реальных проектах чаще всего используется code review — обзор кода коллегами. Формальные инспекции — реже, обычно в критически важных системах.

Этапы формальной инспекции

Формальная инспекция — это строгий процесс с чёткими этапами. Вот как он устроен.

ЭтапЧто происходит 1. Планированиевыбирается объект инспекции, назначаются роли 2. Подготовкаинспекторы изучают код и документацию 3. Обсуждениевстреча, на которой обсуждаются замечания 4. Исправлениеавтор исправляет найденные проблемы 5. Завершениепроверка, что всё исправлено
Формальная инспекция — это «тяжёлый» процесс. Его используют, когда цена ошибки очень высока (авиация, медицина).

Code Review — обзор кода

Code Review (обзор кода) — это процесс, при котором один или несколько разработчиков читают код коллеги и оставляют замечания.

👍
Плюсы
Находит ошибки до тестирования, повышает качество кода, обучает команду.
👎
Минусы
Требует времени, может вызывать конфликты, зависит от квалификации проверяющих.
Code Review — это обязательная практика в современных командах. Код не попадает в основную ветку, пока его не проверит хотя бы один коллега.
Хороший code review — это не «поиск виноватых», а совместная работа над качеством. Цель — сделать код лучше, а не «поймать» автора на ошибке.

Как проводить code review

Хороший code review следует простым правилам.

  • Маленькие изменения. Не проверяйте сразу 1000 строк — это утомительно. Лучше 100 строк, но внимательно.
  • Понятное описание. Автор объясняет, что изменилось и зачем.
  • Фокус на важном. Логика, безопасность, читаемость. Стиль лучше доверить автоматическим инструментам.
  • Конструктивные замечания. «Здесь может быть ошибка, потому что…» вместо «Это плохо».
  • Уважение. Code review — не место для критики личности.
Цель code review — улучшить код, а не «доказать, что автор глуп». Уважительный тон и конструктивные замечания делают команду сильнее.

Статический анализ кода

Статический анализ (static analysis) — это автоматическая проверка кода без его запуска. Специальные программы (анализаторы) читают код и ищут потенциальные проблемы.

Что ищетПример Неиспользуемые переменныепеременная объявлена, но не используется Потенциальные ошибкиделение на ноль, выход за границы массива Нарушения стилянеправильные отступы, длинные строки УязвимостиSQL-инъекции, небезопасные функции
Статический анализ — это «автоматический code review». Он не заменяет человека, но находит многое, что человек может пропустить.

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

Вот несколько популярных инструментов статического анализа для Python и C++.

ЯзыкИнструментЧто проверяет Pythonpylintстиль, ошибки, сложность Pythonflake8стиль, синтаксис Pythonmypyтипы C++cppcheckошибки, утечки памяти C++clang-tidyстиль, ошибки, современный C++
# Пример запуска pylint (Python) pip install pylint pylint my_file.py # Пример запуска cppcheck (C++) cppcheck my_file.cpp
Статический анализ можно запускать автоматически при каждом коммите. Это ловит ошибки ещё до того, как код попадёт в основную ветку.

Типичные ошибки при инспекции

1. Слишком большой объём
Проверять 1000 строк за раз — утомительно и неэффективно. Лучше маленькими порциями.
2. Только поиск стиля
Забывают про логику и безопасность. Стиль — это важно, но не главное.
3. Критика личности
«Ты не умеешь программировать» — это не code review. Только конструктивные замечания.
4. Игнорирование контекста
Не понимая, зачем написан код, невозможно оценить его правильность.
5. Отсутствие обратной связи
Автор не знает, что исправить. Замечания должны быть конкретными.

Практическое задание

Примените полученные знания на практике.

Задание 1

Возьмите код функции (любой, например, из предыдущих практик) и проведите его «инспекцию»: найдите неиспользуемые переменные, неправильные комментарии, потенциальные ошибки.

Задание 2

Запустите статический анализатор (pylint для Python или cppcheck для C++) на своём коде. Изучите замечания.

Задание 3

Объясните своими словами, чем верификация отличается от валидации.

Решения разберём на практическом занятии. Не бойтесь ошибаться — инспекция это навык, который приходит с опытом.

Шпаргалка

Сохраните этот слайд — здесь все основные понятия лекции.

ТерминЧто значит Верификациясоответствие требованиям Валидациясоответствие потребностям пользователя V-модельсвязь этапов разработки и тестирования Инспекцияпроверка кода без запуска Code Reviewобзор кода коллегами Статический анализавтоматическая проверка кода

Итоги лекции

Подведём итоги. Вот что вы теперь знаете.

  • ✅ Верификация — «правильно ли мы строим?», валидация — «ту ли систему строим?».
  • ✅ V-модель показывает связь этапов разработки и тестирования.
  • ✅ Инспекция — проверка кода без запуска.
  • ✅ Code Review — обзор кода коллегами. Обязательная практика в командах.
  • ✅ Статический анализ — автоматическая проверка кода инструментами.
  • ✅ Хороший code review — конструктивный, уважительный, сфокусированный на важном.
В следующей лекции мы разберём документирование и тестирование в MSF — как оформлять документацию и какие роли есть в команде разработчиков.

Домашнее задание

Задания для самостоятельной работы. Первые два обязательны, остальные — для оценки «отлично».

  1. Проведите инспекцию своего кода из предыдущих практик. Найдите хотя бы 3 замечания.
  2. Запустите статический анализатор на своём коде. Изучите замечания и исправьте хотя бы одно.
  3. Объясните своими словами, чем code review отличается от формальной инспекции.
  4. Найдите в интернете пример «плохого» и «хорошего» code review. Сравните.
  5. Напишите список из 5 правил, которые вы будете соблюдать при code review.
Если задание кажется сложным — разбейте его на части. Сначала одно замечание, потом второе.

Что дальше?

В этом блоке по тестированию у нас осталось ещё два материала.

  • Лекция 8: документирование и тестирование в MSF.
  • Лекция 9: автоматизация тестирования и CI/CD.
Инспекции и code review — это навык, который отличает профессиональную команду от «гаражной разработки». Умение проверять код глазами ценится в любой компании.

Спасибо за внимание!

👀

Иногда лучший тест — это внимательный взгляд

Не все ошибки можно найти запуском программы. Иногда достаточно прочитать код и подумать.

🔍 Инспекции 👀 Code Review 📋 Верификация 🚀 практика