Domanda

Ho un tester che durante il test avrà un errore di verificarsi (ok finora), ma poi spesso riporta subito. Noi (gli sviluppatori) poi scopriamo che il tester non ha cercato di riprodurre il problema e (quando richiesto) non riesce a trovare un modo per farlo accadere di nuovo.

Ora, questi sono ancora bug, non voglio ignorarli. Ma senza passi Repro Io sono di tipo bloccato. A volte c'è una traccia dello stack (anche se spesso non è utile perché si tratta di struttura compatta e non ci sono i numeri di riga). Ma quando c'è uno che può prendere la traccia dello stack e crack aprire il codice e iniziare a indovinare, ma che non porta a "correzioni" testabili.

Che cosa fate in scenari come questo?

È stato utile?

Soluzione

Un bug senza contesto non è un bug, è un colpo di fortuna. Il problema potrebbe essere il vostro codice, potrebbe essere una libreria di terze parti, potrebbe essere l'hardware, o potrebbe essere la radiazione solare provocando un singolo bit per capovolgere su di essa la propria. Se non è possibile riprodurre con almeno alcuni di regolarità (anche se solo "succede una volta ogni 10 o 20 volte che faccio X"), non è molto meglio di quanto il tester che ti dice "qualcosa da qualche parte è andato storto in qualche modo -. aggiustarlo"

Potrebbe essere necessario spiegare al tester che il suo compito non è quello di produrre solo in ingresso fino a quando qualcosa si rompe. Se lo fosse, lo si potrebbe sostituire con un generatore di numeri casuali. Parte del suo lavoro è quello di identificare i bug, il che comporta l'identificazione come produrre loro.

Altri suggerimenti

In definitiva se né lo sviluppatore né il tester può riprodurre il bug dovrebbe essere chiuso, ma contrassegnati come tali.

Tuttavia, quanto tempo ci vuole per arrivare a quel punto è discutibile.

Alcune persone sostengono che se non è immediatamente riproducibili allora dovrebbe essere immediatamente chiusa.

Io di solito sforzo per cercare di ottenere maggiori informazioni dal creatore del problema. Ci può essere qualcosa che si sono dimenticati nel report originale. Avere una conversazione sui passaggi necessari può spesso rivelare le informazioni mancanti.

Un pensiero finale - chiusi come "no-Repro" non significare fisso. Se v'è un problema reale che si rivelerà prima o poi e avere tutte le informazioni è possibile aiuterà quando si può finalmente riprodurre il problema.

un paio di suggerimenti:

  1. Add registrazione (e non solo un keylogger:}) al codice del prodotto. "No Repro" bug possono essere passere, ma può essere la memoria o lo stato di corruzione che si verifica solo in un sistema sporco utilizzato in modi imprevisti (vale a dire come un computer clienti). Registrazione o informazioni di analisi può aiutare a capire che cosa possono sono state sbagliato quando il tester ha trovato il colpo di fortuna.

  2. Eseguire la scansione il resto dei "no Repro" bug nel database (o qualsiasi altra cosa che si utilizza per bug tracking). Spesso, le passere ciuffo insieme in una zona del prodotto. Se si guarda come un componente è in colpa, la revisione del codice del componente per una possibile anomalia, aggiungere la registrazione supplementare per tale componente -. O entrambi

  3. Prendere una mezz'ora o giù di lì e guardare il test tester. Il loro approccio può dare un'idea di ciò che è andato storto (ad esempio "interessante - Non sapevo che si potesse arrivare a quel dialogo così"). Si può anche trovare che saltano un passo dialogo o la configurazione involontariamente. Vale la pena l'investimento di tempo per arrivare nella loro testa un po '.

Lo faccio QA su un grande codice commerciale, questo scenario irritante fa venire troppo spesso. Di solito è indicativo di non avere proceedures corazzate per costruire il binario su tutte le piattaforme supportati. Quindi, se lo sviluppatore costruisce il proprio codice (che deve fare per eseguire il debug e correzione), e non segue la stessa proceedure build per la lettera, c'è la possibilità che i bug di sistema dipendenti appariranno magicamente svanire (o apparire) . Naturalmente queste cose di solito vengono chiuse con "opere per me" nel database dei bug, e se non la prossima volta che il problema viene eseguito, il bug può essere riaperto. Ogni volta che ho il sospetto che un errore può essere dipendente dal sistema, cerco di testarlo su una varietà di piattaforme e la relazione a quali condizioni accade. Spesso un problema di corruzione della memoria onlt si presenta se il dato danneggiato è di grande ampiezza sufficiente a causare un crash. Alcune piattaforme (combinazioni hardware e OS) può bloccare più vicino alla fonte reale della corruzione, e questo può essere molto utile per il povero ragazzo che deve eseguire il debug di esso.

