Lo sviluppo o il collaudo dell'unità è in corso?


24

Ho avuto una discussione con un responsabile dei test sul ruolo dell'unità e dei test di integrazione. Ha richiesto agli sviluppatori di segnalare ciò che hanno testato unità e integrazione e come. La mia prospettiva è che i test unitari e di integrazione facciano parte del processo di sviluppo, non del processo di test. Al di là della semantica, ciò che intendo è che i test unitari e di integrazione non dovrebbero essere inclusi nei report dei test e che i tester dei sistemi non dovrebbero preoccuparsene. Il mio ragionamento si basa su due cose.

  1. I test unitari e di integrazione sono pianificati ed eseguiti sempre contro un'interfaccia e un contratto. Indipendentemente dal fatto che si utilizzino contratti formalizzati, si verifica comunque cosa, ad esempio, si suppone debba fare un metodo, ovvero un contratto.

    Nel test di integrazione si verifica l'interfaccia tra due moduli distinti. L'interfaccia e il contratto determinano il superamento del test. Ma testerai sempre una parte limitata dell'intero sistema. D'altra parte, i test dei sistemi sono pianificati ed eseguiti in base alle specifiche del sistema. Le specifiche determinano il superamento del test.

  2. Non vedo alcun valore nel comunicare l'ampiezza e la profondità dell'unità e i test di integrazione al tester (sistemi). Supponiamo che io scriva un rapporto che elenca il tipo di test unitari eseguiti su una particolare classe di livello aziendale. Cosa dovrebbe toglierlo?

    Giudicare ciò che dovrebbe e non dovrebbe essere testato da ciò è una falsa conclusione perché il sistema potrebbe non funzionare nel modo richiesto dalle specifiche anche se tutti i test di unità e integrazione vengono superati.

Potrebbe sembrare una discussione accademica inutile, ma se lavori in un ambiente strettamente formale come me, in realtà è importante per determinare come facciamo le cose. Ad ogni modo, sbaglio totalmente?


9
Importa?
yannis,

5
@YannisRizos Dal titolo, n. Dall'intera domanda, sembra certo così per la persona che chiede
Ludwig Magnusson,

2
@Rubio Dalla tua domanda concordo sul fatto che i rapporti sui test unitari sono inutili per il tester di sistema. I test unitari sono uno strumento utile per lo sviluppatore. In che modo il responsabile dei test motiva la necessità di questi rapporti?
Ludwig Magnusson,

2
@LudwigMagnusson Vero, tuttavia, se è importante solo per la persona che lo chiede, è troppo localizzato.
yannis,

5
gli sviluppatori che riportano al responsabile del testing sono sbagliati, qualunque cosa accada. Se avesse passato quella richiesta tramite il tuo ( responsabile dello sviluppo ), avresti dovuto fare solo quello che ti ha detto il tuo capo. "Parla con il mio manager" è l'arma di cui hai bisogno per sapere come usarla in "ambiente strettamente formale" come il tuo
moscerino

Risposte:


30

Scrivere test automatizzati è compito dello sviluppatore; i test fanno parte della base di codice e dovrebbero essere trattati come tali - dovrebbero essere soggetti alle stesse revisioni del codice, standard di codifica, disciplina di controllo del codice sorgente, ecc., come il resto del progetto.

L'esecuzione di tali test viene eseguita per due motivi: primo, come strumento per guidare gli sviluppatori. Esegui test per verificare che il codice che hai appena scritto faccia come dovrebbe, li usi come documentazione aggiuntiva e per verificare che le modifiche non compromettano alcuna funzionalità esistente. Se fai TDD reale, i test sono anche fonte autorevole di specifiche tecniche. Il secondo motivo per utilizzare i test è durante il QA e la distribuzione. L'esecuzione di tutti i test automatici dovrebbe essere uno dei primi passi in ogni ciclo di test; l'esecuzione di test automatizzati è economica (praticamente nessuna manodopera richiesta) e non ha molto senso sottoporsi a test manuali se quelli automatizzati falliscono.

