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.