La risposta semplice dipende dal sistema. Se stai scrivendo software embedded per un monitor cardiaco o strumenti di monitoraggio della sicurezza per un reattore nucleare, lo standard è molto più alto rispetto a quando stai scrivendo una piattaforma di blogging.
Questa è davvero una domanda per un buon tester di sistema (e io non ne sono uno) ma ci provo.
La tua misura di base sarà la copertura del test: quanta parte dell'applicazione è stata effettivamente testata (sia per test unitario che funzionalmente).
Devi valutare ogni potenziale caso d'uso (e parametri per quel caso d'uso) per la probabilità che venga effettivamente utilizzato (quindi potresti abbandonare i casi limite), complessità (le cose più semplici hanno meno probabilità di contenere errori, o meno probabilmente contenere bug difficili da trovare), costo da testare (in termini di tempo) e potenziale impatto di un difetto se scoperto in quell'area (è qui che entra in gioco il reattore nucleare e la piattaforma di blogging).
Sulla base di tale valutazione è necessario capire quali di questi verranno testati e in quanti dettagli. Una volta che hai una lista del genere, il team (incluso un product manager / project manager / rappresentante degli utenti) può consultare l'elenco e stabilire la priorità in base ai vincoli che hai.
Una tecnica utile a cui pensare è che puoi anche variare i casi d'uso che sono testati con ogni versione. Ad esempio potresti avere una lista di casi di test non critici e testarne metà con una versione e metà con la successiva (poi alternata). In questo modo aumenterai la copertura totale del test per lo sforzo (anche se a rischio di introduzione di bug di regressione).
Ciò potrebbe estendersi anche ai test della piattaforma: se supporti due back-end del database (o più browser), prova metà della app su una, l'altra metà sull'altra e poi cambia la prossima versione.
(Penso che questo si chiami come striping ma non citare me su quello.)
E poi l'ultima cosa a cui pensare non è ciò che si prova ma ciò che si risolve effettivamente quando vengono scoperti i problemi. È normale dire "correggi tutti i bug" ma la realtà è che ci sono delle pressioni temporali e non tutti i bug sono uguali. Anche in questo caso, la pulizia del bug regolare con tutte le parti interessate è la migliore strada da seguire. Ciò è particolarmente rilevante quando una correzione di bug può essere particolarmente intrusiva in quanto il lavoro aggiuntivo di test e test di regressione che genera può superare il vantaggio della correzione.