Ciò significa che le responsabilità dovrebbero essere così:

  • Gli sviluppatori scrivono test automatizzati
  • Gli sviluppatori eseguono test automatici individuali secondo necessità, come parte del loro flusso di lavoro di sviluppo
  • Il QA esegue tutti i test automatizzati come una delle prime fasi del test

Se si dispone di un server di compilazione, l'attività di controllo qualità (relativa ai test automatici) si riduce a "aprire il report del server di build e verificare che tutto sia verde".


Post eccellente, esattamente sulla falsariga che stavo per pubblicare. Solo qualm si basa troppo sui test unitari e sui test di integrazione può portare a problemi lungo la strada. Non sono d'accordo con il fatto che l'attività di QA si riduce a controllare il server di compilazione (presumo che tu intenda qualcosa come Hudson). Questo sta caricando tutti gli oneri di test per gli sviluppatori di scrivere test che coprano TUTTA la logica aziendale, tutto il tempo, che sembra dare troppo peso agli sviluppatori.
dardo,

4
@dardo: Naturalmente i test automatici non sono gli unici test che dovresti eseguire, altrimenti potresti semplicemente sbarazzarti del QA. Sarebbe ridicolo: molti aspetti cruciali di qualsiasi prodotto software non possono essere testati automaticamente. Quello che voglio dire è che data l'esistenza di test automatizzati, il QA non dovrebbe preoccuparsi di loro oltre a controllare l'output del server di build; dopo di che, fanno la loro cosa normale: test manuali e semi-automatizzati sulla build completata.
tdammers,

Ah sì, d'accordo al 100% In un certo senso come un checkpoint, ci sono, passano, ecc.
Dardo,

@tdammers - I test sono solo una piccola parte dell'assicurazione della qualità.
Matthew Flynn,

2
Ottima risposta, tuttavia non concordo sul fatto che i test debbano essere visti come an authoritative source of technical specifications. I test dovrebbero essere una conferma delle specifiche, ma certamente non una sostituzione. Questo non vuol dire che sto sostenendo una specifica anticipata, ma piuttosto che sto facendo la distinzione che applichiamo i test per convalidare le cose che sappiamo sul modo in cui un sistema dovrebbe comportarsi, piuttosto che avere il i test definiscono il comportamento. Una distinzione pedante forse, ma comunque importante.
S.Robins,

10

Penso che la cosa più importante per te sarebbe chiarire perché ha bisogno di quel rapporto.

Possono esserci spiegazioni diverse (come suggerito da diverse risposte), che richiedono strategie molto diverse.

  • se è una persona ragionevole, vuole semplicemente ottenere informazioni per aiutare il lavoro del suo team di test, ha senso arrivare a una comprensione comune e trovare una soluzione che sia adatta a entrambi. Puoi discutere con lei della natura dei test unitari e della differenza fondamentale tra test unitari / funzionali / di sistema / di collaudo. Spero che tu possa farle capire che funzionano a livelli molto diversi e nessuno dei due può sostituire l'altro.
  • se è una maniaca del controllo o un burocrate, che richiede un rapporto solo per il gusto di farlo, puoi generare qualcosa per soddisfare i suoi capricci con il minimo sforzo (ad es. cosa suggerito da @Doc :-).
  • se è in qualche gioco di potere, potresti chiederti se ha il diritto di richiedere report dagli sviluppatori. Nella mia esperienza, gli sviluppatori di solito non dovrebbero riferire al dipartimento di controllo qualità.

Punti buoni. Sembra una persona ragionevole. La mia paura, che non ho chiarito molto, è che i test unitari conducono i tester nella direzione sbagliata e nella falsa sicurezza in ciò di cui hanno bisogno e che non hanno bisogno di testare.
Rubio,

