Come posso ridurre il tempo necessario per completare il test di regressione un'applicazione pronta per il rilascio?

7

Un'app su cui lavoro è in fase di sviluppo con una versione modificata di scrum. Se non hai familiarità con scrum, è solo un approccio alternativo a un modello di watefall più tradizionale, in cui una serie di funzioni vengono elaborate per un determinato periodo di tempo noto come uno sprint. L'app è scritta in C # e fa uso di WPF. Utilizziamo l'edizione Express di Visual C # 2010 come IDE.

Se lavoriamo a uno sprint e aggiungiamo alcune nuove funzionalità, ma non pensiamo di rilasciarlo fino al completamento di un ulteriore sprint, il test di regressione non è un problema in quanto tale. Testiamo solo le nuove funzionalità e diamo una buona occhiata all'app. Tuttavia, se è prevista una release che i nostri clienti possano scaricare, viene preso in considerazione un test completo di regressione. In passato non era un grosso problema, ci sono voluti 3 o 4 giorni e gli sviluppatori semplicemente sistemavano eventuali bug trovati nella regressione fase, ma ora che l'app sta diventando sempre più grande e include sempre più funzionalità, la regressione si estende per settimane.

Sono interessato a tutti i metodi che le persone conoscono o utilizzano che possono ridurre questo tempo. Al momento le uniche idee che ho sono di iniziare a scrivere Test unitari, che non ho mai provato completamente in un ambiente commerciale, oa ricercare la possibilità di qualsiasi API o strumenti di automazione dell'interfaccia utente che mi permettessero di scrivere un programma per eseguire una serie di test in batch. Non conosco letteralmente nulla sulle possibilità di automazione dell'interfaccia utente, quindi qualsiasi informazione sarebbe preziosa. Neanche io ne so molto del test unitario, quanto possono essere complicati i test? È possibile ottenere i test di unità per utilizzare l'interfaccia utente? Ci sono altri metodi che dovrei prendere in considerazione?

Grazie per la lettura e per qualsiasi consiglio in anticipo.

Modifica: Grazie per l'informazione. Qualcuno sa di alternative a quanto detto finora (NUnit, RhinoMocks e CodedUI)?

    
posta DrLazer 09.03.2011 - 13:17
fonte

3 risposte

4

Ovviamente se testate tutto manualmente, ci vorrà molto tempo. Soprattutto nei progetti di mischia, dove i test sono frequenti e le costanti di tempo sono brevi, è importante utilizzare test automatici.

Una buona soluzione di test è una combinazione di test unitari (che testano una piccola parte del codice, tipicamente una classe) e test di integrazione automatici (che seguono processi end-to-end e casi d'uso nell'applicazione). Alcuni test di integrazione possono essere sicuramente test dell'interfaccia utente e esistono framework per test dell'interfaccia utente che è possibile utilizzare.

È possibile passare gradualmente dai test manuali a quelli automatizzati. Inizia facendo rispettare una pratica che ogni nuovo codice scritto dal team deve avere un test unitario. Leggi su Test-Driven Development, è un approccio un po 'duro ma è un buon punto da cui partire quando si progettano le proprie best practice.

NUnit, combinato con RhinoMocks, è una soluzione eccellente sia per i test unitari che per i test di integrazione.

    
risposta data 09.03.2011 - 13:25
fonte
2

Dato che si utilizza VS 2010 - il framework MS Test è un framework di test alternativo che è possibile utilizzare. - Vedi qui per un confronto tra NUnit e MS Test link

Ecco un articolo che parla in modo specifico di come scrivere i test dell'interfaccia utente per le applicazioni WPF: link

In generale, quando si gestiscono applicazioni complesse di grandi dimensioni, i test unitari sono di solito il modo migliore per avere una copertura completa, ma anche i più costosi in termini di tempo per scrivere quando si inizia da zero. Probabilmente dovrai refactoring una gran parte del codice che non è stato scritto pensando alla capacità di test. In questi casi è spesso più veloce ed efficiente investire prima nei test di integrazione e di interfaccia utente; utilizzando la fiducia di qualità che forniscono al codice del fattore di ri-fattore per rendere più facile il test dell'unità.

L'approccio più efficiente, che ho usato su più applicazioni ora è il seguente:

  • Automatizza i test di integrazione di sistema / end-to-end che richiedono più tempo
  • Avvia l'automazione man mano che procedi: i nuovi difetti devono disporre di test automatici per la regressione; se stai modificando un codice che non ha un test intorno, scrivi alcuni
  • Non puoi automatizzare tutto: quindi esegui un'analisi costi benefici su quali casi di test desideri automatizzare e su quelli che puoi ancora eseguire manualmente.
  • Quando inizi ad automatizzare i test, considera l'integrazione dei test con un motore di Continuous Integration come Teamcity, Bamboo o Cucumber, in modo che i test vengano eseguiti ad ogni check-in riducendo lo sforzo richiesto per scoprire la causa principale dei bug e correggerli man mano che vengono introdotti .
risposta data 01.06.2012 - 10:56
fonte
1

Ho avuto successo con l'unità testando la mia applicazione con MSTest e testando il mio Javascript con QUnit e raccogliendo i risultati di quei test con un singolo test dell'unità MSTest che utilizza WatiN (mi è stato suggerito Selenium , che ha anche la capacità di registrare i test, ma ha trovato WatiN migliore per automatizzare in modo pulito) e di utilizzarli per i test di regressione.

Non sono sicuro dell'idoneità di questo approccio per WPF.

Ho usato Moq per l'isolamento (una parte importante del test delle unità), vedi questo SO question on isolation framework per ulteriori alternative.

Controlla The Art Of Unit Testing per una buona introduzione su come testare bene l'unità e una buona discussione sulle alternative. Ho anche sentito che Lavorare efficacemente con il codice legacy è utile per aggiungere test unitari al codice esistente, ma non averlo ancora letto.

    
risposta data 10.03.2011 - 12:33
fonte

Leggi altre domande sui tag