Nuovo framework di test sequenziali con lo stesso rigore di xUnit?

0

Alla ricerca di libri (pubblicati o imminenti) e framework (preferibilmente gratuito / open-source) per i test sequenziali.

La mia comprensione dei test sequenziali è che è molto simile a un sistema Workflow, con i seguenti elementi:

  • Una raccolta di Setup / Esercizio / Verifica set di routine (suite) - come in xUnit
    • Facoltativamente, un set di routine può contenere anche:
      • Teardown - che segna la fine del test sequenziale, dopo il quale l'intero stato del software verrà srotolato all'inizio.
      • Annulla - che ripristina solo una singola operazione, prima del "Setup" della routine corrente impostata.
      • Se un programmatore fornisce un annullamento, il programmatore garantisce la correttezza di tale Unfo. (Le asserzioni possono essere usate, anche se è meglio non usare nessun annullamento inaffidabile.) Se il programmatore non è sicuro, non fornire un annullamento.
  • Ogni set di routine deve o fornire uno StartUp, o uno o più "passaggi precedenti" - la nuova parte per i test sequenziali
    • Un avvio di avvio reinizializza sostanzialmente l'intero stato del software in modo garantito.
    • I "passaggi precedenti" sono riferimenti ad altri set di routine.
  • A differenza dei test delle unità, i test sequenziali sono autorizzati a passare gli oggetti al passaggio successivo, in un modo attentamente controllato.

Esempio:

  • Routine A
    • Crea un "readme.txt" vuoto. (interrompi il test se già esiste; condizioni non soddisfatte.)
    • Verifica "readme.txt" esiste.
    • Funzione di annullamento: elimina "readme.txt" se esiste.
  • Routine B,
    • follows routine A
    • Apri il file "readme.txt" per scrivere (cancella il contenuto precedente)
    • *

Correlati: I test di scenari sono gruppi di test di unità sequenziali?

Carissimi, mi dispiace che la domanda sia andata perduta nel bel mezzo di un guasto imprevisto della macchina; quindi questo è stato recuperato da una precedente bozza di salvataggio automatico. Da quel crash ho esteso l'idea un po 'e mi occorreranno diversi giorni per ripulirlo e aggiornare questa domanda.

Le parole chiave sono:

  • Initial [nuovo] (inizializza l'intero mondo)
  • Setup (verifica che le pre-condizioni siano soddisfatte per l'inizio di un passaggio e crei oggetti temporanei che aiutano con questo passaggio: questi oggetti temporanei cesseranno al termine di questo passaggio. Potresti chiamare questi oggetti "locali")
  • Exercise
  • Verify (asserzioni che il passaggio ha avuto successo)
  • Undo [nuovo] Questo metodo opzionale, se fornito, indica che esiste un modo per ripristinare completamente lo stato del mondo prima di questo passaggio. Se ne viene fornito uno, il programmatore garantisce la correttezza di tale annullamento. Se non sei sicuro, non fornirne uno.
  • Final [nuovo] Avvolge il mondo intero per lo smaltimento. Dopodiché, Initial può essere chiamato di nuovo per reinizializzare un secondo nuovo mondo.
  • Follows [nuovo] Definisce in che modo i passaggi possono essere concatenati.
    • Ogni passaggio di test che non è un passo Initial deve avere una o più istruzioni Follows . Ogni istruzione può includere uno o più passaggi peer - tali passaggi devono essere eseguiti prima di poter richiamare questo passaggio.

Ora l'essenza. Una volta specificate tutte queste regole, il motore di esecuzione sequenziale del test enumera TUTTA la possibile sequenza di questi insiemi di passaggi. Enumera tutti i percorsi da Initial a Final , utilizzando qualsiasi passaggio intermedio che consente a un percorso di essere formata. Ti avviserà anche dei loop e di altri potenziali problemi e ti consentirà di scegliere come gestire questi loop.

    
posta rwong 29.07.2011 - 06:58
fonte

1 risposta

1

Non penso che tu possa ottenere il "tutto" possibile sequenziamento di un insieme di passi per casi non banali (dato che essenzialmente si finisce con un grande problema di scegliere k che è intrattabile dopo un certo numero di elementi). / p>

Tuttavia, ricordo un framework sviluppato internamente da uno dei miei precedenti datori di lavoro che utilizzava un algoritmo genetico per esercitare prima un ampio insieme di combinazioni di passaggi, quindi identifica alcune categorie di guasti (principalmente crash, ma teoricamente potrebbero identificare altri tipi di guasti con il giusto "driver"), che poi ridurrebbe ad un insieme minimo approssimativo di passi che riproducevano il fallimento in modo affidabile, utilizzando anche un algoritmo genetico. La principale complicazione in questa configurazione era che è piuttosto raro essere in grado di scrivere test che contengono singoli passaggi la cui interazione non crea un risultato atteso diverso, nel mondo reale, quindi era parte della ragione per cui il framework si concentrava principalmente sull'arresto anomalo fallimenti. Potresti certamente seguire questa strada, anche se parte del lavoro svolto potrebbe essere soggetto ad alcune protezioni sui brevetti negli Stati Uniti. Non sono stato collegato a quel progetto per circa 10 anni, ma so che alcuni brevetti sono stati richiesti, e che alcuni articoli di ricerca sono stati pubblicati sull'approccio, ma non ne so molto oltre. / p>

Se si cerca principalmente qualcosa che consenta almeno un rigoroso ordinamento dei test in un framework di test unitario, con qualche tipo di risoluzione delle dipendenze, penso che TestNg abbia fornito una tale funzionalità. I test basati sui dati forniscono una soluzione parziale ad alcuni dei tuoi altri requisiti. Inoltre, alcuni framework di test supportano un modello transazionale, che può risolvere alcune delle vostre esigenze; Ho scritto alcuni casi di test che si basavano su un meccanismo di transazione esistente nel linguaggio, sebbene questo risultasse problematico quando si trattava di più meccanismi di accesso ai dati nello stesso stack di applicazioni che non erano realmente nello stesso TransactionScope perché i processi in esecuzione la transazione era diversa.

    
risposta data 29.07.2011 - 08:52
fonte

Leggi altre domande sui tag