Il test è una parte necessaria della metodologia Agile?


24

Ho fatto parte di numerosi team che provano a praticare metodologie Agile e spesso questi team sono incentrati sui test. Il test è una parte necessaria della pratica della metodologia Agile o è solo una pratica XP che è stata attaccata nel corso degli anni?


76
I test sono una parte necessaria di qualsiasi sviluppo di software di qualità.
Telastyn,

2
possibile duplicato di Can be Agile senza fare TDD (test driven development)? - se non sei d'accordo fammi sapere ...
Murph,

11
Non sono d'accordo con il duplicato. I test sono più ampi di TDD e la domanda più ampia ha risposte diverse.
Bart van Ingen Schenau,

Sono d'accordo con @BartvanIngenSchenau. Non solo testare un'attività molto più ampia del semplice TDD, ma TDD e unit test non sono gli stessi. Sono sorpreso che così tante persone confondano le ultime due.
Andres F.,

Potrebbe essere stato inserito nel concetto di "Definizione del fatto", che in Agile / Scrum significa che dipende dal contesto. Quando Agile viene applicato al marketing, alle vendite, ecc., Non hanno concetti simili ai test del software, ma hanno ancora una "definizione di fatto". Per il software, la "definizione di done" dovrebbe considerare la qualità (sia visibile che interna, ad esempio la qualità del codice) del risultato finale, nonché il livello di test che è stato eseguito.
rwong,

Risposte:


33

Il test è assolutamente essenziale per l'agile, principalmente perché l'agile si basa su miglioramenti incrementali: la difficoltà è che a volte può essere difficile vedere come le attuali modifiche influenzeranno il tuo vecchio codice. Il modo migliore per essere sicuri di non aver rotto qualcosa è testarlo e sapere come testarlo. In questo modo trovi immediatamente il bug, non lungo la strada quando hai dimenticato esattamente cosa hai fatto quando stavi scrivendo il codice che ha rotto alcune vecchie funzionalità.

La ragione per cui questo è diverso dalla più tradizionale programmazione top-down del tipo di progettazione è che in quell'ambiente è a) molto difficile testare fino a quando non si ottiene il prodotto finito b) in teoria si stanno prendendo in considerazione tutti i criteri di progettazione contemporaneamente e quindi è meno probabile che tu prenda una decisione di progettazione che rompe le precedenti decisioni di progettazione.


2
È anche importante che le future modifiche incrementali non rompano la funzionalità precedente e i test unitari sono un modo semplice per verificarlo.

1
Direi che il test è assolutamente essenziale per lo sviluppo del software .
Andres F.,

@Snowman Testing! = Unit testing. Inoltre, unit test! = TDD (per ogni evenienza ...).
Andres F.,

@AndresF. vero, di solito penso che i test unitari siano parte integrante di Agile per i motivi che ho indicato sopra. Errore di lettura.

8

Probabilmente stai parlando di test automatici, unit test, test di integrazione ecc. Questi sono più importanti per l'agile dei test manuali (con tester e simili) perché sono troppo lenti, quindi non è possibile testare ogni piccola modifica che fai. Poiché l'agile si basa su piccole iterazioni rapide, è molto utile disporre di test per verificare la correttezza in secondi o minuti, anziché in ore o giorni.


8

Se non hai test, come fai a sapere se il tuo codice funziona?

Modifica: l'affermazione secondo cui i test non possono dimostrare che il codice funziona non riesce a definire un termine cruciale, vale a dire funziona . Cosa significa che un programma funziona? Se mantieni questo termine vago, non c'è modo di provare o essere sicuro che qualsiasi programma funzioni. Mai.

D'altra parte, è possibile definire le opere come "si comporta secondo una specifica". Ora non puoi solo usare i test per mostrare che il codice funziona, ma i test stessi possono fungere da specifica eseguibile del comportamento del tuo codice. In altre parole, una suite di test ben scritta definisce cosa significa lavorare .

Questo modo di pensare ti costringe anche a riesaminare il significato di un bug . Se il tuo codice supera tutti i test, non ci sono bug nel codice. Se, nonostante ciò, il sistema non si comporta come dovrebbe, allora il suo comportamento non è specificato correttamente. I. e. il bug è nelle specifiche, definito dai test.

Questo approccio allo sviluppo del software separa le specifiche funzionali di un sistema dalla sua implementazione, che, secondo ogni libro di ingegneria del software nel mondo, è un'ottima cosa. Allo stesso tempo, questo approccio garantisce che l'implementazione corrisponda sempre alle specifiche funzionali.


13
quando i clienti smettono di presentare segnalazioni di bug? :-)
gbjbaanb,

3
Potresti dimostrarlo corretto. L'ingegneria del software Clean Room è molto simile a TDD, in realtà, ma ha generato automaticamente solo test statistici generati dalle specifiche e dalle prove.
Jörg W Mittag,

1
-1 - "Il test mostra la presenza, non l'assenza di bug."
Telastyn,

@Telastyn, Non avendo test mostra la presenza di bug con quasi certezza. D'altra parte, una serie di test ben scritti fornisce una specifica eseguibile di ciò che fa il codice.
Dima,

Non sono in disaccordo, ma nessuna quantità di test dimostra che il tuo codice funziona.
Telastyn,

5

No, non è "necessario"

I principi di Agile non dicono nulla direttamente sui test.

Ma è altamente consigliabile

Dato l'impegno di Agile per un processo sostenibile, consegna continua / incrementale e qualità del software, i test automatizzati sono la migliore soluzione attualmente disponibile per la maggior parte dei progetti

Le eccezioni (come osservato da Jörg W Mittag) includono strumenti di sviluppo dimostrabilmente corretti, sistemi di meta-programmazione che generano codice, ecc. Ma questi tipi di sistemi sono rari.


4

Sia Agile che XP cercano di evitare Big Design Up Front . In BDUF vengono raccolti i requisiti, viene creata una specifica formale, quindi viene eseguita la codifica, quindi vengono eseguiti i test. Ciò ha senso per i sistemi ben definiti, mission-critical e di vita come apparecchiature mediche, sonde spaziali, ecc.

Agile evita questo flusso perché non funziona bene per problemi che non sono ben definiti, ad esempio "qualunque modifica il cliente richieda questa settimana". Abbiamo ancora bisogno di una specifica formale, quindi sappiamo cosa fare e quando abbiamo finito, ma piuttosto che una sorta di documento scritto usiamo il codice sotto forma di test automatizzati.

I test unitari automatizzati sono veloci da scrivere, veloci da eseguire e molto modulari / disaccoppiati. Ciò li rende un modo rapido per specificare e verificare formalmente i requisiti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.