Domanda

Cos'è l'analisi dinamica del codice?

In cosa è diverso da Analisi del codice statico (ovvero, cosa può catturare che non può essere catturato in modalità statica)?

Ho sentito parlare di controllo dei limiti e di analisi della memoria: cosa sono questi?

Quali altri elementi vengono controllati utilizzando l'analisi dinamica?

-Adamo

È stato utile?

Soluzione

In poche parole, l'analisi statica raccoglie informazioni sulla base codice sorgente e l'analisi dinamica si basa su esecuzione del sistema, spesso utilizzando la strumentazione.

Vantaggi dell'analisi dinamica

  • È in grado di rilevare dipendenze che non è possibile rilevare nell'analisi statica.Ex.:dipendenze dinamiche mediante riflessione, iniezione di dipendenze, polimorfismo.
  • Può raccogliere informazioni temporali.
  • Si occupa di dati di input reali.Durante l'analisi statica è difficile se non impossibile sapere quali file verranno passati in input, quali richieste WEB arriveranno, su quale utente cliccherà, ecc.

Svantaggi dell'analisi dinamica

  • Potrebbe avere un impatto negativo sulle prestazioni dell'applicazione.
  • Non è possibile garantire la copertura completa del codice sorgente, poiché le sue esecuzioni si basano sull'interazione dell'utente o su test automatici.

Risorse

Esistono molti strumenti di analisi dinamica sul mercato, essendo i debugger i più noti.D'altra parte, è ancora un campo di ricerca accademica.Ci sono molti ricercatori che studiano come utilizzare l'analisi dinamica per una migliore comprensione dei sistemi software.C'è un workshop annuale dedicato a analisi delle dipendenze.

Altri suggerimenti

Fondamentalmente strumenti il ​​tuo codice per analizzare il tuo software mentre è in esecuzione (dinamico) anziché semplicemente analizzare il software senza eseguire (statico).Vedi anche questo Presentazione JavaOne che confronta i due. Valgrind è un esempio di strumento di analisi dinamica per C.Potresti anche utilizzare strumenti di copertura del codice come Cobertura O EMMA per l'analisi Java.

Da Wikipedia definizione di analisi dinamica del programma:

L'analisi del programma dinamico è l'analisi del software che viene eseguito con i programmi di esecuzione creati da quel software su un processore reale o virtuale (l'analisi eseguita senza programmi di esecuzione è nota come analisi del codice statico).Gli strumenti di analisi del programma dinamico possono richiedere il caricamento di librerie speciali o persino la ricompilazione del codice del programma.

Hai chiesto una buona spiegazione dei problemi di "controllo dei limiti e analisi della memoria".

Nostro Controllo di sicurezza della memoria strumento consente alla tua applicazione di controllare in fase di esecuzione gli errori di accesso alla memoria (sovraccarichi del buffer, errori degli indici degli array, puntatori errati, errori di alloc/free).Il collegamento contiene una spiegazione dettagliata completa di esempi.Questo Quindi rispondi mostra due programmi che hanno puntatori al dead stack frame e come CheckPointer rileva e segnala il punto di errore nel codice sorgente

Un esempio più breve:C (e C++) notoriamente non controllano gli accessi agli array, per vedere se l'accesso rientra nei limiti dell'array.Il vantaggio:un programma ben progettato non paga il costo di tale controllo in modalità produzione.Lo svantaggio:i programmi difettosi possono toccare elementi esterni all'array e ciò può causare comportamenti molto difficili da comprendere;quindi è difficile eseguire il debug del programma difettoso.

Ciò che fa uno strumento di strumentazione dinamica come Memory Safety Checker è associare alcuni metadati a ogni puntatore (ad esempio, il tipo di cosa a cui "punta" il puntatore e, se si tratta di un array, i limiti dell'array), quindi controllare in fase di esecuzione, qualsiasi accesso tramite puntatori agli array, indipendentemente dal fatto che il limite dell'array venga violato.Lo strumento modifica il programma originale per raccogliere i metadati nel punto in cui viene generato (ad esempio, all'ingresso negli ambiti in cui sono dichiarati gli array, o come risultato di un'operazione malloc, ecc.) e modifica il programma ad ogni riferimento all'array (scritto sia come x[y] dove x o y è un puntatore di array e il valore è un tipo di tipo integrale, allo stesso modo per *(x+y)!) per verificare l'accesso.Ora se il programma viene eseguito ed esegue un accesso fuori limite, il controllo rileva l'errore e lo segnala nel primo punto in cui potrebbe essere rilevato.[Se ci pensi, ti renderai conto che la strumentazione per la raccolta e il controllo dei metadati deve essere piuttosto intelligente, per gestire tutte le varianti che un linguaggio come il C può avere.In realtà è difficile farlo funzionare completamente).

La buona notizia è che ora tale accesso viene segnalato in anticipo dove è più facile rilevare il problema e riparare il programma.Tale strumento non è destinato all'uso produttivo;si utilizza durante lo sviluppo e il test per verificare l'assenza di errori.Se non vengono rilevati errori, si esegue una compilazione normale ed si eseguono i programmi senza controlli.

Questo è un ottimo esempio di strumento di analisi dinamica:il test avviene in fase di esecuzione.

Controllo dei limiti

Ciò significa controlli in fase di esecuzione degli accessi all'array.Contrariamente all'approccio laissez-faire del C agli accessi alla memoria e all'aritmetica dei puntatori, altri linguaggi come Java o C# effettivamente controllano se un dato array ha o meno l'elemento a cui si sta tentando di accedere.

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