Il processo di Testing ha lo scopo di identificare la correttezza, la completezza, la sicurezza e la qualità del prodotto sviluppato.
Per fare questo occorrerebbe analizzare il comportamento di un programma per ogni possibile valore assunto dai parametri di input. Non potendo farlo fisicamente, ciò che si cerca di avere un software di qualità misurabile facendo dei test limitati.
Testing e Debugging sono due concetti spesso confusi l'uno con l'altro, hanno significato diverso.
Lo scopo del testing è quello di mettere in evidenza se un programma ha dei difetti (bug). Lo scopo del debugging è quello di determinare la causa di un eventuale difetto e correggerlo. Di fatto il debugging segue il testing.
Attività di testing è basata su un certo numero di principi:
- il testing mostra la presenza di difetti
- effettuare un test esaustivo è impossibile
- iniziare i test il prima possibile
- il testing dipende dal contesto
- i difetti dovrebbero essere la minoranza
- il testing deve essere fatto da persone con gli skill adeguati
- il testing deve essere fatto da persone indipendenti
- il fatto che esista un processo di testing non esime gli sviluppatori dal consegnare software di buona qualità e pre-testato
- legge di Pareto: il 20% dei moduli contiene l'80% dei difetti. Il motivo è il fatto che, spesso, un difetto ne produce altri.
Conduzione dei test:
- disegno dei test
- preparazione dei test
- conduzione dei test
- valutazione dei risultati
Disegno dei test
- suddivisione per ambito
- unit testing: si testono solo gli algoritmi e quindi le singole unità di codice cioè le singole funzioni (es: black box, white box)
- integration testing: l'oggetto di controllo sono le interfacce, vengono usati gli stubs, componenti fittizzi che forniscono elementi vuoti senza la parte di implementazione, come le calssi astratte o le interfacce in Java.
- system testing: le prestazioni, sicurezza e l'affidabilità
- suddivisione per scopo
- test di correttezza
- test di performance
- test di sicurezza
- test di affidabilità
- test di conformità
Una cosa interessante da sapere è che la modalità black box si differenzia dalla white box perchè, nel caso del black box,si vanno a testare le interfacce, le strutture dei dati, quindi analisi dei casi limite, test di sintassi di input e test casuali. Nel caso dei white box si va ad analizzare il codice vero e proprio, quindi la logica.
Regression testing
Consiste nel verificare l'assenza di difetti su codice già controllato in precedenza, dopo l'inserimento di nuove versioni di software, patches, upgrade e altro. E' una fase di test tipica in metodologie di sviluppo cicliche.
System testing
Viene condotto su un sistema integrato e finale, seguendo la metodologia black-box. Questa fase di test dovrebbe poter mostrare eventuali incosistenze del software nella sua interezza oppure quando viene calato su un determinato hardware, o comunque quando viene installato in un determinato ambiente nel suo complesso.
Di questa categoria fanno parte test come test di carico e di performance, test di usabilità legati ai tempi di risposta del sistema, test di sicurezza e altri ancora.