Perché alcuni considerano l'analisi statica un test e altri no?

1

Preparandomi anche alla certificazione ISTQB, ho scoperto che chiamano l'analisi statica in realtà come un test statico, mentre un libro di ingegneria distinto tra analisi statica e test, che è l'attività dinamica. Penso che l'analisi statica non sia un test nel vero senso in quanto non prova, verifica / verifica. Ma certo mi piacerebbe sentire l'opinione dei veri esperti qui. Grazie

    
posta John V 09.11.2012 - 11:23
fonte

3 risposte

1

Per molti aspetti, la tua domanda è il corollario di una serie di discussioni recenti, su dove viene tracciata la linea.

ad es.

Semplicemente, la linea dipende da quale standard e da quale ciclo di vita stai seguendo.

Personalmente, in qualità di sostenitore di ISO / IEC 12207, ho inserito l'analisi del codice statico nel campo Verifica , poiché si tratta di un'attività di revisione, mentre l'analisi dinamica è un'attività di test, pertanto < em> Fase di convalida .

Per inciso, non avevo mai sentito SCA indicato come Test statico , quindi ho cercato su Google ... Wikipedia lo definisce, praticamente come sinonimo di SCA. Preferisco utilizzare i termini Analisi statica e limitare il test per coprire l'effettiva esecuzione.

Non sono così familiare con ISTQB, quindi non posso disegnare la linea specifica per quella certificazione per te.

    
risposta data 09.11.2012 - 11:41
fonte
6

Una delle definizioni tradizionali di test del software è l'esecuzione del programma con l'intento di trovare bug. Questa era la definizione di Glen Myers, per esempio. Abbiamo praticamente seguito quella definizione in Testing Computer Software. Vedo ancora questo - Wikipedia, ad esempio, dice "Le tecniche di test includono, ma non sono limitate a, il processo di esecuzione di un programma o un'applicazione con l'intento di trovare bug software (errori o altri difetti)."

Sotto questa definizione, l'analisi statica non può essere testata perché analizza il codice senza eseguirlo.

La definizione che attualmente utilizzo è che il test è un'indagine empirica di un prodotto o servizio software al fine di apprendere informazioni relative alla qualità. (Vedi ad esempio, i corsi BBST (i miei video del corso gratuito per BBST si trovano nel link ).

Sotto questa definizione, l'analisi statica potrebbe essere testata. Se pensate che SCA sia un'attività empirica (in altre parole, come nell'esecuzione di un esperimento), allora dovreste pensare che SCA verrebbe testato sotto la mia definizione. Al contrario, se pensate che SCA sia più simile all'analisi teorica che all'esecuzione di esperimenti, allora dovreste pensare che SCA non stia testando.

Personalmente non ho un'opinione. Uso SCA mentre scrivo codice e mi sembra che faccia parte di ciò che faccio durante la programmazione. Non ha molta voglia di provare. Ma faccio anche un sacco di test unitari e controllo la copertura del codice dei test unitari e quando lo faccio, anch'io mi sento parte di un'attività di programmazione integrata, non come un test. Principalmente, non mi interessa se le persone chiamano il test SCA (o unità di test) o meno. La domanda più importante per me è se lo fanno, e se lo fanno, se sono bravi a farlo.

Ci sono molte altre definizioni ampiamente utilizzate di test del software. Alcune persone (e alcune organizzazioni) insistono sul fatto che abbiano l'unica vera definizione. E suppongo che sia l'unico vero per loro. Ma ci sono abbastanza diverse definizioni vere che trovo più utile accettare la diversità come un fatto della vita e lavorare con le persone chiedendo loro cosa intendono quando dicono cose.

Quindi, a seconda della definizione preferita di test, SCA è o non sta testando (o è ambiguo), ma sotto la definizione preferita di qualcun altro, la risposta potrebbe essere diversa. Se stai studiando per l'esame ISTQB, la definizione pertinente è la definizione ISTQB. Non me lo ricordo, ma puoi cercarlo nei tuoi materiali di studio.

A proposito, l'analisi statica è un termine generico. Un programma che analizza il codice per verificare determinati errori di codifica specifici (o anche non conformità con uno stile di codifica specificato) sta eseguendo analisi statiche. Quindi è una persona o un programma che analizza il codice per determinare se un algoritmo è teoricamente corretto (e se l'implementazione si conforma logicamente all'algoritmo). Quest'ultimo caso è chiamato una prova di correttezza. Questa è un'istanza di analisi statica, non l'interezza di essa.

A proposito, le prove di correttezza non possono dimostrare che il programma come eseguito sarà corretto. Possono provare che alcuni tipi di errori non possono essere presenti. Tuttavia, se si analizza il codice sorgente (ad esempio codice scritto in Java), non si è analizzato ciò che viene effettivamente eseguito, poiché Java viene tradotto in un altro codice da un compilatore. Inoltre, non si sa come questo codice Java interagirà con il gestore della memoria, il driver della stampante, la visualizzazione del video, ecc. Tali interazioni potrebbero causare un errore del programma, ma l'analisi statica sarà cieca. Un'altra classe di rischio sempre più comune riguarda l'esecuzione multithread. Quello che ti sembra una sequenza lineare di comandi può essere eseguita parzialmente in parallelo. A volte, le cose vengono eseguite in un ordine di esecuzione inaspettato (la cosa sbagliata viene eseguita per prima, quindi forse una locazione di memoria ha informazioni o informazioni obsolete che non dovrebbero essere state ancora inserite). Il risultato è un fallimento, anche se non lo fosse è stato un errore su un altro computer. Infine, non ho mai visto una specifica priva di errori, quindi l'idea che una prova che un codice corrisponda perfettamente alle specifiche non mi assicura che il programma sia privo di errori.

Quindi ... l'analisi formale è utile, ma non può sostituire tutti gli altri test.

    
risposta data 24.03.2013 - 02:17
fonte
2

Sono d'accordo, non vedo l'analisi statica come test. L'analisi statica è più potente del test perché è una prova formale che un determinato pezzo di codice corrisponde alle sue specifiche. Pertanto, garantisce che un pezzo di codice faccia ciò che dovrebbe fare, per tutti gli input . In altre parole, può garantire l'assenza di errori .

Il testing, d'altra parte, viene eseguito su un numero limitato di input diversi. Pertanto, può solo indicare la presenza di errori , non la loro assenza. Questa è la più grande differenza tra analisi statica e test.

Tuttavia, l'analisi statica è molto difficile, dispendiosa in termini di tempo e fondamentalmente impossibile da eseguire per tutti i programmi a causa dell'incompletezza della logica del primo ordine.

    
risposta data 09.11.2012 - 13:50
fonte

Leggi altre domande sui tag