Qual è la differenza tra l'analisi del codice statico e la revisione del codice?

9

Volevo solo sapere qual è la differenza tra l'analisi del codice statico e la revisione del codice. Come sono fatti ciascuno di questi due? Più in particolare, quali sono gli strumenti oggi disponibili per la revisione del codice / analisi statica di PHP? Mi piacerebbe anche conoscere i buoni strumenti per la revisione del codice per qualsiasi lingua.

    
posta Thomas Owens 26.03.2012 - 06:57
fonte

7 risposte

18

La revisione del codice è qualcosa che le persone fanno, l'analisi statica è qualcosa che le macchine fanno. Esistono (a volte buoni) strumenti di analisi statica. La revisione del codice è quando un collega / mentore / professore / amico controlla il tuo codice e ti dà critiche costruttive.

L'analisi statica è, d'altra parte, un processo automatizzato in cui una macchina, informata da ciò che sa della lingua che sta analizzando (di solito dal sistema dei tipi), analizza un programma e cerca di individuare le cose che potrebbero essere errati, inefficienti, di scarso stile o comunque non ottimali.

    
risposta data 26.03.2012 - 07:00
fonte
11

L'analisi statica è il processo di analisi di un software senza eseguirlo. Questo è molto buono e consigliato, ma devi tenere presente che

  1. diversi strumenti di analisi statica hanno diverse comprensione del codice che stanno studiando, quindi possono segnalare (o non segnalare) problemi diversi. Uno strumento può fornire un report pulito e l'altro potrebbe lamentarsi di un milione di cose.
  2. uno strumento dinamico (per citare un esempio, pensare a valgrind) può trovare molti altri problemi, al prezzo di un grave onere per il consumo delle risorse (tempo, utilizzo della memoria). Questo è così perché di solito si esegue una versione strumentata del software. Nota che, essendo in qualche modo strumentato (sostituisci il tuo malloc con un malloc di debug) non è esattamente identico al tuo software (come puoi vedere dai tempi di esecuzione)

Entrambi questi approcci risentono della mancanza di contesto: non sanno cosa dovrebbe raggiungere l'obiettivo.

La revisione del codice viene eseguita da un altro codificatore, che presumibilmente lo conosce e può controllare

  1. se il codice è corretto
  2. se il software è semanticamente corretto.

È molto più costoso e ha un grado variabile di ripetibilità, ma è di grande aiuto.

Come sempre, non c'è un singolo proiettile d'argento che risolverà tutti i bug ed eviterà tutti i problemi. L'applicazione - il più possibile data il luogo, il codice, il tempo, le tre forme di controllo (statico, dinamico, più occhi (e cervello) che effettivamente guardano il codice) è raccomandato.

ps: devo notare che di solito è molto meglio applicare gli strumenti da zero. La conversione di un sistema legacy è un'esperienza molto meno piacevole, a causa dei falsi positivi. Se inizi da zero e miri sempre a mantenere pulito lo strumento di analisi, probabilmente eviterai molti problemi.

pps: come per gli strumenti, dipende dalla lingua. Nel mondo C e C ++ puoi iniziare guardando Visual Studio stesso, che contiene uno strumento di analisi statica incorporato. Un elenco relativamente completo può essere trovato su Wikipedia.

ppps: l'analisi statica è più adatta ai linguaggi statici, come C o C ++. Per Python può essere davvero difficile dire se un nome che fa riferimento a un elenco in un punto farà riferimento a un elenco per il resto del programma, a causa delle sue proprietà dinamiche. Ciò non significa che non si possa fare nulla, in quanto uno sforzo JIT come PyPy mostra.

    
risposta data 26.03.2012 - 08:05
fonte
2

La revisione del codice è quando un'autorità senior o dedicata controlla il tuo codice, il tuo modo di codificare, gli standard seguiti nel codice e in particolare il livello logico del codice