Il tester ha bisogno di fare un certo valore aggiunto, oltre la semplice segnalazione che i suoi spettacoli di sistema un fallimento. Ho passato un sacco di tempo di screening fuori i falsi positivi -Forse la piattaforma in questione era sovraccarico, o la rete ha avuto un problema tecnico. E sì a volte si può ottenere qualcosa che è veramente influenzato da eventi casuali temporizzazione, bug hardware possono spesso essere come esempio proto: Se due richieste di dati torni a esattamente lo stesso periodo di clock, e la logica di hardware per la gestione del potenziale conflitto è difettoso, allora il bug viene visualizzata solo a intermittenza. Allo stesso modo con l'elaborazione parallela, a meno che da una attenta progettazione che avete costretti la soluzione per essere indipendente da quale processore è accaduto a essere più veloce, è possibile ottenere i bug che si verificano solo una volta in una luna blu, e la loro imporbablity statistica fa il debug di un incubo.

Anche il nostro codice in fase di aggiornamento, di solito molte volte al giorno, rintracciare un numero esatto codice sorgente di revisione per quando è andato a sud può essere informazioni molto utili per lo sforzo di debug. Il tester non dovrebbe essere in un rapporto conflittuale con i debugger e gli sviluppatori, lui è lì come parte di un team per migliorare la qualità del prodotto.

Ci sono due tipi di bug che non sono riproducibili:

1) Quelli che un tester (o utente) ha visto una volta, ma non ha neanche potuto o no tentato di riprodursi.

In queste situazioni è necessario:

  • controllare Molto brevemente corso base di azioni che mostravano il difetto per garantire che non è riproducibile.

  • Speak al tester / utente per vedere se c'è qualche altra informazione che possa aiutare.

  • Croce loro riferimento con altri difetti che potrebbero essere collegati per vedere se si dispone di informazioni sufficienti per guardare al loro interno sulla base di istanze multiple. Potreste scoprire che questo problema non ti dà abbastanza informazioni per andare avanti ma quando accoppiato con una serie di altre questioni si può suggerire a voi qualcosa che non va, che vale la pena indagare.

  • Se ancora non hai abbastanza per andare avanti allora avete bisogno di spiegare all'utente / tester che non si dispone di informazioni sufficienti. Outline al loro gentilmente che cosa abbastanza informazioni sarà simile e perché ce n'è bisogno.

2) Quelli in cui non può essere attendibilmente riprodotti, tuttavia non vi sono prove sufficienti (in termini di occorrenze ripetute) a suggerire che il difetto esiste, quindi tendo a vedere che questi sono problemi di sviluppo e che lo sviluppatore - ha sostenuto dal tester / utente - necessità di indagare

.

Questa è probabile che sia lenta e dolorosa, è molto probabile intenzione di avere a percorrere il codice, aggiungere più logging, un'occhiata ai dati e parlare con i tester / utenti in profondità, ma se ci sono prove sufficienti per suggerire che è probabile che ci sia un problema che ha bisogno di assumere la proprietà di esso e fare tutto ciò che deve essere fatto per risolvere il problema.

Sembra che questo accade abbastanza di frequente - che mi fa chiedo, è perché la maggior parte dei bug sono veramente difficili da repro, o è per qualche altro motivo che lui non sta cercando? Sai perché che non è cercando di riprodurre il problema? Forse perché non si rende conto quanto è importante per te? O è forse che lui ha altre pressioni - un manager di prova che solo lui vuole ottenere attraverso le prove assegnate in modo rapido e gettare i bug oltre il muro, per esempio? O forse non è solo sicuro di come andare a questo proposito?

sarei d'accordo con gli altri che lavorano sul disboscamento meglio è una priorità. Nel frattempo, se si sospetta che la mancanza di tester di abilità / fiducia può essere un problema, quindi mi piace molto questo articolo da Danny Faught sul bug isolamento - si potrebbe puntare a lui in quel tanto per cominciare.

Se il problema risulta essere a causa della pressione gestione - avete le mie simpatie, in quanto questo è un duro di crack, soprattutto se i tester e programmatori riportano a diversi gestori ed i gestori non sono inclini a "dare una mano" un'altra squadra.

In genere faccio notare che non è riproducibile, ma lasciarlo aperto fino a quel lotto di test o di iterazione è completa.

Se non è stato riprodotto da quel punto è chiuso, ma può essere riaperto se si incontra di nuovo.

bastone un keylogger sul posto di lavoro di questo tester!

Bene, il primo compito è quello di avere un sistema di test riproducibile. Il tester deve avere un processo ben definito -. Automatico se possibile

hanno queste tre condizioni:

  • Lo stesso binario
  • Stesse passaggi
  • stessa macchina

Se il bug appare sporadicamente con quanto sopra 3 condizioni, cominciano a isolare ulteriormente. Considerare ogni livello dello stack sistema e la sua configurazione.

Un modo per rilevare gli errori di gestione della memoria è quello di eseguire il programma su più sistemi operativi con più compilatori. Valgrind può anche aiutare.

Tuttavia, in genere sistemi paralleli sono passibili di indurre i bug non repro. Cose come dimensioni del buffer e velocità di elaborazione, asynch io, blocchi di database, interleavings di scrittura in memoria variabile; tutti questi possono generare problemi. E così via e così via.

Prima di tutto, si dovrebbe avere una procedura di test rigorosi (ma capisco, nella mia azienda quello che hai descritto accade di frequente).

A seconda della gravità del bug, è possibile investire un po 'di tempo su di esso o (meglio) ignorarlo fino a quando sono previste fasi di Repro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top