2
@Rubio, in effetti, dovresti chiarirle che i test unitari non possono sostituire i test di sistema. In effetti, un'elevata copertura dei test unitari di un modulo specifico può anche essere un segnale di avvertimento che quel modulo necessita di ulteriore attenzione durante i test di sistema! Se gli sviluppatori si sono presi la briga di scrivere molti test, il codice potrebbe essere stato drasticamente modificato / ampliato di recente e / o è pieno di bug.
Péter Török,

7

Penso che il ruolo del QA e dello sviluppo e l'interazione possano variare molto tra le organizzazioni. Ma in generale, nel mio team, dico ai membri che si uniscono di far finta che non ci sia un team di controllo qualità, nel senso che sono responsabili dei cambiamenti che stanno spingendo nella produzione. A sua volta, il nostro team addetto al controllo qualità non si assume molto dai test degli sviluppatori e svolge una buona dose di test del sistema nel suo insieme funzionale.

Per questo motivo, il nostro team addetto al controllo qualità non si preoccupa molto di ciò che è e non è testato prima di iniziare i test.

Penso che sia utile per il team QA capire cosa fanno i test unitari e non li coprono, ad alto livello, in modo che possiamo lavorare collettivamente per identificare lacune e aree che potrebbero aver bisogno di più rigore. Quindi, forse il tuo collega sta cercando un riepilogo di alto livello, al contrario dei dettagli cruenti.


5

Ha insistito sul fatto che gli sviluppatori segnalino cosa hanno testato l'unità e l'integrazione e come.

Sta davvero cercando di discutere se questo tipo di test è effettivamente nel regno dello "sviluppo", o sta solo cercando di capire quanto bene il tuo codice è coperto dai test unitari? Solo guardando le informazioni che hai dato, sembra che voglia solo sapere quali parti del codice sono coperte e dove dovrebbe concentrare gli sforzi della sua squadra.

Ho lavorato in un team di test appena fuori dalla scuola prima di passare a un ruolo di sviluppo e posso vedere come questo potrebbe essere prezioso per lei e il suo team.


1
Ma il focus non dovrebbe provenire dalle specifiche? Ci sono situazioni in cui le modifiche al codice hanno ripercussioni inaspettate e quindi è molto importante per lo sviluppatore comunicare che i test dovrebbero coprire anche questo e questo.
Rubio,

1
@Rubio: Certo, ma da un punto di vista puramente pratico, prova a guardarlo dal suo punto di vista. Supponendo che tutte le parti dell'applicazione non avranno quantità perfettamente uguali di codice coperto dai test unitari, non vorresti dedicare più risorse limitate alle parti dell'applicazione con meno copertura? Per me, è semplicemente una questione di guardare il rapporto e dire al mio team: "Ehi ragazzi, sembra che l'Area X abbia meno codice coperto dai test dell'Area Y, proviamo a concentrarci sull'esecuzione dei test sull'Area X"
Jason

@Rubio: sì, ma se stai facendo TDD (cioè BDD) correttamente, i tuoi test dovrebbero essere in primo luogo contro le specifiche. Se la tua azienda è stata davvero illuminata, il team di test potrebbe scrivere i test per il team di sviluppo.
gbjbaanb,

2
Cosa viene testato: rapporto sulla copertura del codice generato automaticamente. Come viene testato: leggi il codice di test dell'unità. @gbjbaanb: "il team di test potrebbe scrivere i test per il team di sviluppo". Ci sono così tante cose sbagliate in quell'affermazione, che non so da dove cominciare, se non per dire, Very Bad Idea .
BryanH,

5

Non vedo che importa troppo.

Se non li fornisci a QA / Testing e non eseguono test adeguati e non riescono in produzione, è colpa loro se lasciano passare il QA in produzione senza verificare che funzioni come specificato.

Se li fornisci al QA / Test e non eseguono test adeguati ... stesso risultato come se non li avessi forniti.