Per quanto riguarda l'analisi statica, è l'analisi del software del computer che viene eseguita senza eseguire effettivamente programmi creati da quel software (l'analisi eseguita su programmi in esecuzione è nota come analisi dinamica)

L'elenco degli strumenti secondo la tecnologia è indicato nel link sottostante

Elenco degli strumenti per l'analisi statica

Quindi la revisione del codice e l'analisi statica sono termini completamente diversi.

    
risposta data 26.03.2012 - 07:03
fonte
1

La revisione del codice è una valutazione più qualitativa, l'analisi del codice statico è una valutazione più quantitativa.

Hey, boy, this method can be written better

vs, f.e

Decreased performance. It is inefficient to identify an empty string by using 'wcslen(str) > 0' construct. A more efficient way is to check: str[0] != '

Incorrect format. Consider checking the N actual argument of the 'Foo' function

The expression was enclosed by parentheses twice: ((expression)). One pair of parentheses is unnecessary or misprint is present

A call of the 'memset' function will lead to underflow of the buffer 'dest.lfFaceName'

'.

Decreased performance. The expression of strlen(MyStr.c_str()) kind can be rewritten as MyStr.length()

Decreased performance. In case 'Order' is iterator it's more effective to use prefix form of increment. Replace iterator++ with ++iterator.

Mentre errori reali possono (ovviamente) esistere ed essere rilevati da SCA

%bl0ck_qu0te%     
risposta data 26.03.2012 - 12:20
fonte
0

L'analisi statica è quando un artefatto viene analizzato senza essere eseguito. Sebbene possa essere applicato a qualsiasi artefatto, viene spesso applicato al codice sorgente o al codice oggetto e si riferisce all'uso di strumenti specifici per analizzare e ottenere informazioni su questi prodotti di lavoro. Questi strumenti producono report interpretati da un ingegnere per l'utilizzo nel determinare la qualità del sistema in costruzione e come guida per pianificare lo sviluppo e la manutenzione. Wikipedia ha un elenco di strumenti per l'analisi statica , organizzati per lingua e con una breve descrizione delle loro capacità.

Le recensioni sono una valutazione umana di alcuni prodotti di lavoro, che potrebbero essere codice. Le recensioni possono anche essere condotte su disegni o altri documenti. L'idea è che le persone che hanno familiarità con il prodotto di lavoro diverso da quello dello sviluppatore lo stanno guardando per trovare errori, che vanno dai problemi di sicurezza alle violazioni dello standard di codifica.

Tecnicamente, una revisione del codice può essere considerata una forma di analisi statica, poiché il codice non viene effettivamente eseguito durante la revisione. Tuttavia, nella terminologia comune, "analisi statica" si riferisce in genere all'analisi sintattica dei file di origine o di oggetto mentre "revisione" indica che gli umani sono quelli che eseguono l'analisi.

    
risposta data 26.03.2012 - 12:05
fonte
-2

La revisione del codice è una tecnica utile per annusare i problemi nel codice sorgente nella fase iniziale. Nell'ambito di questo esercizio, sono stati identificati e rettificati numerosi aspetti quali prestazioni, scalabilità e standard di codifica. Ciò migliorerà la qualità del codice.

L'analisi statica viene utilizzata per analizzare metriche sulla qualità del codice quali complessità ciclometrica, indice di manutenibilità, profondità dell'ereditarietà e accoppiamenti di classe. Vari strumenti disponibili sul mercato per analizzare le qualità del codice. Lo sviluppatore C # utilizza Microsoft Visual Studio per generare rapporti sulle metriche.

    
risposta data 19.03.2013 - 12:11
fonte
-3

L'analisi del codice statico viene eseguita dallo strumento automatico, la revisione del codice viene eseguita con le persone prima che il codice venga eseguito.

Strumenti per la revisione del codice:

1.beyond compare

2. il diff del software di controllo della versione

Questi strumenti vengono sempre utilizzati per generare la differenza tra la versione precedente e la nuova versione.

    
risposta data 26.03.2012 - 07:05
fonte

Leggi altre domande sui tag