Diverse organizzazioni vedono i ruoli di tester e sviluppatori in modo diverso. In generale, un tester verifica che il sistema sia conforme alle sue specifiche e soddisfi i suoi requisiti. Uno sviluppatore crea il sistema ed esegue la manutenzione.
In genere, un tester non deve passare una scoperta a uno sviluppatore senza una descrizione riproducibile di come il comportamento del sistema differisce dalle sue aspettative. Quindi può esserci una discussione sulla base di tale descrizione, sia che questo comportamento sia un difetto o, in realtà, in base alla progettazione, sia che la progettazione abbia un senso, se debba essere mantenuta o modificata. Tuttavia, un tester si occupa solo del comportamento del sistema. Non giudicano tra giusto / comportamento sbagliato e non affrontano le cause di tale comportamento.
Se c'è una decisione per correggere il comportamento osservato, uno sviluppatore dovrà rintracciare causa di questo comportamento, ad esempio osservando il programma con un debugger o analizzando i file di log. Mentre gli sviluppatori possono usare il codice sorgente, di solito non hanno una mentalità e una formazione QA.
Tutto ciò significa che mentre non è possibile trovare bug senza uno sviluppatore, lasciare che uno sviluppatore cerchi un bug senza una buona idea di cosa cercare è probabilmente un uso non ottimale delle risorse. Idealmente, un tester dovrebbe provare a farlo. Dopotutto, il codice stesso può essere perfetto se la causa del problema era durante l'analisi dei requisiti, o se la causa è nella comprensione del dominio del problema da parte dello sviluppatore. Uno sviluppatore potrebbe essere "cieco" a tali cause.
Quindi, mentre i tester portano competenze uniche e un punto di vista prezioso, potrebbero non essere in grado di riprodurre alcun comportamento segnalato. Uno sviluppatore probabilmente ha una migliore comprensione del sistema, può vedere possibili circostanze che potrebbero nascondere il problema a un tester o può contribuire a rendere il comportamento più facilmente riproducibile. Per esempio. È improbabile che i bug di concorrenza siano riproducibili con un approccio black-box, ma spesso possono essere provocati con un sleep(1)
ben inserito nel codice. Se un tester ritiene di poter essere coinvolto in qualcosa, ma non ha le conoscenze o le capacità per perseguire con successo, dovrebbe ovviamente coinvolgere altri che lo fanno, compresi gli sviluppatori.
Per riassumere, la responsabilità di riprodurre un certo comportamento tende a dipendere dal controllo qualità. Naturalmente i tester e gli sviluppatori dovrebbero collaborare dove necessario. Una determinata organizzazione può avere politiche formali o informali su come ciò dovrebbe essere fatto, o anche usare una definizione diversa per i ruoli "tester" e "sviluppatore".