Domanda

Quali problemi si sperano di trovare utilizzando l'analisi del grafico delle chiamate statiche su un programma? FXCOP utilizza l'analisi del grafico delle chiamate statiche, quali problemi trova usando questa tecnica?

http://msdn.microsoft.com/library/bb429476.aspx
http://en.wikipedia.org/wiki/Callgraph

Mi scuso per la mia mancanza di conoscenza, ho trovato alcune informazioni tramite Google, ma temo che sia molto incompleto. Grazie!

È stato utile?

Soluzione 2

Questo è quello che ho trovato:

I grafici delle chiamate vengono utilizzati per rilevare questioni relative all'esecuzione del programma, alla violazione delle linee guida raccomandate e ai possibili attacchi di iniezione del codice.

Creando un grafico delle relazioni chiamate tra vari metodi, è facile vedere dove possono sorgere problemi in determinati momenti in cui alcuni metodi vengono chiamati o come vengono chiamati determinati metodi. È facile da vedere quando una procedura/funzione può violare linee guida come il sostegno della modularità del codice. È facile vedere dove il codice dannoso potrebbe essere iniettato in determinati punti a causa di quelle relazioni che chiamano e come sono strutturate. In questo modo, i grafici delle chiamate forniscono un contesto all'analisi statica, producendo risultati più accurati.

Poiché FXCOP utilizza grafici chiamati statici, è solo in grado di speculare su quanto sopra in un certo senso.

Altri suggerimenti

Di per sé il graph call è proprio questo; Non ci sono grafici di chiamata "sbagliati" (a meno che tu non abbia un controllo di stile che vieti la ricorsione).

Il vero problema è che per capire come il codice in un punto del programma potrebbe essere problematico, in genere è necessario comprendere la forma del mondo (quali strutture di dati sono in diretta, quali valori potrebbero contenere, quali relazioni potrebbero avere) a momento in cui quel punto di codice è attivo. Il grafico delle chiamate mostra come l'esecuzione può arrivare al punto di interesse del codice e tutto il codice lungo quel percorso del grafico delle chiamate imposta il contesto di esecuzione del codice. Ciò consente all'analizzatore statico di produrre un'analisi "sensibile al contesto", che fornisce risposte molto più accurate.

Questo porta a un secondo problema: come si ottiene un grafico delle chiamate accurato? Se hai una chiamata diretta di B da A, è facile da scrivere, "A chiama B" e ritieni che questo sia un fatto di call-grafo accurato. Ma se una chiamata tramite un puntatore indiretto (puoi dire una spedizione del metodo virtuale?) Improvvisamente non è così chiaro esattamente chi una chiama; Finite con A-Might-Call-B1, A-Might-Call-B2, ... che una A chiama effettivamente dipende dal contesto in cui A esegui ... oops, hai bisogno del grafico delle chiamate per la produzione il grafico delle chiamate. Il tipo di buona notizia è che costruisci il grafico delle chiamate dal basso: "So che è sicuramente vero, quindi deve essere sicuramente vero". In luoghi in cui l'analzer non può capirlo, generalmente fa un'ipotesi conservativa: ("Tutte queste chiamate potrebbero essere possibili, non posso escluderle"). Quel conservatorismo è una delle cause chiave dell'accuratezza del tuo analizzatore statico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top