Articoli

Cos’è il Software Testing, cosa vuol dire testare il software

Il test del software è un insieme di processi volti a indagare, valutare e accertare la completezza e la qualità del software scritto per il computer. Garantisce la conformità di un prodotto software in relazione ai requisiti normativi, aziendali, tecnici, funzionali e dell’utente.

Il software testing, o test del software, è anche noto come application testing.

Il test del software è principalmente un processo ampio composto da diversi processi interconnessi. L’obiettivo principale del test del software è misurare l’integrità del software insieme alla sua completezza in termini di requisiti fondamentali. Il test del software comporta l’esame e il controllo del software attraverso diversi processi di test. Gli obiettivi di questi processi possono includere:

Verifica della completezza del software rispetto ai requisiti funzionali/aziendali
Identificazione di bug/errori tecnici e garanzia che il software sia privo di errori
Valutazione di usabilità, prestazioni, sicurezza, localizzazione, compatibilità e installazione
Il software testato deve superare tutti i test per essere considerato completo o idoneo all’uso. Alcuni dei diversi tipi di metodi di test del software includono il test della scatola bianca, il test della scatola nera e il test della scatola grigia. Inoltre, il software può essere testato nel suo complesso, in componenti/unità o all’interno di un sistema live.

Black Box Testing

Il Black Box Testing è una tecnica di test del software che si concentra sull’analisi della funzionalità del software, rispetto ai meccanismi interni del sistema. Il Black Box Testing è stato sviluppato come metodo per analizzare i requisiti del cliente, le specifiche e le strategie di progettazione di alto livello.

Un tester del Black Box Testing seleziona una serie di condizioni di input e di esecuzione del codice valide e non valide e verifica la presenza di risposte di output valide.

Il Black Box Testing è anche noto come test funzionale o test a scatola chiusa.

Un motore di ricerca è un semplice esempio di un’applicazione soggetta a black box testing. Un utente di un motore di ricerca inserisce il testo nella barra di ricerca di un browser web. Il motore di ricerca quindi individua e recupera i risultati relativi ai dati utente (output).

I vantaggi del Black Box Testing includono:

  • Semplicità: facilita il test di progetti di alto livello e applicazioni complesse
  • Conserva le risorse: i tester si concentrano sulla funzionalità del software.
  • Casi di test: concentrarsi sulla funzionalità del software per facilitare lo sviluppo rapido dei casi di test.
  • Fornisce flessibilità: non sono richieste conoscenze specifiche di programmazione.

Il Black Box Testing presenta anche alcuni svantaggi, come segue:

  • La progettazione e la manutenzione di casi di test/script possono essere problematiche perché gli strumenti di Black Box Testing dipendono da input noti.
  • L’interazione con l’interfaccia utente grafica (GUI) può danneggiare gli script di test.
  • I test riguardano solo le funzioni dell’applicazione.

White Box Testing

Durante il white-box testing, il codice viene eseguito con valori di input preselezionati per la convalida dei valori di output preselezionati. I white-box testing spesso comportano la scrittura di codice stub (pezzo di codice utilizzato per sostituire una specifica funzionalità. Uno stub può simulare il comportamento del codice esistente, come una procedura su una macchina remota.) e anche driver.

I vantaggi dei white-box testing includono:

  • Consente il riutilizzo dei casi di test e offre una maggiore stabilità
  • Facilita l’ottimizzazione del codice
  • Facilita la ricerca delle posizioni degli errori nascosti nelle prime fasi di sviluppo
  • Facilita l’efficacia dei test delle applicazioni
  • Rimuove le righe di codice non necessarie


Gli svantaggi includono:

  • Richiede un tester esperto con conoscenza della struttura interna
  • Richiede tempo
  • Costi elevati
  • La convalida del bit di codice è difficile.
  • Il white-box testing include unit test, integration test e il test di regressione.

Unit Test

Uno Unit Test è un componente del ciclo di vita dello sviluppo software (SDLC) in cui una procedura di test completa viene applicata individualmente alle parti più piccole di un programma software per l’idoneità o il funzionamento desiderato.


Un unit test è una procedura di misurazione e valutazione della qualità applicata nella maggior parte delle attività di sviluppo software aziendale. In generale, un test unitario valuta in che modo il codice software è conforme all’obiettivo generale del software/applicazione/programma e in che modo la sua idoneità influisce su altre unità più piccole. I test unitari possono essere eseguiti manualmente – da uno o più sviluppatori – o tramite una soluzione software automatizzata.

Durante il test, ogni unità è isolata dal programma o dall’interfaccia principale. I test unitari vengono in genere eseguiti dopo lo sviluppo e prima della pubblicazione, facilitando così l’integrazione e il rilevamento precoce dei problemi. La dimensione o l’ambito di un’unità varia a seconda del linguaggio di programmazione, dell’applicazione software e degli obiettivi di test.

Functional Test

Il test funzionale è un processo di test utilizzato all’interno dello sviluppo del software in cui il software viene testato per garantire che sia conforme a tutti i requisiti. E’ un modo per controllare il software per garantire che disponga di tutte le funzionalità richieste specificate nei suoi requisiti funzionali.


Il test funzionale viene utilizzato principalmente per verificare che una parte del software fornisca lo stesso output richiesto dall’utente finale o dall’azienda. In genere, i test funzionali comportano la valutazione e il confronto di ciascuna funzione software con i requisiti aziendali. Il software viene testato fornendogli alcuni input correlati in modo che l’output possa essere valutato per vedere come è conforme, correlato o varia rispetto ai suoi requisiti di base. Inoltre, i test funzionali controllano anche l’usabilità del software, ad esempio assicurandosi che le funzioni di navigazione funzionino come richiesto.

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

