Gli sviluppatori dovrebbero essere responsabili di test diversi dai test unitari, in caso affermativo quali sono i più comuni?


35

Attualmente sto lavorando a un progetto piuttosto ampio e ho usato JUnit ed EasyMock per eseguire in modo abbastanza esteso le funzionalità di test dell'unità. Ora sono interessato a quali altri tipi di test dovrei preoccuparmi. Come sviluppatore è mia responsabilità preoccuparmi di cose come test funzionali o di regressione? C'è un buon modo per integrarli in modo utilizzabile in strumenti come Maven / Ant / Gradle? Sono più adatti per un tester o un BA? Ci sono altri tipi utili di test che mi mancano?


2
Mentre nella pratica semplicistico, scala verso l'esterno per quanto consentito nel tuo ambiente pur rimanendo nella conversazione in pratica contro isolato, che è ciò che tipicamente esiste. Pensa alla squadra end-to-end più che alla segregazione e più al set di abilità, ogni squadra rappresenta un set di abilità variabile che dovrebbe essere sfruttato per il successo end-to-end. Il team dovrebbe essere responsabile del successo di quali test sono necessari per raggiungere. Il modo in cui vengono affrontati per quanto riguarda l'implementazione è proprio questo, un dettaglio di implementazione basato sull'insieme di competenze.
Aaron McIver il

1
La risposta a questa domanda dipenderà anche dal livello di abilità degli altri membri del team. Ad esempio, in un team in cui il QA non ha forti capacità di programmazione, gli sviluppatori potrebbero trovarsi a fare di più rispetto a un team in cui il QA può scrivere i propri cablaggi di prova.
Neontapir,

Un buon criterio è quanto siano automatizzabili i test. I programmatori sono bravi ad automatizzare le cose con il codice.
rwong,

Risposte:


44

È responsabilità dell'utente fornire un codice privo di difetti. È necessario scrivere, aiutare a scrivere o assicurarsi che i test vengano scritti o eseguiti per garantire la sicurezza del codice che si sta consegnando.

Nota: non sto dicendo che è necessario fornire un codice privo di difetti. Piuttosto, dovresti provare a scrivere il miglior codice possibile per i requisiti che ti sono stati dati. Parte della capacità di fare ciò significa che il codice dovrebbe essere testato.

Se ciò significa che sei personalmente responsabile dei test funzionali e di regressione dipende principalmente dall'organizzazione della tua azienda. Tutti i programmatori più esperti che conosco non si chiedono "è mia responsabilità scrivere test di tipo X?". Invece, si chiedono "cosa devo fare per assicurarmi che il mio codice sia correttamente testato?". La risposta potrebbe essere quella di scrivere test unitari o aggiungere test alla regressione, oppure potrebbe significare parlare con un professionista del controllo qualità e aiutarli a capire quali test devono essere scritti. In tutti i casi, tuttavia, significa che si preoccupano abbastanza del codice che stanno scrivendo per assicurarsi che sia testato correttamente.

In conclusione: dovresti essere responsabile della consegna di un codice di alta qualità. Se ciò significa che devi scrivere alcuni test funzionali o di regressione, fallo.


Sono pienamente d'accordo con la consegna del codice di alta qualità. Mi riferivo più al buon codice "sopra e oltre". Ad esempio, le modifiche considerate "libere da bug" nella tua prospettiva hanno prestazioni negative da qualche altra parte. Il miglior esempio a cui riesco a pensare è che un requisito non è verificato correttamente per il caricamento. Quindi il mio codice causa problemi di caricamento sul server anche se è "privo di bug" (ok, quindi l'argomento può essere fatto che non è che umorizzarmi). PS Penso che la tua parte di fiducia sia la chiave qui.
Jackie il

