2015-04-14 14 views
5

Qual è la differenza tra l'analisi statica superficiale e profonda? Sto usando Xcode al momento, e ho notato che c'è un'impostazione di build che distingue tra i due.Qual è la differenza tra analisi statiche profonde e superficiali?

Sono curioso di sapere questo nel caso generale e mi sto anche chiedendo se ci sia qualche differenza nel modo in cui Clang implementa questa distinzione.

Ho provato un po 'di Google-foo e non sono riuscito a trovare una risposta. Ho provato ad esaminare i documenti Apple e Clang per vedere se lo spiegano ma non ho trovato nulla. Spero di non aver perso una pietra ovvia da ribaltare nella mia ricerca.

Xcode screenshot of the deep & shallow static analysis options

+0

L'analisi statica accurata è un problema difficile - Immagino che Deep semplicemente significhi che l'analizzatore lavora di più (il che rende l'analisi più lenta e ad alta intensità di risorse, ma ci saranno più veri positivi e/o meno falsi negativi). – HairyFotr

risposta

3

(1) Un talk da Evan Cheng di mela (compilation Tech) fornisce un'indicazione (vedi pagine 157/158):

  • superficiale - l'analisi rapida
  • profonda - più analisi approfondita

Raccomandazione: Always analyze in deep mode as part of qualifications

(2) Alcuni dettagli si possono trovare nel codice sorgente del analyzerOptions C'è la variabile 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; 

Senza guardare troppo in profondità nel codice che vedi che una differenza è la disattivazione della l'analisi inter-procedurale (durata-tempo) ...

+0

Puoi fornire altre differenze? – whoKnows