Bene, Di solito, ci sono tre tipi di test. Test unitari, test di sistema e test QA. Test unitari, come suggerisce il nome, testano piccole unità - funzioni e classi separate.
Per tutti gli ambienti di sviluppo moderni ci sono framework di test unitari. C'è Nunit per .net, così come il framework di test delle unità MS in Visual Studio, CPPUnit per C++, JUnit, ecc. Tutto per una cosa: connettersi a parti del programma, eseguire gli script predefiniti e segnalare errori.
CPPUnit, ad esempio, si basa su macro come CPPUNIT_ASSERT_EQUAL, destinate ad essere utilizzate come qualcosa di simile: CPPUNIT_ASSERT_EQUAL (sum (arr), 17). E direbbe se non è uguale, nel qual caso il test sarà considerato fallito.
Si suppone che si sviluppino i test per ogni funzione e, successivamente, non si teme di modificare e ottimizzare il codice. Generalmente si riferisce a una "ripetibilità": capacità di eseguire un'azione complessa, come il test completo di tutti i codebase, con un solo clic.
I test di unità sono necessari per ogni sviluppo di moden software, poiché l'esperienza dimostra che migliorano la velocità di sviluppo. Si suggerisce anche che il codice di test unitario possa servire come una sorta di "documentazione" per la biblioteca.
I test di sistema sono test automatici di funzionalità di livello superiore. L'idea dei test di sistema è di alimentare input puliti (come database, input dell'utente, ecc.) Per testare l'intera cosa, convalidando l'output rispetto ai resutls predefiniti.È essenziale che l'output del sistema sia deterministico e dipende solo dall'input. Ogni volta che il sistema cambia, anche i test di sistema cambiano.
TDD è una pessima idea, suggerendo che non è necessario sviluppare nulla prima di implementare i test automatici appropriati e quindi scrivere il codice per soddisfare i test. È considerato fallimento, perché i cambiamenti nel design sono inevitabili durante lo sviluppo, e un piccolo cambiamento di design di solito causa cambiamenti drastici nei test unitari.
QA manuale è il tipo di test del software finale e più importante. L'idea è di preparare un piano di test, che è stato fatto durante le fasi di progettazione e codifica, raccogliendo tutte le idee sviluppate dagli sviluppatori durante la codifica di ogni istruzione if, in che modo rendere questa particolare istruzione se eseguita lungo il percorso del codice meno previsto. Il personale addetto al controllo qualità, che deve essere in grado di eseguire tutto ciò che può essere fatto con il programma senza ambiente di sviluppo, può seguire la procedura di test risultante e le proprie idee, per trovare altri bug.
Qualcosa non è ancora chiaro. Hai detto che ogni volta che costruisco il mio codice, il test unitario deve passare? Questo significa che devo scrivere una funzione per testare la mia funzione somma, e questa funzione di test deve chiamare la mia funzione somma ogni volta che viene eseguita la mia app? – RHaguiuda
Beh sì e no :) Di solito hai due configurazioni di build di qualche tipo: 1. chiamiamola debug config. Questo è costruito con simboli di debugger completi e viene usato durante la codifica. In questa configurazione desideri veramente che il tuo test unitario funzioni ogni volta che costruisci. La seconda configurazione sarebbe una configurazione di rilascio. In questo non esegui alcun test unitario e lascia anche i simboli di debug e abilita tutte le ottimizzazioni nel compilatore. – GorillaPatch
Grazie per l'aiuto. Puoi pubblicare alcuni esempi qui per favore? (test di codice e unità). – RHaguiuda