В чем разница между глубоким и поверхностным статическим анализом?

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

Мне интересно это в общем случае, и мне также интересно, есть ли разница в том, как Clang реализует это различие.

Я пробовал некоторые Google-foo, и я не мог найти ответ. Я попытался просмотреть документы Apple и Clang, чтобы узнать, объясняют ли они это, но ничего не нашел. Надеюсь, я не пропустил очевидный камень, чтобы перевернуться в своих поисках.

Снимок экрана Xcode с параметрами глубокого и поверхностного статического анализа


person Sean Michael Dorian    schedule 14.04.2015    source источник
comment
Точный статический анализ - сложная проблема - я предполагаю, что Deep просто означает, что анализатор работает усерднее (что делает анализ более медленным и ресурсоемким, но будет больше истинных положительных результатов и / или меньше ложных отрицательных результатов).   -  person HairyFotr    schedule 16.04.2015


Ответы (1)


(1) разговор от Apple Эван Ченг (техник компиляции) дает указание (см. стр. 157/158):

  • мелкий - быстрый анализ
  • deep - более тщательный анализ

Рекомендация: Always analyze in deep mode as part of qualifications

(2) Дополнительные сведения можно найти в исходном коде analyzerOptions. Переменная UserModeKind:

00184   /// \brief Describes the kinds for high-level analyzer mode.
00185   enum UserModeKind {
00186     UMK_NotSet = 0,
00187     /// Perform shallow but fast analyzes.
00188     UMK_Shallow = 1,
00189     /// Perform deep analyzes.
00190     UMK_Deep = 2
00191   };
00192 
00193   /// Controls the high-level analyzer mode, which influences the default 
00194   /// settings for some of the lower-level config options (such as IPAMode).
00195   /// \sa getUserMode
00196   UserModeKind UserMode;
00197 
00198   /// Controls the mode of inter-procedural analysis.
00199   IPAKind IPAMode;

Не заглядывая слишком глубоко в код, вы видите, что одно отличие заключается в деактивации (отнимающего много времени) межпроцедурного анализа...

person Lonzak    schedule 16.04.2015
comment
Можете ли вы указать какие-либо другие различия? - person whoKnows; 10.10.2015