10
È responsabilità del cliente fornire codice privo di difetti. È responsabilità dello sviluppatore creare ciò che è stato richiesto . Difetti possono e fare superficie dalle esigenze scarsamente raccolti / interpretate, le questioni ambientali in un determinato schieramento, conflitti all'interno di un sistema operativo, ecc ... A meno che l'analisi delle cause viene eseguita su ogni difetto, codice privo di difetti per il business significa che si aspettano per fare ciò che l'utente si aspetta e niente di meno è un difetto. Non è realistico supporre che uno sviluppatore possa rimanere coinvolto nell'intero SDLC per aumentare semplicemente la fiducia; che non si ridimensionerà.
Aaron McIver il

2
"Il test del programma può essere un modo molto efficace per mostrare la presenza di bug, ma è irrimediabilmente inadeguato per mostrare la loro assenza." - Edsger W. Dijkstra, "The Humble Programmer" (conferenza del Premio Turing), 1972.
John R. Strohm,

1
"È tua responsabilità consegnare un codice privo di difetti." è terra fatata. È possibile fornire ciò che richiede l'ambito, ma i casi limite e le interpretazioni della logica aziendale rendono impossibile la dichiarazione. Perché pensi che ogni importante versione del software abbia rilasci e patch, ecc.? Perché siamo tutti imperfetti, inclusa la logica aziendale.
Jason Sebring,

4
Tutti coloro che stanno contestando la prima frase di questa risposta sarebbero più felici se Bryan lo avesse scritto "È il tuo obiettivo fornire codice privo di difetti"?
Carson63000,

13

Questo potrebbe aiutarti:

I quadranti di prova agili

Q1 sono scritti dagli sviluppatori.

Q2 sono automatizzati dagli sviluppatori e scritti in collaborazione con l'azienda e / o i tester.


Anche gli sviluppatori sono spesso coinvolti nei test Q4.
Neontapir,

Il file collegato non può più essere trovato.
Dušan Rychnovský,

3

Ci sono altri tipi utili di test che mi mancano?

Esistono test di accettazione per i quali consiglierei framework in stile BDD che usano il linguaggio Gherkin : JBehave (Java), Cucumber (Ruby), Behat (PHP), ecc. Questo tipo di test presenta alcuni vantaggi rispetto ai test unitari:

  • I test sono facilmente leggibili dai non sviluppatori, quindi puoi mostrarli ai clienti
  • I test descrivono chiaramente i processi aziendali senza entrare nei dettagli dell'implementazione (non intendo l'implementazione non è importante - lo è sicuramente - ma è meglio quando separi i requisiti aziendali dal codice stesso)
  • I test fanno cose che gli utenti faranno usando la tua applicazione
  • Sono più facili da scrivere (IMHO, può dipendere dal linguaggio e dalla struttura): niente beffe, meno dettagli tecnici

3

I test funzionali possono essere automatizzati proprio come i test unitari e sono molto utili per testare il modo in cui i diversi componenti del progetto lavorano insieme e in che modo il sistema riflette le regole aziendali.

Inoltre, questo test automatizzato funge da suite di test di regressione e accettazione per eventuali modifiche importanti (o minori) che è necessario apportare al software (correzione di errori, refactoring, modifica aziendale, nuove funzionalità, ecc.). Questo dà agli sviluppatori molta più fiducia per farlo.

Esistono diversi framework per questo tipo di test, stiamo usando fitnesse con risultati molto buoni. Ha un'ottima libreria per testare le pagine Web (la usiamo per testare la nostra app Web e i nostri servizi Web) e si integra molto bene con Maven e Jenkins .

Abbiamo anche fatto "test interfunzionali" tra sviluppatori, ma questo tipo di test non è "ripetibile", quindi la sua utilità è limitata ...


2

Come sviluppatore mi ritengo responsabile del test unitario di tutto il mio codice e garantisco al meglio delle mie possibilità che non presenta alcun difetto. Ecco perché abbiamo così tanti strumenti a nostra disposizione come la beffa. L'obiettivo della creazione di oggetti beffardi nei tuoi test è esattamente quello di cercare di isolare il tuo codice dal mondo "esterno" e garantire che funzioni bene e se c'è qualcosa che non va, "non è colpa tua".

