Перейти к основному содержимому

Как устроен анализ

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

Пять шагов

  1. Подготовить вход. Получить данные конкретной сборки: исходники, Index Store компилятора и manifest с описанием выбранного мира программы.
  2. Проверить соответствие. Убедиться, что файлы, конфигурация и данные компилятора относятся к одному снимку.
  3. Извлечь факты. Найти реальные связи: вызовы, чтения и записи, значения, переходы исполнения или ресурсы — в зависимости от правила.
  4. Применить правило. Проверить необходимое сочетание фактов, полноту области и контрпримеры.
  5. Объяснить результат. Выдать диагностику с местом, доказательствами и ограничениями; перед публикацией проверить, что вход не изменился.

Почему важна полнота

Чтобы доказать «параметр нигде не читается», нужно знать все значимые места его использования. Если часть вызовов или реализаций недоступна, отсутствие найденного чтения ещё не означает отсутствие чтения вообще.

Поэтому анализ ограничен конкретным снимком и конфигурацией. Вывод для debug-сборки нельзя автоматически переносить на другую платформу или набор compilation flags.

Три результата, которые нельзя путать

РезультатЧто он означает
FindingПравило нашло проблему или возможность улучшения и объясняет основание
Нет finding при полном анализеВ поддержанной области условие не подтвердилось
Unknown / incomplete / not-runПроверка не смогла сделать вывод либо не выполнялась

Пустой список находок не равен «проект чистый». Сначала нужно посмотреть, какие проверки действительно были выполнены и с каким покрытием.

Где заканчиваются гарантии

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

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