Voglio iniziare dicendo che tutto ciò che faccio è SQL Server, quindi questi sono gli esempi che do. In generale, tuttavia, questo vale per qualsiasi forma di codice indipendentemente dal sistema.
Cominciamo abbattendo un po 'questo.
aggiornamenti
Hai un sistema e stai per aggiornarlo in tutto o in parte. Ad esempio l'aggiornamento di un'istanza da SQL Server 2012 a 2014. A questo punto il test è essenziale. Sfortunatamente testare ogni parte anche di una piccola applicazione non sarà probabilmente possibile. A quel punto farei quello che definirei un test "funzionante". Il sistema di base funziona? Esegui le tue attività comuni dall'inizio alla fine. Non testare ogni opzione, solo il percorso principale.
Quando si esegue un aggiornamento di SQL Server, è necessaria anche una lettura . Fondamentalmente vuoi leggere la Backward Compatibility
voce per la nuova versione ( qui è quella del 2014 ) e assicurarti di non avere nulla in nessuno degli elenchi (cambiamenti di rottura, cambiamenti di comportamento ecc.).
Codice applicativo
Qui stiamo esaminando il nuovo / modifica del codice dell'applicazione (perché ovviamente qualcosa di esistente è già stato testato, giusto?). In questo caso tutto dovrebbe essere testato. Dovresti avere i casi di test impostati in anticipo ed eseguire almeno la maggior parte delle funzionalità interessate. Preferibilmente a questo punto dovresti anche fare eseguire un controllo simile a qualcun altro. Questo codice sarà in atto, probabilmente per un tempo abbastanza lungo, e utilizzato da un gran numero di persone. Vuoi assicurarti che funzioni e funzioni bene.
Una delle cose che può davvero aiutare con questo è di generare un insieme unit tests
che è facilmente ripetibile. Steve Jones consiglia di utilizzare tSQLt per testare il codice TSQL (solo SQL Server, temo). In questo modo è possibile eseguire rapidamente una serie fissa di test e ciò sarà di grande aiuto nei test di regressione (testare tutto, diciamo prima di fare un aggiornamento).
Caratteristiche / Configurazioni
Anche più delle modifiche al codice dell'applicazione, si desidera testare a fondo nuove funzionalità e modifiche alla configurazione. Se ad esempio decidi di iniziare a lavorare con gli indici columnstoreper la prima volta dovrai testare ogni parte di codice che tocchi le tabelle interessate. Utilizzare i test unitari generati per testare l'applicazione. Queste funzionalità sono probabilmente nuove per te (e forse nuove nella piattaforma) e probabilmente avranno alcuni aspetti che non ti aspettavi. Per quanto riguarda le modifiche alla configurazione, stai parlando di qualcosa che può influenzare l'intero sistema, possibilmente in modo significativo. La regola empirica è testare e testare attentamente. Ci sono alcune modifiche che non vedrai fino a quando non entri in un sistema attivo (probabilmente solo il tuo sistema di produzione) ma non è una scusa per non provarle prima in un ambiente di test.
Query ad hoc che fanno riferimento / influenzano i dati dell'utente
Quando si dispone di codice che influisce sui dati dell'utente, in genere è necessario verificarlo, anche e forse soprattutto, perché lo è Ad Hoc
. Detto questo, se stai eseguendo lo stesso codice, più e più volte, solo con parametri diversi, probabilmente non dovrai preoccuparti di provare ogni volta.
Ad esempio, è necessario eliminare uno o più annunci dalla tabella degli elenchi degli annunci ogni trimestre.
DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')
A quel punto hai già testato il codice (stai solo cambiando le stringhe fisse) e probabilmente sei abbastanza sicuro semplicemente eseguendo il codice (supponendo che tu abbia dei buoni backup per ogni evenienza).
Un modo semplice per testare un DELETE
, UPDATE
o INSERT
è cambiarli in un SELECT ed eseguirli, quindi confermare che il numero e il tipo di righe previsti vengano restituiti.
Potresti pensare di non aver bisogno di testare SELECT
s perché in realtà non modificano alcun dato. Tuttavia stai eseguendo il codice per un motivo giusto? Supponiamo che tu stia facendo delle ricerche per il tuo manager, che a sua volta consegnerà questi dati al loro manager e così via. Esegui il test per assicurarti di non ottenere dati errati (o di impedire ad altri di raccogliere i loro dati).
Query ad hoc che fanno riferimento / influenzano i dati di sistema
Questa è forse l'unica eccezione alla regola "prova tutto". Stai eseguendo query di informazioni sui dati di sistema. L'importante qui è recuperare i dati previsti. Se la query è qualcosa di semplice (interrogare una vista di sistema), allora probabilmente stai bene finché hai verificato cosa significano veramente la vista / colonne. Se la query è complessa (diciamo di colpire 3 o 4 visualizzazioni di sistema con calcoli sulle colonne restituite), potresti voler eseguire alcuni test solo per assicurarti di recuperare i dati che ti aspetti.
Sommario
In sintesi, sì, vuoi testare tutto. Se è abbastanza importante per te scriverlo ed eseguirlo, allora è abbastanza importante per te testarlo. Ciò non significa che devi dedicare enormi quantità di tempo a testare ogni ramo di ogni riga di codice. Ma un certo livello di test deve essere fatto.
Il test di unità automatizzato è il tuo amico qui. Con l'avvento di DevOps
e Continuous Integration
vedrai sempre più applicazioni e metodi per testare rapidamente e facilmente il tuo codice. Ovviamente ciò richiede un buon ambiente di test e dati per andare d'accordo, ma questa è una discussione completamente diversa.