Detto questo, nonostante il fatto che non sia colpa tua e che il tuo codice funzioni come dovrebbe, ciò non significa che non puoi aiutare nel resto dei test. Credo che sia anche tua responsabilità aiutare e integrare il tuo lavoro con il lavoro svolto da altri. I team di sviluppo IT dovrebbero lavorare ogni volta come una macchina ben oliata, collaborando con altri dipartimenti (come il QA) come team più grande per fornire software affidabile.

Ma questo è il lavoro di una squadra, non solo la tua.


1

Ovviamente test di integrazione ; sono più importanti e più difficili da scrivere rispetto ai test unitari. È come costruire una casa; con i test unitari assicuri solo che i mattoni sono solidi e resistono alla pressione, alla temperatura, all'umidità e ad altre condizioni. Ma non hai idea di come la casa appaia e si comporti con i mattoni messi insieme.

Il problema con progetti di grandi dimensioni, in particolare quelli Java che risiedono in un contenitore, è che i test di integrazione sono difficili. Quindi, per facilitare i test di integrazione del sistema in grandi progetti, è necessario un framework di test, realizzato appositamente per il progetto, che è compito dello sviluppatore codificarlo. Recentemente sono stati apportati grandi miglioramenti in questo settore e piattaforme come Arquillian semplificano notevolmente la scrittura di un framework di test (o addirittura lo sostituiscono).


1

Nel mondo reale sei responsabile solo quanto il tuo team / capo ti ritiene responsabile. Se vieni pagato o indentato a lavorare senza sosta per trovare ogni caso di vantaggio e saltare al capriccio dell'interpretazione del tuo capo (o peggio di marketing) degli errori di logica aziendale, allora sei responsabile di tutto.

Quindi, in altre parole, fai ciò che è richiesto dallo scopo che ti è stato dato. È un bel extra da buttare in un senso comune o vedere gli altri usare il prodotto che stai costruendo per avere un senso di casi d'uso e possibili problemi da risolvere, ma portalo al tuo team o capo prima di "aggiustare". Ciò include gli strumenti di tua scelta. Tutti i tuoi sforzi dovrebbero essere qualcosa con cui tutti sono d'accordo.

Se la tua domanda è di utile tracciamento dei bug, mi piacciono bugzilla, google docs, zendesk o basecamp in termini di sistemi di comunicazione.


1

Non penso che questo sia già stato coperto - scusate se l'ho perso.

Un problema è l'uso efficiente del tempo degli sviluppatori.

Gli sviluppatori spesso non hanno le competenze per essere bravi in ​​determinati tipi di test. In parte, questo è naturale. È lo stesso motivo per cui gli autori hanno redattori. È molto difficile vedere le carenze di qualcosa se ci sei troppo vicino. Ma riguarda anche diversi set di abilità e diverse specialità.

Stando così le cose, uno sviluppatore che spende tempo test è scarso in termini di costi: termini di beneficio. Lo sviluppatore sarebbe più produttivo facendo altre cose e un tester specializzato sarebbe più produttivo facendo i test.

Ovviamente, stanno facendo varie ipotesi che non sono necessariamente valide. In una piccola azienda, ad esempio, potrebbe non avere senso assumere persone specializzate nei test. Sebbene possa avere più senso impiegare personale di supporto aggiuntivo e fargli fare dei test, o almeno per convincere le persone a testare il codice che non hanno scritto da soli.


0

Credo che sia nostra responsabilità (anche uno sviluppatore) comprendere tutti i possibili scenari di test prima che venga rilasciato per il QA. Lo scopo del QA è convalidare il software. Inoltre, martellare il tuo codice per gli errori ti farà sempre apparire bene nel momento del QA.


Penso che quello che sto cercando di ottenere sia quello che è considerato un efficace "martellamento".
Jackie il

