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ù specificamente, quali sono gli strumenti disponibili oggi per la revisione del codice / analisi statica di PHP? Vorrei anche conoscere buoni strumenti per la revisione del codice per qualsiasi lingua.


Una revisione del codice è generalmente un processo manuale in base al quale un altro programmatore controlla il codice. È un modo per individuare piccoli errori o deviazioni dalle convenzioni di codifica ecc. E un buon modo per migliorare la qualità complessiva del codice. L'analisi del codice statico è qualcosa per cui puoi usare uno strumento, anche se non l'ho mai fatto da solo. Interessato a vedere quali risposte hanno gli altri

9
In due parole? "Un cervello".
Salterio il

Risposte:


19

La revisione del codice è qualcosa che la gente fa, l'analisi statica è qualcosa che fanno le macchine. Esistono (a volte buoni) strumenti di analisi statica. La revisione del codice è quando un collega / mentore / professore / amico esamina 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 sulla lingua che sta analizzando (di solito dal sistema di tipi), analizza un programma e cerca di individuare cose che potrebbero essere errate, stile inefficiente, scarso o comunque non ottimale.


2
Ho sempre avuto l'impressione che la revisione del codice sia una sorta di analisi statica, dal momento che è un modo per misurare la salute del software senza eseguirlo.
Buhb,

4
@Buhb: aggiunge in modo decisivo la conoscenza del contesto. Un revisore del codice dovrebbe capire se il codice sta facendo ciò che dovrebbe fare. Uno strumento statico (nella migliore delle ipotesi, se il linguaggio lo consente tramite alcune decorazioni / asserzioni / contratti) verificherà che formalmente tutto sia ok ... Quindi potresti dirlo in altro modo: l'analisi statica è una sorta di revisione del codice, eseguita algoritmicamente.
Francesco,

Solo per aggiungere, Lint (analista statico): Amico che non è necessario !! Collega (revisore): puoi farlo anche in questo modo !!
Kushal,

11

L'analisi statica è il processo di analisi di un software senza eseguirlo. Questo è molto buono e raccomandato, ma devi tenerlo a mente

  1. diversi strumenti di analisi statica hanno una diversa comprensione del codice che stanno studiando, quindi possono segnalare (o non segnalare) problemi diversi. Uno strumento può fornire un rapporto chiaro e l'altro può lamentarsi di un milione di cose.
  2. uno strumento dinamico (per citare un esempio, pensiamo a valgrind) può trovare molti altri problemi, al prezzo di un grave onere per il consumo di risorse (tempo, utilizzo della memoria). Questo perché di solito si esegue una versione strumentata del software. Nota che, essendo strumentato in qualche modo (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 soffrono della mancanza di contesto: non sanno cosa dovrebbe raggiungere il SW.

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

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

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

Come sempre, non esiste un solo proiettile d'argento che risolverà tutti i bug ed eviterà tutti i problemi. Si applica - per quanto possibile, dato il luogo, il codice, l'ora, le tre forme di controllo (statico, dinamico, più occhi (e cervelli) effettivamente guardando 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 di falsi positivi. Se inizi da zero e miri sempre a mantenere pulito lo strumento di analisi, probabilmente eviterai molti problemi.

pps: per quanto riguarda 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 è disponibile 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 si riferisce 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, come dimostra uno sforzo della JIT come PyPy .


2

Revisione del codice è quando un'autorità senior o un'autorità 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 per computer che viene eseguita senza effettivamente eseguire programmi creati da quel software (l'analisi eseguita sull'esecuzione di programmi è nota come analisi dinamica)

L'elenco degli strumenti secondo la tecnologia è riportato nel seguente link

Elenco di strumenti per l'analisi statica

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


7
La risposta di OM è essenzialmente corretta, tranne per il fatto che ho delle chiacchiere con "Un anziano o un'autorità dedicata controlla il tuo codice ...". È vero che alcuni negozi disfunzionali conducono revisioni del codice in questo modo genitore / figlio, molti (e migliori) negozi hanno un sistema di revisione del codice peer-to-peer che non assomiglia a un insegnante che classifica un problema di compiti a casa. Dove lavoro è altrettanto comune per un junior rivedere il lavoro di un senior. L'obiettivo è avere un secondo paio di occhi che guardino tutto il codice prima che venga archiviato.
Jim In Texas,

2
@JimInTexas, lo stesso nel nostro negozio. Direi che il risultato più importante (a lungo termine) delle revisioni del codice è diffondere conoscenza, pratiche unificanti e visione architettonica / progettuale in tutto il team. A questo proposito, un junior che rivede il codice di un senior è, nella peggiore delle ipotesi, un ottimo modo per imparare le migliori pratiche locali - ma chi dice che un senior non commette mai errori e un junior non può mai individuarli?
Péter Török,

1

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

Ehi, ragazzo, questo metodo può essere scritto meglio

vs, fe

Diminuzione delle prestazioni. È inefficiente identificare una stringa vuota usando il costrutto 'wcslen (str)> 0'. Un modo più efficiente è controllare: str [0]! = '\ 0'.

Diminuzione delle prestazioni. L'espressione del tipo strlen (MyStr.c_str ()) può essere riscritta come MyStr.length ()

Diminuzione delle prestazioni. Nel caso in cui "Ordine" sia iteratore, è più efficace utilizzare il prefisso sotto forma di incremento. Sostituisci iteratore ++ con ++ iteratore.

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

Formato errato. Considera di controllare l'argomento N effettivo della funzione 'Foo'

L'espressione è stata racchiusa tra parentesi due volte: ((espressione)). Una coppia di parentesi non è necessaria o è presente un errore di stampa

Una chiamata della funzione 'memset' porterà a underflow del buffer 'dest.lfFaceName'


mi dispiace insultarti. Per quanto intendeva dire il mio commento (scomparso?): Conosci qualche motivo per cui un essere umano non può offrire gli stessi commenti che fornisci come esempi di output dall'analisi del codice statico?
sq33G

@ sq33G: No. Qualsiasi persona con forniture per ufficio (quantità praticamente infinita di carta) può simulare una macchina Turing arbitraria. Tuttavia è noioso e richiede tempo. (Forse non quello dato ma dire comportamenti indefiniti in C).
Maciej Piechotka,

Ah. Quindi la vera risposta alla domanda del PO è che le macchine di Turing non sono complete per l'uomo.
sq33G

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 fa riferimento 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'uso nel determinare la qualità del sistema in costruzione e come guida alla pianificazione dello sviluppo e della 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 potrebbe essere un codice. È inoltre possibile eseguire revisioni su progetti o altri documenti. L'idea è che le persone che hanno familiarità con il prodotto di lavoro diverso dallo sviluppatore lo guardino 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 automatica dei file di origine o di oggetto mentre "revisione" indica che sono gli umani a eseguire l'analisi.


-2

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

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


-3

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

Strumenti per la revisione del codice:

1.bondond confronta

2. la diff del software di controllo versione

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


2
1) Non deve essere prima che il codice venga impegnato - la revisione del codice viene fatta da persone e 2) Trovo la descrizione degli strumenti diff come strumenti di revisione del codice "interessanti" certamente sono strumenti usati per identificare il codice per la revisione ma se Mi è stato chiesto degli strumenti di revisione del codice che probabilmente avrei indicato quelli che aiutano a gestire il processo (ho usato Kiln e Crucible per esempio).
Murph,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.