Tuttavia, se li fornisci, potrebbero confrontarli anche con le specifiche e / o suggerire quali test potrebbero essere imperfetti o che devono essere modificati perché hanno trovato un bug.

Davvero, non vedo molti svantaggi nel fornire loro. È ancora in fase di controllo qualità / test per convalidare rispetto alle specifiche. Se prendono la strada pigra e fanno semplicemente affidamento sul fatto che i test sono abbastanza buoni perché tutti hanno superato, sono loro che hanno fallito nel loro lavoro. Fintanto che hanno ancora le specifiche, i risultati dei test unitari / di integrazione sono solo fluff e non dovrebbero essere in grado di ferirti in un modo o nell'altro. Questo è il motivo per cui abbiamo dev e QA. Più controlli che l'app esegue come specificato.

Gli sviluppatori commettono errori, il QA commette errori, idealmente entrambi non commettono errori sullo stesso oggetto ... e se lo fanno ... è potenzialmente un analista che ha lasciato cadere la palla scrivendo una specifica poco chiara.


2
L'aspetto negativo per me è il lavoro extra che fornisce alcun valore o poco.
Rubio,

@Rubio, che lavoro extra? Stampa il risultato. Se hanno un buon nome, dice loro cosa stai testando. Non dovrebbe essere necessario il codice o la descrizione effettivi di come funziona il metodo. Se lo fanno, possono cercarlo da soli.
CaffGeek,

1
Generare un rapporto sui 3500 test unitari / di integrazione superati probabilmente sarebbe di scarso aiuto per i tester, anche se i test fossero ben denominati (cosa che dovrebbero essere ma che non lo sono). Al fine di fornire ai tester informazioni significative sul test unitario, lo sviluppatore dovrebbe scavare attraverso il test unitario associato a una particolare funzione e in qualche modo comunicare al tester cosa viene effettivamente testato e come viene affermato. È molto lavoro.
Rubio

1
@Rubio: l'automazione è tua amica. È possibile configurare un server di integrazione continua che invia i rapporti via e-mail ogni volta che viene effettuato un check-in (anche questo sarà di aiuto). Se il QA richiede una spiegazione di test e codice, sembra che siano andati oltre il livello di ragionevolezza e nel regno del "non riuscire a cogliere il concetto". Se non possono o non vogliono leggere il codice, sono inutili. A quel punto, una chat con il tuo manager sarebbe utile, e puoi disporla come "Il QA vuole che passi il x% del mio tempo ad aiutarli a leggere il codice, va bene?"
BryanH,

1
+1 per aver detto che non assolve il QA della loro responsabilità di testare autonomamente il software.

2

Il test unitario è responsabilità degli sviluppatori che i test possono essere utili per capire come funzionano i pezzi di codice da soli. Alcuni potrebbero vedere questo come una forma di documentazione e quindi ha un certo valore, anche se potrebbero esserci costi generali se i test unitari vengono cambiati regolarmente.

L'altro valore nel superare i test è che questo può evitare di raddoppiare i test che potrebbero essere ridondanti in termini di garanzia della funzionalità di base.

Esistono anche test di accettazione dell'utente separati da tutto ciò in quanto l'utente finale può avere una propria comprensione di come deve funzionare un sistema.


1
Il test ridondante è ciò che viene spesso utilizzato come argomento e talvolta può essere vero. Tuttavia, i test di sistema vengono sempre eseguiti sull'intero sistema, mentre i test unità / integrazione si concentrano su un'unità specifica. Vedo un pericolo qui.
Rubio,

2

Se la tua azienda ha una metodologia definita per garantire la qualità dei suoi prodotti (se sono conformi a SOX o stanno cercando di migliorare il loro livello CMMI, probabilmente lo fanno), i prodotti devono essere in grado di resistere alla verifica per dimostrare che il processo era seguito.

Spesso, il processo definito include test unitari (che è una buona cosa). Sfortunatamente, ciò significa anche che è necessario documentare i test unitari e dimostrare che sono stati eseguiti al fine di resistere all'audit. Ciò significa che è necessario un modo per riferire sui test unitari.