Questo è decisamente soggettivo. Direi qualsiasi tipo di test che si applica al tuo progetto (non tutti i tipi di test si applicano a tutti i progetti, ovviamente). Ecco un elenco decente: softwaretestinghelp.com/types-of-software-testing . Ciò che fai tu stesso e ciò che scegli di rinunciare ovviamente dipende dal tuo tempo, risorse e abilità. Ad esempio, potresti non essere in grado di eseguire il test di accettazione perché ci sono alcune regole che solo un utente sapeva di seguire. In breve, fai tutto il possibile nel tempo che hai.
Honus Wagner,

Per i miei progetti che sono principalmente web, in genere cerco di includere unità, funzionalità, usabilità, regressione, prestazioni, qualunque cosa accada. Se ho tempo, scelgo White Box, Stress, Compatibilità e persino Accettazione se ne so abbastanza. Il mio stile generale di programmazione è estremamente orientato alle prestazioni, quindi abbasso la mia priorità su questo. Niente di tutto questo significa che il QA non troverà qualcosa di sbagliato in nessuno di questi tipi di test, significa solo che ne troveranno meno e renderanno molto più facile il secondo round.
Honus Wagner,

0

Chi meglio di uno sviluppatore può sapere quali casi di test sono i più rilevanti. Lo sviluppatore dovrebbe essere responsabile dell'esecuzione di tutti i test unitari, ove possibile lo sviluppatore dovrebbe aiutare a scrivere ed eseguire gli script di test. Dato che ciò raramente è possibile in progetti di grandi dimensioni, lo sviluppatore dovrebbe dedicare del tempo a rivedere tutti i casi di test. Inoltre, lo sviluppatore dovrebbe avere conoscenze e utilizzare la vasta gamma di strumenti di test automatizzati disponibili.

Nella mia carriera di sviluppo trovo che i progetti finiscano con risultati migliori se c'è una stretta integrazione tra i team di sviluppo e i team di test.

almeno un membro di ciascuna squadra dovrebbe partecipare anche alle altre riunioni di pianificazione e attuazione.


1
L'unico problema che ho con questo è che dovrebbe esserci un certo grado di isolamento tra gli sviluppatori e il team di test, altrimenti il ​​team di test viene contaminato con l'opinione dello sviluppatore "il codice funziona". QA e sviluppatori hanno obiettivi opposti; lo sviluppatore sta cercando di farlo funzionare, mentre il team addetto al controllo qualità sta cercando di farlo fallire e lo sviluppatore non ha sempre la migliore prospettiva sulla pertinenza del test.
Robert Harvey,

Non sono d'accordo al cento per cento, ma ultimamente sono stato coinvolto in applicazioni mobili e penso che richiedano un livello di integrazione leggermente superiore a quello tradizionale. Nota che uso il termine integrazione. può esserci isolamento, ma entrambi i team dovrebbero rivedere e contribuire ai casi di test. È improbabile che gli sviluppatori abbiano accesso a tutte le risorse di test necessarie per eseguire test adeguati, è anche improbabile che i tester abbiano le conoscenze per sviluppare casi di test per qualcosa di avanzato come lo streaming di video su reti cellulari. troppo isolamento = problema.
Michelle Cannon,

inoltre, più il mercato è verticale e più specializzato è necessaria una maggiore integrazione tra i team. in realtà tutti dovrebbero andare nella fase di test con l'idea che il codice funzioni in alcune condizioni testate ma è probabilmente più imperfetto quindi no
Michelle Cannon

Questo sembra funzionare, il team di test produce un documento del caso d'uso utilizzando le specifiche funzionali. Le revisioni dei team di sviluppo utilizzano i documenti dei casi basati su specifiche tecniche e funzionali e aggiungono i casi secondo necessità. Il team di test sviluppa scenari di test da casi d'uso. Test di sviluppo rivedere casi di test. Richiede tempo, ma è meglio quindi testarlo successivamente in fase di distribuzione o produzione.
Michelle Cannon,
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.