Test di regressione

Il test di regressione è un tipo di test del software utilizzato per determinare se i nuovi problemi sono il risultato di modifiche al software.

Prima di applicare una modifica, viene testato un programma. Dopo l’applicazione di una modifica, il programma viene nuovamente testato in aree selezionate per rilevare se la modifica ha creato nuovi bug o problemi o se la modifica effettiva ha raggiunto lo scopo previsto.


Il test di regressione è essenziale per le applicazioni software di grandi dimensioni, poiché spesso è difficile sapere se la modifica di una parte di un problema ha creato un nuovo problema per una parte diversa dell’applicazione. Ad esempio, una modifica a un modulo di prestito di un’applicazione bancaria può comportare il fallimento di un rapporto di transazione mensile. Nella maggior parte dei casi, i problemi possono sembrare non correlati, ma in realtà possono essere la causa della frustrazione tra gli sviluppatori di applicazioni.

Altre situazioni che richiedono test di regressione includono il rilevamento se determinate modifiche raggiungono un obiettivo prefissato o il test per nuovi pericoli associati a problemi che riaffiorano dopo un periodo senza problemi.

I moderni test di regressione vengono gestiti principalmente tramite strumenti di test commerciali specializzati che acquisiscono istantanee software esistenti che vengono quindi confrontate dopo aver applicato una modifica specifica. È quasi impossibile per i tester umani eseguire le stesse attività con la stessa efficienza dei tester software automatizzati. Ciò è particolarmente vero con applicazioni software grandi e complesse all’interno di vasti ambienti informatici come banche, ospedali, aziende manifatturiere e grandi rivenditori.

Stress Testing

Lo stress test si riferisce al test del software o dell’hardware per determinare se le sue prestazioni sono soddisfacenti in condizioni estreme e sfavorevoli, che possono verificarsi a seguito di traffico di rete intenso, caricamento del processo, underclocking, overclocking e richieste massime di utilizzo delle risorse.

La maggior parte dei sistemi viene sviluppata presupponendo condizioni operative normali. Pertanto, anche se viene superato un limite, gli errori sono trascurabili se il sistema viene sottoposto a stress test durante lo sviluppo.


Lo stress test viene utilizzato nei seguenti contesti:

  • Software: i test di stress enfatizzano la disponibilità e la gestione degli errori in condizioni di carichi estremamente pesanti per garantire che il software non si blocchi a causa di risorse insufficienti. Lo stress test del software si concentra sulle transazioni identificate per interrompere le transazioni, che sono fortemente stressate durante i test, anche quando un database non ha carico. Il processo di stress test carica gli utenti simultanei oltre i normali livelli di sistema per trovare l’anello più debole del sistema.
  • Hardware: i test di stress garantiscono la stabilità nei normali ambienti informatici.
  • Siti Web: i test di stress determinano i limiti di qualsiasi funzionalità del sito.
  • CPU: le modifiche come overvolting, undervolting, underlocking e overlocking vengono verificate per determinare se possono sopportare carichi pesanti eseguendo un programma ad alta intensità di CPU per testare arresti anomali o blocchi del sistema. Lo stress test della CPU è anche noto come test di tortura.

Test Automatici

Il test automatizzato (automazione del test del software) è un approccio alla verifica del codice che fa uso di strumenti software speciali che eseguono i test automaticamente e quindi confrontano i risultati dei test effettivi con i risultati previsti.

I test automatizzati svolgono un ruolo importante nella distribuzione continua (CD), nell’integrazione continua (CI), in DevOps e DevSecOps. I principali vantaggi dei test automatizzati includono:

  • I test automatizzati fanno risparmiare tempo e denaro agli sviluppatori rendendo il processo di test più efficiente.
  • I test automatizzati identificano gli errori in modo più efficiente rispetto ai test manuali.
  • Quando i test sono automatizzati, è possibile implementare più strumenti di test in parallelo.


Nello sviluppo del software, è particolarmente utile eseguire test automatizzati durante il processo di compilazione per garantire che un’applicazione non presenti errori di compilazione e svolga la funzione prevista.

Prendersi il tempo per automatizzare i test del software alla fine farà risparmiare tempo agli sviluppatori riducendo il rischio che una modifica del codice interrompa le funzionalità esistenti.


Il test è una fase molto importante nel processo di sviluppo. Garantisce che tutti i bug vengano risolti e che il prodotto, software o hardware, funzioni come previsto o il più vicino possibile alle prestazioni target. I test automatizzati, piuttosto che i test manuali, sono essenziali per fornire costantemente software conveniente che soddisfi le esigenze degli utenti in modo tempestivo con difetti minimi.

Tipi di test automatizzati utilizzati nello sviluppo del software
  • Unit test: testa un singolo programma di basso livello in un ambiente isolato prima di verificarne l’integrazione con altre unità.
  • Test di integrazione: i test unitari e altri componenti dell’applicazione vengono testati come un’entità combinata.
  • Test funzionali: verifica se un sistema software si comporta come dovrebbe.
  • Test delle prestazioni: valuta la robustezza dell’applicazione sotto carichi superiori alle attese. I test delle prestazioni spesso rivelano colli di bottiglia.
  • Test del fumo: determina se una build è sufficientemente stabile per procedere con ulteriori test.
  • Test del browser: verifica che i componenti software siano compatibili con vari browser.

I test manuali vengono ancora eseguiti in vari periodi durante lo sviluppo, ma questo viene svolto principalmente dagli sviluppatori o dagli stessi ingegneri hardware per verificare rapidamente se le modifiche apportate hanno prodotto l’effetto desiderato.

Ercole Palmeri

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.