Guarda uno strumento come Sonar per aiutarti: segnalerà il livello di copertura del codice e i risultati delle tue prove di unità.


SOX no, CMMI sì. I nostri test di unità / integrazione fanno parte del processo di revisione del codice e questo regge il controllo. Posso ottenere un rapporto generato da un test di unità / integrazione, ma è piuttosto criptico per un tester. Anche la copertura è nel rapporto, ma ciò di per sé non significa nulla.
Rubio,

Innanzitutto, non dare ai tuoi test nomi criptici. Dai un'occhiata a dannorth.net/introducing-bdd . In secondo luogo, la copertura del codice potrebbe non dire molto sulla qualità dei test, ma almeno mostra che le unità da testare non esplodono quando viene eseguita la maggior parte del codice.
Matthew Flynn,

Buon collegamento, grazie. Ricordo di aver letto un eccellente articolo di rivista che esplorava diversi modi per nominare i test unitari ma non riesco a trovarlo ora per la morte di me. Potrebbe essere stato Visual Studio Magazine o Code Magazine.
Rubio

2

Questo dipende molto dall'azienda, ma dalla mia esperienza avendo lavorato sia come tester di sistema in un approccio tradizionale, sia come tester che lavora in un team agile in un modello di CD, sapere cosa è stato testato sull'unità e l'integrazione è estremamente utile.

La qualità è la responsabilità del team: sia gli sviluppatori, i tester che la gestione dei prodotti e lavorare insieme è il modo migliore per garantirlo.

Quindi il responsabile del test vuole sapere cosa è stato testato in unità e integrazione ed è un po 'più lavoro extra per gli sviluppatori, ma risparmia il lavoro complessivo per il progetto! Fornendo le informazioni al responsabile del test, possono concentrare i loro sforzi del team di test su ciò che è critico e importante. Come accennato in precedenza, se un'area di codice non è unitamente testata, il team può concentrare i propri sforzi lì rispetto a un'area fortemente testata: perché duplicare lo sforzo? State tutti lavorando per raggiungere lo stesso obiettivo finale di software di qualità superiore rilasciato in tempo.


1

Penserei che sarebbe utile fornire questo tipo di cose. La copertura dei test unitari dovrebbe essere qualcosa che è noto per lo sviluppo e i test in modo che possano spiegarlo.

Ovviamente, devi testare le cose fondamentali per il business, qualunque cosa accada. Devi testare duramente la funzionalità di uso comune indipendentemente dal fatto che abbia un'ottima copertura di test unitari. Non ha fatto male far loro sapere quali altri posti sono coperti dai test unitari. Il codice controlla già i casi limite in questo piccolo controllo? Questo tipo di cose è utile da sapere su tutti i lati del business.


Stavo per scrivere una risposta simile. Mentre i test unitari dovrebbero essere nel dominio dello sviluppatore del software, dare al team di test un'idea della copertura del codice può aiutare il team di test a comprendere e indirizzare aree specifiche che potrebbero richiedere una maggiore attenzione da parte dei tester. Può anche essere un modo per mantenere gli sviluppatori sul loro gioco in termini di garantire che rappresentino il maggior numero di casi limite che è conveniente per farlo. Ciò consente al team di test di convalidare non solo l'intero sistema, ma anche di rendere conto di tutto ciò che altrimenti potrebbe essere considerato costoso da testare.
S.Robins,

1

Vale la pena menzionare l'approccio discusso nel libro "How Google Tests Software": i test e il controllo di qualità sono responsabilità di tutti e gli standard sono rigorosi.

Il vero ruolo di quello che viene tradizionalmente chiamato dipartimento "Testing" è in realtà la produttività degli sviluppatori; vale a dire automazione per consentire all'organizzazione di raggiungere economicamente il livello di rigore richiesto.

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.