Va mai bene non testare una funzione?


12

Esiste un punto in cui diventi così familiare con la tua lingua / database / sistema che non è necessario testare una nuova funzionalità / configurazione / query / ecc. mediante test contenuti / simulati prima di implementarlo nel sistema (in particolare per quanto riguarda una funzionalità che modifica i dati)? Oppure è sempre essenziale testare una nuova query mediante simulazione in un ambiente di prova ?

Per specificare ulteriormente, è chiaro che è sempre più sicuro testare. Tuttavia, esiste un modo per determinare quando il rischio è così minimo che i test non valgono lo sforzo? Un altro modo di formulare questo: quando o è mai pratica professionale assumere un rischio misurato per implementare una funzionalità?

Supponiamo inoltre che venga eseguito il backup di tutto, quindi, nel caso peggiore, i dati potrebbero essere ripristinati con un certo sforzo.

Qualcuno può citare un'esperienza specifica specifica per affrontare questo? Si prega di includere riferimenti ove appropriato / possibile.

Risposte:


10

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 Compatibilityvoce 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 testsche è 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, UPDATEo 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 SELECTs 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 DevOpse Continuous Integrationvedrai 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.


4

So cosa provi, ho 3 anni di lavoro con MySQL e nel mio caso collaudo sempre le query DML che possono modificare o interrompere qualsiasi informazione su ogni tabella / database / replica di slave.

È sempre il modo più sicuro per testare la query prima di eseguirla.

Non è possibile sapere se la query può mettere a rischio le informazioni dei dati. L'unico modo è conoscere la struttura e la configurazione del database, in modo da poter facilmente identificare quando una query potrebbe mettere a rischio i tuoi dati sensibili.

Su DELETE, UPDATE, INSERT, si dovrebbe sempre cercare di utilizzare SELECTin primo luogo se non siete sicuri di quali informazioni che si sta andando ad alterare. Quando si seleziona, provare sempre a utilizzare lo stesso tipo di dati per le condizioni del tipo di dati della colonna, in alcuni casi utilizzare EXPLAINper l'ottimizzazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.